いつもよく使うのでまとめです。
IAM ユーザーに、MFA (Multifactor Authentification 多要素認証) 設定を強制させてしまおうという IAM ポリシーサンプルです。
以下のポリシーは、MFA を設定していないと、 以下の操作以外一切できない (Deny) するようにしています。
- 自身のパスワードの変更
- 自身の MFA デバイスの登録
- 自身のプロフィール
パスワードの変更を許可しているのは、新規ユーザー作成時に強制的にパスワード変更を必須としている場合に、パスワード変更ができずにログインすらできなくなってしまうためです。
またついでに、自分の認証関係の設定は自分でできるようにするポリシーも付けています。MFA を設定すれば、追加で以下の作業ができるようになります。
- アクセスキーの管理
- デジタル署名用証明書(X.509)の管理
- CodeCommit の SSH パブリックキーの管理
- CodeCommit の HTTPS Git 認証情報の管理
この IAM ポリシーに加えて、各々の IAM 権限を追加して下さい。
ハマりポイント
MFA を設定してから 一度、ログアウトして・再ログイン (MFA を使ってログイン) しないと、他に付与している IAM 権限を使うことができません。
あと、ポリシーシュミレーターでも、うまく検証できません。自分で、そう設定したのに検証でポリシーシュミレーターで1時間ぐらいどハマりしてしまった😅 シュミレータに MultiFactorAuthPresent
渡せたらな・・・
IAM ポリシーサンプル
{
"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": "AllowUserToCreateVirtualMFADevice",
"Effect": "Allow",
"Action": [
"iam:CreateVirtualMFADevice"
],
"Resource": "arn:aws:iam::*:mfa/*"
},
{
"Sid": "AllowUserToManageTheirOwnMFA",
"Effect": "Allow",
"Action": [
"iam:EnableMFADevice",
"iam:GetMFADevice",
"iam:ListMFADevices",
"iam:ResyncMFADevice"
],
"Resource": "arn:aws:iam::*:user/${aws:username}"
},
{
"Sid": "AllowUserToDeactivateTheirOwnMFAOnlyWhenUsingMFA",
"Effect": "Allow",
"Action": [
"iam:DeactivateMFADevice"
],
"Resource": [
"arn:aws:iam::*:user/${aws:username}"
],
"Condition": {
"Bool": {
"aws:MultiFactorAuthPresent": "true"
}
}
}
]
}
いろいろ参考(感謝)
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_examples_iam_mfa-selfmanage.html
https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_aws_my-sec-creds-self-manage-mfa-only.html
https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_iam_mfa-selfmanage.html
https://aws.amazon.com/jp/premiumsupport/knowledge-center/mfa-iam-user-aws-cli/
https://dev.classmethod.jp/articles/iam-assume-role-policy-condition-using-boolifexists/
https://jousys-force.deepapex.com/blogs/force-mfa-login
以上