はじめに
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 を見ても解消方法がわからなかった。
解消方法
どうも、ユーザープール作成時には SMS を使用すると見なされるようなので、TOTP を利用する場合はユーザープール作成後に SetUserPoolMfaConfig
API を使って設定変更しよう、ということらしい。
ということでやってみた。
% 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の場合はまずユーザープール作成して、その後に変更するという運用をするしかなさそう。