- Identity Centerのユーザーを指定してポリシーを作成しようと思ったが、Identity Centerではユーザーやグループに対してのIAMのARNが提供されていないようだった。
- 特定のユーザーやグループに対して権限を付与する方法についてまとめてみる。
1. 特定のIdentity Centerユーザー(例:tf-test-user)にアクセスを制限する
- IAMロールと、aws:useridで制御してみる
以下は、ポリシーの作成結果
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::terraform-test-trfstate/*",
"Principal": "*",
"Condition": {
"StringEquals": {
"aws:userid": "04483408-3031-7018-2539-*******" // ユーザーIDを指定
},
"StringEqualsIfExists": {
"aws:PrincipalArn": "arn:aws:iam::**********:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_PermittionSetName_RundomString" // IAMロールを指定(注意: 許可セットではない)
}
}
}
]
}
Code language: JSON / JSON with Comments (json)
2. 手順
2-1. ユーザーIDを確認する
IAM Identity Center → Users → 指定のユーザーを選択する。 一般的な情報をプルダウン表示して、ユーザーIDをコピーする

2-2. Identity CenterからIAMロールのARNを確認する
補足)許可セットとIAMロールの関係
- 許可セットは、Identity Centerユーザーまたはグループに割り当てるアクセス権のテンプレート
- 許可セットを使用すると、自動的にAWSアカウント内にIAMロールが作成される (Identity Centerで自動作成されたIAMロールは、通常
AWSReservedSSO_許可セット名_ランダム文字列
で始まる名前になっている) - ユーザーがAWSリソースにアクセスするときは、このIAMロールを介してアクセスする
以上から、Principalに指定するのは、このIAMロールのARNである必要がある
2-2-1. AWSアカウント タブから紐づいている許可セット名を確認する

2-2-2. IAM → ロール → 権限セット名で検索し、AWSReservedSSO_権限セット名_で始まる名前のロールを選択する

2-2-3. IAMロールのARNを確認する

2-3. バケットポリシーを作成する
2-3-1. Amazon S3-> バケット → 該当のバケット → バケットポリシーを編集 を選択し、ポリシーを作成する

3. ポリシーをテスト
3-1. main.tfにbackendブロックを追加

3-2. terraform init, plan, apply
3-3. AWS consoleよりS3バケットを確認
tfstateファイルがS3バケットに保存されたことを確認できた
