

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

# 도메인 정책
<a name="domain-policies"></a>

CodeArtifact는 리소스 기반 권한을 사용한 액세스 제어를 지원합니다. 리소스 기반 권한을 사용하면 리소스에 액세스할 수 있는 사람과 이러한 사람이 리소스를 대상으로 수행할 수 있는 작업을 지정할 수 있습니다. 기본적으로는 도메인을 소유하는 AWS 계정만 도메인에서 리포지토리를 생성하고 리포지토리에 액세스할 수 있습니다. 사용자는 다른 IAM 보안 주체의 도메인 액세스를 허용하는 정책 문서를 도메인에 적용할 수 있습니다.

자세한 내용은 [정책 및 권한](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)과 [자격 증명 기반 정책 및 리소스 기반 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)을 참조하세요.

**Topics**
+ [도메인에 대한 크로스 계정 액세스 활성화](#enabling-cross-acount-access-to-a-domain)
+ [도메인 정책 예제](#domain-policy-example)
+ [를 사용한 도메인 정책 예제 AWS Organizations](#domain-policy-example-with-aws-organizations)
+ [도메인 정책 설정](#set-domain-policy)
+ [도메인 정책 읽기](#reading-a-domain-policy)
+ [도메인 정책 삭제](#deleting-a-domain-policy)

## 도메인에 대한 크로스 계정 액세스 활성화
<a name="enabling-cross-acount-access-to-a-domain"></a>

리소스 정책은 JSON 형식의 텍스트 파일입니다. 파일은 보안 주체(액터), 하나 이상의 작업과 단일 효과(`Allow`또는`Deny`)를 지정해야 합니다. 다른 계정이 소유한 도메인에 리포지토리를 만들려면, 보안 주체는 *도메인* 리소스에 대한 `CreateRepository` 권한을 부여받아야 합니다.

예를 들어 다음 리소스 정책은 도메인에 리포지토리를 만들 수 있는 권한을 `123456789012` 계정에 부여합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "codeartifact:CreateRepository"
            ],
            "Effect": "Allow",
            "Principal": {
                 "AWS": "arn:aws:iam::123456789012:root"
            },
            "Resource": "*"
        }
    ]
}
```

------

태그가 있는 리포지토리를 만들 수 있게 하려면 `codeartifact:TagResource` 권한을 포함해야 합니다. 이렇게 하면 도메인과 도메인에 있는 모든 리포지토리에 태그를 추가할 수 있는 액세스 권한도 계정에 부여됩니다.

도메인 정책은 도메인에 대한 모든 작업과 도메인 내의 모든 리소스에 대해 평가됩니다. 즉, 도메인 정책을 사용하여 도메인의 리포지토리 및 패키지에 권한을 적용할 수 있습니다. `Resource` 요소가 `*`로 설정되면 해당 명령문이 도메인의 모든 리소스에 적용됩니다. 예를 들어 위의 정책이 허용된 IAM 작업 목록에 `codeartifact:DescribeRepository`를 포함한 경우 정책은 도메인의 모든 리포지토리에서 `DescribeRepository` 호출을 허용합니다. 도메인 정책은 `Resource` 요소의 특정 리소스 ARN을 사용하여 도메인의 특정 리소스에 권한을 적용하는 데 사용할 수 있습니다.

**참고**  
도메인 및 리포지토리 정책을 모두 사용하여 권한을 구성할 수 있습니다. 두 정책이 모두 있으면 두 정책이 모두 평가되며 두 정책에서 허용하는 경우 작업이 허용됩니다. 자세한 내용은 [리포지토리와 도메인 정책 간의 상호 작용](repo-policies.md#interaction-repo-domain-policies) 단원을 참조하십시오.

다른 계정이 소유한 도메인에 있는 패키지에 액세스하려면, 보안 주체는 *도메인 리소스*에 대한 `GetAuthorizationToken` 권한을 부여받아야 합니다. 이렇게 하면 도메인 소유자는 도메인 내 리포지토리의 콘텐츠를 읽을 수 있는 계정을 제어할 수 있습니다.

예를 들어 다음 리소스 정책은 도메인 내 모든 리포지토리에 대한 인증 토큰을 검색할 수 있는 권한을 `123456789012` 계정에 부여합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "codeartifact:GetAuthorizationToken"
            ],
            "Effect": "Allow",
            "Principal": {
                 "AWS": "arn:aws:iam::123456789012:root"
            },
            "Resource": "*"
        }
    ]
}
```

------

**참고**  
리포지토리 엔드포인트에서 패키지를 가져오려는 보안 주체는 도메인에 대한 `ReadFromRepository` 권한 외에 리포지토리 리소스에 대한 `GetAuthorizationToken` 권한도 부여받아야 합니다. 마찬가지로, 리포지토리 엔드포인트에 패키지를 게시하려는 보안 주체는 `GetAuthorizationToken`에 더해 `PublishPackageVersion` 권한도 부여받아야 합니다.  
`ReadFromRepository` 및 `PublishPackageVersion` 권한에 대한 자세한 내용은 [리포지토리 정책](repo-policies.md)을 참조하세요.

## 도메인 정책 예제
<a name="domain-policy-example"></a>

여러 계정이 도메인을 사용하는 경우, 도메인을 완전히 사용할 수 있도록 계정에 기본 권한 모음을 부여해야 합니다. 다음 리소스 정책에는 도메인의 완전한 사용을 허용하는 권한 모음이 나열되어 있습니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "BasicDomainPolicy",
            "Action": [
                "codeartifact:GetDomainPermissionsPolicy",
                "codeartifact:ListRepositoriesInDomain",
                "codeartifact:GetAuthorizationToken",
                "codeartifact:DescribeDomain",
                "codeartifact:CreateRepository"
            ],
            "Effect": "Allow",
            "Resource": "*",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:root"
            }
        }
    ]
}
```

------

**참고**  
도메인과 도메인의 모든 리포지토리를 단일 계정에서 소유하며 해당 계정에서만 사용해야 한다면 도메인 정책을 만들지 않아도 됩니다.

## 를 사용한 도메인 정책 예제 AWS Organizations
<a name="domain-policy-example-with-aws-organizations"></a>

다음과 같이 `aws:PrincipalOrgID` 조건 키를 사용하여 조직 내 모든 계정에서 CodeArtifact 도메인에 대한 액세스 권한을 부여할 수 있습니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Sid": "DomainPolicyForOrganization",
        "Effect": "Allow",
        "Principal": "*",
        "Action": [
             "codeartifact:GetDomainPermissionsPolicy",
             "codeartifact:ListRepositoriesInDomain",
             "codeartifact:GetAuthorizationToken",
             "codeartifact:DescribeDomain",
             "codeartifact:CreateRepository"
        ],
        "Resource": "*",
        "Condition": {
            "StringEquals": { "aws:PrincipalOrgID":["o-xxxxxxxxxxx"]}
        }
    }
}
```

------

`aws:PrincipalOrgID` 조건 키 사용에 대한 자세한 내용은 *IAM 사용 설명서*의 [AWS 글로벌 조건 컨텍스트 키](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)를 참조하세요.

## 도메인 정책 설정
<a name="set-domain-policy"></a>

`put-domain-permissions-policy` 명령을 사용하여 정책을 도메인에 연결합니다.

```
aws codeartifact put-domain-permissions-policy --domain my_domain --domain-owner 111122223333 \
 --policy-document file://</PATH/TO/policy.json>
```

`put-domains-permissions-policy`를 호출하면 권한을 평가할 때 도메인의 리소스 정책이 무시됩니다. 이렇게 하면 도메인 소유자가 자기 자신을 도메인 외부에 고립되게 해 리소스 정책을 업데이트하지 못하는 일을 방지할 수 있습니다.

**참고**  
 put-domain-permissions-policy를 호출할 때 리소스 정책이 무시되므로 리소스 정책을 사용하여 도메인의 리소스 정책을 업데이트할 수 있는 권한을 다른 AWS 계정에 부여할 수 없습니다.

샘플 출력:

```
{
    "policy": {
        "resourceArn": "arn:aws:codeartifact:region-id:111122223333:domain/my_domain",
        "document": "{ ...policy document content...}",
        "revision": "MQlyyTQRASRU3HB58gBtSDHXG7Q3hvxxxxxxx="
    }
}
```

명령 결과에는 도메인 리소스의 Amazon 리소스 이름(ARN), 정책 문서의 전체 내용과 개정 식별자가 포함됩니다. `--policy-revision` 옵션을 사용하면 개정 식별자를 `put-domain-permissions-policy`에 전달할 수 있습니다. 이렇게 하면 문서의 알려진 개정은 덮어쓰고, 다른 작성자가 설정한 최신 버전은 덮어쓰지 않게 됩니다.

## 도메인 정책 읽기
<a name="reading-a-domain-policy"></a>

정책 문서의 기존 버전을 읽으려면 `get-domain-permissions-policy` 명령을 사용합니다. 읽기 쉬운 출력 형식을 지정하려면 다음과 같이 `--output` 및 `--query policy.document` 모두를 Python `json.tool` 모듈과 함께 사용하세요.

```
aws codeartifact get-domain-permissions-policy --domain my_domain --domain-owner 111122223333 \
   --output text --query policy.document | python -m json.tool
```

샘플 출력:

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "BasicDomainPolicy",
            "Action": [
                "codeartifact:GetDomainPermissionsPolicy",
                "codeartifact:ListRepositoriesInDomain",
                "codeartifact:GetAuthorizationToken",
                "codeartifact:CreateRepository"
            ],
            "Effect": "Allow",
            "Resource": "*",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            }
        }
    ]
}
```

------

## 도메인 정책 삭제
<a name="deleting-a-domain-policy"></a>

`delete-domain-permissions-policy` 명령을 사용하여 도메인에서 정책을 삭제합니다.

```
aws codeartifact delete-domain-permissions-policy --domain my_domain --domain-owner 111122223333
```

출력의 형식은 `get-domain-permissions-policy` 및 `delete-domain-permissions-policy` 명령의 형식과 동일합니다.