설명
ECR 리포지토리 정책은 리포지토리에 접근할 수 있는 주체와 수행할 수 있는 작업을 지정합니다. 허용 구문에 Principal: "*"를 사용하면 주체 범위가 넓어지므로, 이미지에 접근해야 하는 계정과 역할로 충분히 제한되어 있는지 확인해야 합니다. Ansible에서는 community.aws.ecs_ecr 작업의 policy로 이 정책을 관리할 수 있습니다.
대상은 ECR 비공개 리포지토리의 접근 정책입니다. 와일드카드를 사용한다고 ECR Public 리포지토리로 바뀌거나 익명으로 이미지를 내려받을 수 있는 것은 아닙니다. 레지스트리 인증에는 IAM 정책을 통한 ecr:GetAuthorizationToken 권한이 필요하고, 실제 작업 허용 여부는 관련 정책과 조건에 따라 달라집니다.
잠재적 영향
- 의도하지 않은 주체가 인증과 정책 조건을 충족하고 이미지 읽기 작업을 허용받으면 코드나 내부 구성이 노출될 수 있습니다.
- 허용된 작업에 이미지 업로드나 삭제가 포함되면 무단 변경 또는 서비스 운영 차질로 이어질 수 있습니다.
해결 방법
- 필요한 계정, 역할, 서비스 주체를 명시하고 작업 범위와 조건을 검토하세요. 이미지를 내려받기만 하는 역할에 업로드·삭제 권한까지 부여하지 마세요.
- 레지스트리 인증 권한과 리포지토리 작업 권한을 함께 확인하세요. 교차 계정 접근에는 호출자 측의 권한도 검토해야 합니다.
- 조건으로 접근을 제한한다면 해당 조건이 의도한 요청과 주체에 적용되는지 확인하세요. 정책 변경 후 필요한 이미지 가져오기와 배포 작업이 정상 동작하는지 테스트하세요.
예시
예시는 주체 범위의 차이를 보여 줍니다. 계정과 역할 ARN은 실제 값으로 바꾸고 호출자 권한을 별도로 구성해야 합니다. 기존 예시의 2008-10-17은 이전 정책 언어 버전이며, 새 정책이나 수정하는 정책에는 2012-10-17을 사용하세요.
변경 전
yaml
- name: set-policy as object
community.aws.ecs_ecr:
name: needs-policy-object
policy:
Version: "2008-10-17"
Statement:
- Sid: read-only
Effect: Allow
Principal: "*"
Action:
- ecr:GetDownloadUrlForLayer
- ecr:BatchGetImage
- ecr:BatchCheckLayerAvailability
변경 후
yaml
- name: set restricted policy
community.aws.ecs_ecr:
name: backend-api
policy:
Version: "2008-10-17"
Statement:
- Sid: ci-read-only
Effect: Allow
Principal:
AWS: "arn:aws:iam::123456789012:role/ci-ecr-reader"
Action:
- ecr:GetDownloadUrlForLayer
- ecr:BatchGetImage
- ecr:BatchCheckLayerAvailability
설명:
- 변경 전:
Principal: "*"와 이미지 읽기 작업을 함께 지정했습니다. 실제 다운로드에는 인증과 관련 권한이 필요합니다. - 변경 후: 주체를 지정한 IAM 역할로 좁히고 이미지 읽기 작업만 허용합니다. 이 정책과 함께 적용되는 IAM 정책과 조건을 확인하여 실제 접근 범위가 의도한 범위인지 검토하세요.