dshimizu/blog/alpha

とりとめのないITブログ

Amazon Cognito ユーザープールを新規作成する際、TOTP を使用する MFA を有効化するものは作成できないらしかった

はじめに

AWS CLI で TOTP を使用する MFA を有効化する場合の Cognito ユーザープールを作成しようとするとエラーになった。 どうも現時点では、ユーザープール新規作成時に、TOTP を使用する MFA 必須の状態のものは作成できないらしいかった。その際の対応方法を書いておく。

環境

% aws --version
aws-cli/2.1.13 Python/3.7.4 Darwin/19.6.0 exe/x86_64 prompt/of

ユーザープールの作成時の --mfa-configuration ON でエラー

適当に以下のようなユーザープールを作成する。

% aws cognito-idp create-user-pool --pool-name sample-user-pool --schema Name=user_id,AttributeDataType=String,Mutable=true --mfa-configuration ON

その際に --mfa-configuration ON を指定すると以下のようなエラーが発生する。

An error occurred (InvalidParameterException) when calling the CreateUserPool operation: SMS configuration and Auto verification for phone_number are required when MFA is required/optional

TOTP を利用したいので電話番号とかいらないのだが...と思いつつ help を見ても解消方法がわからなかった。

解消方法

AWS CLI の Issue に以下があった。

github.com

どうも、ユーザープール作成時には SMS を使用すると見なされるようなので、TOTP を利用する場合はユーザープール作成後に SetUserPoolMfaConfig API を使って設定変更しよう、ということらしい。 ということでやってみた。

CLI だと以下のようなコマンドになる。*1

% aws  cognito-idp set-user-pool-mfa-config --user-pool-id ap-northeast-1_*********** --mfa-configuration ON --software-token-mfa-configuration Enabled=true

以下のような出力になる。

{
    "SoftwareTokenMfaConfiguration": {
        "Enabled": true
    },
    "MfaConfiguration": "ON"
}

まとめ

Amazon Cognito ユーザープールを新規作成する際、TOTP を使用する場合の MFA 必須のものは作成できないらしかったので、回避策(という表現が正しいのかわからないが)として、新規作成後に設定変更する、というやり方について書いた。 今回はCLIの場合について書いたが、CloudFormationとかの場合でも多分ダメそうと思うので、TOTPの場合はまずユーザープール作成して、その後に変更するという運用をするしかなさそう。