Amazon ECR 프라이빗 리포지토리 정책 예시
Amazon ECR 프라이빗 리포지토리 정책 예시
Amazon ECR 프라이빗 리포지토리에 접근 권한을 제어하기 위해 사용할 수 있는 리포지토리 정책 예시를 소개합니다. 여기서 다루는 예시는 Amazon ECR 프라이빗 리포지토리에 적용하기 위한 것입니다. IAM 보안 주체(principal)에 직접 사용하려면 리소스를 Amazon ECR 리포지토리로 지정하는 등 수정이 필요하므로, 그대로 적용하면 제대로 동작하지 않을 수 있습니다.
리포지토리 정책을 설정하는 방법에 대한 자세한 내용은 Amazon ECR에서 프라이빗 리포지토리 정책 문 설정 문서를 참고하세요.
출처: 문서
본문
Amazon ECR 리포지토리 정책은 IAM 정책의 일부분으로, 개별 Amazon ECR 리포지토리에 대한 접근을 제어하기 위해 범위가 한정되어 사용됩니다. IAM 정책은 일반적으로 Amazon ECR 서비스 전체에 권한을 적용하는 데 쓰이지만, 특정 리소스에 대한 접근을 제어하는 데에도 사용할 수 있습니다. 자세한 내용은 리포지토리 정책과 IAM 정책 비교 문서를 참고하세요.
다음은 Amazon ECR 프라이빗 리포지토리에 대한 접근을 제어하기 위해 사용할 수 있는 리포지토리 정책 예시입니다.
중요 Amazon ECR은 사용자가 어떤 Amazon ECR 리포지토리에서든 이미지를 푸시하거나 풀하기 전에, IAM 정책을 통해
ecr:GetAuthorizationTokenAPI를 호출할 수 있는 권한을 가져야 레지스트리에 인증할 수 있습니다. Amazon ECR은 다양한 수준에서 사용자 접근을 제어할 수 있도록 여러 관리형 IAM 정책을 제공합니다. 자세한 내용은 Amazon Elastic Container Registry ID 기반 정책 예시 문서를 참고하세요.
예시: 하나 이상의 사용자 허용
다음 리포지토리 정책은 한 명 이상의 사용자가 리포지토리에서 이미지를 푸시하고 풀할 수 있도록 허용합니다.
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowPushPull",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::111122223333:user/push-pull-user-1",
"arn:aws:iam::111122223333:user/push-pull-user-2"
]
},
"Action": [
"ecr:BatchGetImage",
"ecr:BatchCheckLayerAvailability",
"ecr:CompleteLayerUpload",
"ecr:GetDownloadUrlForLayer",
"ecr:InitiateLayerUpload",
"ecr:PutImage",
"ecr:UploadLayerPart"
],
"Resource": "*"
}
]
}
예시: 다른 계정 허용
다음 리포지토리 정책은 특정 계정이 이미지를 푸시할 수 있도록 허용합니다.
중요 권한을 부여하는 대상 계정은 리포지토리 정책을 만드는 Region이 활성화되어 있어야 합니다. 그렇지 않으면 오류가 발생합니다.
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowCrossAccountPush",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:root"
},
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:CompleteLayerUpload",
"ecr:InitiateLayerUpload",
"ecr:PutImage",
"ecr:UploadLayerPart"
],
"Resource": "*"
}
]
}
다음 리포지토리 정책은 일부 사용자(pull-user-1, pull-user-2)는 이미지를 풀할 수 있게 하고, 다른 사용자(admin-user)에게는 전체 접근 권한을 부여합니다.
참고 AWS Management Console에서 아직 지원하지 않는 더 복잡한 리포지토리 정책은
set-repository-policyAWS CLI 명령어로 적용할 수 있습니다.
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowPull",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::111122223333:user/pull-user-1",
"arn:aws:iam::111122223333:user/pull-user-2"
]
},
"Action": [
"ecr:BatchGetImage",
"ecr:GetDownloadUrlForLayer"
],
"Resource": "*"
},
{
"Sid": "AllowAll",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/admin-user"
},
"Action": [
"ecr:*"
],
"Resource": "*"
}
]
}
예시: 모두 거부
다음 리포지토리 정책은 모든 계정의 모든 사용자가 이미지를 풀하는 것을 거부합니다.
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "DenyPull",
"Effect": "Deny",
"Principal": "*",
"Action": [
"ecr:BatchGetImage",
"ecr:GetDownloadUrlForLayer"
],
"Resource": "*"
}
]
}
예시: 특정 IP 주소로 접근 제한
다음 예시는 리포지토리에 적용될 때 특정 주소 범위에서 온 사용자가 Amazon ECR 작업을 수행하는 것을 거부합니다. 이 문의 조건은 허용되는 인터넷 프로토콜 버전 4(IPv4) IP 주소 범위인 54.240.143.*를 식별합니다.
Condition 블록은 NotIpAddress 조건과 AWS 전체 조건 키인 aws:SourceIp 조건 키를 사용합니다. 이러한 조건 키에 대한 자세한 내용은 AWS 전역 조건 컨텍스트 키 문서를 참고하세요. aws:sourceIp IPv4 값은 표준 CIDR 표기법을 사용합니다. 자세한 내용은 IAM User Guide의 IP 주소 조건 연산자를 참고하세요.
{
"Version":"2012-10-17",
"Id": "ECRPolicyId1",
"Statement": [
{
"Sid": "IPAllow",
"Effect": "Deny",
"Principal": "*",
"Action": "ecr:*",
"Resource": "*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "54.240.143.0/24"
}
}
}
]
}
예시: AWS 서비스 허용
다음 리포지토리 정책은 AWS CodeBuild가 해당 서비스와의 통합에 필요한 Amazon ECR API 작업에 접근할 수 있도록 허용합니다. 다음 예시를 사용할 때는 aws:SourceArn과 aws:SourceAccount 조건 키를 사용해 어떤 리소스가 이러한 권한을 가정(assume)할 수 있는지 범위를 한정해야 합니다. 자세한 내용은 AWS CodeBuild User Guide의 CodeBuild용 Amazon ECR 예시를 참고하세요.
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"CodeBuildAccess",
"Effect":"Allow",
"Principal":{
"Service":"codebuild.amazonaws.com"
},
"Action":[
"ecr:BatchGetImage",
"ecr:GetDownloadUrlForLayer"
],
"Resource": "*",
"Condition":{
"ArnLike":{
"aws:SourceArn":"arn:aws:codebuild:us-east-1:123456789012:project/project-name"
},
"StringEquals":{
"aws:SourceAccount":"123456789012"
}
}
}
]
}