本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用標籤控制對資源的 CodePipeline存取
IAM 政策陳述式中的條件是語法的一部分,用於指定 CodePipeline 動作所需資源的許可。在條件中使用標記是控制資源和請求的存取權限的方式之一。如需標記 CodePipeline 資源的相關資訊,請參閱 標記 資源。本主題討論的是標記型的存取控制。
當您設計IAM政策時,您可能會授予特定資源的存取權,以設定精細的許可。隨著您管理的資源數量增加,此任務變得越來越困難。標記資源並在政策陳述式條件中使用標籤,可讓此任務更輕鬆。您可以對具有特定標籤的任何資源大量授予存取。然後,您會在建立期間或之後,對相關資源重複套用此標籤。
可以將標記連接到資源或在請求中將標記傳遞至支援標記的服務。在 中 CodePipeline,資源可以具有標籤,而某些動作可以包含標籤。建立IAM政策時,您可以使用標籤條件索引鍵來控制:
-
可在管道資源上執行動作的使用者 (根據資源已具有的標籤)。
-
可在動作請求中傳遞的標籤。
-
請求中是否可使用特定的標籤鍵。
運用字串條件運算子,您可以建構以索引鍵與字串值的對比為基礎來限制存取的 Condition
元素。除了 Null 條件之外,您可以將 IfExists
新增至任何條件運算子名稱的結尾。如果您是指「如果請求的內容中存在政策索引鍵,則依照政策所述來處理索引鍵。如果該索引鍵不存在,則評估條件元素為 true。」 例如,您可以使用 StringEqualsIfExists
來限制條件索引鍵,這些索引鍵可能不存在於其他類型的資源上。
如需標籤條件索引鍵的完整語法和語義,請參閱使用標籤控制存取 。如需條件索引鍵的詳細資訊,請參閱下列資源。本節中的 CodePipeline政策範例與下列有關條件索引鍵的資訊一致,並將其擴展為資源巢狀 CodePipeline 等細微差別的範例。
下列範例示範如何在 政策中為 CodePipeline 使用者指定標籤條件。
範例 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"] } } } ] }
範例 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"] } } } ] }
範例 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"] } } } ] }
範例 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"] } } } ] }