包含標籤和 AWS Organizations 的以屬性為基礎的存取控制 - AWS Organizations

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

包含標籤和 AWS Organizations 的以屬性為基礎的存取控制

以屬性為基礎的存取控制可讓您使用管理員受管屬性,例如連接至 AWS 資源和 AWS 身分的標籤,來控制對這些資源的存取。例如,您可以指定當使用者和資源對特定標籤具有相同的值時,使用者可以存取資源。

AWS Organizations 可標記資源包括 AWS 帳戶、組織的根、組織單位 (OU),或者政策。當您將標籤連接至 Organizations 資源時,您可以使用這些標籤來控制誰可以存取這些資源。作法如下:將 Condition 元素新增至您的 AWS Identity and Access Management (IAM) 許可政策陳述式,可在允許執行動作之前檢查某些標籤鍵和值是否存在。這可讓您建立 IAM 政策,以有效地說明「允許使用者僅管理那些以鍵 X 和值 Y 來標記的 OU」或「允許使用者僅管理那些使用與使用者連接的 Z 標籤鍵具有相同值的鍵 Z 來標記的 OU。」

您可以根據 IAM 政策中不同類型的標籤參考來進行 Condition 測試。

如需有關在政策中使用標籤進行存取控制的詳細資訊,請參閱使用資源標籤來控制對 IAM 使用者和角色的存取。如需 IAM 許可政策的完整語法,請參閱 IAM JSON 政策參考

檢查連接至請求中指定資源的標籤

當您使用 AWS Management Console、AWS Command Line Interface (AWS CLI),或其中一個 AWS 開發套件提出請求時,您可以指定要使用該請求存取的資源。無論您是嘗試列出指定類型的可用資源、讀取資源,或者寫入、修改或更新資源,都必須指定要存取的資源作為請求中的參數。這類請求由您連接至使用者和角色的 IAM 許可政策控制。在這些政策中,您可以比較連接至請求資源的標籤,並根據這些標籤的鍵和值選擇允許或拒絕存取。

若要檢查連接至資源的標籤,您可以使用以下字串前面的標籤鍵名稱參考 Condition 元素中的標籤:aws:ResourceTag/

例如,下列範例政策允許使用者或角色執行任何 AWS Organizations 操作,除非該資源具有包含鍵 department 和值 security 的標籤。如果該鍵和值存在,則政策會明確拒絕 UntagResource 操作。

{ "Version" : "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : "organizations:*", "Resource" : "*" }, { "Effect" : "Deny", "Action" : "organizations:UntagResource", "Resource" : "*", "Condition" : { "StringEquals" : { "aws:ResourceTag/department" : "security" } } } ] }

如需如何使用此元素的詳細資訊,請參閱 IAM 使用者指南中的控制對資源的存取aws:ResourceTag

檢查連接至提出請求之 IAM 使用者或角色的標籤

您可以根據連接至該人員 IAM 使用者或角色的標籤,控制提出請求的人員 (委託人) 可執行的操作。若要執行此操作,請使用 aws:PrincipalTag/key-name 條件索引鍵來指定哪些標籤和值必須連接至呼叫的使用者或角色。

以下範例顯示如何僅在以下情況下允許動作︰指定的標籤 (cost-center) 在呼叫操作的委託人和操作正在存取的資源上均具有相同的值。在此範例中,呼叫使用者只有在使用與使用者相同的 cost-center 值標記執行個體時,才會開始和停止 Amazon EC2 執行個體。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "ec2:startInstances", "ec2:stopInstances" ], "Resource": "*", "Condition": {"StringEquals": {"ec2:ResourceTag/cost-center": "${aws:PrincipalTag/cost-center}"}} } }

如需如何使用此元素的詳細資訊,請參閱 IAM 使用者指南中的控制對 IAM 委託人的存取aws:PrincipalTag

檢查請求中包含作為參數的標籤

若干操作可讓您指定標籤作為請求的一部分。例如,當您建立資源時,可以指定連接至新資源的標籤。您可以指定 Condition 元素,其使用 aws:TagKeys 以根據請求中是否包含特定標籤鍵或一組鍵,來允許或拒絕操作。此比較運算子不關心標籤包含的值。它只檢查具有指定鍵的標籤是否存在。

若要檢查標籤鍵或標籤鍵清單,請指定具有以下語法的 Condition 元素:

"aws:TagKeys": [ "tag-key-1", "tag-key-2", ... , "tag-key-n" ]

您可以使用 ForAllValues: 以比較運算子為開頭,確保請求中的所有鍵都必須符合政策中指定的其中一個鍵。例如,下列範例政策僅在全部三個指定標籤鍵均存在於請求中時,才會允許任何 Organizations 操作。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "organizations:*", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "aws:TagKeys": [ "department", "costcenter", "manager" ] } } } }

或者,您可以使用 ForAnyValue: 以比較運算子為開頭,確保請求中的至少其中一個鍵必須符合政策中指定的其中一個鍵。例如,下列政策僅在至少一個指定標籤鍵均存在於請求中時,才會允許任何 Organizations 操作。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "organizations:*", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:TagKeys": [ "stage", "region", "domain" ] } } } }

若干操作可讓您在請求中指定標籤。例如,當您建立資源時,可以指定連接至新資源的標籤。您可以將政策中的標籤鍵/值對與請求隨附的鍵/值對作比較。為此,透過在標籤鍵名稱前面加上以下字串來參考 Condition 元素中的標籤:aws:RequestTag/key-name,然後指定必須存在的標籤值。

例如,下列範例政策會拒絕使用者或角色建立 AWS 帳戶 的任何請求,其中請求要么缺少 costcenter 標籤,要麼為該標籤提供了 123 之外的值。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "organizations:CreateAccount", "Resource": "*", "Condition": { "Null": { "aws:RequestTag/costcenter": "true" } } }, { "Effect": "Deny", "Action": "organizations:CreateAccount", "Resource": "*", "Condition": { "ForAnyValue:StringNotEquals": { "aws:RequestTag/costcenter": [ "1", "2", "3" ] } } } ] }

如需如何使用這些元素的詳細資訊,請參閱 IAM 使用者指南中的 aws:TagKeysaws:RequestTag