

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

# 使用標籤來控制 CodeArtifact 資源的存取
<a name="tag-based-access-control"></a>

IAM 使用者政策陳述式中的條件是您用來指定 CodeArtifact 動作所需資源許可的語法的一部分。在條件中使用標記是控制資源和請求的存取權限的方式之一。如需標記 CodeArtifact 資源的詳細資訊，請參閱 [標記 資源](tag-resources.md)。本主題討論的是標記型的存取控制。

設計 IAM 政策時，您可能會透過授予對特定資源的存取來設定精細許可。隨著您管理的資源數量增加，此任務變得越來越困難。標記資源並在政策陳述式條件中使用標籤，可讓此任務更輕鬆。您可以對具有特定標籤的任何資源大量授予存取。然後，您會在建立期間或之後，對相關資源重複套用此標籤。

可以將標記連接到資源或在請求中將標記傳遞至支援標記的服務。在 CodeArtifact 中，資源可以有標籤，而某些動作可以包含標籤。在建立 IAM 政策時，可使用標記條件鍵來控制以下項目：
+ 哪些使用者可以根據其已有的標籤，對網域或儲存庫資源執行動作。
+ 可在動作請求中傳遞的標籤。
+ 請求中是否可使用特定的標籤鍵。

關於標籤條件索引鍵的完整語法和語義，請參閱 *IAM 使用者指南*中的[使用標籤控制存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)。

**重要**  
在資源上使用標籤來限制動作時，標籤必須位於動作操作所在的資源上。例如，若要拒絕具有標籤的`DescribeRepository`許可，標籤必須位於每個儲存庫上，而非網域上。[AWS CodeArtifact 許可參考](auth-and-access-control-permissions-reference.md) 如需 CodeArtifact 中的動作清單及其操作的資源，請參閱 。

## 標籤型存取控制範例
<a name="tag-based-access-control-examples"></a>

下列範例示範如何在 CodeArtifact 使用者的政策中指定標籤條件。

**Example 1：根據請求中的標籤限制動作**  
`AWSCodeArtifactAdminAccess` 受管使用者政策可讓使用者無限制地對任何資源執行任何 CodeArtifact 動作。  
下列政策會限制此能力，並拒絕未經授權的使用者建立儲存庫的許可，除非請求包含特定標籤。為此，如果請求未指定名為 的標籤`costcenter`，且具有其中一個值`1`或 ，則會拒絕該`CreateRepository`動作`2`。除了受管使用者政策之外，客戶的管理員必須將此 IAM 政策連接到未授權的 IAM 使用者。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "codeartifact:CreateRepository",
      "Resource": "*",
      "Condition": {
        "Null": {
          "aws:RequestTag/costcenter": "true"
        }
      }
    },
    {
      "Effect": "Deny",
      "Action": "codeartifact:CreateRepository",
      "Resource": "*",
      "Condition": {
          "ForAnyValue:StringNotEquals": {
              "aws:RequestTag/costcenter": [
                  "1",
                  "2"
              ]
          }
      }
  }
  ]
}
```

**Example 2：根據資源標籤限制動作**  
`AWSCodeArtifactAdminAccess` 受管使用者政策可讓使用者無限制地對任何資源執行任何 CodeArtifact 動作。  
下列政策會限制此能力，並拒絕未經授權的使用者對指定網域中的儲存庫執行動作的許可。在作法上，如果資源有名為 `Key1` 的標記，且值為 `Value1` 或 `Value2`，則拒絕某些動作。(`aws:ResourceTag` 條件索引鍵用於依據資源上的標籤來控制資源的存取。) 除了受管使用者政策之外，客戶的管理員必須將此 IAM 政策連接到未授權的 IAM 使用者。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "codeartifact:TagResource",
        "codeartifact:UntagResource",
        "codeartifact:DescribeDomain",
        "codeartifact:DescribeRepository",
        "codeartifact:PutDomainPermissionsPolicy",
        "codeartifact:PutRepositoryPermissionsPolicy",
        "codeartifact:ListRepositoriesInDomain",
        "codeartifact:UpdateRepository",
        "codeartifact:ReadFromRepository",
        "codeartifact:ListPackages",
        "codeartifact:ListTagsForResource"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Key1": ["Value1", "Value2"]
        }
      }
    }
  ]
}
```

**Example 3：根據資源標籤允許動作**  
下列政策授予使用者在 CodeArtifact 中對儲存庫和套件執行動作和取得相關資訊的許可。  
若要這樣做，如果儲存庫具有名為 `Key1`且值為 的標籤，則允許特定動作`Value1`。( `aws:RequestTag` 條件索引鍵用來控制哪些標籤可在 IAM 請求中傳遞。) `aws:TagKeys` 條件可確保標籤索引鍵區分大小寫。此政策適用於未連接 `AWSCodeArtifactAdminAccess` 受管使用者政策的 IAM 使用者。受管政策可讓使用者無限制地對任何資源執行任何 CodeArtifact 動作。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codeartifact:UpdateRepository",
        "codeartifact:DeleteRepository",
        "codeartifact:ListPackages"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Key1": "Value1"
        }
      }
    }
  ]
}
```

**Example 4：根據請求中的標籤允許動作**  
下列政策授予使用者在 CodeArtifact 中指定網域中建立儲存庫的許可。  
若要這樣做，如果請求中的建立資源 API 指定名稱為 `Key1` 且值為 的標籤，則允許 `CreateRepository`和 `TagResource`動作`Value1`。( `aws:RequestTag` 條件索引鍵用來控制哪些標籤可在 IAM 請求中傳遞。) `aws:TagKeys` 條件可確保標籤索引鍵區分大小寫。此政策適用於未連接 `AWSCodeArtifactAdminAccess` 受管使用者政策的 IAM 使用者。受管政策可讓使用者無限制地對任何資源執行任何 CodeArtifact 動作。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codeartifact:CreateRepository",
        "codeartifact:TagResource"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/Key1": "Value1"
        }
      }
    }
  ]
}
```