IAMユーザーのMFAをAWS CLIで無効化する

AWSでは、特権 のある IAM ユーザーに対して多要素認証(MFA)を有効にして AWS リソースを保護することが推奨されています。

MFA を有効にすることで、 ユーザー名とパスワード (ユーザーが既知の第 1 要素) と、 AWS MFA デバイスからの認証コード (ユーザーが所有している第 2 要素) の入力を求められます。

MFA 運用をしていると、認証デバイスの紛失や故障により、多要素認証できないシチュエーションに陥る事があります。

このようなケースでは、何らかの方法で MFA を突破する必要があります。

今回紹介するのは、AWS IAM リソースを更新可能なアクセスキーが手元にある前提で、AWS CLI から IAM ユーザーの MFA を無効化する方法です。

ルートアカウントに対して完全にお手上げの場合は、次のブログに従い、MFAをリセットしてください。

MFAデバイス紛失時のデバイスリセットが、Webコンソールのみで可能になりました

やりたいこと

MFA が有効になった IAM ユーザー(mfa-test)から MFA を無効化する

前提

  • ルートアカウント情報は知らない
  • AWS IAM ユーザーに MFA が設定されている
  • 認証デバイスを使えない
  • AWS IAM リソースを更新可能なアクセスキーは手元にある

IAM ユーザーに設定された MFA デバイスを確認

まずは IAM ユーザーに設定された MFA デバイスを確認します。

iam list-mfa-devices API を利用します。

  • ユーザー名(--user-name)

を指定します。

$ aws iam list-mfa-devices --user-name mfa-test
{
    "MFADevices": [
        {
            "UserName": "mfa-test",
            "SerialNumber": "arn:aws:iam::123456789012:mfa/mfa-test",
            "EnableDate": "2017-12-22T17:10:40Z"
        }
    ]
}

IAM ユーザーの MFA を無効化

iam deactivate-mfa-device API を利用します。

  • ユーザー名(--user-name)
  • 認証デバイスのシリアル番号(--serial-number)

を指定します。

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

MFA が無効化されていることを確認します。

$ aws iam list-mfa-devices --user-name mfa-test
{
    "MFADevices": []
}

管理コンソールから MFA を再設定

MFA を無効化すれば、管理コンソールはユーザー名とパスワード情報だけでログインできます。

ログイン後は次の画面から速やかに MFA を再設定して下さい。

無効化した仮想MFAデバイスの削除

仮想認証デバイスを無効化しても、IAM ユーザーとの紐付けのないまま仮想認証デバイスは残ります。

$ aws iam list-virtual-mfa-devices
{
    "VirtualMFADevices": [
        // 紐付けのない(Unassigned)デバイス
        {
            "SerialNumber": "arn:aws:iam::123456789012:mfa/mfa-test"
        },
        // 紐付けのある(Assigned)デバイス
        {
            "SerialNumber": "arn:aws:iam::123456789012:mfa/dummy",
            "EnableDate": "...",
            "User": {
                "PasswordLastUsed": "...",
                "CreateDate": "...",
                "UserId": "123456789012",
                "Arn": "arn:aws:iam::123456789012:root"
            }
        },
        ...
}

この宙ぶらりんな仮想デバイスは iam delete-virtual-mfa-device API で削除できます。

$ aws iam delete-virtual-mfa-device --serial-number arn:aws:iam::123456789012:mfa/mfa-test
$ 

$ aws iam list-virtual-mfa-devices --assignment-status Unassigned とすれば、このように IAM ユーザーとの紐付けがない(Unassigned)仮想デバイス一覧を取得できます。

まとめ

特殊な前提条件のもとで API 経由で MFA を無効化する手順を紹介しました。

今回の記事が何かのタイミングでがお役に立てば幸いです。

参考