rootユーザみたいなのあるやろけど、普段は使わんようにして一般ユーザを作る。
何でもできるポリシーをロールにつけて、作ったグループに許可をつけとく。
一般ユーザは作ったグループに所属させといて、構築のときは権限昇格して作業。
人が入れ替わったら、グループから削除&ユーザ削除したらええ。
aws iamでの主な流れ#
グループとユーザを作っておいて、ポリシーとロールを作ったらグループにアタッチする。
規模が大きかったら、ちゃんと設計書とかマトリクスを書いといた方がええで。
アカウントのパスワードポリシー#
アカウントの
パスワードポリシー
は必要に応じて編集する。

パスワード12文字は短い
かもしれんな。
グループ作成#
利用制限したいグループがあるとき作成する。
「インフラ」とか「アプリ」とか「テスター」とかその場に応じて作る。
「この人だけ許可」は、理由がない限りは個人にポリシーとかアタッチせず、グループにアタッチする。
APIみたいなの使うための対面やないユーザは、アクセスキーとか使うとき気をつけんとアカン。
ユーザ作成#
まとめて作ること多いから、csvファイルダウンロードしとくと使う側に連絡しやすい。

「発行したで」の連絡で添付したら、ログイン先と認証情報渡せる。
ポリシー作成#
権限昇格用のロール切り替え先を用意。
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`とは限らん
]
}
}
}
]
}
|
ユーザグループに許可ポリシーをつけると、所属ユーザにポリシーが適用される。

ついでに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/*"
]
}
]
}
|
ロール作成#
権限昇格用のポリシーを許可設定につけて、信頼関係も編集する。

「信頼関係」ってとこには、そのロールを扱えるユーザを定義しとく。
信頼関係
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して使って」とかしとくと利用者の管理が煩雑にならずに済む。

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