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

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

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

您可以使用標籤來控制對支援標記 (包括 IAM AWS 資源) 之資源的存取。您可以標記 IAM 使用者和角色,來控制他們可以存取的內容。若要了解如何標記 IAM 使用者和角色,請參閱 標記 IAM 資源。此外,您可以控制對下列 IAM 資源的存取:客戶管理政策、IAM 身分提供者、執行個體設定檔、伺服器憑證和虛擬 MFA 裝置。若要檢視建立和測試允許具有主體標籤的 IAM 角色政策,以相符標籤存取資源的教學,請參閱 IAM 教學課程:根據標籤定義存取 AWS 資源的許可。使用下一節中的資訊來控制對其他 AWS 資源 (包括 IAM 資源) 的存取,而無需標記 IAM 使用者或角色。

在您使用標籤來控制對 AWS 資源的存取之前,您必須瞭解如何 AWS 授予存取權。 AWS 由資源集合組成。Amazon EC2 執行個體是一種資源。Amazon S3 儲存貯體即為資源。您可以使用 AWS API AWS CLI、或執行作業,例如在 Amazon S3 中建立儲存貯體。 AWS Management Console 當您這麼做時,您會為該操作傳送請求。您的請求指定動作、資源、主體實體 (使用者或角色)、主體帳戶,以及所需的任何請求資訊。所有這些資訊提供了上下文

AWS 然後檢查您(主體實體)是否通過身份驗證(登錄)和授權(有權限)對指定的資源執行指定的操作。在授權期間, AWS 會檢查適用於請求內容的所有原則。大多數原則會 AWS 以 JSON 文件的形式儲存在中,並指定主體實體的權限。如需有關政策類型及其使用的詳細資訊,請參閱 IAM 中的政策和許可

AWS 只有在政策允許您的請求的每個部分時,才會授權請求。若要查看圖表和進一步了解 IAM 基礎設施的詳細資訊,請參閱 IAM 的運作方式。有關 IAM 如何決定是否允許請求的詳細資訊,請參閱 政策評估邏輯

標籤是這個程序中的另一項考慮因素,因為您可以將標籤連接到資源或在請求中將標籤傳遞至支援標籤的服務。若要根據標籤控制存取,則在政策的條件元素中提供標籤資訊。若要瞭解 AWS 服務是否支援使用標記控制存取權,請參閱AWS 與 IAM 搭配使用的服務並尋找 ABAC 資料行中具有 [是] 的服務。選擇服務的名稱,以檢視該服務的授權和存取控制文件。

然後,您可以建立 IAM 政策,這類政策可根據該資源的標籤允許或拒絕對某資源的存取。在該政策中,您可以使用標籤條件金鑰,以控制執行下列項目的存取權:

  • 資源 — 根據這些資源上的標籤控制對 AWS 服務資源的存取。要執行此操作,請使用 ResourceTag/鍵名條件鍵來確定是否允許根據附加到資源的標籤訪問資源。

  • 請求 – 控制您可以在請求中傳遞哪些標籤。要做到這一點,請使用 aws:RequestTag/key name 條件鍵來指定可以在請求中傳遞哪些標籤鍵值對來標記資源。 AWS

  • 授權程序的任何部分 — 使用 aws: TagKeys condition 金鑰控制特定標籤金鑰是否可以在請求中。

您可以使用 JSON,或匯入現有的受管政策,透過視覺化的方式來建立 IAM 政策。如需詳細資訊,請參閱 建立 IAM 政策

注意

如果使用者有權使用建立資源的動作,部分服務允許使用者在建立資源時指定標籤。

控制 AWS 資源的存取許可

您可以使用 IAM 政策中的條件,根據該 AWS 資源上的標籤來控制對資源的存取。作法是使用全域 aws:ResourceTag/tag-key 條件金鑰,或服務特定索引鍵。某些服務僅支援此索引鍵的服務特定版本,而不支援全域版本。

警告

請勿嘗試透過標記角色,然後使用政策中的 ResourceTag 條件金鑰搭配 iam:PassRole 動作來控制誰可以傳遞角色。這種方法所產生的結果並不可靠。如需有關傳遞角色至服務之必要許可的詳細資訊,請參閱 授予使用者將角色傳遞至 AWS 服務的許可

此範例會示範如何建立身分型政策,它允許啟動或停止 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

此範例會示範如何建立在資源 ARN 中使用 team 主體標籤的身分型政策。該政策會授與刪除 Amazon Simple Queue Service 佇列的許可,但前提是佇列名稱必須以團隊名稱為開頭,並在後面接著 -queue。例如,qa-queue if qateam 主體標籤的團隊名稱。

{ "Version": "2012-10-17", "Statement": { "Sid": "AllQueueActions", "Effect": "Allow", "Action": "sqs:DeleteQueue", "Resource": "arn:aws:sqs:us-east-2::${aws:PrincipalTag/team}-queue" } }

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

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

此範例會示範如何建立身分型政策,它允許使用 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 支援標籤的服務可能允許您建立多個僅因大小寫而不同的標籤金鑰名稱,例如使用stack=production和標記 Amazon EC2 執行個體Stack=test。鍵名稱在政策條件中不區分大小寫。這表示如果您在政策的條件元素中指定 "aws:ResourceTag/TagKey1": "Value1",則該條件會符合名為 TagKey1tagkey1 的資源標籤鍵 (但不會同時符合兩者)。未免出現鍵大小寫差異導致的重複標籤,請使用 aws:TagKeys 條件來定義使用者可以套用的標籤鍵,或使用 AWS Organizations提供的標籤政策。如需詳細資訊,請參閱《Organizations 使用者指南》中的標籤政策

此範例會示範如何建立身分型政策,它允許建立和標記 Secrets Manager 密碼,但僅能使用標籤索引鍵 environmentcost-centerNull 條件可確保如果請求中沒有標籤,條件將評估為 false

{ "Effect": "Allow", "Action": [ "secretsmanager:CreateSecret", "secretsmanager:TagResource" ], "Resource": "*", "Condition": { "Null": { "aws:TagKeys": "false" }, "ForAllValues:StringEquals": { "aws:TagKeys": [ "environment", "cost-center" ] } } }