使用標籤控制 CodePipeline 資源的存取 - AWS CodePipeline

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

使用標籤控制 CodePipeline 資源的存取

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

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

可以將標記連接到資源或在請求中將標記傳遞至支援標記的服務。在 CodePipeline 中,資源可以有標籤,而某些動作可以包含標籤。在建立 IAM 政策時,可使用標記條件鍵來控制以下項目:

  • 可在管道資源上執行動作的使用者 (根據資源已具有的標籤)。

  • 可在動作請求中傳遞的標籤。

  • 請求中是否可使用特定的標籤鍵。

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

如需標籤條件索引鍵的完整語法和語意,請參閱使用標籤控制存取。如需條件索引鍵的詳細資訊,請參閱下列資源。本節中的 CodePipeline 政策範例與下列有關條件索引鍵的資訊一致,並擴展至 CodePipeline 的細微差別範例,例如資源巢狀。

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

範例 1:根據請求中的標籤限制動作

AWSCodePipeline_FullAccess 受管使用者政策可讓使用者無限制地對任何資源執行任何 CodePipeline 動作。

下列政策會限制此能力,並拒絕未經授權的使用者建立管道的許可,其中特定標籤會列在請求中。為了達到此種效果,如果該請求指定了名為 Project 的標記,含有 ProjectAProjectB 的其中一值,其會拒絕 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"] } } } ] }
範例 2:根據資源標籤限制標記動作

AWSCodePipeline_FullAccess 受管使用者政策可讓使用者無限制地對任何資源執行任何 CodePipeline 動作。

以下政策限制此能力,拒絕未經授權的使用者在特定專案管道上執行動作。在作法上,如果資源有名為 Project 的標記,且值為 ProjectAProjectB,則拒絕某些動作。(aws:ResourceTag 條件索引鍵用於依據資源上的標籤來控制資源的存取。) 除了受管使用者政策之外,客戶的管理員必須將此 IAM 政策連接到未授權的 IAM 使用者。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "codepipeline:TagResource" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/Project": ["ProjectA", "ProjectB"] } } } ] }
範例 3:根據請求中的標籤允許動作

下列政策授予使用者在 CodePipeline 中建立開發管道的許可。

若要這樣做,它會在請求指定名為 Project 且值為 ProjectA 的標籤時允許 CreatePipelineTagResource 動作。換言之,可指定的唯一標籤金鑰為 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"] } } } ] }
範例 4:根據資源標籤限制取消標記動作

AWSCodePipeline_FullAccess 受管使用者政策可讓使用者無限制地對任何資源執行任何 CodePipeline 動作。

以下政策限制此能力,拒絕未經授權的使用者在特定專案管道上執行動作。在作法上,如果資源有名為 Project 的標記,且值為 ProjectAProjectB,則拒絕某些動作。

此外,政策會防止這些未經授權的使用者使用 aws:TagKeys 條件金鑰篡改資源,不允許標籤修改動作完全移除Project標籤。除了 受管使用者政策之外,客戶的管理員還必須將此 IAM 政策連接到未經授權的使用者或角色。

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