使用標籤控制對 AWS 資源的存取權 - AWS Identity and Access Management

使用標籤控制對 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 政策,這類政策可根據該資源的標籤允許或拒絕對某資源的存取。在該政策中,您可以使用標籤條件金鑰,以控制執行下列項目的存取權:

  • 資源 – 據這些資源的標籤控制對 – AWS服務資源的存取。若要執行此操作,請使用 ResourceTag/key-name 條件鍵,以判斷是否允許根據資源連接的標籤來存取資源。

  • 請求 – 控制您可以在請求中傳遞哪些標籤。若要執行此操作,請使用 aws:RequestTag/key-name 條件金鑰,指定可以在請求中傳遞哪些標籤鍵/值組來標記或取消標記 AWS 資源。

  • 授權程序的任何部分 – 使用 aws:TagKeys 條件金鑰,以控制特定標籤金鑰是否可用於資源或請求中。

您可以使用 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-roeowner=richard-roe。否則,他將會收到存取遭拒。標籤鍵 Owner 同時符合 Ownerowner,因為條件鍵名稱不區分大小寫。如需詳細資訊,請參閱 IAM JSON 政策元素:Condition

在 AWS 請求期間控制存取許可

您可以在 IAM 政策中使用條件,控制可以在標記 AWS 資源的請求中傳遞哪些標籤鍵值組。

此範例會示範如何建立 IAM 政策,允許使用 Amazon EC2 CreateTags 動作以將標籤連接至執行個體。只有在標籤包含 environment 金鑰和 preprodproduction 值時,您才能連接標籤。您可以視需要將 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=productionStack=test 的標記。鍵名稱在政策條件中不區分大小寫。這表示如果您在政策的條件元素中指定 "aws:ResourceTag/TagKey1": "Value1",則該條件會符合名為 TagKey1tagkey1 的資源標籤鍵 (但不會同時符合兩者)。為避免因案例而不同之鍵的重複標籤,使用 aws:TagKeys 條件來定義您的使用者可以套用的標籤鍵。

此範例會示範如何建立 IAM 政策,允許建立和標記 Secrets Manager 密碼,但僅能使用標籤鍵 environmentcost-center

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "secretsmanager:CreateSecret", "secretsmanager:TagResource" ], "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "aws:TagKeys": [ "environment", "cost-center" ] } } } }