使用標籤控制對 AWS 資源的存取權
您可以使用標籤來控制對支援標記之 AWS 資源的存取,包括 IAM 資源。您可以標記 IAM 使用者和角色,來控制他們可以存取的內容。若要了解如何標記 IAM 使用者和角色,請參閱 標記 IAM 資源。此外,您可以控制對下列 IAM 資源的存取:客戶受管政策、IAM 身分提供者、執行個體描述檔、伺服器憑證和虛擬 MFA 裝置。若要檢視建立和測試允許具有委託人標籤的 IAM 角色政策,以相符標籤存取資源的教學,請參閱 IAM 教學課程:根據標籤定義存取 AWS 資源的許可。使用以下區段中的資訊,控制對其他 AWS 資源的存取,包括 IAM 資源,而不需標記 IAM 使用者或角色。
在使用標籤來控制 AWS 資源的存取前,您必須了解 AWS 如何授予存取許可。AWS 由一系列「資源」組成。Amazon EC2 執行個體是一種資源。Amazon S3 儲存貯體即為資源。您可以使用 AWS API、AWS CLI 或 AWS Management Console 來執行操作,例如在 Amazon S3 中建立儲存貯體。當您這麼做時,您會為該操作傳送請求。您的請求指定動作、資源、委託人實體 (使用者或角色)、委託人帳戶,以及所需的任何請求資訊。所有這些資訊提供了上下文。
AWS然後, 會檢查您 (委託人實體) 是否已經過身分驗證 (登入) 和授權 (具有許可權),以便對指定的資源執行指定的操作。在授權期間,AWS 會檢查所有適用於請求內容的政策。大多數的政策會以 JSON 文件形式存放在 AWS 中,並負責指定委託人實體的許可。如需有關政策類型及其使用的詳細資訊,請參閱 IAM 中的政策和許可。
AWS只有在政策允許請求的每個部分時, 才會授權該請求。若要查看圖表和進一步了解 IAM 基礎設施的詳細資訊,請參閱 了解 IAM 的運作方式。有關 IAM 如何決定是否允許請求的詳細資訊,請參閱 政策評估邏輯。
標籤可以使得這個程序複雜化,因為您可以將標籤連接到資源或在請求中將標籤傳遞至支援標籤的服務。若要根據標籤控制存取,則在政策的條件元素中提供標籤資訊。若要了解 AWS 服務是否支援使用標籤控制存取的詳細資訊,請參閱可搭配 IAM 運作的AWS服務並尋找 Authorization based on tags (根據標籤的授權) 欄為 Yes (是) 的服務。選擇服務的名稱,以檢視該服務的授權和存取控制文件。
然後,您可以建立 IAM 政策,這類政策可根據該資源的標籤允許或拒絕對某資源的存取。在該政策中,您可以使用標籤條件金鑰,以控制執行下列項目的存取權:
您可以使用 JSON,或匯入現有的受管政策,透過視覺化的方式來建立 IAM 政策。如需詳細資訊,請參閱 建立 IAM 政策。
控制 AWS 資源的存取許可
您可以在 IAM 政策中使用條件,根據該資源的標籤來控制對 AWS 資源的存取。作法是使用全域 aws:ResourceTag/
條件金鑰,或服務特定金鑰。某些服務僅支援此金鑰的服務特定版本,而不支援全域版本。tag-key
請勿將政策中的 ResourceTag
條件金鑰與 iam:PassRole
動作搭配使用。您不能使用該 IAM 角色的標籤來控制可傳遞該角色的人員。如需有關傳遞角色至服務之必要許可的詳細資訊,請參閱 授予使用者將角色傳遞至 AWS 服務的許可。
此範例會示範如何建立 IAM 政策,允許啟動或停止 Amazon EC2 執行個體。只有在 Owner
執行個體標籤具有使用者名稱值時,才允許這些操作。此政策定義了程式設計和主控台存取的許可。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:StopInstances" ], "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringEquals": {"aws:ResourceTag/Owner": "${aws:username}"} } }, { "Effect": "Allow", "Action": "ec2:DescribeInstances", "Resource": "*" } ] }
您可以將此政策連接到您帳戶中的 IAM 使用者。如果使用者指定 richard-roe
嘗試啟動 Amazon EC2 執行個體,您必須為該執行個體加上標籤 Owner=richard-roe
或 owner=richard-roe
。否則,他將會收到存取遭拒。標籤鍵 Owner
同時符合 Owner
和 owner
,因為條件鍵名稱不區分大小寫。如需詳細資訊,請參閱 IAM JSON 政策元素:Condition。
在 AWS 請求期間控制存取許可
您可以在 IAM 政策中使用條件,控制可以在標記 AWS 資源的請求中傳遞哪些標籤鍵值組。
此範例會示範如何建立 IAM 政策,允許使用 Amazon EC2 CreateTags
動作以將標籤連接至執行個體。只有在標籤包含 environment
金鑰和 preprod
或 production
值時,您才能連接標籤。您可以視需要將 ForAllValues
修飾詞與 aws:TagKeys
條件金鑰搭配使用,表示只允許在請求中使用 environment
金鑰。這會使得使用者無法包含其他金鑰,例如意外使用 Environment
而非 environment
。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringEquals": { "aws:RequestTag/
environment
": [ "preprod
", "production
" ] }, "ForAllValues:StringEquals": {"aws:TagKeys": "environment
"} } } }
根據標籤索引鍵控制存取許可
您可以在 IAM 政策中使用條件,以控制是否可對資源或在請求中使用特定標籤鍵。
根據最佳實務,當您使用政策來控制使用標籤的存取時,您應該使用 aws:TagKeys 條件金鑰。支援標籤的 AWS 服務可允許您建立多個標籤鍵名稱,這些名稱可能只會有大小寫的不同,例如為 Amazon EC2 執行個體加上 stack=production
和 Stack=test
的標記。鍵名稱在政策條件中不區分大小寫。這表示如果您在政策的條件元素中指定 "aws:ResourceTag/TagKey1": "Value1"
,則該條件會符合名為 TagKey1
或 tagkey1
的資源標籤鍵 (但不會同時符合兩者)。為避免因案例而不同之鍵的重複標籤,使用 aws:TagKeys
條件來定義您的使用者可以套用的標籤鍵。
此範例會示範如何建立 IAM 政策,允許建立和標記 Secrets Manager 密碼,但僅能使用標籤鍵 environment
或 cost-center
。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "secretsmanager:CreateSecret", "secretsmanager:TagResource" ], "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "aws:TagKeys": [ "
environment
", "cost-center
" ] } } } }