一般のIAMユーザにMFAを設定してもらう方法

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ウィスキー、シガー、パイプをこよなく愛する大栗です。
皆さんはAWSをセキュアに利用する為に、MFA(多要素認証)を使ってManagement Consoleへログインしていますよね?

でも管理者以外の一般IAMユーザを使用している方はMFAを使用していないのではないかと思います。MFAの登録にはIAMの権限が必要になるので、一般ユーザでは登録できない事がほとんどだと思います。IAM権限の設定は面倒なので、必要な権限を整理してみました。

必要な権限

以下の様なIAMポリシーを設定したグループを作成しましょう。なお"ACCOUNT-ID-WITHOUT-HYPHENS"は自分のAWSアカウントの値に置き換えて下さい。

下記ポリシーは、2015年8月時点で試したところ、上手く動かなかったようです。対応についてはIAMユーザ本人にMFAを管理してもらうためのIAMポリシーを御覧ください。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:ListUsers"
      ],
      "Resource": [
        "arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:user/"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:ListMFADevices",
        "iam:ListVirtualMFADevices"
      ],
      "Resource": [
        "arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:mfa/"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:DeleteVirtualMFADevice",
        "iam:EnableMFADevice",
        "iam:CreateVirtualMFADevice",
        "iam:DeactivateMFADevice",
        "iam:ResyncMFADevice"
      ],
      "Resource": [
        "arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:mfa/${aws:username}"
      ]
    }
  ]
}

このポリシーを解説します。全体にステートメントが3個あります。

1個目は"iam:ListUsers"権限を与えています。MFAの設定自体には必要無いのですが、Management Consoleから設定する場合は、自分のユーザを選択する必要があるので付与しています。
権限を付与していないとユーザの一覧画面で以下の様にエラーが出てしまいユーザを選択できません。

IAM_Management_Console_と_IAM_Management_Console

2個目は"iam:ListVirtualMFADevices"権限を全MFAに対して付与しています。MFAをハードウェアはソフトウェアを選択する時にエラーになる場合が有ります。
特定のユーザのMFAを参照する事ができないので、全ユーザのMFAに対して参照権限を設定しています。

IAM_Management_Console
IAM_Management_Console

3個目がMFAを登録、停止、再同期の権限を与えています。対象は自分のMFAのみに制限していますので、別のユーザの操作はできません。

まとめ

AWSアカウントの管理者はMFAを使用していると思いますが、この権限を与えれば開発者の方でもMFAを各自で登録できます。AWSをセキュアに使って行きましょう!