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:GetAuthorizationToken API를 호출할 수 있는 권한을 가져야 레지스트리에 인증할 수 있습니다. 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-policy AWS 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"
            }
         }
      }
   ]
}

더 알아보기 (Learn more)