使用標籤控制 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、或執行作業,例如在 Amazon S3 中建立儲存貯體。 AWS Management Console 當您這麼做時,您會為該操作傳送請求。您的請求指定動作、資源、主體實體 (使用者或角色)、主體帳戶,以及所需的任何請求資訊。所有這些資訊提供了上下文

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

AWS 只有在政策允許您的請求的每個部分時,才會授權請求。若要檢視圖表並進一步瞭解IAM基礎結構,請參閱如何IAM工作。如需如何IAM判斷是否允許請求的詳細資訊,請參閱政策評估邏輯

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

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

  • 資源 — 根據這些資源上的標籤控制對 AWS 服務資源的存取。要做到這一點,使用 ResourceTag/key-name條件鍵,用於確定是否允許根據附加到資源的標籤訪問資源。

  • 請求 – 控制您可以在請求中傳遞哪些標籤。要做到這一點,使用 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,因為條件金鑰名稱不區分大小寫。如需詳細資訊,請參閱IAMJSON政策元素:Condition

此範例顯示如何建立使用資源中team主參與者標籤的身分識別型原則。ARN該政策會授與刪除 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" ] } } }