IAMポリシーがユーザーに直接関連付けられている

共通のIAM権限はグループやロールで管理してください。

説明

個々のユーザーにポリシーを直接関連付けると、権限管理がユーザーごとに分散しやすくなります。共通の権限はグループやロールで管理し、ユーザー固有の例外は必要な場合だけ維持してください。

想定される影響

直接関連付けた例外ポリシーが増えると、権限を付与した理由や変更後に削除すべき権限を把握しにくくなります。

対処方法

ユーザーに直接関連付けたポリシーを確認し、共通の権限を適切なグループやロールへ移してください。関連付け先を変えるだけでは権限は減らないため、ポリシー自体も必要な操作とリソースに限定してください。

例

以下は、同じポリシーの関連付け先をユーザーからグループへ変更する例です。例の広範な権限は本番環境に合わせて制限し、ユーザーとグループは別途定義してください。aws_iam_policy_attachmentは、そのポリシーのすべての関連付けを排他的に管理します。

変更前

hcl
resource "aws_iam_policy_attachment" "example" {
  name = "excess_policy"
  users = [aws_iam_user.user.name]
  policy_arn = aws_iam_policy.example.arn
}

resource "aws_iam_policy" "example" {
  name = "excess_policy"

  policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "ec2:*",
        "s3:*",
        "lambda:*",
        "cloudwatch:*"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
EOF
}

変更後

hcl
resource "aws_iam_policy_attachment" "example" {
  name = "excess_policy"
  groups = [aws_iam_group.group.name]
  policy_arn = aws_iam_policy.example.arn
}

resource "aws_iam_policy" "example" {
  name = "excess_policy"

  policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "ec2:*",
        "s3:*",
        "lambda:*",
        "cloudwatch:*"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
EOF
}

参考資料