Amazon ECR에서 레포지토리 생성 템플릿 만들기

Amazon ECR에서 레포지토리 생성 템플릿 만들기 (Creating a repository creation template in Amazon ECR)

레포지토리 생성 템플릿을 만들어 풀 스루 캐시, create on push, 복제 작업 중에 Amazon ECR이 대신 생성하는 레포지토리에 사용할 설정을 정의할 수 있어요. 템플릿을 만들면 이후 생성되는 모든 새 레포지토리에 해당 설정이 적용돼요.

출처: 문서

본문

레포지토리 생성 템플릿을 만들어 풀 스루 캐시, create on push, 복제 작업 중에 Amazon ECR이 대신 생성하는 레포지토리에 사용할 설정을 정의할 수 있어요. 레포지토리 생성 템플릿을 만들면 이후 생성되는 모든 새 레포지토리에 설정이 적용돼요. 이는 이전에 만든 레포지토리에는 아무런 영향을 주지 않아요.

템플릿으로 레포지토리를 설정할 때 KMS 키와 리소스 태그를 지정할 수 있어요. 하나 이상의 템플릿에서 KMS 키, 리소스 태그, 또는 둘 다를 사용하려면 다음을 해야 해요.

  • 레포지토리 생성 템플릿용 사용자 지정 정책 만들기
  • 레포지토리 생성 템플릿용 IAM 역할 만들기

구성 후 레지스트리의 특정 템플릿에 사용자 지정 역할을 연결할 수 있어요.

레포지토리 생성 템플릿 생성에 필요한 IAM 권한 (IAM permissions for creating repository creation templates)

IAM 프린시펄이 레포지토리 생성 템플릿을 관리하려면 다음 권한이 필요해요. 이러한 권한은 ID 기반 IAM 정책으로 부여해야 해요.

  • ecr:CreateRepositoryCreationTemplate – 레포지토리 생성 템플릿을 만들 권한을 부여해요.
  • ecr:UpdateRepositoryCreationTemplate – 레포지토리 생성 템플릿을 업데이트할 권한을 부여해요.
  • ecr:DescribeRepositoryCreationTemplates – 레지스트리의 레포지토리 생성 템플릿을 나열할 권한을 부여해요.
  • ecr:DeleteRepositoryCreationTemplate – 레포지토리 생성 템플릿을 삭제할 권한을 부여해요.
  • ecr:CreateRepository – Amazon ECR 레포지토리를 만들 권한을 부여해요.
  • ecr:PutLifecyclePolicy – 수명 주기 정책을 만들고 레포지토리에 적용할 권한을 부여해요. 이 권한은 레포지토리 생성 템플릿에 수명 주기 정책이 포함된 경우에만 필요해요.
  • ecr:SetRepositoryPolicy – 레포지토리의 권한 정책을 만들 권한을 부여해요. 이 권한은 레포지토리 생성 템플릿에 레포지토리 정책이 포함된 경우에만 필요해요.
  • iam:PassRole – 엔터티가 서비스나 애플리케이션에 역할을 전달하도록 허용하는 권한을 부여해요. 이 권한은 사용자를 대신해 액션을 수행하려고 역할을 수임해야 하는 서비스와 애플리케이션에 필요해요.

레포지토리 생성 템플릿 만들기 (Create a repository creation template)

템플릿에 필요한 사전 요구 사항을 완료한 후 레포지토리 생성 템플릿을 만들 수 있어요.

AWS Management Console

  1. Amazon ECR 콘솔(https://console.aws.amazon.com/ecr/)을 엽니다.
  2. 탐색 모음에서 레포지토리 생성 템플릿을 만들 리전을 선택합니다.
  3. 탐색 창에서 Private registry, Repository creation templates를 선택합니다.
  4. Repository creation templates 페이지에서 Create template을 선택합니다.
  5. Step 1: Define template 페이지의 Template details에서, 템플릿을 특정 레포지토리 네임스페이스 접두사에 적용하려면 A specific prefix를 선택하거나, 리전에서 다른 템플릿과 일치하지 않는 모든 레포지토리에 템플릿을 적용하려면 Any prefix in your ECR registry를 선택합니다.
    • A specific prefix를 선택하면 Prefix에 템플릿을 적용할 레포지토리 네임스페이스 접두사를 지정합니다. 접두사 끝에는 항상 / 이 암시적으로 적용돼요. 예를 들어 prod 접두사는 prod/ 로 시작하는 모든 레포지토리에 적용되며, prod/team 접두사는 prod/team/ 으로 시작하는 모든 레포지토리에 적용돼요.
    • Any prefix in your ECR registry를 선택하면 Prefix가 ROOT 로 설정됩니다.
  6. Applied for에서 이 템플릿을 적용할 Amazon ECR 워크플로우를 지정합니다. 옵션은 PULL_THROUGH_CACHE, CREATE_ON_PUSH, REPLICATION 이에요.
  7. Template description에 템플릿의 선택적 설명을 지정한 다음 Next를 선택합니다.
  8. Step 2: Add repository creation configuration 페이지에서 템플릿을 사용해 생성된 레포지토리에 적용할 레포지토리 설정 구성을 지정합니다.
    • Image tag mutability에서 사용할 태그 변경 가능성 설정을 선택합니다. 자세한 내용은 "Preventing image tags from being overwritten in Amazon ECR"을 참고하세요.
      • Mutable – 이미지 태그를 덮어쓰려면 이 옵션을 선택합니다. 풀 스루 캐시 작업을 사용하는 레포지토리에 권장되며, Amazon ECR이 캐시된 이미지를 업데이트할 수 있게 보장해요. 또한 몇 개의 변경 가능한 태그에 대한 태그 업데이트를 비활성화하려면 Mutable tag exclusion 텍스트 상자에 태그 이름을 입력하거나 와일드카드(*)를 사용해 유사한 여러 태그를 매칭합니다.
      • Immutable – 이미지 태그가 덮어쓰이는 것을 방지하려면 이 옵션을 선택하며, 기존 태그로 이미지를 푸시할 때 레포지토리의 모든 태그와 제외 항목에 적용돼요. Amazon ECR은 기존 태그로 이미지를 푸시하려고 하면 ImageTagAlreadyExistsException 을 반환해요. 또한 몇 개의 불변 태그에 대한 태그 업데이트를 활성화하려면 Immutable tag exclusion 텍스트 상자에 태그 이름을 입력하거나 와일드카드(*)를 사용합니다.
    • Encryption configuration에서 사용할 암호화 설정을 선택합니다. 자세한 내용은 "Encryption at rest"을 참고하세요. AES-256 을 선택하면 Amazon ECR은 Amazon Simple Storage Service 관리형 암호화 키로 서버 측 암호화를 사용하며, 이는 업계 표준 AES-256 암호화 알고리즘으로 저장 데이터를 암호화해요. 추가 비용이 들지 않아요. AWS KMS 를 선택하면 Amazon ECR은 AWS Key Management Service (AWS KMS)에 저장된 키로 서버 측 암호화를 사용해요. AWS KMS로 데이터를 암호화할 때 Amazon ECR이 관리하는 기본 AWS 관리형 키를 사용하거나, 고객 관리형 키(customer managed key)라고 하는 AWS KMS 키를 직접 지정할 수 있어요.
    • Repository permissions에서 이 템플릿을 사용해 생성된 레포지토리에 적용할 레포지토리 권한 정책을 지정합니다. 선택적으로 드롭다운을 사용해 가장 일반적인 사용 사례용 JSON 샘플 중 하나를 선택할 수 있어요. 자세한 내용은 "Private repository policies in Amazon ECR"을 참고하세요.
    • Repository lifecycle policy에서 이 템플릿을 사용해 생성된 레포지토리에 적용할 레포지토리 수명 주기 정책을 지정합니다. 선택적으로 드롭다운을 사용해 가장 일반적인 사용 사례용 JSON 샘플 중 하나를 선택할 수 있어요. 자세한 내용은 "Automate the cleanup of images by using lifecycle policies in Amazon ECR"을 참고하세요.
    • Repository AWS tags에서 키-값 쌍 형태의 메타데이터를 지정해 이 템플릿을 사용해 생성된 레포지토리와 연결한 다음 Next를 선택합니다. 자세한 내용은 "Tagging a private repository in Amazon ECR"을 참고하세요.
    • Repository creation role에서 템플릿에 리포지토리 태그나 KMS를 사용할 때 레포지토리 생성 템플릿에 사용할 사용자 지정 IAM 역할을 드롭다운 메뉴에서 선택합니다(자세한 내용은 "Create an IAM role for repository creation templates" 참고). 그런 다음 Next를 선택합니다.
  9. Step 3: Review and create 페이지에서 레포지토리 생성 템플릿에 대해 지정한 설정을 검토합니다. 변경하려면 Edit 옵션을 선택합니다. 완료되면 Create를 선택합니다.

참고: 레포지토리의 암호화 설정은 레포지토리가 생성된 후에는 변경할 수 없어요.

AWS CLI

create-repository-creation-template AWS CLI 명령은 프라이빗 레지스트리의 레포지토리 생성 템플릿을 만드는 데 사용돼요.

create-repository-creation-template 명령의 스켈레톤을 생성하려면 AWS CLI를 사용합니다.

aws ecr create-repository-creation-template \
   --generate-cli-skeleton

명령의 출력은 레포지토리 생성 템플릿의 전체 구문을 표시해요.

{
"appliedFor":[""], // string array, but valid are PULL_THROUGH_CACHE, CREATE_ON_PUSH, and REPLICATION
"prefix": "string",
    "description": "string",
    "imageTagMutability": "MUTABLE"|"IMMUTABLE"|"IMMUTABLE_WITH_EXCLUSION"|"MUTABLE_WITH_EXCLUSION",
    "imageTagMutabilityExclusionFilters": [
        "filterType": "WILDCARD",
        "filter": "string"
    ],
    "repositoryPolicy": "string",
    "lifecyclePolicy": "string"
"encryptionConfiguration": {
"encryptionType": "AES256"|"KMS",
        "kmsKey": "string"
    },
    "resourceTags": [
        {
"Key": "string",
            "Value": "string"
        }
    ],
    "customRoleArn": "string", // must be a valid IAM Role ARN
}

이전 단계의 출력으로 repository-creation-template.json 이라는 파일을 만듭니다. 다음 템플릿은 prod/* 아래에 생성되는 모든 레포지토리에 대해 KMS 암호화 키를 설정하고, 향후 레포지토리에 이미지 푸시/풀을 활성화하는 레포지토리 정책을 설정하며, 2주보다 오래된 이미지를 만료시키는 수명 주기 정책을 설정하고, ECR이 KMS 키에 접근하고 향후 레포지토리에 examplekey 리소스 태그를 할당할 수 있게 하는 사용자 지정 역할을 설정해요.

{
"prefix": "prod",
    "description": "For repositories cached from my PTC rule and in my replication configuration that start with 'prod/'",
    "appliedFor": ["PULL_THROUGH_CACHE", "CREATE_ON_PUSH", "REPLICATION"],
    "encryptionConfiguration": {
"encryptionType": "KMS",
        "kmsKey": "arn:aws:kms:us-west-2:111122223333:key/a1b2c3d4-5678-90ab-cdef-example11111"
    },
    "resourceTags": [
        {
"Key": "examplekey",
            "Value": "examplevalue"
        }
    ],
    "imageTagMutability": "IMMUTABLE_WITH_EXCLUSION",
    "imageTagMutabilityExclusionFilters": [
      {
      "filterType": "WILDCARD",
      "filter": "latest"
      },
      {
      "filterType": "WILDCARD",
      "filter": "beta*"
      }
    ]
    "repositoryPolicy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"AllowPushPullIAMRole\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::111122223333:user/IAMusername\"},\"Action\":[\"ecr:BatchGetImage\",\"ecr:BatchCheckLayerAvailability\",\"ecr:CompleteLayerUpload\",\"ecr:GetDownloadUrlForLayer\",\"ecr:InitiateLayerUpload\",\"ecr:PutImage\",\"ecr:UploadLayerPart\"]}]}", 
    "lifecyclePolicy": "{\"rules\":[{\"rulePriority\":1,\"description\":\"Expire images older than 14 days\",\"selection\":{\"tagStatus\":\"any\",\"countType\":\"sinceImagePushed\",\"countUnit\":\"days\",\"countNumber\":14},\"action\":{\"type\":\"expire\"}}]}",
    "customRoleArn": "arn:aws:iam::111122223333:role/myRole"
}

다음 명령을 사용해 레포지토리 생성 템플릿을 만듭니다. 이전 단계에서 만든 구성 파일의 이름을 다음 예제의 repository-creation-template.json 대신 지정해야 해요.

aws ecr create-repository-creation-template \
   --cli-input-json file://repository-creation-template.json

더 알아보기 (Learn more)