[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 デバイスの有効化、パスワード変更など)に対してのみ許可され、それ以外のアクションに対しては拒否されます |
3. 任意のポリシーを設定する
-
ポリシー名
の欄に任意の名前を入力します。
※今回は、test-MFA
という名前で作成します。
-
許可
の欄にIAM
がある事を確認する
※先ほどの JSON でIAM
の内容の設定が反映されました。 - 内容を確認し、
ポリシーの作成
をクリックする
4. 成功メッセージを確認する
- 画面上部に
ポリシー test-MFAが作成されました。
を確認する - 任意で設定したポリシー名の
test-MFA
が一覧で確認出来ます。
5. 対象ユーザーに作成したポリシーを付与する
-
左側の
ユーザー
をクリックする -
対象のユーザーをクリックする
※今回は、test-user
を選択します。
-
許可を追加
の右横の ▲ をクリックし、許可を追加
をクリックする
-
ポリシーを直接アタッチする
を選択する -
検索欄にキーワードを入力し調べやすくします。
※test-MFA
だったのでtest
というキーワードで検索しています。 -
先ほど作成した
test-MFA
に ✅ を付ける -
次へ
をクリックする
-
対象ユーザーと付与するポリシーを確認する
-
許可を追加
をクリックする
-
ポリシーが追加されました
という成功メッセージを確認する -
ポリシーの一覧に
test-MFA
が追加されていることを確認する
6. 本人が MFA 設定を行う
-
対象のユーザーでログインをする
-
左側の
ダッシュボード
からMFAを追加
をクリックする
-
少しスクロールし
多要素認証(MFA)
を見つけ、MFAデバイスの割り当て
をクリックする
-
登録するデバイス名を
デバイス名
の入力欄に記入する -
認証アプリケーション
を選択する -
次へ
をクリックする
-
認証アプリケーション
をスマホにダウンロードする自分は下記を利用しました。
-
QRコードを表示
をクリックし、QR コードさせる -
先ほどインストールした
認証アプリケーション
QR コードを読み込む
-
スマホの画面に 30 秒に 1 回 6 桁の数字が表示されるので、連続で 6 桁の数字を 2 回分入力する
-
MFAを追加
をクリックする
-
成功メッセージを確認する
-
多要素認証(MFA)
の一覧に先ほどのデバイス名が登録させている事を確認する
7. MFA が機能しているのか確認する
- 一度サインアウトする
- 再度ログインをする
- 下記の画面が表示されることを確認する
おわりに
セキュリティ対策として大切な設定なので必ず行いたいですね。
Discussion