AWS:MFAで認証されたIAMユーザーが自分のMFAデバイスを管理できるようにする + 初回サインイン時のパスワードリセットを有効にする方法 + 注意事項
1.MFAデバイスを自己管理するポリシーの作成
チーム開発する時、各開発者に対してIAMユーザを払い出しますが、
セキュリティを確保するため、多要素認証(MFA)を強制的に利用させたい場合のポリシーの作成方法について、以下に記載があります。
上記のポリシーを割り当てることで、MFAを強制することができますが、以下の問題が発生します。
2.初回サインイン後にパスワードリセットできない
開発メンバーにIAMユーザを払い出す際、パスワードを設定してもらうために「パスワードのリセットが必要」をONにしていると思いますが、
上記のMFA強制ポリシーを適用すると、パスワードリセット時に以下のエラーが発生します。
事象:
初回サインイン直後に、パスワードをリセットしようとすると「ユーザにiam:ChangePasswordを実行する権限がないか、入力されたパスワードが管理者によって設定されたアカウントパスワードポリシーに準拠していません」のエラーメッセージが表示される
原因:
DenyAllExceptListedIfNoMFAステートメント。MFA認証していない場合は、NotActionに指定しているアクションを除いたすべての AWS のサービスのすべてのアクションへのアクセスを拒否している。
対策:
初回サインイン直後にパスワードをリセットできるようにするには
DenyAllExceptListedIfNoMFAステートメントの"NotAction"リストに
"iam:ChangePassword"を追加する
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowViewAccountInfo",
"Effect": "Allow",
"Action": "iam:ListVirtualMFADevices",
"Resource": "*"
},
{
"Sid": "AllowManageOwnVirtualMFADevice",
"Effect": "Allow",
"Action": [
"iam:CreateVirtualMFADevice",
"iam:DeleteVirtualMFADevice"
],
"Resource": "arn:aws:iam::*:mfa/${aws:username}"
},
{
"Sid": "AllowManageOwnUserMFA",
"Effect": "Allow",
"Action": [
"iam:DeactivateMFADevice",
"iam:EnableMFADevice",
"iam:GetUser",
"iam:ListMFADevices",
"iam:ResyncMFADevice"
],
"Resource": "arn:aws:iam::*:user/${aws:username}"
},
{
"Sid": "DenyAllExceptListedIfNoMFA",
"Effect": "Deny",
"NotAction": [
"iam:CreateVirtualMFADevice",
"iam:EnableMFADevice",
"iam:GetUser",
"iam:ListMFADevices",
"iam:ListVirtualMFADevices",
"iam:ResyncMFADevice",
"sts:GetSessionToken",
"iam:ChangePassword"
],
"Resource": "*",
"Condition": {
"BoolIfExists": {"aws:MultiFactorAuthPresent": "false"}
}
}
]
}
3.注意事項
MFAデバイスの割り当てを開始した時に、途中で処理をキャンセル(中断)してから、再度割り当てをしようとすると、エラーが発生してMFAの割り当てができなくなる問題があります。
再現方法
セキュリティ認証情報を表示する
AWS マネージメントコンソールの右上にあるアカウントを選択後、セキュリティ認証情報を選択
MFAデバイスの管理を選択
MFAデバイスを選択し、「続行」ボタンを押下
ここで「戻る」ボタンで、処理を中断させる
再度、「続行」ボタンを押下する
DeleteVirtualMFADeviceの権限が不足することにより、
以下のエラーが発生し、MFAの割り当てが出来なくなります。
この場合、システム管理者にお願いして、AWS CLIやAWS APIを利用して、当該のMFAデバイスを削除してもらう必要があります。
MFAデバイスの削除手順については、下にある付録を参照
ここで、パスワードのリセットのように、DenyAllExceptListedIfNoMFAステートメントの"NotAction"リストに"iam:DeleteVirtualMFADevice"を追加すれば、と思ったのですが、追加してはいけません。
AWSの公式サイトでは「追加しないように」と警告が記載されています。
付録.VirtualMFADeviceの削除手順
MFAデバイス割り当て処理を中断したことにより、中途半端に作成されたMFAデバイスの削除手順ついて記載します。
この操作を行うには、
・iam:ListVirtualMFADevices
・iam:DeleteVirtualMFADevice
のアクセス権限が必要です。
仮想MFAデバイスの一覧を表示し、削除対象のSerialNumberを確認する
// 仮想MFAデバイスの一覧を表示します。
$ aws iam list-virtual-mfa-devices
{
"VirtualMFADevices": [
{
"SerialNumber": "arn:aws:iam::123456789012:mfa/dev-test-suzuki2"
},
]
}
仮想MFAデバイスを削除する
// 仮想MFAデバイスを--serial-Numberを使って削除します
$ aws iam delete-virtual-mfa-device --serial-number arn:aws:iam::123456789012:mfa/dev-test-suzuki2