IAM ロールのアカウント単位の信頼を確認

アカウントへのロール使用の委任が、実際の要件に合っているか確認してください。

説明

ロールの信頼ポリシーにあるアカウントの root ARN は、そのアカウントへのロール使用の委任を表します。ルートユーザーだけを意味したり、全 AWS アカウントへの公開を意味したりするものではありません。クロスアカウントの呼び出し元には、自分のアカウント側でもロールを引き受ける権限が必要です。

アカウント全体への委任が不要なら、実際の呼び出しロールに信頼範囲を絞ってください。必要なアカウント委任では用途と条件を明確にし、ロールの業務権限は別のポリシーで制限してください。

想定される影響

  • 信頼先アカウントで想定以上の主体に呼び出し権限を与えると、意図しないロール使用が可能になるおそれがあります。
  • 外部アカウントの侵害や過剰なロール権限は、委任したリソースの被害を広げる可能性があります。

対処方法

  • 信頼するロール ARN を指定するか、アカウント全体への委任が必要な理由と実際の権限付与範囲を確認してください。
  • 必要な STS 操作と使用条件だけを許可し、クロスアカウント連携に適した追加制御を適用してください。
  • 呼び出し元側の権限と業務権限を合わせて確認し、正規のロール使用と未承認の使用の拒否を確認してください。

例

同じロールの信頼先を絞る抜粋です。アカウント・ロール ARN と名前の変数を実際の値に置き換え、呼び出しロールを先に準備してください。実際のログ書き込み権限は別のポリシーで付与してください。

変更前

hcl
resource "aws_iam_role" "example" {
  name        = "${var.name_tag_prefix}-openshift-instance-forward-logs"
  path        = "/"
  description = "Allows an instance to forward logs to CloudWatch"

  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:root"
      },
      "Effect": "Allow",
      "Action": "sts:AssumeRole"
    }
  ]
}
EOF
}

特定のアカウントにロール使用を委任しています。それだけで全主体を許可するものではありませんが、アカウント内の委任範囲を確認してください。

変更後

hcl
resource "aws_iam_role" "example" {
  name        = "${var.name_tag_prefix}-openshift-instance-forward-logs"
  path        = "/"
  description = "Allows an instance to forward logs to CloudWatch"

  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/log-forwarder"
      },
      "Effect": "Allow",
      "Action": "sts:AssumeRole"
    }
  ]
}
EOF
}

同じ対象ロールで、指定した log-forwarder ロールだけを信頼しています。実際の呼び出し経路と別のログ操作権限を確認してください。

参考資料