설명
광범위한 iam:CreateAccessKey 권한이 있으면 역할 사용자가 다른 IAM 사용자의 새 액세스 키를 발급해 그 사용자의 권한으로 API를 호출할 수 있습니다. 실제 발급과 사용에는 대상 사용자 및 정책의 제한이 적용됩니다.
특히 고권한 사용자의 키를 만들 수 있으면 새 장기 자격 증명을 통해 권한을 악용할 수 있습니다.
잠재적 영향
- 고권한 사용자 가장 가능: 다른 사용자의 액세스 키로 해당 사용자에게 허용된 작업을 수행할 수 있습니다.
- 장기 자격 증명 생성: 생성된 키가 오래 남아 지속적인 악용에 쓰일 수 있습니다.
- 탐지 지연: 승인되지 않은 발급을 정상적인 관리 작업과 구분하기 어려울 수 있습니다.
해결 방법
- 키 관리가 필요 없는 역할에서
iam:CreateAccessKey권한을 제거하세요. - 필요한 발급 권한은 전용 관리자 역할과 승인된 대상 사용자로 제한하세요.
- 키 생성 이벤트를 모니터링하고 가능하면 역할 기반 임시 자격 증명으로 전환하세요.
예시
권한 정책의 발췌입니다. 역할의 신뢰 정책은 별도로 구성하세요.
변경 전
hcl
resource "aws_iam_role" "example" {
name = "cosmic"
}
resource "aws_iam_role_policy" "example" {
name = "test_inline_policy"
role = aws_iam_role.example.name
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = [
"iam:CreateAccessKey",
]
Effect = "Allow"
Resource = "*"
},
]
})
}
변경 후
hcl
resource "aws_iam_role" "example" {
name = "cosmic"
}
resource "aws_iam_role_policy" "example" {
name = "inline_policy_run_instances"
role = aws_iam_role.example.name
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = [
"ec2:Describe*",
]
Effect = "Allow"
Resource = "*"
},
]
})
}
변경 후에는 같은 역할의 이 정책에서 키 발급 권한을 제거하고 EC2 조회 권한만 남깁니다. 다른 연결 정책과 이미 발급된 키는 별도로 확인해야 합니다.