IAM Identity Centerユーザーにおけるポリシー設定の注意点

AWSIaCsecurity
  • 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バケットに保存されたことを確認できた