2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MFA を有効化しないと、自身の認証設定以外は何もできなくなる IAM ポリシーサンプル

Last updated at Posted at 2022-10-05

いつもよく使うのでまとめです。

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

以上

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?