

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

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

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

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

可以將標記連接到資源或在請求中將標記傳遞至支援標記的服務。在 CodePipeline 中，資源可以有標籤，而某些動作可以包含標籤。在建立 IAM 政策時，可使用標記條件鍵來控制以下項目：
+ 可在管道資源上執行動作的使用者 (根據資源已具有的標籤)。
+ 可在動作請求中傳遞的標籤。
+ 請求中是否可使用特定的標籤鍵。

運用字串條件運算子，您可以建構以索引鍵與字串值的對比為基礎來限制存取的 `Condition` 元素。除了 Null 條件之外，您可以將 `IfExists` 新增至任何條件運算子名稱的結尾。如果您是指「如果請求的內容中存在政策索引鍵，則依照政策所述來處理索引鍵。如果該索引鍵不存在，則評估條件元素為 true。」 例如，您可以使用 `StringEqualsIfExists` 來限制條件索引鍵，這些索引鍵可能不存在於其他類型的資源上。

如需標籤條件索引鍵的完整語法和語意，請參閱[使用標籤控制存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)。如需條件索引鍵的其他資訊，請參閱下列資源。本節中的 CodePipeline 政策範例與下列有關條件索引鍵的資訊一致，並使用 CodePipeline 的細微差別範例進行擴展，例如資源巢狀化。
+ [字串條件運算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String)
+ [AWS 服務 可搭配 IAM 使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)
+ [SCP 語法](https://docs.aws.amazon.com/IAM/latest/UserGuide/orgs_manage_policies_scps_syntax.html)
+ [IAM JSON 政策元素：條件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)
+ [aws：RequestTag/tag-key](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag)
+ [CodePipeline 的條件索引鍵](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_awscodepipeline.html#awscodepipeline-policy-keys)

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

**Example 1：根據請求中的標籤限制動作**  
`AWSCodePipeline_FullAccess` 受管使用者政策可讓使用者無限制地對任何資源執行任何 CodePipeline 動作。  
下列政策會限制此能力，並拒絕未經授權的使用者建立管道的許可，其中特定標籤會列在請求中。為了達到此種效果，如果該請求指定了名為 `Project` 的標記，含有 `ProjectA` 或 `ProjectB` 的其中一值，其會拒絕 `CreatePipeline` 動作。( `aws:RequestTag` 條件索引鍵用來控制哪些標籤可在 IAM 請求中傳遞。)   
在下列範例中，政策的目的是拒絕未經授權的使用者建立具有指定標籤值之管道的許可。不過，建立管道需要存取管道本身以外的資源 （例如管道動作和階段）。由於政策中`'Resource'`指定的 是 `'*'`，因此政策會根據每個具有 ARN 的資源進行評估，並在建立管道時建立。這些額外的資源沒有標籤條件索引鍵，因此`StringEquals`檢查會失敗，而且不會授予使用者建立任何管道的能力。若要解決此問題，請改用 `StringEqualsIfExists` 條件運算子。如此一來，僅有在條件索引鍵存在時才會進行測試。  
您可以讀取下列項目：「如果要檢查的資源具有標籤`"RequestTag/Project"`條件索引鍵，則只有在索引鍵值以 開頭時，才允許 動作`projectA`。如果正在檢查的資源沒有該條件索引鍵，則無需擔心它。』   
此外，此政策會防止這些未經授權的使用者竄改 資源，方法是使用 `aws:TagKeys`條件索引鍵不允許標籤修改動作包含這些相同的標籤值。除了 受管使用者政策之外，客戶的管理員還必須將此 IAM 政策連接到未經授權的管理使用者。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "codepipeline:CreatePipeline",
        "codepipeline:TagResource"
      ],
      "Resource": "*",
      "Condition": {
        "StringEqualsIfExists": {
          "aws:RequestTag/Project": ["ProjectA", "ProjectB"]
        }
      }
    },
    {
      "Effect": "Deny",
      "Action": [
        "codepipeline:UntagResource"
      ],
      "Resource": "*",
      "Condition": {
        "ForAllValues:StringEquals": {
          "aws:TagKeys": ["Project"]
        }
      }
    }
  ]
}
```

**Example 2：根據資源標籤限制標記動作**  
`AWSCodePipeline_FullAccess` 受管使用者政策可讓使用者無限制地對任何資源執行任何 CodePipeline 動作。  
以下政策限制此能力，拒絕未經授權的使用者在特定專案管道上執行動作。在作法上，如果資源有名為 `Project` 的標記，且值為 `ProjectA` 或 `ProjectB`，則拒絕某些動作。(`aws:ResourceTag` 條件索引鍵用於依據資源上的標籤來控制資源的存取。) 除了受管使用者政策之外，客戶的管理員必須將此 IAM 政策連接到未授權的 IAM 使用者。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "codepipeline:TagResource"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Project": ["ProjectA", "ProjectB"]
        }
      }
    }
  ]
}
```

**Example 3：根據請求中的標籤允許動作**  
下列政策授予使用者在 CodePipeline 中建立開發管道的許可。  
若要這樣做，它會在請求指定名為 `Project` 且值為 `ProjectA` 的標籤時允許 `CreatePipeline` 和 `TagResource` 動作。換句話說，唯一可以指定的標籤索引鍵是 `Project`，其值必須是 `ProjectA`。  
`aws:RequestTag` 條件索引鍵用於控制哪些標籤可以在 IAM 請求中傳遞。`aws:TagKeys` 條件可確保標籤索引鍵區分大小寫。此政策適用於未連接`AWSCodePipeline_FullAccess`受管使用者政策的使用者或角色。受管政策可讓使用者無限制地對任何資源執行任何 CodePipeline 動作。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codepipeline:CreatePipeline",
        "codepipeline:TagResource"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/Project": "ProjectA"
        },
        "ForAllValues:StringEquals": {
          "aws:TagKeys": ["Project"]
        }
      }
    }
  ]
}
```

**Example 4：根據資源標籤限制取消標記動作**  
`AWSCodePipeline_FullAccess` 受管使用者政策可讓使用者無限制地對任何資源執行任何 CodePipeline 動作。  
以下政策限制此能力，拒絕未經授權的使用者在特定專案管道上執行動作。在作法上，如果資源有名為 `Project` 的標記，且值為 `ProjectA` 或 `ProjectB`，則拒絕某些動作。  
此外，此政策會防止這些未經授權的使用者竄改 資源，方法是使用 `aws:TagKeys`條件金鑰不允許標籤修改動作完全移除`Project`標籤。除了 受管使用者政策之外，客戶的管理員必須將此 IAM 政策連接到未經授權的使用者或角色。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "codepipeline:UntagResource"
      ],
      "Resource": "*",
      "Condition": {
        "ForAllValues:StringEquals": {
          "aws:TagKeys": ["Project"]
        }
      }
    }
  ]
}
```