

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 網域政策
<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`元素中使用特定資源 ARNs，將許可套用至網域中的特定資源。

**注意**  
網域和儲存庫政策都可用來設定許可。當兩個政策都存在時，如果任一政策允許，則會評估這兩個政策並允許 動作。如需詳細資訊，請參閱[儲存庫與網域政策之間的互動](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": "*"
        }
    ]
}
```

------

**注意**  
想要從儲存庫端點擷取套件的主體，除了網域的 `ReadFromRepository`許可之外，還必須授予儲存庫資源的 `GetAuthorizationToken`許可。同樣地，除了 之外，還必須授予想要將套件發佈至儲存庫端點的主體`PublishPackageVersion`許可`GetAuthorizationToken`。  
如需 `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`，會在評估許可時忽略網域上的資源政策。這可確保網域擁有者無法將自己鎖定在網域之外，這會使他們無法更新資源政策。

**注意**  
 您無法將許可授予另一個 AWS 帳戶，以使用資源政策更新網域上的資源政策，因為在呼叫 put-domain-permissions-policy 時會忽略資源政策。

輸出範例：

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

命令的輸出包含網域資源的 Amazon Resource Name (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`命令的格式相同。