晴耕雨読

working in the fields on fine days and reading books on rainy days

AWS CLIでIAMユーザの多要素認証を無効化する方法

AWS CLIでIAMリソースを更新可能なアクセスキーがある状態で、マネジメントコンソールを使用しないで、MFAが有効になったIAMユーザからMFA (多要素認証) を無効化する方法について説明します。

1. IAMユーザのMFAデバイスを確認

まず初めに、IAMユーザに設定されたMFAデバイスのID (ARN) を確認します。 IAMのlist-mfa-devies APIを利用し、引数 –user-name でユーザ名を指定し、それに紐づくMFAデバイスのARNを表示させます。

$ aws iam list-mfa-devices --user-name USERNAME

出力結果:

{
    "MFADevices": [
        {
            "UserName": "USERNAME",
            "SerialNumber": "arn:aws:iam::123456789012:mfa/USERNAME",
            "EnableDate": "2023-11-01T10:20:30+00:00"
        }
    ]
}

2. MFAデバイスの無効化 (STSなし)

次に、IAMのdeactivate-mfa-device APIを利用して、MFAデバイスを無効化します。 エラーが出力されなければ成功で、ここまでで作業は完了です。お疲れ様でした。

$ aws iam deactivate-mfa-device --user-name USERNAME --serial-number arn:aws:iam::123456789012:mfa/USERNAME

ただし、IAMユーザに紐づくMFAの削除が以下のように失敗することがあります。 この場合は、MFAデバイスを無効化するためにMFAを使ってAWS STSから一時的な認証情報を取得する作業が必要になります。

An error occurred (AccessDenied) when calling the DeactivateMFADevice operation:
To complete this action, please ensure that you are authenticated with an MFA 
device that is enabled for this user.

3. STSで一時的な認証情報の取得

MFAデバイスで表示されるトークンを使い、STSで一時的な認証情報を取得することで、MFAデバイスの無効化に必要な認証情報を取得することができます。 AWS STSのget-session-token APIを利用し、引数 –serial-number にMFAデバイスのARN、引数 –token-code に現在使用中のMFAデバイスで表示された6桁のトークンを指定して実行します。

$ aws sts get-session-token --serial-number arn:aws:iam::123456789012:mfa/USERNAME --token-code 123456

出力結果:

{
    "Credentials": {
        "AccessKeyId": "ASIA******HWS",
        "SecretAccessKey": "Ayj******EOY",
        "SessionToken": "IQoJa******CnZgA=",
        "Expiration": "2023-11-02T11:20:30+00:00"
    }
}

4. MFAデバイスの無効化 (STSあり)

AWS STSのget-session-tokenの結果のJSONで必要な認証情報が返ってくるので、それらを環境変数にセットしてから、MFAデバイスを無効化するコマンドを実行します。 Linuxの場合は、以下のコマンドで認証情報を環境変数に認証情報をセットします。

$ export AWS_ACCESS_KEY_ID=ASIA******SWR
$ export AWS_SECRET_ACCESS_KEY=Ayj******EOY
$ export AWS_SESSION_TOKEN=IQoJa******CnZgA=

認証情報をセットしたら、MFAデバイス無効化コマンドを再度実行します。 エラーが出力されなければ成功です。

$ aws iam deactivate-mfa-device --user-name USERNAME --serial-number arn:aws:iam::123456789012:mfa/USERNAME

MFAデバイス無効化後に認証情報が不要になったら環境変数を解放(削除)しておきましょう。 何もしなくても24時間以内には自動的にトークンは無効化されますが、不要になった時点で環境変数から削除するのが安全です。

$ unset AWS_ACCESS_KEY_ID
$ unset AWS_SECRET_ACCESS_KEY
$ unset AWS_SESSION_TOKEN

以上です。

参考資料