翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
リポジトリポリシー
CodeArtifact は、リソースベースの権限を使用してアクセスをコントロールします。リソースベースの権限により、リポジトリにだれがアクセスでき、どのようなアクションを実行できるかを指定できます。デフォルトでは、リポジトリの所有者のみリポジトリにアクセスできます。他の IAM プリンシパルがリポジトリにアクセスできるようにするポリシードキュメントを適用することができます。
詳細については、[リソースベースのポリシー] および [アイデンティティベースおよびリソースベースのポリシー] を参照してください。
読み取りアクセスを許可するリソースポリシーを作成する
リソースポリシーは、JSON 形式のテキストファイルです。ファイルには、プリンシパル (アクター)、ひとつ以上のアクション、およびエフェクト (AllowまたはDeny) を指定しなければいけません。例えば、次のリソースポリシーは、アカウントに、リポジトリからパッケージをダウンロードする123456789012許可を付与します。
ポリシーは、それが添付されているリポジトリに対する操作についてのみ評価されるため、リソースを指定する必要はありません。リソースが暗示されているので、Resourceを*に設定できます。パッケージマネージャーがこのリポジトリからパッケージをダウンロードするには、クロスアカウントアクセス用のドメインポリシーも作成する必要があります。ドメインポリシーは、少なくともプリンシパルにアクセスcodeartifact:GetAuthorizationToken許可を付与する必要があります。クロスアカウントアクセス用のフルドメインポリシーの例については、「ドメインポリシーの例」を参照してください。
注記
codeartifact:ReadFromRepositoryアクションは、リポジトリリソースでのみ使用できます。パッケージの Amazon リソースネーム (ARN) を、リポジトリ内のパッケージのサブセットへの読み取りアクセスを許可するcodeartifact:ReadFromRepositoryアクションとするリソースとして指定することはできません。特定のプリンシパルは、リポジトリ内のすべてのパッケージを読み取れるか、あるいは、全く読み取れません。
リポジトリで指定されるアクションはReadFromRepositoryのみであるため、アカウント1234567890のユーザーとロールは、リポジトリからパッケージをダウンロードできます。ただし、他のアクション (パッケージ名やバージョンの一覧表示など) を実行することはできません。通常、ReadFromRepositoryに追加して以下のポリシーに権限を付与します。これは、リポジトリからパッケージをダウンロードするユーザーが、他の方法でもリポジトリと関わる必要があるためです。
ポリシーの設定
ポリシードキュメントを作成したら、put-repository-permissions-policyコマンドでリポジトリにアタッチします。
aws codeartifact put-repository-permissions-policy --domainmy_domain--domain-owner111122223333\ --repositorymy_repo--policy-documentfile:///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 --domainmy_domain--domain-owner111122223333\ --repositorymy_repo--output text --query policy.document | python -m json.tool
サンプル出力:
ポリシーの削除
delete-repository-permissions-policyコマンドを使用して、リポジトリからポリシーを削除します。
aws codeartifact delete-repository-permissions-policy --domainmy_domain--domain-owner111122223333\ --repositorymy_repo
出力のフォーマットは、get-repository-permissions-policyコマンドのフォーマットと同じです。
プリンシパルに読み取りアクセスを許可する
ポリシードキュメントでアカウントのルートユーザーをプリンシパルとして指定すると、そのアカウントのすべてのユーザーとロールへのアクセス権が付与されます。選択したユーザーまたはロールへのアクセスを制限するには、その ARN をPrincipalポリシーのセクションで使用してください。例えば、アカウント 123456789012 内の IAM ユーザー bob に読み取りアクセスを付与するには、以下を使用します。
パッケージへの書き込みアクセスを許可する
codeartifact:PublishPackageVersionアクションは、パッケージの新しいバージョンを公開するための権限をコントロールするために使用されます。このアクションで使用されるリソースは、パッケージである必要があります。CodeArtifact パッケージ ARN の形式は次のとおりです。
arn:aws:codeartifact:region-id:111122223333:package/my_domain/my_repo/package-format/package-namespace/package-name
次の例は、ドメインmy_domainのmy_repoリポジトリでスコープ@parityと名前uiを持つ npm パッケージの ARN を示しています。
arn:aws:codeartifact:region-id:111122223333:package/my_domain/my_repo/npm/parity/ui
スコープを持たない npm パッケージの ARN には、ネームスペースフィールドに空の文字列になっています。例えば、スコープがないパッケージで、ドメインmy_domainのmy_repoリポジトリに名前reactのある ARN は以下のようになります。
arn:aws:codeartifact:region-id:111122223333:package/my_domain/my_repo/npm//react
以下のポリシーは、my_repoリポジトリ中の@parity/uiのバージョンを公開する権限をアカウント123456789012に付与します。
重要
Maven および NuGet パッケージのバージョンを公開する権限を付与するには、次の権限を codeartifact:PublishPackageVersion に加えて追加します。
NuGet:
codeartifact:ReadFromRepositoryおよびリポジトリリソースを指定します。Maven
codeartifact:PutPackageMetadata
このポリシーでは、リソースの一部としてドメインとリポジトリを指定するため、そのリポジトリに添付されている場合にのみ公開が許可されます。
リポジトリへの書き込み権限の付与
ワイルドカードを使用して、リポジトリ内のすべてのパッケージに対して書き込む許可を付与できます。例えば、次のポリシーを使用して、my_repoリポジトリのすべてのパッケージに書き込む許可をアカウントに付与します。
リポジトリポリシーとドメインポリシー間のやり取り
CodeArtifact は、ドメインとリポジトリのリソースポリシーをサポートしています。リソースポリシーはオプションです。各ドメインには 1 つのポリシーがあり、ドメイン内の各リポジトリには独自のリポジトリポリシーがあります。ドメインポリシーとリポジトリポリシーの両方が存在する場合、CodeArtifact リポジトリへのリクエストが許可または拒否されるかどうかを判断するときに、両方が評価されます。ドメインポリシーとリポジトリポリシーは、次のルールを使用して評価されています。
-
ListDomains や ListRepositories などのアカウントレベルのオペレーションを実行する場合、リソースポリシーは評価されません。
-
DescribeDomain や ListRepositoriesInDomain などのドメインレベルのオペレーションを実行する場合、リポジトリポリシーは評価されません。
-
ドメインポリシーは、PutDomainPermissionsPolicy の実行時に評価されません。このルールはロックアウトを防ぐことに注意してください。
-
ドメインポリシーは PutRepositoryPermissionsPolicy の実行時に評価されますが、リポジトリポリシーは評価されません。
-
ポリシーの明示的な拒否は、別のポリシーの許可を上書きします。
-
明示的な許可は、1 つのリソースポリシーでのみ必要です。リポジトリポリシーからアクションを省略しても、ドメインポリシーでアクションが許可されている場合、暗黙的に拒否されることはありません。
-
リソースポリシーがアクションを許可しない場合、呼び出し元のプリンシパルのアカウントがドメイン所有者またはリポジトリ管理者アカウントであり、アイデンティティベースのポリシーがアクションを許可しない限り、結果は暗黙的な拒否になります。
リソースポリシーは、リポジトリへのアクセスに使用される発信者アカウントがドメイン所有者およびリポジトリ管理者アカウントと同じである、単一のアカウントシナリオでアクセスを許可するために使用される場合、オプションです。発信者のアカウントがドメイン所有者またはリポジトリ管理者アカウントと同じではないクロスアカウントシナリオでアクセス権を付与するには、リソースポリシーが必要です。CodeArtifact のクロスアカウントアクセスは、「IAM ユーザーガイド」の「クロスアカウントリクエストが許可されているかどうかを判断する」で説明されているように、クロスアカウントアクセスの一般的な IAM ルールに従います。
-
ドメイン所有者アカウントのプリンシパルは、アイデンティティベースのポリシーを通じてドメイン内の任意のリポジトリへのアクセスを許可される場合があります。この場合、ドメインまたはリポジトリポリシーで明示的な許可は必要ないことに注意してください。
-
ドメイン所有者アカウントのプリンシパルは、ドメインまたはリポジトリポリシーを通じて任意のリポジトリへのアクセスを許可される場合があります。この場合、アイデンティティベースのポリシーでは明示的な許可は必要ないことに注意してください。
-
リポジトリ管理者アカウントのプリンシパルには、アイデンティティベースのポリシーを通じてリポジトリへのアクセスが付与される場合があります。この場合、ドメインまたはリポジトリポリシーで明示的な許可は必要ないことに注意してください。
-
別のアカウントのプリンシパルには、少なくとも 1 つのリソースポリシーと少なくとも 1 つのアイデンティティベースのポリシーで許可されている場合にのみアクセス許可が付与されます。ポリシーによってアクションが明示的に拒否されることはありません。