[AWS] IAMで読み取り専用ユーザー本人がMFAの設定ができるようにする方法
はじめに
社内の有志メンバーでの活動で本人が MFA の設定をする機会がありました。
この経験は、何度もある事ではないと思いますので、備忘録として執筆します。
ReadOnlyAccessとIAMUserChangePasswordのポリシーだけでは設定できない
ReadOnlyAccessのユーザーを作成後に MFA の認証を行うとしましたが、下記のエラーメッセージが表示されました。
どうやら、「権限がありません」と記載されています。
なので、ポリシーで追加する必要がありそうです。

ユーザー本人で MFA の設定可能にする
1. 本人が MFA の設定できるポリシーを作成する
-
左側の
ポリシーをクリックする -
ポリシーを作成をクリックする

-
右側の
JSONをクリックする -
ポリシーエディタに下記 JSON をコピペする -
次へをクリックする

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowViewAccountInfo",
"Effect": "Allow",
"Action": ["iam:GetAccountPasswordPolicy", "iam:ListVirtualMFADevices"],
"Resource": "*"
},
{
"Sid": "AllowManageOwnPasswords",
"Effect": "Allow",
"Action": ["iam:ChangePassword", "iam:GetUser"],
"Resource": "arn:aws:iam::*:user/${aws:username}"
},
{
"Sid": "AllowManageOwnAccessKeys",
"Effect": "Allow",
"Action": ["iam:CreateAccessKey", "iam:DeleteAccessKey", "iam:ListAccessKeys", "iam:UpdateAccessKey"],
"Resource": "arn:aws:iam::*:user/${aws:username}"
},
{
"Sid": "AllowManageOwnSigningCertificates",
"Effect": "Allow",
"Action": [
"iam:DeleteSigningCertificate",
"iam:ListSigningCertificates",
"iam:UpdateSigningCertificate",
"iam:UploadSigningCertificate"
],
"Resource": "arn:aws:iam::*:user/${aws:username}"
},
{
"Sid": "AllowManageOwnSSHPublicKeys",
"Effect": "Allow",
"Action": [
"iam:DeleteSSHPublicKey",
"iam:GetSSHPublicKey",
"iam:ListSSHPublicKeys",
"iam:UpdateSSHPublicKey",
"iam:UploadSSHPublicKey"
],
"Resource": "arn:aws:iam::*:user/${aws:username}"
},
{
"Sid": "AllowManageOwnGitCredentials",
"Effect": "Allow",
"Action": [
"iam:CreateServiceSpecificCredential",
"iam:DeleteServiceSpecificCredential",
"iam:ListServiceSpecificCredentials",
"iam:ResetServiceSpecificCredential",
"iam:UpdateServiceSpecificCredential"
],
"Resource": "arn:aws:iam::*:user/${aws:username}"
},
{
"Sid": "AllowManageOwnVirtualMFADevice",
"Effect": "Allow",
"Action": ["iam:CreateVirtualMFADevice", "iam:DeleteVirtualMFADevice"],
"Resource": "arn:aws:iam::*:mfa/*"
},
{
"Sid": "AllowManageOwnUserMFA",
"Effect": "Allow",
"Action": ["iam:DeactivateMFADevice", "iam:EnableMFADevice", "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"
],
"Resource": "*",
"Condition": {
"BoolIfExists": {
"aws:MultiFactorAuthPresent": "false"
}
}
}
]
}
補足情報
| 単語 | 意味 |
|---|---|
| AllowViewAccountInfo | IAM ユーザーがアカウント情報を表示するために許可されているアクションが定義されています。具体的には、アカウントのパスワードポリシーを取得したり、アカウントのサマリー情報を取得したり、仮想多要素認証(MFA)デバイスのリストを取得することができます |
| AllowManageOwnPasswords | IAM ユーザーが自分自身のパスワードを管理するために許可されているアクションが定義されています。具体的には、パスワードの変更、自分自身のログインプロファイルの作成と削除、ログインプロファイルの取得と更新が許可されています |
| AllowManageOwnAccessKeys | IAM ユーザーが自分自身のアクセスキーを管理するために許可されているアクションが定義されています。具体的には、アクセスキーの作成、削除、リストの表示、アクセスキーの更新が許可されています |
| AllowManageOwnSigningCertificates | IAM ユーザーが自分自身の署名証明書を管理するために許可されているアクションが定義されています。具体的には、署名証明書の削除、リストの表示、署名証明書の更新とアップロードが許可されています |
| AllowManageOwnSSHPublicKeys | IAM ユーザーが自分自身の SSH 公開鍵を管理するために許可されているアクションが定義されています。具体的には、SSH 公開鍵の削除、取得、リストの表示、SSH 公開鍵の更新とアップロードが許可されています |
| AllowManageOwnGitCredentials | IAM ユーザーが自分自身の Git クレデンシャルを管理するために許可されているアクションが定義されています。具体的には、サービス固有のクレデンシャルの作成、削除、リストの表示、サービス固有のクレデンシャルのリセットと更新が許可されています。 |
| AllowManageOwnVirtualMFADevice | IAM ユーザーが自分自身の仮想多要素認証(MFA)デバイスを管理するために許可されているアクションが定義されています。具体的には、仮想 MFA デバイスの作成と削除が許可されています |
| AllowManageOwnUserMFA | IAM ユーザーが自分自身の MFA デバイスを管理するために許可されているアクションが定義されています。具体的には、MFA デバイスの無効化と有効化、MFA デバイスのリストの表示、MFA デバイスの再同期が許可されています |
| DenyAllExceptListedIfNoMFA | MFA が無効化されている場合に、ユーザーに許可されるアクションを制限する条件が定義されています。MFA が無効な場合、特定のアクション(仮想 MFA デバイスの作成、MFA デバイスの有効化、パスワード変更など)に対してのみ許可され、それ以外のアクションに対しては拒否されます |
2. 任意のポリシーを設定する
-
ポリシー名の欄に任意の名前を入力します。
※今回は、test-MFAという名前で作成します。
-
許可の欄にIAMがある事を確認する
※先ほどの JSON でIAMの内容の設定が反映されました。 - 内容を確認し、
ポリシーの作成をクリックする
3. 成功メッセージを確認する
- 画面上部に
ポリシー test-MFAが作成されました。を確認する - 任意で設定したポリシー名の
test-MFAが一覧で確認できます。
4. 対象ユーザーに作成したポリシーを付与する
-
左側の
ユーザーをクリックする -
対象のユーザーをクリックする
※今回は、test-userを選択します。

-
許可を追加の右横の ▲ をクリックし、許可を追加をクリックする

-
ポリシーを直接アタッチするを選択する -
検索欄にキーワードを入力し調べやすくします。
※test-MFAだったのでtestというキーワードで検索しています。 -
先ほど作成した
test-MFAに ✅ を付ける -
次へをクリックする

-
対象ユーザーと付与するポリシーを確認する
-
許可を追加をクリックする

-
ポリシーが追加されましたという成功メッセージを確認する -
ポリシーの一覧に
test-MFAが追加されていることを確認する

5. 本人が MFA 設定を行う
-
対象のユーザーでログインをする

-
左側の
ダッシュボードからMFAを追加をクリックする

-
少しスクロールし
多要素認証(MFA)を見つけ、MFAデバイスの割り当てをクリックする

-
登録するデバイス名を
デバイス名の入力欄に記入する -
認証アプリケーションを選択する -
次へをクリックする

-
認証アプリケーションをスマホにダウンロードする自分は下記を利用しました。

-
QRコードを表示をクリックし、QR コードを表示させる -
先ほどインストールした
認証アプリケーションで QR コードを読み込む

-
スマホの画面に 30 秒に 1 回 6 桁の数字が表示されるので、連続で 6 桁の数字を 2 回分入力する
-
MFAを追加をクリックする

-
成功メッセージを確認する

-
多要素認証(MFA)の一覧に先ほどのデバイス名が登録されていることを確認する

6. MFA が機能しているのか確認する
- 一度サインアウトする
- 再度ログインをする
- 下記の画面が表示されることを確認する
おわりに
セキュリティ対策として大切な設定なので必ず行いたいですね。
Discussion