見出し画像

AWS:MFAで認証されたIAMユーザーが自分のMFAデバイスを管理できるようにする + 初回サインイン時のパスワードリセットを有効にする方法 + 注意事項

1.MFAデバイスを自己管理するポリシーの作成

チーム開発する時、各開発者に対してIAMユーザを払い出しますが、
セキュリティを確保するため、多要素認証(MFA)を強制的に利用させたい場合のポリシーの作成方法について、以下に記載があります。

上記のポリシーを割り当てることで、MFAを強制することができますが、以下の問題が発生します。

2.初回サインイン後にパスワードリセットできない

開発メンバーにIAMユーザを払い出す際、パスワードを設定してもらうために「パスワードのリセットが必要」をONにしていると思いますが、

上記のMFA強制ポリシーを適用すると、パスワードリセット時に以下のエラーが発生します。

IAMユーザ作成時のオプション
パスワードリセット時のエラーメッセージ

事象:

初回サインイン直後に、パスワードをリセットしようとすると「ユーザに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の公式サイトでは「追加しないように」と警告が記載されています。

MFA 認証なしで MFA デバイスを削除するためのアクセス許可を追加しないでください。このポリシーを持つユーザーは、MFA デバイスを割り当てようとする場合に、iam:DeleteVirtualMFADevice を実行する権限がないというエラーが表示されることがあります。このような場合には、そのアクセス許可を DenyAllExceptListedIfNoMFA ステートメントに追加しないようにします。MFA を使用して認証されていないユーザーは、MFA デバイスを削除してはいけません。ユーザーが以前に自分のユーザーに仮想 MFA デバイスの割り当てを開始して処理をキャンセルした場合、このエラーが表示されることがあります。この問題を解決するには、ユーザーまたは他の管理者が AWS CLI または AWS API を使用してユーザーの既存の MFA デバイスを削除する必要があります。詳細については、「iam:DeleteVirtualMFADevice を実行する権限がありません」を参照してください。

AWS: MFA で認証された IAM ユーザーが [My Security Credentials] (マイセキュリティ資格情報) ページで自分の MFA デバイスを管理できるようにする

付録.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

既存の非アクティブ化された MFA デバイスを削除するには
1.アカウントの仮想 MFA デバイスを表示します。
・AWS CLI: aws iam list-virtual-mfa-devices
・AWS API:ListVirtualMFADevices
2.レスポンスで、修正しようとしているユーザーの仮想デバイスの ARN を見つけます。
3.デバイスを削除します。
・AWS CLI: aws iam delete-virtual-mfa-device
・AWS API:DeleteVirtualMFADevice

一般的な IAM の問題のトラブルシューティング

この記事が気に入ったらサポートをしてみませんか?