IAM 역할 신뢰 정책 점검

역할을 사용할 주체와 신뢰 정책의 작업을 명확히 하고 실제 역할 권한도 제한하세요.

설명

IAM 역할의 assume_role_policy는 누가 역할을 사용할 수 있는지 정하는 신뢰 정책입니다. 역할을 사용한 뒤 수행할 AWS 작업은 별도의 권한 정책이 정하므로, 신뢰 정책을 일반적인 전체 권한 정책과 혼동하면 안 됩니다.

신뢰할 주체와 역할 사용에 필요한 STS 작업을 명시하세요. 신뢰 정책은 연결된 역할에 적용되므로 Resource를 지정하지 않습니다.

잠재적 영향

  • 잘못된 신뢰 정책은 역할 생성·변경을 실패하게 하거나 필요한 서비스의 역할 사용을 막을 수 있습니다.
  • 불필요한 주체를 신뢰하면 그 주체가 역할에 부여된 권한을 사용할 수 있어 피해 범위가 커질 수 있습니다.

해결 방법

  • 승인된 서비스·계정·역할만 Principal에 지정하고 해당 인증 방식에 필요한 STS 작업만 허용하세요.
  • 신뢰 정책에서 지원하지 않는 Resource를 제거하고 별도의 역할 권한 정책에서 실제 작업·리소스를 최소화하세요.
  • 정책 변경 후 필요한 주체는 역할을 사용할 수 있고 승인되지 않은 주체는 거부되는지 확인하세요.

예시

EC2 서비스 역할의 신뢰 정책 발췌입니다. EC2 인스턴스에서 실제로 사용하려면 인스턴스 프로파일과 연결 설정이 별도로 필요하며, 업무 권한은 별도 정책에서 부여해야 합니다.

변경 전

hcl
resource "aws_iam_role" "service_role" {
  name = "test_role"

  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "*",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
EOF
}

신뢰 정책에 지원하지 않는 Resource를 포함한 잘못된 예시입니다. 이를 EC2에 모든 AWS 작업 권한을 부여하는 유효한 정책으로 해석하면 안 됩니다.

변경 후

hcl
resource "aws_iam_role" "service_role" {
  name = "test_role"

  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Effect": "Allow"
    }
  ]
}
EOF
}

EC2 서비스에 sts:AssumeRole을 허용하고 지원하지 않는 Resource를 제거합니다. 역할의 실제 AWS 작업 권한은 별도로 검토하세요.

참조