IAMとは
AWS Identity and Access Management (IAM) は、AWS リソースへのアクセスを安全に管理するためのウェブサービスです。IAM を使用して、リソースを使用するために認証 (サインイン) され、許可された (アクセス許可を持つ) ユーザーを制御します。
IAM とは - AWS Identity and Access Management
ざっくり言うと、同一のAWSリソースを共有するユーザーのようなもの。
AWS作成時のルートユーザーは最も権限が強く何でもできるため、ある程度権限を制限したユーザーとして作成する。
今回は「S3への閲覧権限のみ持ったIAM」を作成する。
IAMの作成
ユーザーを作成します。
コンソールからしかアクセスしないユーザーなので、「AWS マネジメントコンソールへのアクセス」のみにする。

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

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

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

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

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設定の画面に行くためにはパスワード再設定が必要」と無限ループになってしまう。

参考:MFA 強制ポリシーを適用した IAM ユーザーで初回ログイン時のパスワード変更(リセット)ができない時の対処法 | DevelopersIO
タグは特に不要。
名前は何でもいいが、検索で引っかかりやすいようにわかりやすい名称にした方がいい。
今回は、他のポリシー名も参考にIAMSelfManageMFADeviceにした。

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

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