

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

# リポジトリポリシー
<a name="repo-policies"></a>

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

詳細については、[[リソースベースのポリシー]](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_resource-based) および [[アイデンティティベースおよびリソースベースのポリシー]](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html) を参照してください。

## 読み取りアクセスを許可するリソースポリシーを作成する
<a name="creating-a-resource-policy-to-grant-read-access"></a>

リソースポリシーは、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` 権限をプリンシパルに付与する必要があります。クロスアカウントアクセス用のフルドメインポリシーの例については、「[ドメインポリシーの例](domain-policies.md#domain-policy-example)」を参照してください。

**注記**  
`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": "*"
        }
    ]
}
```

------

## ポリシーの設定
<a name="setting-a-policy"></a>

ポリシードキュメントを作成したら、`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`に渡すことができます。これにより、別のライターによって設定された新しいバージョンではなく、ドキュメントの既知のリビジョンが確実に上書きされることが保証されます。

## ポリシーを読み込む
<a name="reading-a-policy"></a>

`get-repository-permissions-policy`コマンドを使用して、ポリシードキュメントの既存のバージョンを読み込みます。読みやすいように出力をフォーマットするには、Python`json.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": "*"
        }
    ]
}
```

------

## ポリシーの削除
<a name="deleting-a-policy"></a>

`delete-repository-permissions-policy`コマンドを使用して、リポジトリからポリシーを削除します。

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

出力のフォーマットは、`get-repository-permissions-policy`コマンドのフォーマットと同じです。

## プリンシパルに読み取りアクセスを許可する
<a name="granting-read-access-to-specific-principals"></a>

 ポリシードキュメントでアカウントのルートユーザーをプリンシパルとして指定すると、そのアカウントのすべてのユーザーとロールへのアクセス権が付与されます。選択したユーザーまたはロールへのアクセスを制限するには、その 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": "*"
        }
    ]
}
```

------

## パッケージへの書き込みアクセスを許可する
<a name="granting-write-access-to-specific-packages"></a>

 `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`に付与します。

------
#### [ 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` に加えて追加します。  
NuGet:`codeartifact:ReadFromRepository`およびリポジトリリソースを指定します。
Maven`codeartifact:PutPackageMetadata`

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

## リポジトリへの書き込み権限の付与
<a name="granting-write-access-to-a-repository"></a>

 ワイルドカードを使用して、リポジトリ内のすべてのパッケージに対して書き込む許可を付与できます。例えば、次のポリシーを使用して、`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/*"
        }
    ]
}
```

------

## リポジトリポリシーとドメインポリシーの相互作用
<a name="interaction-repo-domain-policies"></a>

 CodeArtifact では、ドメインおよびリポジトリに対してリソースポリシーを設定できます。リソースポリシーはオプションです。各ドメインには 1 つのポリシーを設定し、ドメイン内の各リポジトリには独自のリポジトリポリシーを設定できます。ドメインポリシーとリポジトリポリシーの両方が存在する場合、CodeArtifact リポジトリへのリクエストが許可されるか拒否されるかを判断するときに、両方が評価されます。ドメインポリシーとリポジトリポリシーは、次のルールを使用して評価されます。
+ [ListDomains](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_ListDomains.html) や [ListRepositories](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_ListRepositories.html) などのアカウント単位のオペレーションを実行する場合、リソースポリシーは評価されません。
+ [DescribeDomain](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_DescribeDomain.html) や [ListRepositoriesInDomain](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_ListRepositoriesInDomain.html) などのドメイン単位のオペレーションを実行する場合、リポジトリポリシーは評価されません。
+ [PutDomainPermissionsPolicy](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PutDomainPermissionsPolicy.html) を実行する場合、ドメインポリシーは評価されません。なお、このルールはロックアウトを防ぐためのものです。
+ [PutRepositoryPermissionsPolicy](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PutRepositoryPermissionsPolicy.html) を実行する場合、ドメインポリシーは評価されますが、リポジトリポリシーは評価されません。
+ いずれかのポリシーに明示的な Deny がある場合、他のポリシーで Allow が指定されていても、それより優先されます。
+ 明示的な Allow は、いずれか 1 つのリソースポリシーにあれば十分です。リポジトリポリシーでアクションを省略していても、ドメインポリシーでそのアクションが許可されていれば、暗黙的な Deny にはなりません。
+ リソースポリシーのどれもそのアクションを許可していない場合、結果は暗黙的な Deny となります。ただし、呼び出し元プリンシパルのアカウントがドメイン所有者またはリポジトリ管理者アカウントであり、さらにアイデンティティベースポリシーでそのアクションが許可されている場合を除きます。

 リソースポリシーは、単一アカウントのシナリオ、つまりリポジトリへアクセスするために使用する呼び出し元アカウントが、ドメイン所有者であり、かつリポジトリ管理者アカウントと同じである場合、アクセス許可を付与するために必須ではありません。呼び出し元アカウントがドメイン所有者またはリポジトリ管理者アカウントと同じではないクロスアカウントの場合、アクセスを付与するためにリソースポリシーが必須となります。CodeArtifact のクロスアカウントアクセスは、「*IAM ユーザーガイド*」の「[クロスアカウントリクエストが許可されているかどうかを確認](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html#policy-eval-cross-account)」に記載のクロスアカウントアクセスの一般的な IAM ルールに従います。
+ ドメイン所有者アカウントのプリンシパルは、アイデンティティベースポリシーを通じてドメイン内の任意のリポジトリへのアクセスを許可される場合があります。なお、この場合、ドメインポリシーまたはリポジトリポリシーに明示的な Allow を記載する必要はありません。
+ ドメイン所有者アカウントのプリンシパルは、ドメインポリシーまたはリポジトリポリシーを通じて任意のリポジトリへのアクセスを許可される場合があります。なお、この場合、アイデンティティベースポリシーに明示的な Allow を記載する必要はありません。
+ リポジトリ管理者アカウントのプリンシパルは、アイデンティティベースポリシーを通じてリポジトリへのアクセスを許可される場合があります。なお、この場合、ドメインポリシーまたはリポジトリポリシーに明示的な Allow を記載する必要はありません。
+ 別アカウントに属するプリンシパルがアクセスを許可されるのは、少なくとも 1 つのリソースポリシーおよび少なくとも 1 つのアイデンティティベースポリシーでそのアクションが許可されていて、さらにいずれのポリシーにも明示的な Deny が存在しない場合に限られます。