This page looks best with JavaScript enabled
⚠️

【AWS】MFAカスタムポリシーを追加して、最小権限のIAMを作成する

 ·   ·  ☕ 3 分で読めます
✏️

IAMとは

AWS Identity and Access Management (IAM) は、AWS リソースへのアクセスを安全に管理するためのウェブサービスです。IAM を使用して、リソースを使用するために認証 (サインイン) され、許可された (アクセス許可を持つ) ユーザーを制御します。
IAM とは - AWS Identity and Access Management

ざっくり言うと、同一のAWSリソースを共有するユーザーのようなもの。
AWS作成時のルートユーザーは最も権限が強く何でもできるため、ある程度権限を制限したユーザーとして作成する。

今回は「S3への閲覧権限のみ持ったIAM」を作成する。

IAMの作成

ユーザーを作成します。
コンソールからしかアクセスしないユーザーなので、「AWS マネジメントコンソールへのアクセス」のみにする。

image

アクセス許可の種類はいろいろあるが、今回はグループなどを指定せずに単純にポリシー(権限)を1つ1つ追加する。
最初から登録されているポリシー・作成したカスタムポリシーから選択できる。

image

タグは特に何も入れなくていい。
確認画面で権限などを確認して、よさそうなら作成する。

image

作成後に、自動生成されたパスワードを取得できるので、これを実際に使うユーザーに送信する。

image

CSVをダウンロードすると、作成したIAMの認証情報などログインに必要な情報が入ったデータを取得できるので、それを渡すのも可。

User name,Password,Access key ID,Secret access key,Console login link
new_user_name,*******,,,https://********.signin.aws.amazon.com/console

CSVをダウンロードすると、作成したIAMの認証情報などログインに必要な情報が入ったデータを取得できる。

カスタムポリシーの作成

しかし、AmazonS3ReadOnlyAccess, IAMUserChangePasswordだけでは、このIAMを付与されたユーザーはMFA(多要素認証)を設定できない。
セキュリティの面でもMFAの設定はしてほしいので、MFAを設定できる権限(ポリシー)を作成することにする。

参考:IAM: IAM ユーザーに MFA デバイスの自己管理を許可する - AWS Identity and Access Management

image

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowListActions",
            "Effect": "Allow",
            "Action": [
                "iam:ListUsers",
                "iam:ListVirtualMFADevices"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowIndividualUserToListOnlyTheirOwnMFA",
            "Effect": "Allow",
            "Action": [
                "iam:ListMFADevices"
            ],
            "Resource": [
                "arn:aws:iam::*:mfa/*",
                "arn:aws:iam::*:user/${aws:username}"
            ]
        },
        {
            "Sid": "AllowIndividualUserToManageTheirOwnMFA",
            "Effect": "Allow",
            "Action": [
                "iam:CreateVirtualMFADevice",
                "iam:DeleteVirtualMFADevice",
                "iam:EnableMFADevice",
                "iam:ResyncMFADevice"
            ],
            "Resource": [
                "arn:aws:iam::*:mfa/${aws:username}",
                "arn:aws:iam::*:user/${aws:username}"
            ]
        },
        {
            "Sid": "AllowIndividualUserToDeactivateOnlyTheirOwnMFAOnlyWhenUsingMFA",
            "Effect": "Allow",
            "Action": [
                "iam:DeactivateMFADevice"
            ],
            "Resource": [
                "arn:aws:iam::*:mfa/${aws:username}",
                "arn:aws:iam::*:user/${aws:username}"
            ],
            "Condition": {
                "Bool": {
                    "aws:MultiFactorAuthPresent": "true"
                }
            }
        },
        {
            "Sid": "BlockMostAccessUnlessSignedInWithMFA",
            "Effect": "Deny",
            "NotAction": [
                "iam:CreateVirtualMFADevice",
                "iam:EnableMFADevice",
                "iam:ListMFADevices",
                "iam:ListUsers",
                "iam:ListVirtualMFADevices",
                "iam:ResyncMFADevice",
                "iam:ChangePassword"
            ],
            "Resource": "*",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        }
    ]
}

ちなみに、"Deny""NotAction"iam:ChangePasswordを設定する必要がある。
IAM作成時に「ユーザーは次回のサインインで新しいパスワードを作成する必要があります」を選択すると、ログイン後にパスワード変更が求められるのだが、これを設定していない場合「パスワードを変更するためにはMFA設定が必要」→「MFA設定の画面に行くためにはパスワード再設定が必要」と無限ループになってしまう。

image

参考:MFA 強制ポリシーを適用した IAM ユーザーで初回ログイン時のパスワード変更(リセット)ができない時の対処法 | DevelopersIO

タグは特に不要。

名前は何でもいいが、検索で引っかかりやすいようにわかりやすい名称にした方がいい。
今回は、他のポリシー名も参考にIAMSelfManageMFADeviceにした。

image

カスタムポリシーをIAMにアタッチ

ユーザー画面の「アクセス権限の追加」から、先ほど追加したカスタムポリシーを追加する。

image

参考

IAM でのポリシーとアクセス許可 - AWS Identity and Access Management

Share on

END
END
@aiandrox

 
目次