리포지토리 정책 - CodeArtifact

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

리포지토리 정책

CodeArtifact 는 리소스 기반 권한을 사용하여 액세스를 제어합니다. 리소스 기반 권한을 사용하면 리포지토리에 액세스할 수 있는 대상 및 이러한 대상이 리포지토리에서 수행할 수 있는 작업을 지정할 수 있습니다. 기본적으로 리포지토리 소유자만 리포지토리에 액세스할 수 있습니다. 다른 IAM 보안 주체가 리포지토리에 액세스할 수 있도록 허용하는 정책 문서를 적용할 수 있습니다.

자세한 내용은 리소스 기반 정책자격 증명 기반 정책 및 리소스 기반 정책을 참조하세요.

리소스 정책을 생성하여 읽기 액세스 권한 부여

리소스 정책은 JSON 형식의 텍스트 파일입니다. 파일은 보안 주체(액터), 하나 이상의 작업과 단일 효과(Allow또는Deny)를 지정해야 합니다. 예를 들어 다음 리소스 정책은 리포지토리에서 패키지를 다운로드할 수 있는 123456789012 권한을 계정에 부여합니다.

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

정책은 정책이 연결된 리포지토리 대상 작업에 대해서만 평가되므로, 리소스를 지정하지 않아도 됩니다. 리소스는 암시적이기 때문에 Resource*로 설정할 수 있습니다. 패키지 관리자가 이 리포지토리에서 패키지를 다운로드하려면 크로스 계정 액세스를 위한 도메인 정책도 만들어야 합니다. 도메인 정책은 보안 주체에게 최소한 codeartifact:GetAuthorizationToken 권한을 부여해야 합니다. 크로스 계정 액세스 권한을 부여하는 전체 도메인 정책 예제는 도메인 정책 예제 섹션을 참조하세요.

참고

codeartifact:ReadFromRepository 작업은 리포지토리 리소스에서만 사용할 수 있습니다. 리포지토리의 패키지 하위 집합에 대한 읽기 액세스를 허용하는 작업codeartifact:ReadFromRepository으로 패키지의 Amazon 리소스 이름(ARN)을 를 리소스로 넣을 수 없습니다. 지정된 보안 주체는 리포지토리의 모든 패키지를 읽을 수도 있고 아무 패키지도 읽지 않을 수 있습니다.

리포지토리에서 지정된 작업은 ReadFromRepository뿐이므로, 계정 1234567890의 사용자 및 역할은 리포지토리에서 패키지를 다운로드할 수 있습니다. 하지만 다른 작업(예: 패키지 이름 및 버전 나열)은 수행할 수 없습니다. 리포지토리에서 패키지를 다운로드하는 사용자는 다른 방법으로도 패키지와 상호 작용해야 하니, 대부분의 경우 사용자는 ReadFromRepository와 다음 정책에서 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "codeartifact:DescribePackageVersion", "codeartifact:DescribeRepository", "codeartifact:GetPackageVersionReadme", "codeartifact:GetRepositoryEndpoint", "codeartifact:ListPackages", "codeartifact:ListPackageVersions", "codeartifact:ListPackageVersionAssets", "codeartifact:ListPackageVersionDependencies", "codeartifact:ReadFromRepository" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Resource": "*" } ] }

정책 설정

정책 문서를 만든 후에는 put-repository-permissions-policy 명령을 사용하여 정책 문서를 리포지토리에 첨부합니다.

aws codeartifact put-repository-permissions-policy --domain my_domain --domain-owner 111122223333 \ --repository my_repo --policy-document file:///PATH/TO/policy.json

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

참고

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

샘플 출력:

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

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

정책 읽기

get-repository-permissions-policy 명령을 사용하면 정책 문서의 기존 버전을 읽을 수 있습니다. 읽기 쉬운 출력 형식을 지정하려면 --output--query policy.document를 Python json.tool 모듈과 함께 사용하세요.

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

샘플 출력:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": [ "codeartifact:DescribePackageVersion", "codeartifact:DescribeRepository", "codeartifact:GetPackageVersionReadme", "codeartifact:GetRepositoryEndpoint", "codeartifact:ListPackages", "codeartifact:ListPackageVersions", "codeartifact:ListPackageVersionAssets", "codeartifact:ListPackageVersionDependencies", "codeartifact:ReadFromRepository" ], "Resource": "*" } ] }

정책 삭제

delete-repository-permissions-policy 명령을 사용하여 리포지토리에서 정책을 삭제합니다.

aws codeartifact delete-repository-permissions-policy --domain my_domain --domain-owner 111122223333 \ --repository my_repo

출력의 형식은 get-repository-permissions-policy 명령의 형식과 동일합니다.

보안 주체에게 읽기 액세스 권한 부여

계정의 루트 사용자를 정책 문서의 보안 주체로 지정하면, 계정의 모든 사용자와 역할에 액세스 권한을 부여하게 됩니다. 선택한 사용자 또는 역할로 액세스를 제한하려면 정책의 ARN Principal 섹션에서 를 사용합니다. 예를 들어 다음을 사용하여 bob 계정 의 IAM 사용자에게 읽기 액세스 권한을 부여합니다123456789012.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "codeartifact:ReadFromRepository" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/bob" }, "Resource": "*" } ] }

패키지에 쓰기 액세스 권한 부여

codeartifact:PublishPackageVersion 작업은 패키지의 새 버전을 게시할 권한을 제어하는 용도로 사용합니다. 이 작업에 사용하는 리소스는 반드시 패키지여야 합니다. CodeArtifact 패키지의 형식은 다음과 ARNs 같습니다.

arn:aws:codeartifact:region-id:111122223333:package/my_domain/my_repo/package-format/package-namespace/package-name

다음 예제는 도메인 의 ARN my_repo리포지토리ui에 범위@parity와 이름이 있는 npm 패키지의 를 보여줍니다my_domain.

arn:aws:codeartifact:region-id:111122223333:package/my_domain/my_repo/npm/parity/ui

범위가 없는 npm 패키지ARN의 에는 네임스페이스 필드의 빈 문자열이 있습니다. 예를 들어 범위가 없고 도메인 의 ARN my_repo리포지토리react에 이름이 있는 패키지의 경우 다음과 같습니다my_domain.

arn:aws:codeartifact:region-id:111122223333:package/my_domain/my_repo/npm//react

다음 정책은 my_repo 리포지토리에 @parity/ui의 버전을 게시할 수 있는 123456789012 권한을 계정에 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "codeartifact:PublishPackageVersion" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Resource": "arn:aws:codeartifact:region-id:111122223333:package/my_domain/my_repo/npm/parity/ui" } ] }
중요

Maven 및 NuGet 패키지 버전을 게시할 수 있는 권한을 부여하려면 외에도 다음 권한을 추가합니다codeartifact:PublishPackageVersion.

  1. NuGet: codeartifact:ReadFromRepository 및 리포지토리 리소스 지정

  2. Maven: codeartifact:PutPackageMetadata

이 정책은 도메인과 리포지토리를 리소스의 일부로 지정하기 때문에, 해당 리포지토리에 연결된 경우에만 게시를 허용합니다.

리포지토리에 대한 쓰기 액세스 권한 부여

와일드카드를 사용하여 리포지토리에 있는 모든 패키지에 쓰기 권한을 부여할 수 있습니다. 예를 들어 다음 정책을 사용하면 my_repo 리포지토리에 있는 모든 패키지에 대한 쓰기 권한을 계정에 부여할 수 있습니다.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "codeartifact:PublishPackageVersion" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Resource": "arn:aws:codeartifact:region-id:111122223333:package/my_domain/my_repo/*" } ] }

리포지토리와 도메인 정책 간의 상호 작용

CodeArtifact 는 도메인 및 리포지토리에 대한 리소스 정책을 지원합니다. 리소스 정책은 선택 사항입니다. 각 도메인에는 하나의 정책이 있을 수 있으며 도메인의 각 리포지토리에는 자체 리포지토리 정책이 있을 수 있습니다. 도메인 정책과 리포지토리 정책이 모두 있는 경우 리포지토리에 대한 CodeArtifact 요청이 허용되는지 거부되는지 여부를 결정할 때 두 정책이 모두 평가됩니다. 도메인 및 리포지토리 정책은 다음 규칙을 사용하여 평가하고 있습니다.

  • ListDomains 또는 와 같은 계정 수준 작업을 수행할 때 리소스 정책은 평가되지 않습니다ListRepositories.

  • DescribeDomain 또는 와 같은 도메인 수준 작업을 수행할 때 리포지토리 정책은 평가되지 않습니다ListRepositoriesInDomain.

  • 를 수행할 때는 도메인 정책이 평가되지 않습니다PutDomainPermissionsPolicy. 이 규칙은 잠금을 방지합니다.

  • 도메인 정책은 를 수행할 때 평가되지만 PutRepositoryPermissionsPolicy리포지토리 정책은 평가되지 않습니다.

  • 정책의 명시적 거부는 다른 정책의 허용을 재정의합니다.

  • 명시적 허용은 하나의 리소스 정책에서만 필요합니다. 리포지토리 정책에서 작업을 생략해도 도메인 정책에서 작업을 허용하는 경우 암시적 거부가 발생하지 않습니다.

  • 리소스 정책에서 작업을 허용하지 않는 경우 호출 주체의 계정이 도메인 소유자 또는 리포지토리 관리자 계정이고 자격 증명 기반 정책에서 작업을 허용하지 않는 한 결과는 암시적 거부가 됩니다.

리소스 정책은 리포지토리에 액세스하는 데 사용되는 호출자 계정이 도메인 소유자 및 리포지토리 관리자 계정과 동일한 단일 계정 시나리오에서 액세스 권한을 부여하는 데 사용되는 경우 선택 사항입니다. 발신자의 계정이 도메인 소유자 또는 리포지토리 관리자 계정과 동일하지 않은 교차 계정 시나리오에서 리소스 정책은 액세스 권한을 부여해야 합니다. 의 교차 계정 액세스는 IAM 사용 설명서 에서 교차 계정 요청이 허용되는지 여부를 결정하는 데 설명된 교차 계정 액세스에 대한 일반 IAM 규칙을 CodeArtifact 따릅니다.

  • 도메인 소유자 계정의 보안 주체에게는 자격 증명 기반 정책을 통해 도메인의 모든 리포지토리에 대한 액세스 권한이 부여될 수 있습니다. 이 경우 도메인 또는 리포지토리 정책에는 명시적인 허용이 필요하지 않습니다.

  • 도메인 소유자 계정의 보안 주체에게는 도메인 또는 리포지토리 정책을 통해 모든 리포지토리에 대한 액세스 권한이 부여될 수 있습니다. 이 경우 자격 증명 기반 정책에서는 명시적인 허용이 필요하지 않습니다.

  • 리포지토리 관리자 계정의 보안 주체에게는 자격 증명 기반 정책을 통해 리포지토리에 대한 액세스 권한이 부여될 수 있습니다. 이 경우 도메인 또는 리포지토리 정책에는 명시적인 허용이 필요하지 않습니다.

  • 다른 계정의 보안 주체는 작업을 명시적으로 거부하는 정책 없이 하나 이상의 리소스 정책 및 하나 이상의 자격 증명 기반 정책에서 허용하는 경우에만 액세스 권한이 부여됩니다.