翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
リポジトリポリシー
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
アクションは、リポジトリリソースでのみ使用できます。リポジトリ内のパッケージのサブセットへの読み取りアクセスを許可するアクションとして、パッケージの Amazon リソースネーム (ARN) を のリソースcodeartifact:ReadFromRepository
として配置することはできません。特定のプリンシパルは、リポジトリ内のすべてのパッケージを読み取れるか、あるいは、全く読み取れません。
リポジトリで指定されるアクションは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-owner111122223333
\ --repositorymy_repo
--policy-documentfile:///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
コマンドを使用して、ポリシードキュメントの既存のバージョンを読み込みます。読みやすいように出力をフォーマットするには、Pythonjson.tool
モジュールと共に--output
および--query policy.document
を使用してください。
aws codeartifact get-repository-permissions-policy --domain
my_domain
--domain-owner111122223333
\ --repositorymy_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-owner111122223333
\ --repositorymy_repo
出力のフォーマットは、get-repository-permissions-policy
コマンドのフォーマットと同じです。
プリンシパルに読み取りアクセスを許可する
ポリシードキュメントでアカウントのルートユーザーをプリンシパルとして指定すると、そのアカウントのすべてのユーザーとロールへのアクセス権が付与されます。選択したユーザーまたはロールへのアクセスを制限するには、ポリシーの Principal
セクションARNで を使用します。例えば、アカウント 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の には、名前空間フィールドの空の文字列があります。例えば、ドメイン のmy_repo
リポジトリreact
にスコープがなく、名前が のパッケージARNの を次に示します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
。
NuGet:
codeartifact:ReadFromRepository
リポジトリリソースを指定する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 は、ドメインとリポジトリのリソースポリシーをサポートしています。リソースポリシーはオプションです。各ドメインには 1 つのポリシーがあり、ドメイン内の各リポジトリには独自のリポジトリポリシーがある場合があります。ドメインポリシーとリポジトリポリシーの両方が存在する場合、リポジトリへのリクエストが許可または拒否されるかどうかを判断するときに、 CodeArtifact 両方が評価されます。ドメインポリシーとリポジトリポリシーは、次のルールを使用して評価されています。
-
ListDomains や などのアカウントレベルのオペレーションを実行する場合、リソースポリシーは評価されませんListRepositories。
-
DescribeDomain や などのドメインレベルのオペレーションを実行する場合、リポジトリポリシーは評価されませんListRepositoriesInDomain。
-
ドメインポリシーは、 の実行時に評価されませんPutDomainPermissionsPolicy。このルールはロックアウトを防ぐことに注意してください。
-
ドメインポリシーは の実行時に評価されますがPutRepositoryPermissionsPolicy、リポジトリポリシーは評価されません。
-
ポリシーの明示的な拒否は、別のポリシーの許可を上書きします。
-
明示的な許可は、1 つのリソースポリシーでのみ必要です。リポジトリポリシーからアクションを省略しても、ドメインポリシーがアクションを許可しても暗黙的に拒否されることはありません。
-
リソースポリシーがアクションを許可しない場合、呼び出し元のプリンシパルのアカウントがドメイン所有者またはリポジトリ管理者アカウントであり、アイデンティティベースのポリシーがアクションを許可しない限り、結果は暗黙的な拒否になります。
リソースポリシーは、リポジトリへのアクセスに使用される発信者アカウントがドメイン所有者およびリポジトリ管理者アカウントと同じである場合、単一のアカウントシナリオでアクセスを許可するために使用される場合はオプションです。発信者のアカウントがドメイン所有者またはリポジトリ管理者アカウントと同じではないクロスアカウントシナリオでアクセスを付与するには、リソースポリシーが必要です。のクロスアカウントアクセスは、IAM「 ユーザーガイド」の「クロスアカウントリクエストが許可されているかどうかを判断する」で説明されているように、クロスアカウントアクセスの一般的なIAMルール CodeArtifact に従います。
-
ドメイン所有者アカウントのプリンシパルには、アイデンティティベースのポリシーを通じてドメイン内の任意のリポジトリへのアクセスが付与される場合があります。この場合、ドメインポリシーまたはリポジトリポリシーでは明示的な許可は必要ないことに注意してください。
-
ドメイン所有者アカウントのプリンシパルには、ドメインまたはリポジトリポリシーを介して任意のリポジトリへのアクセスが付与される場合があります。この場合、アイデンティティベースのポリシーでは明示的な許可は必要ないことに注意してください。
-
リポジトリ管理者アカウントのプリンシパルには、アイデンティティベースのポリシーを通じてリポジトリへのアクセスが付与される場合があります。この場合、ドメインポリシーまたはリポジトリポリシーでは明示的な許可は必要ないことに注意してください。
-
別のアカウントのプリンシパルには、少なくとも 1 つのリソースポリシーと少なくとも 1 つのアイデンティティベースのポリシーによって許可されている場合にのみアクセスが許可され、ポリシーは明示的にアクションを拒否しません。