リポジトリポリシー - CodeArtifact

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

リポジトリポリシー

CodeArtifact は、リソースベースの権限を使用してアクセスをコントロールします。リソースベースの権限により、リポジトリにだれがアクセスでき、どのようなアクションを実行できるかを指定できます。デフォルトでは、リポジトリの所有者のみリポジトリにアクセスできます。他の IAM プリンシパルがリポジトリにアクセスできるようにするポリシードキュメントを適用することができます。

詳細については、[リソースベースのポリシー] および [アイデンティティベースおよびリソースベースのポリシー] を参照してください。

読み取りアクセスを許可するリソースポリシーを作成する

リソースポリシーは、JSON 形式のテキストファイルです。ファイルには、プリンシパル (アクター)、ひとつ以上のアクション、およびエフェクト (AllowまたはDeny) を指定しなければいけません。例えば、次のリソースポリシーは、アカウントに、リポジトリからパッケージをダウンロードする123456789012許可を付与します。

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

ポリシーは、それが添付されているリポジトリに対する操作についてのみ評価されるため、リソースを指定する必要はありません。リソースが暗示されているので、Resource*に設定できます。パッケージマネージャーがこのリポジトリからパッケージをダウンロードするには、クロスアカウントアクセス用のドメインポリシーも作成する必要があります。ドメインポリシーは、少なくとも codeartifact:GetAuthorizationToken 権限をプリンシパルに付与する必要があります。クロスアカウントアクセス用のフルドメインポリシーの例については、「ドメインポリシーの例」を参照してください。

注記

codeartifact:ReadFromRepositoryアクションは、リポジトリリソースでのみ使用できます。パッケージの Amazon リソースネーム (ARN) を、リポジトリ内のパッケージのサブセットへの読み取りアクセスを許可するcodeartifact:ReadFromRepositoryアクションとするリソースとして指定することはできません。特定のプリンシパルは、リポジトリ内のすべてのパッケージを読み取れるか、あるいは、全く読み取れません。

リポジトリで指定されるアクションはReadFromRepositoryのみであるため、アカウント1234567890のユーザーとロールは、リポジトリからパッケージをダウンロードできます。ただし、他のアクション (パッケージ名やバージョンの一覧表示など) を実行することはできません。通常、ReadFromRepositoryに追加して以下のポリシーに権限を付与します。これは、リポジトリからパッケージをダウンロードするユーザーが、他の方法でもリポジトリと関わる必要があるためです。

JSON
{ "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をコールすると、権限を評価するときに、リポジトリのリソースポリシーは無視されます。これにより、ドメインの所有者がリポジトリから自分自身をロックアウトすることができなくなり、リソースポリシーを更新することを防ぐことができます。

注記

put-repository-permissions-policy を呼び出すときにリソースポリシーが無視されるため、リソースポリシーを使用してリポジトリのリソースポリシーを更新するアクセス許可を別の AWS アカウントに付与することはできません。

サンプル出力:

{ "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コマンドを使用して、ポリシードキュメントの既存のバージョンを読み込みます。読みやすいように出力をフォーマットするには、Pythonjson.toolモジュールと共に--outputおよび--query policy.documentを使用してください。

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

サンプル出力:

JSON
{ "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ポリシーのセクションで使用してください。例えば、アカウント 123456789012 内の IAM ユーザー bob に読み取りアクセスを付与するには、以下を使用します。

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

パッケージへの書き込みアクセスを許可する

codeartifact:PublishPackageVersionアクションは、パッケージの新しいバージョンを公開するための権限をコントロールするために使用されます。このアクションで使用されるリソースは、パッケージである必要があります。CodeArtifact パッケージ ARN の形式は次のとおりです。

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

次の例は、ドメインmy_domainmy_repoリポジトリでスコープ@parityと名前uiを持つ npm パッケージの ARN を示しています。

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

スコープを持たない npm パッケージの ARN には、ネームスペースフィールドに空の文字列になっています。例えば、スコープがないパッケージで、ドメインmy_domainmy_repoリポジトリに名前reactのある ARN は以下のようになります。

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

以下のポリシーは、my_repoリポジトリ中の@parity/uiのバージョンを公開する権限をアカウント123456789012に付与します。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Action": [ "codeartifact:PublishPackageVersion" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Resource": "arn:aws:codeartifact:us-east-1:111122223333:package/my_domain/my_repo/npm/parity/ui" } ] }
重要

Maven および NuGet パッケージのバージョンを公開する権限を付与するには、次の権限を codeartifact:PublishPackageVersion に加えて追加します。

  1. NuGet:codeartifact:ReadFromRepositoryおよびリポジトリリソースを指定します。

  2. Mavencodeartifact:PutPackageMetadata

このポリシーでは、リソースの一部としてドメインとリポジトリを指定するため、そのリポジトリに添付されている場合にのみ公開が許可されます。

リポジトリへの書き込み権限の付与

ワイルドカードを使用して、リポジトリ内のすべてのパッケージに対して書き込む許可を付与できます。例えば、次のポリシーを使用して、my_repoリポジトリのすべてのパッケージに書き込む許可をアカウントに付与します。

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

リポジトリポリシーとドメインポリシーの相互作用

CodeArtifact では、ドメインおよびリポジトリに対してリソースポリシーを設定できます。リソースポリシーはオプションです。各ドメインには 1 つのポリシーを設定し、ドメイン内の各リポジトリには独自のリポジトリポリシーを設定できます。ドメインポリシーとリポジトリポリシーの両方が存在する場合、CodeArtifact リポジトリへのリクエストが許可されるか拒否されるかを判断するときに、両方が評価されます。ドメインポリシーとリポジトリポリシーは、次のルールを使用して評価されます。

  • ListDomainsListRepositories などのアカウント単位のオペレーションを実行する場合、リソースポリシーは評価されません。

  • DescribeDomainListRepositoriesInDomain などのドメイン単位のオペレーションを実行する場合、リポジトリポリシーは評価されません。

  • PutDomainPermissionsPolicy を実行する場合、ドメインポリシーは評価されません。なお、このルールはロックアウトを防ぐためのものです。

  • PutRepositoryPermissionsPolicy を実行する場合、ドメインポリシーは評価されますが、リポジトリポリシーは評価されません。

  • いずれかのポリシーに明示的な Deny がある場合、他のポリシーで Allow が指定されていても、それより優先されます。

  • 明示的な Allow は、いずれか 1 つのリソースポリシーにあれば十分です。リポジトリポリシーでアクションを省略していても、ドメインポリシーでそのアクションが許可されていれば、暗黙的な Deny にはなりません。

  • リソースポリシーのどれもそのアクションを許可していない場合、結果は暗黙的な Deny となります。ただし、呼び出し元プリンシパルのアカウントがドメイン所有者またはリポジトリ管理者アカウントであり、さらにアイデンティティベースポリシーでそのアクションが許可されている場合を除きます。

リソースポリシーは、単一アカウントのシナリオ、つまりリポジトリへアクセスするために使用する呼び出し元アカウントが、ドメイン所有者であり、かつリポジトリ管理者アカウントと同じである場合、アクセス許可を付与するために必須ではありません。呼び出し元アカウントがドメイン所有者またはリポジトリ管理者アカウントと同じではないクロスアカウントの場合、アクセスを付与するためにリソースポリシーが必須となります。CodeArtifact のクロスアカウントアクセスは、「IAM ユーザーガイド」の「クロスアカウントリクエストが許可されているかどうかを確認」に記載のクロスアカウントアクセスの一般的な IAM ルールに従います。

  • ドメイン所有者アカウントのプリンシパルは、アイデンティティベースポリシーを通じてドメイン内の任意のリポジトリへのアクセスを許可される場合があります。なお、この場合、ドメインポリシーまたはリポジトリポリシーに明示的な Allow を記載する必要はありません。

  • ドメイン所有者アカウントのプリンシパルは、ドメインポリシーまたはリポジトリポリシーを通じて任意のリポジトリへのアクセスを許可される場合があります。なお、この場合、アイデンティティベースポリシーに明示的な Allow を記載する必要はありません。

  • リポジトリ管理者アカウントのプリンシパルは、アイデンティティベースポリシーを通じてリポジトリへのアクセスを許可される場合があります。なお、この場合、ドメインポリシーまたはリポジトリポリシーに明示的な Allow を記載する必要はありません。

  • 別アカウントに属するプリンシパルがアクセスを許可されるのは、少なくとも 1 つのリソースポリシーおよび少なくとも 1 つのアイデンティティベースポリシーでそのアクションが許可されていて、さらにいずれのポリシーにも明示的な Deny が存在しない場合に限られます。