설명
ECR 리포지토리 정책의 Principal: "*"는 접근 주체를 특정 계정이나 역할로 제한하지 않습니다. Effect: "Allow"와 넓은 작업 범위를 함께 사용하면 의도하지 않은 주체에게 이미지나 리포지토리 관리 권한을 부여할 수 있습니다. 실제 권한은 정책 조건, 관련 IAM 정책과 명시적 거부도 함께 고려해야 합니다.
프라이빗 ECR 리포지토리는 Amazon ECR Public과 다릅니다. 이미지를 가져오거나 올리려면 인증과 IAM 정책의 ecr:GetAuthorizationToken 권한이 필요하므로, 와일드카드 주체가 익명 이미지 접근을 뜻하지는 않습니다.
잠재적 영향
- 읽기 권한이 필요 없는 외부 주체가 내부용 이미지를 가져갈 수 있습니다.
- 불필요한 업로드, 이미지 삭제나 정책 관리 권한은 배포 중단 또는 의도하지 않은 접근 권한 확대로 이어질 수 있습니다. 영향은 실제 허용된 작업에 따라 달라집니다.
해결 방법
- 필요한 계정과 역할을 명시하고 이미지 가져오기, 업로드, 삭제, 정책 관리 권한을 각각 필요한 주체에만 부여하세요. 조건으로 제한하는 정책은 그 조건도 검토하세요.
- 전체 리포지토리 정책과 관련 IAM 정책을 함께 확인하세요. 계정의
:rootARN은 해당 계정에 권한을 위임하며 루트 사용자에게만 접근을 제한하지 않습니다. - 변경 후 배포 시스템의 필요한 접근이 유지되고 승인하지 않은 주체의 접근은 거부되는지 확인하세요.
예시
아래 예시는 넓은 권한을 특정 역할의 이미지 읽기로 줄이는 구성을 보여 줍니다. trusted_role_arn 변수를 정의하고 실제로 존재하는 승인된 역할의 ARN을 지정하세요.
변경 전
hcl
resource "aws_ecr_repository" "public_example" {
name = "public-example"
}
resource "aws_ecr_repository_policy" "public_policy" {
repository = aws_ecr_repository.public_example.name
policy = <<EOF
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "RepositoryAccess",
"Effect": "Allow",
"Principal": "*",
"Action": [
"ecr:GetDownloadUrlForLayer",
"ecr:BatchGetImage",
"ecr:BatchCheckLayerAvailability",
"ecr:PutImage",
"ecr:InitiateLayerUpload",
"ecr:UploadLayerPart",
"ecr:CompleteLayerUpload",
"ecr:DescribeRepositories",
"ecr:GetRepositoryPolicy",
"ecr:ListImages",
"ecr:DeleteRepository",
"ecr:BatchDeleteImage",
"ecr:SetRepositoryPolicy",
"ecr:DeleteRepositoryPolicy"
]
}
]
}
EOF
}
모든 주체에 이미지 읽기뿐 아니라 업로드, 삭제와 정책 관리 작업도 허용합니다. 프라이빗 레지스트리의 인증 요건은 그대로 적용됩니다.
변경 후
hcl
resource "aws_ecr_repository" "private_example" {
name = "private-example"
}
resource "aws_ecr_repository_policy" "private_policy" {
repository = aws_ecr_repository.private_example.name
policy = <<EOF
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "ImageRead",
"Effect": "Allow",
"Principal": {
"AWS": "${var.trusted_role_arn}"
},
"Action": [
"ecr:GetDownloadUrlForLayer",
"ecr:BatchGetImage",
"ecr:BatchCheckLayerAvailability"
]
}
]
}
EOF
}
승인된 역할에 이미지 가져오기에 필요한 작업만 부여합니다. 이 역할의 인증 권한과 다른 정책도 함께 확인하세요.