

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon ECR에서 리포지토리 생성 템플릿 만들기
<a name="repository-creation-templates-create"></a>

리포지토리 생성 템플릿을 생성하여 풀스루 캐시, 푸시 시 생성 또는 복제 작업 중에 사용자를 대신하여 Amazon ECR에서 생성한 리포지토리에 사용할 설정을 정의할 수 있습니다. 리포지토리 생성 템플릿이 생성되면 새로 생성되는 모든 리포지토리에 설정이 적용됩니다. 이는 이전에 만든 리포지토리에는 영향을 주지 않습니다.

템플릿을 사용하여 리포지토리를 설정할 때 KMS 키와 리소스 태그를 지정하는 옵션이 있습니다. 하나 이상의 템플릿에서 KMS 키, 리소스 태그 또는 둘의 조합을 사용하려는 경우 다음을 수행해야 합니다.
+ [리포지토리 생성 템플릿에 대한 사용자 지정 정책 생성](repository-creation-templates-custom.md).
+ [리포지토리 생성 템플릿에 대한 IAM 역할 생성](repository-creation-templates-create-iam.md).

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



## 리포지토리 생성 템플릿을 만들기 위한 IAM 권한
<a name="repository-creation-templates-iam"></a>

IAM 보안 주체가 리포지토리 생성 템플릿을 관리하려면 다음 권한이 필요합니다. 이 권한은 자격 증명 기반 IAM 정책을 사용하여 부여되어야 합니다.
+ `ecr:CreateRepositoryCreationTemplate` - 리포지토리 생성 템플릿을 생성할 수 있는 권한을 부여합니다.
+ `ecr:UpdateRepositoryCreationTemplate` - 리포지토리 생성 템플릿을 업데이트할 수 있는 권한을 부여합니다.
+ `ecr:DescribeRepositoryCreationTemplates` – 레지스트리의 리포지토리 생성 템플릿을 나열할 수 있는 권한을 부여합니다.
+ `ecr:DeleteRepositoryCreationTemplate` - 리포지토리 생성 템플릿을 삭제할 수 있는 권한을 부여합니다.
+ `ecr:CreateRepository` - Amazon ECR 리포지토리를 생성할 수 있는 권한을 부여합니다.
+ `ecr:PutLifecyclePolicy` - 수명 주기 정책을 생성하여 리포지토리에 적용할 수 있는 권한을 부여합니다. 이 권한은 리포지토리 생성 템플릿에 수명 주기 정책이 포함된 경우에만 필요합니다.
+ `ecr:SetRepositoryPolicy` - 리포지토리에 대한 권한 정책을 생성할 수 있는 권한을 부여합니다. 이 권한은 리포지토리 생성 템플릿에 리포지토리 정책이 포함된 경우에만 필요합니다.
+ `iam:PassRole` - 엔터티가 역할을 서비스 또는 애플리케이션에 전달할 수 있는 권한을 부여합니다. 이 권한은 사용자를 대신하여 작업을 수행하기 위해 역할을 사용해야 하는 서비스 및 애플리케이션에 필요합니다.

## 리포지토리 생성 템플릿 만들기
<a name="repository-creation-templates-creating"></a>

템플릿에 필요한 사전 요구 사항이 충족되었으면 계속해서 리포지토리 생성 템플릿을 생성할 수 있습니다.

------
#### [ AWS Management Console ]

**리포지토리 생성 템플릿(AWS Management Console)을 만들려면**

1. Amazon ECR 콘솔([https://console.aws.amazon.com/ecr/](https://console.aws.amazon.com/ecr/))을 엽니다.

1. 탐색 모음에서 리포지토리 생성 템플릿을 만들려는 리전을 선택합니다.

1. 탐색 창에서 **프라이빗 레지스트리**, **리포지토리 생성 템플릿**을 선택합니다.

1. **리포지토리 생성 템플릿** 페이지에서 **템플릿 생성**을 선택합니다.

1. **1단계: 템플릿 정의** 페이지에서 **템플릿 세부 정보**에 대해 특정 리포지토리 네임스페이스 접두사에 템플릿을 적용할 **특정 접두사**를 선택하고, **ECR 레지스트리의 모든 접두사**를 선택하여 해당 리전의 다른 템플릿과 일치하지 않는 모든 리포지토리에 템플릿을 적용합니다.

   1. **특정 접두사**를 선택한 경우 **접두사**에 템플릿을 적용할 리포지토리 네임스페이스 접두사를 지정합니다. 접두사 끝에는 항상 위임된 `/`가 적용됩니다. 예를 들어 접두사 `prod`는 `prod/`로 시작하는 모든 리포지토리에 적용됩니다. 마찬가지로 접두사 `prod/team`은 `prod/team/`으로 시작하는 모든 리포지토리에 적용됩니다.

   1. **ECR 레지스트리에서 어떤 접두사**를 선택하든 해당 **접두사**가 `ROOT`로 설정됩니다.

1. **신청 대상**에 이 템플릿이 적용될 Amazon ECR 워크플로를 지정합니다. 옵션은 `PULL_THROUGH_CACHE`, `CREATE_ON_PUSH` 및 `REPLICATION`입니다.

1. **템플릿 설명**에서 템플릿에 대한 설명(선택 사항)을 지정하고 **다음**을 선택합니다.

1. **2단계: 리포지토리 생성 구성 추가** 페이지에서 템플릿을 사용하여 생성한 리포지토리에 적용되는 리포지토리 설정 구성을 지정합니다.

   1. **이미지 태그 변경 가능성**에서 사용할 태그 변경 가능성 설정을 선택합니다. 자세한 내용은 [Amazon ECR에서 이미지 태그를 덮어쓰지 않도록 방지](image-tag-mutability.md) 단원을 참조하십시오.
      + **변경 가능** - 이미지 태그를 덮어쓰려면 이 옵션을 선택합니다. Amazon ECR이 캐시된 이미지를 업데이트할 수 있도록 풀 스루 캐시 작업을 사용하는 리포지토리에 권장됩니다. 또한, 일부 변경 가능 태그에 대한 태그 업데이트를 비활성화하려면 **변경 가능 태그 제외** 텍스트 상자에 태그 이름을 입력하거나 유사한 여러 태그를 매칭하는 와일드카드(\*)를 사용합니다.
      + **변경 불가능** - 이미지 태그를 덮어쓰는 것을 방지하려면 이 옵션을 선택합니다. 선택한 옵션은 기존 태그가 있는 이미지를 푸시할 때 리포지토리의 모든 태그와 제외 항목에 적용됩니다. 기존 태그가 있는 이미지를 푸시하려고 하면 Amazon ECR이 `ImageTagAlreadyExistsException`을 반환합니다. 또한, 일부 변경 불가능 태그에 대한 태그 업데이트를 활성화하려면 **변경 불가능 태그 제외** 텍스트 상자에 태그 이름을 입력하거나 유사한 여러 태그를 매칭하는 와일드카드(\*)를 사용합니다.

   1. **암호화 구성**에서 사용할 암호화 설정을 선택합니다. 자세한 내용은 [저장된 데이터 암호화](encryption-at-rest.md) 단원을 참조하십시오.

      **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 관리형 키를 사용하거나 *고객 관리*형 키라고 하는 자체 AWS KMS 키를 지정할 수 있습니다.
**참고**  
리포지토리가 생성된 후에는 리포지토리의 암호화 설정을 변경할 수 없습니다.

   1. **리포지토리 권한**에서 이 템플릿을 사용하여 생성한 리포지토리에 적용할 리포지토리 권한 정책을 지정합니다. 선택적으로 드롭다운을 사용하여 가장 일반적인 사용 사례의 JSON 샘플 중 하나를 선택할 수 있습니다. 자세한 내용은 [Amazon ECR의 프라이빗 리포지토리 정책](repository-policies.md) 단원을 참조하십시오.

   1. **리포지토리 수명 주기 정책**에서 이 템플릿을 사용하여 생성한 리포지토리에 적용할 리포지토리 수명 주기 정책을 지정합니다. 선택적으로 드롭다운을 사용하여 가장 일반적인 사용 사례의 JSON 샘플 중 하나를 선택할 수 있습니다. 자세한 내용은 [Amazon ECR의 수명 주기 정책을 사용하여 이미지 정리 자동화](LifecyclePolicies.md) 단원을 참조하십시오.

   1. **리포지토리 AWS 태그**에서이 템플릿을 사용하여 생성된 리포지토리와 연결할 메타데이터를 키-값 페어 형식으로 지정한 **후 다음을** 선택합니다. 자세한 내용은 [Amazon ECR에서 프라이빗 리포지토리 태그 지정](ecr-using-tags.md) 단원을 참조하십시오.

   1. **리포지토리 생성 역할**의 경우 템플릿에서 리포지토리 태그 또는 KMS를 사용할 때 리포지토리 생성 템플릿에 사용할 사용자 지정 IAM 역할을 드롭다운 메뉴에서 선택합니다(자세한 내용은 [리포지토리 생성 템플릿에 대한 IAM 역할 생성](repository-creation-templates-create-iam.md) 참조). 그런 후 **다음**을 선택합니다.

1. **3단계: 검토 및 생성** 페이지에서 리포지토리 생성 탬플릿에 지정한 설정을 검토합니다. **편집** 옵션을 선택하여 변경합니다. 완료하면 **생성**을 선택합니다.

------
#### [ AWS CLI ]

[create-repository-creation-template](https://docs.aws.amazon.com/cli/latest/reference/ecr/create-repository-creation-template.html) AWS CLI 명령은 프라이빗 레지스트리에 대한 리포지토리 생성 템플릿을 생성하는 데 사용됩니다.

**리포지토리 생성 템플릿(AWS CLI)을 만들려면**

1.  AWS CLI 를 사용하여 [create-repository-creation-template](https://docs.aws.amazon.com/cli/latest/reference/ecr/create-repository-creation-template.html) 명령에 대한 스켈레톤을 생성합니다.

   ```
   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
   }
   ```

1. 이전 단계의 출력을 사용하여 `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"
   }
   ```

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

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

------