

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

# Amazon ECR 프라이빗 리포지토리
<a name="Repositories"></a>

Amazon ECR 프라이빗 리포지토리에는 Docker 이미지, Open Container Initiative(OCI) 이미지 및 OCI 호환 아티팩트가 포함되어 있습니다. Amazon ECR API 작업이나 Amazon ECR 콘솔의 **리포지토리** 섹션을 사용하여 이미지 리포지토리를 생성, 모니터링 및 삭제하고 이미지 리포지토리에 액세스할 수 있는 사용자를 제어하는 권한을 설정할 수 있습니다. 또한 Amazon ECR은 Docker CLI와 통합되므로 개발 환경에서 리포지토리로 이미지를 푸시하고 가져올 수 있습니다.

**Topics**
+ [프라이빗 리포지토리 개념](#repository-concepts)
+ [이미지를 저장할 Amazon ECR 프라이빗 리포지토리 생성](repository-create.md)
+ [Amazon ECR에서 프라이빗 리포지토리의 콘텐츠 및 세부 정보 보기](repository-info.md)
+ [Amazon ECR에서 프라이빗 리포지토리 삭제](repository-delete.md)
+ [Amazon ECR의 프라이빗 리포지토리 정책](repository-policies.md)
+ [Amazon ECR에서 프라이빗 리포지토리 태그 지정](ecr-using-tags.md)

## 프라이빗 리포지토리 개념
<a name="repository-concepts"></a>
+ 기본적으로, 사용자의 계정은 자신의 기본 레지스트리에 있는 리포지토리에 대한 읽기 및 쓰기 액세스 권한을 갖습니다(`aws_account_id.dkr.ecr.region.amazonaws.com`). 그러나 사용자는 Amazon ECR API를 호출하고 리포지토리로 이미지를 푸시하거나 리포지토리에서 이미지를 가져올 수 있는 권한이 필요합니다. Amazon ECR은 다양한 수준에서 사용자 액세스를 제어하는 관리형 정책을 몇 가지 제공합니다. 자세한 내용은 [Amazon Elastic Container Registry 자격 증명 기반 정책 예제](security_iam_id-based-policy-examples.md) 단원을 참조하십시오.
+ 리포지토리는 사용자 액세스 정책 및 개별 리포지토리 정책 모두를 사용하여 제어할 수 있습니다. 자세한 내용은 [Amazon ECR의 프라이빗 리포지토리 정책](repository-policies.md) 단원을 참조하십시오.
+ 리포지토리 이름은 네임스페이스를 지원할 수 있으며 이를 통해 유사한 리포지토리를 그룹화할 수 있습니다. 예를 들어 동일한 레지스트리를 사용하는 팀이 여러 개 있는 경우, 팀 A는 `team-a` 네임스페이스를 사용할 수 있는 반면 팀 B는 `team-b` 네임스페이스를 사용할 수 있습니다. 이렇게 함으로써 각 팀은 팀 네임스페이스가 앞에 붙은 `web-app`라는 고유의 이미지를 보유하게 됩니다. 이 구성을 사용하면 각 팀의 이러한 이미지를 간섭 없이 동시에 사용할 수 있습니다. 팀 A의 이미지는 `team-a/web-app`이고 팀 B의 이미지는 `team-b/web-app`입니다.
+ 이미지를 자신의 레지스트리에 있는 리전 및 계정 간에 다른 리포지토리로 복제할 수 있습니다. 레지스트리 설정에서 복제 구성을 지정하여 이 작업을 수행할 수 있습니다. 자세한 내용은 [Amazon ECR의 프라이빗 레지스트리 설정](registry-settings.md) 단원을 참조하십시오.
+ 레지스트리 수준에서 BLOB 탑재가 활성화되면 리포지토리가 공통 이미지 계층을 공유할 수 있습니다.

# 이미지를 저장할 Amazon ECR 프라이빗 리포지토리 생성
<a name="repository-create"></a>

**중요**  
 AWS KMS (DSSE-KMS)를 사용한 이중 계층 서버 측 암호화는 AWS GovCloud (US) 리전에서만 사용할 수 있습니다.

Amazon ECR 프라이빗 리포지토리를 생성한 다음 리포지토리를 사용하여 컨테이너 이미지를 저장합니다. AWS Management Console을 사용하여 다음 단계에 따라 프라이빗 리포지토리를 생성합니다.

**리포지토리를 생성하려면(AWS Management Console)**

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

1. 탐색 모음에서 리포지토리를 생성할 리전을 선택합니다.

1. **프라이빗 리포지토리**를 선택한 다음 **리포지토리 생성**을 선택합니다.

1. **리포지토리 이름(Repository name)**에 리포지토리의 고유한 이름을 입력합니다. 리포지토리 이름은 자체적으로 지정할 수 있습니다(예: `nginx-web-app`). 또는 리포지토리를 범주로 그룹화하기 위해 네임스페이스에 추가할 수 있습니다(예:`project-a/nginx-web-app`).
**참고**  
리포지토리 이름은 최대 `256`개의 문자를 포함할 수 있습니다. 이름은 문자로 시작해야 하고, 소문자와 숫자, 하이픈, 밑줄, 마침표 및 슬래시(/)만 포함할 수 있습니다. 이중 슬래시 사용은 지원되지 않습니다.

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

1. ** 암호화 구성**에서 **AES-256** 또는 중 하나를 선택합니다** AWS KMS**. 자세한 내용은 [저장된 데이터 암호화](encryption-at-rest.md) 단원을 참조하십시오.

   1.  AWS KMS 를 선택한 경우 단일 계층 암호화와 이중 계층 암호화 중에서 선택합니다. AWS KMS 또는 이중 계층 암호화 사용에는 추가 요금이 부과됩니다. 자세한 정보는 [Amazon ECR 서비스 요금](https://aws.amazon.com/ecr/pricing/)을 참조하세요.

   1. 기본적으로 별칭이 있는 AWS 관리형 키가 선택`aws/ecr`됩니다. 이 키는 AWS KMS 암호화가 활성화된 리포지토리를 처음 생성할 때 계정에 생성됩니다. **고객 관리형 키(고급)**를 선택하여 고유한 AWS KMS 키를 선택합니다. AWS KMS 키는 클러스터와 동일한 리전에 있어야 합니다. ** AWS KMS 키 생성을** 선택하여 콘솔로 AWS KMS 이동하여 자체 키를 생성합니다.

1. **이미지 스캔 설정**의 경우 기본 스캔을 위해 리포지토리 수준에서 스캔 설정을 지정할 수 있지만 프라이빗 레지스트리 수준에서 스캔 구성을 지정하는 것이 가장 좋습니다. 프라이빗 레지스트리 수준에서 스캔 설정을 구성하면 고급 스캔이나 기본 스캔 중에서 선택할 수 있으며, 필터를 정의하여 스캔할 리포지토리를 지정할 수도 있습니다.

1. **생성(Create)**을 선택합니다.

**리포지토리를 생성하려면(AWS CLI)**

1. **aws ecr create-repository** 명령과 AWS CLI 함께를 사용하여 리포지토리를 생성할 수 있습니다.

   ```
   aws ecr create-repository \
               --repository-name hello-repository \
               --region region
   ```

1. 리포지토리 생성 템플릿이 정의된 경우 원하는 리포지토리 이름과 함께 익숙한 Amazon ECR 푸시 명령을 사용하여 이미지를 푸시하여 리포지토리를 생성할 수 있습니다. Amazon ECR은 리포지토리 생성 템플릿의 사전 정의된 설정을 사용하여 리포지토리를 자동으로 생성합니다. 아직 리포지토리 생성 템플릿이 정의되지 않은 경우 존재하지 않는 이미지 리포지토리에 대한 요청이 실패합니다.

   ```
   docker push aws_account_id.dkr.ecr.region.amazonaws.com/prefix/my-new-repository:tag
   ```

## 다음 단계
<a name="procedure_next_steps"></a>

리포지토리에 이미지를 푸시하는 단계를 보려면 리포지토리를 선택하고 **푸시 명령 보기**를 선택합니다. 리포지토리로 이미지를 푸시하는 방법에 대한 자세한 내용은 [Amazon ECR 프라이빗 리포지토리에 이미지 푸시](image-push.md) 섹션을 참조하세요.

# Amazon ECR에서 프라이빗 리포지토리의 콘텐츠 및 세부 정보 보기
<a name="repository-info"></a>

프라이빗 리포지토리를 생성한 후에는 AWS Management Console에서 리포지토리에 대한 세부 정보를 확인할 수 있습니다.
+ 리포지토리에 저장되는 이미지
+ 각 이미지의 크기 및 SHA 다이제스트 등 리포지토리에 저장된 각 이미지에 대한 세부 정보
+ 리포지토리 내용에 대해 지정된 스캔 빈도
+ 리포지토리에 연결된 활성 풀스루 캐시 규칙이 있는지 여부
+ 리포지토리에 대한 암호화 설정

**참고**  
Docker 버전 1.9로 시작하면, Docker 클라이언트가 V2 Docker 레지스트리에 이미지 계층을 푸시하기 전에 이를 압축합니다. **docker images** 명령의 출력은 압축되지 않은 이미지 크기를 표시합니다. 따라서 Docker는 AWS Management Console에 표시된 이미지보다 큰 이미지를 반환할 수 있음을 염두에 둡니다.

**리포지토리 정보를 보려면(AWS Management Console)**

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

1. 탐색 모음에서 보려는 리포지토리가 포함된 리전을 선택합니다.

1. 탐색 창에서 **리포지토리**를 선택합니다.

1. **리포지토리(Repositories)** 페이지에서 **프라이빗(Private)** 탭을 선택한 다음 리포지토리를 확인합니다.

1. 리포지토리 세부 정보 페이지에서 콘솔은 기본적으로 **이미지(Images)** 보기로 설정되어 있습니다. 리포지토리에 대한 다른 정보를 확인하기 위해서는 탐색 메뉴를 사용합니다.
   + **요약(Summary)**을 선택하여 리포지토리에 대한 리포지토리 세부 정보 및 풀 카운트 데이터를 봅니다.
   + **이미지(Images)**를 선택하여 리포지토리에 있는 이미지 태그에 대한 정보를 봅니다. 이미지에 대한 자세한 정보를 보려면 해당 이미지 태그를 선택합니다. 자세한 내용은 [Amazon ECR에서 이미지 세부 정보 보기](image-info.md) 단원을 참조하십시오.

     태그가 지정되지 않은 이미지 중 삭제하고 싶은 이미지가 있는 경우, 삭제할 리포지토리의 왼쪽에 있는 상자를 선택하여 **삭제(Delete)**를 선택할 수 있습니다. 자세한 내용은 [Amazon ECR에서 이미지 삭제](delete_image.md) 단원을 참조하십시오.
   + **권한(Permissions)**을 선택하여 리포지토리에 적용된 리포지토리 정책을 봅니다. 자세한 내용은 [Amazon ECR의 프라이빗 리포지토리 정책](repository-policies.md) 단원을 참조하십시오.
   + **수명 주기 정책(Lifecycle Policy)**을 선택하여 리포지토리에 적용된 수명 주기 정책을 봅니다. 여기서 수명 주기 내역도 볼 수 있습니다. 자세한 내용은 [Amazon ECR의 수명 주기 정책을 사용하여 이미지 정리 자동화](LifecyclePolicies.md) 단원을 참조하십시오.
   + **태그(Tags)**를 선택하여 리포지토리에 적용된 메타데이터 태그를 봅니다.

# Amazon ECR에서 프라이빗 리포지토리 삭제
<a name="repository-delete"></a>

리포지토리 사용을 마치면 이를 삭제할 수 있습니다. 에서 리포지토리를 삭제하면 AWS Management Console리포지토리에 포함된 모든 이미지도 삭제되므로 실행 취소할 수 없습니다.

**중요**  
삭제된 리포지토리에 있는 이미지도 삭제됩니다. 이 작업은 실행 취소할 수 없습니다.

**리포지토리를 삭제하려면(AWS Management Console)**

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

1. 탐색 모음에서 삭제하려는 리포지토리가 들어 있는 리전을 선택합니다.

1. 탐색 창에서 **리포지토리**를 선택합니다.

1. **리포지토리(Repositories)** 페이지에서 **프라이빗(Private)** 탭을 선택한 다음 삭제할 리포지토리를 선택하고 **삭제(Delete)**를 선택합니다.

1. ***repository\$1name* 삭제** 창에서 삭제할 리포지토리가 선택되었는지 확인한 후 **삭제(Delete)**를 선택합니다.

# Amazon ECR의 프라이빗 리포지토리 정책
<a name="repository-policies"></a>

Amazon ECR은 리소스 기반 권한을 사용하여 리포지토리에 대한 액세스를 제어합니다. 리소스 기반 권한을 사용하면 리포지토리에 액세스할 수 있는 사용자 또는 역할과 해당 리포지토리에서 수행할 수 있는 작업을 지정할 수 있습니다. 기본적으로 리포지토리를 생성한 AWS 계정만 리포지토리에 액세스할 수 있습니다. 리포지토리에 대한 추가 액세스를 허용하는 리포지토리 정책을 적용할 수 있습니다.

**Topics**
+ [리포지토리 정책과 IAM 정책 비교](#repository-policy-vs-iam-policy)
+ [Amazon ECR의 프라이빗 리포지토리 정책 예제](repository-policy-examples.md)
+ [Amazon ECR의 프라이빗 리포지토리 정책 설명 설정](set-repository-policy.md)

## 리포지토리 정책과 IAM 정책 비교
<a name="repository-policy-vs-iam-policy"></a>

Amazon ECR 리포지토리 정책은 개별 Amazon ECR 리포지토리에 대한 액세스를 제어하도록 범위가 지정되고 사용되는 IAM 정책의 하위 집합입니다. IAM 정책은 일반적으로 Amazon ECR 서비스 전체에 대한 권한을 적용하는 데 사용되지만, 특정 리소스에 대한 액세스를 제어하는 데도 사용할 수 있습니다.

Amazon ECR 리포지토리 정책과 IAM 정책 모두 특정 사용자 또는 역할이 리포지토리에서 수행할 수 있는 작업을 결정할 때 사용됩니다. 리포지토리 정책에서는 특정 사용자 또는 역할의 작업 수행이 허용되었지만 IAM 정책에서는 권한이 거부된 경우(또는 그 반대의 경우), 해당 작업은 거부됩니다. 리포지토리 정책 또는 IAM 정책 중 하나에서만 사용자 또는 역할의 작업 권한이 허용되면 되고, 양쪽 모두에서 작업이 허용되어야 할 필요는 없습니다.

**중요**  
Amazon ECR의 요구 사항에 따라 사용자가 레지스트리에 대해 인증하고 Amazon ECR 리포지토리에서 이미지를 푸시 또는 풀하기 전에 IAM 정책을 통해 `ecr:GetAuthorizationToken` API에 호출을 할 권한이 있어야 합니다. Amazon ECR은 다양한 수준에서 사용자 액세스를 제어하는 관리형 IAM 정책을 몇 가지 제공합니다. 자세한 내용은 [Amazon Elastic Container Registry 자격 증명 기반 정책 예제](security_iam_id-based-policy-examples.md) 단원을 참조하십시오.

아래 예에서 보듯이 이러한 정책 유형 중 하나를 사용하여 리포지토리에 대한 액세스를 제어할 수 있습니다.

이 예에는 특정 사용자가 리포지토리와 그 리포지토리 내의 이미지를 설명할 수 있도록 하는 Amazon ECR 리포지토리 정책이 나와 있습니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ECRRepositoryPolicy",
            "Effect": "Allow",
            "Principal": {"AWS": "arn:aws:iam::111122223333:user/username"},
            "Action": [
                "ecr:DescribeImages",
                "ecr:DescribeRepositories"
            ],
            "Resource": "*"
        }
    ]
}
```

------

이 예에서는 리소스 파라미터를 사용하여 정책 범위를 하나의 리포지토리로 지정(리포지토리의 전체 ARN으로 지정)하여 위와 동일한 목적을 달성하는 IAM 정책을 보여줍니다. Amazon 리소스 이름(ARN) 형식에 대한 자세한 내용은 [리소스](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-resources) 단원을 참조하세요.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowDescribeRepoImage",
            "Effect": "Allow",
            "Action": [
                "ecr:DescribeImages",
                "ecr:DescribeRepositories"
            ],
            "Resource": ["arn:aws:ecr:us-east-1:111122223333:repository/repository-name"]
        }
    ]
}
```

------

# Amazon ECR의 프라이빗 리포지토리 정책 예제
<a name="repository-policy-examples"></a>

**중요**  
이 페이지의 리포지토리 정책 예제는 Amazon ECR 프라이빗 리포지토리에 적용하기 위한 것입니다. Amazon ECR 리포지토리를 리소스로 지정하도록 수정하지 않으면 IAM 보안 주체와 직접 함께 사용할 경우 제대로 작동하지 않습니다. 리포지토리 정책 설정에 대한 자세한 내용은 [Amazon ECR의 프라이빗 리포지토리 정책 설명 설정](set-repository-policy.md)를 참조하세요.

Amazon ECR 리포지토리 정책은 개별 Amazon ECR 리포지토리에 대한 액세스를 제어하도록 범위가 지정되고 사용되는 IAM 정책의 하위 집합입니다. IAM 정책은 일반적으로 Amazon ECR 서비스 전체에 대한 권한을 적용하는 데 사용되지만, 특정 리소스에 대한 액세스를 제어하는 데도 사용할 수 있습니다. 자세한 내용은 [리포지토리 정책과 IAM 정책 비교](repository-policies.md#repository-policy-vs-iam-policy) 단원을 참조하십시오.

다음 리포지토리 정책 예제는 Amazon ECR 프라이빗 리포지토리에 대한 액세스를 제어하는 데 사용할 수 있는 권한 명령문을 보여 줍니다.

**중요**  
Amazon ECR의 요구 사항에 따라 사용자가 레지스트리에 대해 인증하고 Amazon ECR 리포지토리에서 이미지를 푸시 또는 풀하기 전에 IAM 정책을 통해 `ecr:GetAuthorizationToken` API에 호출을 할 권한이 있어야 합니다. Amazon ECR은 다양한 수준에서 사용자 액세스를 제어하는 관리형 IAM 정책을 몇 가지 제공합니다. 자세한 내용은 [Amazon Elastic Container Registry 자격 증명 기반 정책 예제](security_iam_id-based-policy-examples.md) 단원을 참조하십시오.

## 예제: 한 명 이상의 사용자 허용
<a name="IAM_within_account"></a>

다음 리포지토리 정책은 한 명 이상의 사용자가 리포지토리에 대해 이미지를 푸시하고 가져오도록 허용합니다.

------
#### [ JSON ]

****  

```
{
    "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": "*"
        }
    ]
}
```

------

## 예: 다른 계정 허용
<a name="IAM_allow_other_accounts"></a>

다음 리포지토리 정책은 특정 계정이 이미지를 푸시하도록 허용합니다.

**중요**  
권한을 부여하려는 계정에는 리포지토리 정책을 만드는 리전이 활성화되어 있어야 합니다. 그렇지 않으면 오류가 발생합니다.

------
#### [ JSON ]

****  

```
{
    "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": "*"
        }
    ]
}
```

------

다음 리포지토리 정책은 다른 사용자에게 전체 액세스 권한을 제공하면서(*admin-user*) 일부 사용자가 이미지를 가져오도록 허용합니다(*pull-user-1* and *pull-user-2*).

**참고**  
현재에서 지원되지 않는 보다 복잡한 리포지토리 정책의 AWS Management Console경우 [https://docs.aws.amazon.com/cli/latest/reference/ecr/set-repository-policy.html](https://docs.aws.amazon.com/cli/latest/reference/ecr/set-repository-policy.html) AWS CLI 명령을 사용하여 정책을 적용할 수 있습니다.

------
#### [ JSON ]

****  

```
{
    "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": "*"
        }
    ]
}
```

------

## 예제: 모두 거부
<a name="IAM_deny_all"></a>

다음 리포지토리 정책은 모든 계정의 모든 사용자가 이미지를 가져오는 기능을 거부합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "DenyPull",
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## 예: 특정 IP 주소에 대한 액세스 제한
<a name="IAM_restrict_ip"></a>

다음 예제에서는 특정 주소 범위에서 리포지토리에 적용할 때 어떠한 사용자에게도 Amazon ECR 작업을 수행할 수 있는 권한을 부여하지 않습니다.

이 문의 조건은 허용되는 IPv4(인터넷 프로토콜 버전 4) IP 주소의 `54.240.143.*` 범위를 식별합니다.

`Condition` 블록은 `NotIpAddress` 조건과 AWS전체 `aws:SourceIp` 조건 키인 조건 키를 사용합니다. 이 조건 키에 대한 자세한 내용은 [AWS 전역 조건 컨텍스트 키](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) 단원을 참조하세요. `aws:sourceIp` IPv4 값은 표준 CIDR 표기법을 사용합니다. 자세한 내용은 *IAM 사용자 설명서*의 [IP 주소 조건 연산자](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_IPAddress)를 참조합니다.

------
#### [ JSON ]

****  

```
{
    "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 서비스 허용
<a name="IAM_service_linked"></a>

다음 리포지토리 정책은 해당 서비스와 통합하는 데 필요한 Amazon ECR API 작업에 대한 AWS CodeBuild 액세스를 허용합니다. 다음 예제를 사용할 경우 `aws:SourceArn` 및 `aws:SourceAccount` 조건 키를 사용하여 이러한 권한을 수임할 수 있는 리소스의 범위를 지정해야 합니다. 자세한 내용은 *AWS CodeBuild 사용 설명서*의 [CodeBuild 용 Amazon ECR 예시](https://docs.aws.amazon.com/codebuild/latest/userguide/sample-ecr.html)를 참조하세요.

------
#### [ JSON ]

****  

```
{
   "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"
            }
         }
      }
   ]
}
```

------

# Amazon ECR의 프라이빗 리포지토리 정책 설명 설정
<a name="set-repository-policy"></a>

아래 단계에 AWS Management Console 따라의 리포지토리에 액세스 정책 설명을 추가할 수 있습니다. 리포지토리마다 정책 설명을 여러 개 추가할 수 있습니다. 예시 정책은 [Amazon ECR의 프라이빗 리포지토리 정책 예제](repository-policy-examples.md) 섹션을 참조하세요.

**중요**  
Amazon ECR의 요구 사항에 따라 사용자가 레지스트리에 대해 인증하고 Amazon ECR 리포지토리에서 이미지를 푸시 또는 풀하기 전에 IAM 정책을 통해 `ecr:GetAuthorizationToken` API에 호출을 할 권한이 있어야 합니다. Amazon ECR은 다양한 수준에서 사용자 액세스를 제어하는 관리형 IAM 정책을 몇 가지 제공합니다. 자세한 내용은 [Amazon Elastic Container Registry 자격 증명 기반 정책 예제](security_iam_id-based-policy-examples.md) 단원을 참조하십시오.

**리포지토리 정책 설명을 설정하려면**

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

1. 탐색 모음에서 정책 설명을 설정할 리포지토리가 들어 있는 리전을 선택합니다.

1. 탐색 창에서 **리포지토리**를 선택합니다.

1. **리포지토리(Repositories)** 페이지에서 리포지토리 콘텐츠를 보려면 정책 설명을 설정할 리포지토리를 선택합니다.

1. 리포지토리 이미지 목록 보기의 탐색 창에서**권한(Permissions)**, **편집(Edit)**을 선택합니다.
**참고**  
탐색 창에 **권한(Permissions)** 옵션이 표시되지 않으면 리포지토리 이미지 목록 보기에 있는지 확인합니다.

1. **권한 편집(Edit permissions)** 페이지에서 **설명문 추가(Add statement)**를 선택합니다.

1. **설명문 이름(Statement name)**에 설명문 이름을 입력합니다.

1. **효과(Effect)**에서 정책 설명문 결과가 허용 또는 명시적 거부인지 여부를 선택합니다.

1. **보안 주체(Principal)**에서 정책 설명을 적용할 범위를 선택합니다. 자세한 내용은 *IAM 사용 설명서*의 [AWS JSON 정책 요소: 보안 주체](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)를 참조하세요.
   + **모든 사람(\$1)** 확인란을 선택하여 인증된 모든 AWS 사용자에게 문을 적용할 수 있습니다.
   + 정책 설명을 특정 서비스에 적용하려면 **서비스 보안 주체(Service principal)**에서 서비스 보안 주체(예: `ecs.amazonaws.com`)를 지정합니다.
   + **AWS 계정 IDs** AWS 계정 번호(예: `111122223333`)를 지정하여 특정 AWS 계정의 모든 사용자에게 문을 적용합니다. 쉼표로 구분된 목록을 사용하여 여러 계정을 지정할 수 있습니다.
**중요**  
권한을 부여하려는 계정에는 리포지토리 정책을 만드는 리전이 활성화되어 있어야 합니다. 그렇지 않으면 오류가 발생합니다.
   + **IAM 엔터티**의 경우 AWS 계정에서 문을 적용할 역할 또는 사용자를 선택합니다.
**참고**  
현재에서 지원되지 않는 보다 복잡한 리포지토리 정책의 AWS Management Console경우 [https://docs.aws.amazon.com/cli/latest/reference/ecr/set-repository-policy.html](https://docs.aws.amazon.com/cli/latest/reference/ecr/set-repository-policy.html) AWS CLI 명령을 사용하여 정책을 적용할 수 있습니다.

1. **작업(Actions)**의 경우 개별 API 작업 목록에서 정책 설명을 적용해야 하는 Amazon ECR API 작업의 범위를 선택합니다.

1. 완료되면 **저장(Save)**을 선택하여 정책을 설정합니다.

1. 추가할 각 리포지토리에 대해 이전 단계를 반복합니다.

# Amazon ECR에서 프라이빗 리포지토리 태그 지정
<a name="ecr-using-tags"></a>

Amazon ECR 리포지토리를 관리하는 데 도움이 되도록 AWS 리소스 *태그를* 사용하여 신규 또는 기존 Amazon ECR 리포지토리에 자체 메타데이터를 할당할 수 있습니다. 예를 들어, 계정의 Amazon ECR 리포지토리에 대한 태그 집합을 정의하여 각 리포지토리의 소유자를 추적할 수 있습니다.

## 태그 기본 사항
<a name="tag-basics"></a>

태그는 Amazon ECR에는 의미가 없으며 엄격하게 문자열로 해석됩니다. 태그가 리소스에 자동으로 할당되는 것은 아닙니다. 태그 키와 값을 편집할 수 있으며 언제든지 리소스에서 태그를 제거할 수 있습니다. 태그의 값을 빈 문자열로 설정할 수 있지만 태그의 값을 Null로 설정할 수는 없습니다. 해당 리소스에 대해 키가 기존 태그와 동일한 태그를 추가하는 경우 새 값이 이전 값을 덮어씁니다. 리소스를 삭제하면 리소스에 대한 모든 태그도 삭제됩니다.

Amazon ECR 콘솔, AWS CLI및 Amazon ECR API를 사용하여 태그로 작업할 수 있습니다.

 AWS Identity and Access Management (IAM)를 사용하면 AWS 계정에서 태그를 생성, 편집 또는 삭제할 권한이 있는 사용자를 제어할 수 있습니다. IAM 정책의 태그에 대한 자세한 내용은 [태그 기반 액세스 제어 사용](ecr-supported-iam-actions-tagging.md) 섹션을 참조하세요.

## 리소스에 결제용 태깅
<a name="tag-resources-for-billing"></a>

Amazon ECR 리포지토리에 추가하는 태그는 비용 및 사용 보고서에서 활성화 후 비용 할당을 검토할 때 유용합니다. 자세한 내용은 [Amazon ECR 사용 보고서](usage-reports.md) 단원을 참조하십시오.

결합된 리소스의 비용을 확인하려면 태그 키 값을 동일한 리소스에 따라 결제 정보를 구성할 수 있습니다. 예를 들어, 특정 애플리케이션 이름으로 여러 리소스에 태그를 지정한 다음 결제 정보를 구성하여 여러 서비스에 걸친 해당 애플리케이션의 총 비용을 볼 수 있습니다. 태그를 사용한 비용 할당 보고서 설정에 대한 자세한 내용은 *AWS Billing 사용 설명서*에서 [월간 비용 할당 보고서](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/configurecostallocreport.html)를 참조하세요.

**참고**  
방금 보고서를 활성화한 경우, 24시간 후에 이번 달의 데이터를 볼 수 있습니다.

# Amazon ECR에서 프라이빗 리포지토리에 태그 추가
<a name="adding-tags-repositories"></a>

프라이빗 리포지토리에 태그를 추가할 수 있습니다.

태그의 이름 및 모범 사례에 대한 자세한 내용은 * AWS 리소스 태그* [지정 사용 설명서의 태그 이름 지정 제한 및 요구 사항](https://docs.aws.amazon.com//tag-editor/latest/userguide/tagging.html#tag-conventions) 및 [모범 사례를](https://docs.aws.amazon.com//tag-editor/latest/userguide/tagging.html#tag-best-practices) 참조하세요.

## 리포지토리에 태그 추가(AWS Management Console)
<a name="tag-resources-console"></a>

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

1. 탐색 모음에서 사용할 리전을 선택합니다.

1. 탐색 창에서 **리포지토리(Repositories)**를 선택합니다.

1. **리포지토리** 페이지에서 태그를 지정하려는 리포지토리 옆의 확인란을 선택합니다.

1. **작업** 메뉴에서 **리포지토리 태그**를 선택합니다.

1. **리포지토리 태그** 페이지에서 **태그 추가**, **태그 추가**를 선택합니다.

1. **리포지토리 태그 편집** 페이지에서 각 태그의 키와 값을 지정한 다음 **저장**을 선택합니다.

## 리포지토리(AWS CLI 또는 API)에 태그 추가
<a name="tag-resources-api-sdk"></a>

 AWS CLI 또는 API를 사용하여 하나 이상의 태그를 추가하거나 덮어쓸 수 있습니다.
+ AWS CLI - [태그-리소](https://docs.aws.amazon.com/cli/latest/reference/ecr/tag-resource.html)스
+ API 작업 - [TagResource](https://docs.aws.amazon.com/AmazonECR/latest/APIReference/API_TagResource.html)

다음 예제에서는 AWS CLI를 사용하여 태그를 추가하는 방법을 보여줍니다.

**예제 1: 리포지토리에 태그 지정**  
다음 명령은 리포지토리에 태그를 지정합니다.

```
aws ecr tag-resource \
     --resource-arn arn:aws:ecr:region:account_id:repository/repository_name \
     --tags Key=stack,Value=dev
```

**예제 2: 여러 태그로 리포지토리에 태그 지정**  
다음 명령은 리포지토리에 세 개의 태그를 추가합니다.

```
aws ecr tag-resource \
     --resource-arn arn:aws:ecr:region:account_id:repository/repository_name \
     --tags Key=key1,Value=value1 Key=key2,Value=value2 Key=key3,Value=value3
```

**예제 3: 리포지토리의 태그 나열**  
다음 명령은 리포지토리와 연결된 태그를 나열합니다.

```
aws ecr list-tags-for-resource \
     --resource-arn arn:aws:ecr:region:account_id:repository/repository_name
```

**예제 4: 리포지토리 생성 및 태그 추가**  
다음 명령은 `test-repo`라는 이름의 리포지토리를 생성하며 키 `team` 및 값 `devs`가 있는 태그를 추가합니다.

```
aws ecr create-repository \
     --repository-name test-repo \
     --tags Key=team,Value=devs
```

# Amazon ECR의 프라이빗 리포지토리에서 태그 삭제
<a name="deleting-tags-repositories"></a>

프라이빗 리포지토리에서 태그를 삭제할 수 있습니다.

## 프라이빗 리포지토리에서 태그를 삭제하려면(AWS Management Console)
<a name="deleting-tags-repositories-console"></a>

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

1. 탐색 모음에서 사용할 리전을 선택합니다.

1. **리포지토리** 페이지에서 태그를 제거하려는 리포지토리 옆의 확인란을 선택합니다.

1. **작업** 메뉴에서 **리포지토리 태그**를 선택합니다.

1. **리포지토리 태그** 페이지에서 **편집**을 선택합니다.

1. **리포지토리 태그 편집** 페이지에서 삭제할 각 태그에 대해 **제거**를 선택하고 **저장**을 선택합니다.

## 프라이빗 리포지토리에서 태그를 삭제하려면(AWS CLI)
<a name="deleting-tags-repositories-cli"></a>

 AWS CLI 또는 API를 사용하여 하나 이상의 태그를 삭제할 수 있습니다.
+ AWS CLI - [untag-resource](https://docs.aws.amazon.com/cli/latest/reference/ecr/untag-resource.html)
+ API 작업 - [UntagResource](https://docs.aws.amazon.com/AmazonECR/latest/APIReference/API_UntagResource.html)

다음 예제에서는 AWS CLI를 사용하여 리포지토리에서 태그를 삭제하는 방법을 보여줍니다.

```
aws ecr untag-resource \
     --resource-arn arn:aws:ecr:region:account_id:repository/repository_name \
     --tag-keys tag_key
```