rootユーザみたいなのあるやろけど、普段は使わんようにして一般ユーザを作る。

何でもできるポリシーをロールにつけて、作ったグループに許可をつけとく。

一般ユーザは作ったグループに所属させといて、構築のときは権限昇格して作業。

人が入れ替わったら、グループから削除&ユーザ削除したらええ。

aws iamでの主な流れ

グループとユーザを作っておいて、ポリシーとロールを作ったらグループにアタッチする。

規模が大きかったら、ちゃんと設計書とかマトリクスを書いといた方がええで。

アカウントのパスワードポリシー

アカウントの パスワードポリシー は必要に応じて編集する。

aws-iam

パスワード12文字は短い かもしれんな。

グループ作成

利用制限したいグループがあるとき作成する。

「インフラ」とか「アプリ」とか「テスター」とかその場に応じて作る。

「この人だけ許可」は、理由がない限りは個人にポリシーとかアタッチせず、グループにアタッチする。

APIみたいなの使うための対面やないユーザは、アクセスキーとか使うとき気をつけんとアカン。

ユーザ作成

まとめて作ること多いから、csvファイルダウンロードしとくと使う側に連絡しやすい。

aws-iam

「発行したで」の連絡で添付したら、ログイン先と認証情報渡せる。

ポリシー作成

権限昇格用のロール切り替え先を用意。

assume-policy-switchrole-GVIS-Admins
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": [
            "arn:aws:iam::xxxxxxxxxxxx:role/switchrole-GVIS-Admins"
        ]
    }
}

なんでもできるポリシーを定義して、権限昇格で使う。

Copy-DefaultPolicy-GVIS-Admins
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DefaultPolicyForActions",
            "Action": "*",
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

多重要素認証を強制するためのポリシーを用意。

force-use-mfadevice
 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
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowChangePassword",
            "Effect": "Allow",
            "Action": [
                "iam:ChangePassword"
            ],
            "Resource": [
                "arn:aws:iam::xxxxxxxxxxxx:user/${aws:username}" ⭐️awsのアカウント設定してや
            ]
        },
        {
            "Sid": "AllowGetPasswordPolicy",
            "Effect": "Allow",
            "Action": [
                "iam:GetAccountPasswordPolicy"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowListActions",
            "Effect": "Allow",
            "Action": [
                "iam:ListUsers",
                "iam:ListVirtualMFADevices"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowIndividualUserToManageTheirOwnMFA",
            "Effect": "Allow",
            "Action": [
                "iam:CreateVirtualMFADevice",
                "iam:DeleteVirtualMFADevice",
                "iam:DeactivateMFADevice",
                "iam:EnableMFADevice",
                "iam:ResyncMFADevice",
                "iam:ListMFADevices"
            ],
            "Resource": [
                "arn:aws:iam::xxxxxxxxxxxx:mfa/*", ⭐️awsのアカウント設定してや
                "arn:aws:iam::xxxxxxxxxxxx:user/${aws:username}" ⭐️awsのアカウント設定してや
            ]
        },
        {
            "Sid": "BlockMostAccessUnlessSignedInWithMFA",
            "Effect": "Deny",
            "NotAction": [
                "iam:ListUsers",
                "iam:ListVirtualMFADevices",
                "iam:CreateVirtualMFADevice",
                "iam:DeleteVirtualMFADevice",
                "iam:DeactivateMFADevice",
                "iam:EnableMFADevice",
                "iam:ResyncMFADevice",
                "iam:ListMFADevices",
                "iam:ChangePassword",
                "iam:GetAccountPasswordPolicy"
            ],
            "Resource": "*",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        }
    ]
}

awsコンソールへの接続元IPを限定する。

GVIS-source-ip-allow
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Deny",
            "Action": "*",
            "Resource": "*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "xx.xx.xx.xx/28", ⭐️`/28`とは限らん
                        "yy.yy.yy.yy/28", ⭐️`/28`とは限らん
                        "zz.zz.zz.zz/28"  ⭐️`/28`とは限らん
                    ]
                }
            }
        }
    ]
}

ユーザグループに許可ポリシーをつけると、所属ユーザにポリシーが適用される。

aws-iam

ついでにec2がs3のバケットを操作できるポリシーを作っとく。

policy-gvis-s3
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::gvis-s3",
                "arn:aws:s3:::gvis-s3/*"
            ]
        }
    ]
}

ロール作成

権限昇格用のポリシーを許可設定につけて、信頼関係も編集する。

aws-iam

「信頼関係」ってとこには、そのロールを扱えるユーザを定義しとく。

信頼関係
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::xxxxxxxxxxxx:user/gvis-user01",
                    "arn:aws:iam::xxxxxxxxxxxx:user/gvis-user02"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

ec2ホストに許可設定

利用者が多いときや流動的なときはec2ホストに許可設定つけておいて、「ssh/rdpして使って」とかしとくと利用者の管理が煩雑にならずに済む。

aws-iam

cloudwatchログとかs3いじれるようにポリシーとロール作っておいて、マシンにアタッチしといたらええ。

aws-iam