

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

# 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. 추가할 각 리포지토리에 대해 이전 단계를 반복합니다.