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

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

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

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

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

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

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

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

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

運用字串條件運算子,您可以建構以索引鍵與字串值的對比為基礎來限制存取的 Condition 元素。您可以添加IfExists到除 Null 條件以外的任何條件運算符名稱的末尾。如果您是指「如果請求的內容中存在政策索引鍵,則依照政策所述來處理索引鍵。如果該索引鍵不存在,則評估條件元素為 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"] } } } ] }