

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

# ドメインポリシー
<a name="domain-policies"></a>

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

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

**Topics**
+ [ドメインへのクロスアカウントアクセスを有効にする](#enabling-cross-acount-access-to-a-domain)
+ [ドメインポリシーの例](#domain-policy-example)
+ [を使用したドメインポリシーの例 AWS Organizations](#domain-policy-example-with-aws-organizations)
+ [ドメインポリシーを設定する](#set-domain-policy)
+ [ドメインポリシーを読み取る](#reading-a-domain-policy)
+ [ドメインポリシーを削除する](#deleting-a-domain-policy)

## ドメインへのクロスアカウントアクセスを有効にする
<a name="enabling-cross-acount-access-to-a-domain"></a>

リソースポリシーは、JSON 形式のテキストファイルです。このファイルには、プリンシパル (アクター) とひとつ以上のアクションとエフェクト (`Allow`または`Deny`) を指定する必要があります。別のアカウントが所有するドメインにリポジトリを作成するには、プリンシパルに対して *[ドメイン]* リソースへの `CreateRepository` 権限を付与する必要があります。

例えば、次のリソースポリシーでは、ドメイン内にリポジトリを作成する `123456789012` 権限をアカウントに付与しています。

------
#### [ JSON ]

****  

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

------

タグ付きのリポジトリの作成を許可するには、`codeartifact:TagResource` 権限を含める必要があります。これにより、ドメインとその中のすべてのリポジトリにタグを追加するためのアカウントアクセスも付与されます。

ドメインポリシーは、ドメイン、およびドメイン内のすべてのリソースに対するすべてのオペレーションについて評価されます。つまり、ドメインポリシーを使用して、ドメイン内のリポジトリとパッケージに権限を適用できます。`Resource` 要素が `*` に設定されている場合、ステートメントはドメイン内のすべてのリソースに適用されます。例えば、上記のポリシーにおいて、許可された IAM アクションのリストに `codeartifact:DescribeRepository` も含まれている場合、ポリシーは、ドメイン内のすべてのリポジトリに `DescribeRepository` の呼び出しを許可します。ドメインポリシーを使用すると、`Resource` 要素で特定のリソース ARN を使用して、ドメイン内の特定のリソースに権限を適用できます。

**注記**  
権限の設定には、ドメインポリシーとリポジトリポリシーを両方とも使用できます。両方のポリシーが存在する場合、両方のポリシーが評価され、いずれかのポリシーで許可されていればアクションは許可されます。詳細については、「[リポジトリポリシーとドメインポリシーの相互作用](repo-policies.md#interaction-repo-domain-policies)」を参照してください。

別のアカウントが所有するドメイン内のパッケージにアクセスするには、*[ドメインリソース]* における `GetAuthorizationToken` 権限をプリンシパルに付与する必要があります。これにより、ドメイン所有者は、ドメイン内のリポジトリのコンテンツを読み取ることができるアカウントをコントロールできます。

例えば、次のリソースポリシーでは、ドメイン内の任意のリポジトリの認証トークンを取得する`123456789012`許可をアカウントに付与しています。

------
#### [ JSON ]

****  

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

------

**注記**  
リポジトリエンドポイントからパッケージを取得するプリンシパルには、ドメインに対する `GetAuthorizationToken` 権限に加えてリポジトリリソースに対する `ReadFromRepository` 権限が付与される必要があります。同様に、リポジトリエンドポイントにパッケージを公開するプリンシパルには、`GetAuthorizationToken`に加えて`PublishPackageVersion`への権限が必要となります。  
`ReadFromRepository` と `PublishPackageVersion` への権限の詳細については、[[レポジトリーポリシー]](repo-policies.md) を参照してください。

## ドメインポリシーの例
<a name="domain-policy-example"></a>

複数のアカウントがドメインを使用している場合、ドメインを完全に使用できるようにするには、そのアカウントに基本的な権限セットを付与する必要があります。次のリソースポリシーは、ドメインの完全な使用を許可する一連の権限を一覧表示します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "BasicDomainPolicy",
            "Action": [
                "codeartifact:GetDomainPermissionsPolicy",
                "codeartifact:ListRepositoriesInDomain",
                "codeartifact:GetAuthorizationToken",
                "codeartifact:DescribeDomain",
                "codeartifact:CreateRepository"
            ],
            "Effect": "Allow",
            "Resource": "*",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:root"
            }
        }
    ]
}
```

------

**注記**  
ドメインとそのリポジトリすべてが単一のアカウントによって所有され、そのアカウントからのみ使用する必要がある場合は、ドメインポリシーを作成する必要はありません。

## を使用したドメインポリシーの例 AWS Organizations
<a name="domain-policy-example-with-aws-organizations"></a>

`aws:PrincipalOrgID`条件キーを使って、以下のように、組織内のすべてのアカウントから CodeArtifact ドメインへアクセスする許可を付与することができます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Sid": "DomainPolicyForOrganization",
        "Effect": "Allow",
        "Principal": "*",
        "Action": [
             "codeartifact:GetDomainPermissionsPolicy",
             "codeartifact:ListRepositoriesInDomain",
             "codeartifact:GetAuthorizationToken",
             "codeartifact:DescribeDomain",
             "codeartifact:CreateRepository"
        ],
        "Resource": "*",
        "Condition": {
            "StringEquals": { "aws:PrincipalOrgID":["o-xxxxxxxxxxx"]}
        }
    }
}
```

------

`aws:PrincipalOrgID` 条件キーの使用についての詳細は、*[IAM ユーザーガイド]* の [[AWS グローバル条件コンテキストキー]](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) を参照してください。

## ドメインポリシーを設定する
<a name="set-domain-policy"></a>

`put-domain-permissions-policy`コマンドを使用して、ドメインにポリシーをアタッチすることできます。

```
aws codeartifact put-domain-permissions-policy --domain my_domain --domain-owner 111122223333 \
 --policy-document file://</PATH/TO/policy.json>
```

`put-domains-permissions-policy`を呼び出すとき、権限を評価する場合は、ドメインのリソースポリシーは無視されます。これにより、ドメインの所有者がドメインから自分自身をロックアウトできなくなり、リソースポリシーを更新できなくなることを防ぎます。

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

サンプル出力:

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

コマンドの出力には、ドメインリソースの Amazon リソースネーム (ARN)、ポリシードキュメントの完全な内容、リビジョン識別子が含まれます。リビジョン識別子は`--policy-revision`オプションを使用して`put-domain-permissions-policy`にパスできます。これにより、別のライターが設定した新しいバージョンではなく、既知のリビジョンのドキュメントが確実に上書きされます。

## ドメインポリシーを読み取る
<a name="reading-a-domain-policy"></a>

ポリシードキュメントの既存のバージョンを読み取るには、`get-domain-permissions-policy`コマンドを使用します。読みやすいように出力をフォーマットするには、`--output`および`--query policy.document`を Python `json.tool`モジュールと共に、次の通りに使用してください。

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

サンプル出力:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "BasicDomainPolicy",
            "Action": [
                "codeartifact:GetDomainPermissionsPolicy",
                "codeartifact:ListRepositoriesInDomain",
                "codeartifact:GetAuthorizationToken",
                "codeartifact:CreateRepository"
            ],
            "Effect": "Allow",
            "Resource": "*",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            }
        }
    ]
}
```

------

## ドメインポリシーを削除する
<a name="deleting-a-domain-policy"></a>

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

```
aws codeartifact delete-domain-permissions-policy --domain my_domain --domain-owner 111122223333
```

出力の形式は、`get-domain-permissions-policy`および`delete-domain-permissions-policy`コマンドの形式と同様になります。