傳遞工作階段標籤 AWS STS - AWS Identity and Access Management

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

傳遞工作階段標籤 AWS STS

工作階段標籤是您在中擔任IAM角色或聯合使用者時傳遞的索引鍵值配對屬性。 AWS STS您可以透過 AWS CLI 或透過您的身分提供者 (IdP) 提出 AWS STS 或 AWS API要求來執行此操作。當您使用 AWS STS 要求臨時安全登入資料時,您會產生工作階段。工作階段會過期且包含憑證,例如存取金鑰對和工作階段權杖。當您使用工作階段憑證發出後續請求時,請求內容會包含 aws:PrincipalTag 內容鍵。您可以在您政策的 aws:PrincipalTag 元素中使用 Condition 鍵來根據這些標籤允許或拒絕存取。

當您使用暫時憑證發出請求時,您的主體可能會包含一組標籤。這些標籤來自下列來源:

  1. 工作階段標籤 — 當您擔任角色或使用或聯合使用者時所傳遞的 AWS CLI 標籤。 AWS API如需有關這些操作的詳細資訊,請參閱 工作階段標記操作

  2. 傳入的可轉移工作階段標籤 – 這些標籤會從角色鏈中的上一個工作階段繼承。如需詳細資訊,請參閱本主題稍後的 使用工作階段標籤鏈結角色

  3. IAMtags — 附加到您IAM假定角色的標籤。

工作階段標記操作

您可以使用下列 AWS CLI 或中的作業來傳遞工 AWS API作階段標籤 AWS STS。 AWS Management Console 切換角色功能不允許您傳遞工作階段標籤。

您也可以將工作階段標籤設為可轉移。可轉移標籤會在角色鏈結期間保存。如需詳細資訊,請參閱使用工作階段標籤鏈結角色

下表比較了傳遞會話標籤的方法。

操作 誰可以擔任這個角色 傳遞標籤的方法 設定可轉移標籤的方法
assume-roleCLI或AssumeRoleAPI操作 IAM 使用者或工作階段 TagsAPI參數或--tagsCLI選項 TransitiveTagKeysAPI參數或--transitive-tag-keysCLI選項
assume-role-with-samlCLI或AssumeRoleWithSAMLAPI操作 使用身分提供者驗SAML證的任何使用者 PrincipalTagSAML屬性 TransitiveTagKeysSAML屬性
assume-role-with-web-identityCLI或AssumeRoleWithWebIdentityAPI操作 使用OIDC提供者驗證的任何使用者 PrincipalTagOIDC令牌 TransitiveTagKeysOIDC令牌
get-federation-tokenCLI或GetFederationTokenAPI操作 IAM使用者或根使用者 TagsAPI參數或--tagsCLI選項 不支援

在以下條件下,則支援工作階段標記的操作便可能會失敗:

  • 您傳遞的工作階段標籤數超過 50 個。

  • 工作階段標籤索引鍵的純文字超過 128 個字元。

  • 工作階段標籤值的純文字超過 256 個字元。

  • 工作階段政策純文字的總大小超過 2048 個字元。

  • 工作階段政策和標籤的合計總封裝大小太大。若操作失敗,錯誤訊息會顯示政策和標籤的合計大小與大小上限的接近程度 (以百分比)。

工作階段標籤的須知事項

使用工作階段標籤前,請檢閱下列工作階段和標籤的相關詳細資訊。

  • 使用工作階段標籤時,所有連線至傳遞標籤之身分提供者 (IdP) 之角色的信任政策必須具有 sts:TagSession 許可。對於在信任政策中沒有此許可的角色,AssumeRole 操作即會失敗。

  • 當您要求工作階段時,您可以指定主體標籤作為工作階段標籤。標籤會套用至您使用工作階段的憑證所發出的請求。

  • 工作階段標籤使用鍵值對。例如,若要將聯絡資訊新增至工作階段,您可以新增工作階段標籤鍵 email 及標籤值 johndoe@example.com

  • 工作階段標籤必須遵循在和中命名標籤IAM的規則 AWS STS。本主題包含適用於您工作階段標籤的區分大小寫及受限制字首資訊。

  • 新的工作階段標籤會覆寫具有相同標籤鍵的現有擔任角色或聯合身分使用者標籤,無論字元大小寫為何。

  • 您無法使用傳遞工作階段標籤 AWS Management Console。

  • 工作階段標籤僅對目前的工作階段有效。

  • 工作階段標籤支援角色鏈結。依預設, AWS STS 不會將標籤傳遞給後續的角色工作階段。但是,您可以將工作階段標籤設為可轉移。可轉移標籤在角色鏈結期間會持續存在,並在角色信任政策評估期間取代相符的 ResourceTag 值。如需詳細資訊,請參閱使用工作階段標籤鏈結角色

  • 您可以使用工作階段標籤來控制對資源的存取,或是控制可傳遞至後續工作階段的標籤。如需詳細資訊,請參閱 IAM自學課程:使用SAML階段作業標籤 ABAC

  • 您可以在 AWS CloudTrail 日誌中檢視您工作階段的主體標籤,包括工作階段標籤。如需詳細資訊,請參閱檢視工作階段標籤 CloudTrail

  • 您必須為每個工作階段標籤傳遞單一值。 AWS STS 不支援多值工作階段標籤。

  • 您最多可傳遞 50 個工作階段標籤。 AWS 帳戶中IAM資源的數量和大小是有限的。如需詳細資訊,請參閱IAM和 AWS STS 配額

  • AWS 轉換會將傳遞的工作階段原則和工作階段標籤合併為封裝的二進位格式,並有個別限制。如果您超過此限制, AWS CLI 或 AWS API錯誤訊息會依百分比顯示策略和標籤合併到大小上限的接近程度。

新增工作階段標籤所需的許可

除了符合作業的動API作之外,您的政策中還必須執行下列僅限權限的動作:

sts:TagSession
重要

使用工作階段標籤時,連線至身分提供者 (IdP) 之所有角色的角色信任政策必須具有 sts:TagSession 許可。任何連接至 IdP 的正在傳遞工作階段標籤之角色,在沒有此許可的情況下,AssumeRole 操作即會失敗。如果您不想更新每個角色的角色信任政策,則您可以使用個別的 IdP 執行個體傳遞工作階段標籤。然後,將 sts:TagSession 許可僅新增至連線至個別 IdP 的角色。

您可以使用 sts:TagSession 動作搭配下列條件金鑰。

  • aws:PrincipalTag – 將連接至提出請求主體的標籤,與您在政策中所指定的標籤進行比較。例如,您可以允許主體只有在主體提出具備指定標籤的請求時,才能傳遞工作階段標籤。

  • aws:RequestTag – 將請求中傳遞的標籤鍵值對與您在政策中所指定的標籤對進行比較。例如,您可以允許主體傳遞指定工作階段標籤,但僅限指定的值。

  • aws:ResourceTag – 將您在政策中所指定的標籤鍵值對與連接到資源的鍵值對進行比較。例如,您可以允許主體僅在其擔任的角色包含指定標籤時,才能傳遞工作階段標籤。

  • aws:TagKeys – 將請求中的標籤鍵與您在政策中所指定的鍵進行比較。例如,您可以只允許主體傳遞具備指定標籤鍵的工作階段標籤。此條件索引鍵會限制可傳遞的工作階段標籤組上限。

  • sts:TransitiveTagKeys - 將請求中的可轉移工作階段標籤鍵與政策中指定的標籤鍵進行比較。例如,您可以撰寫政策,只允許主體將特定標籤設為可轉移。可轉移標籤會在角色鏈結期間保存。如需詳細資訊,請參閱 使用工作階段標籤鏈結角色

例如,以下角色信任政策會允許 test-session-tags 使用者擔任連接政策的角色。當該使用者擔任該角色時,他們必須使用 AWS CLI 或 AWS API來傳遞三個必要的工作階段標籤和必要的外部 ID。此外,使用者可以選擇將 ProjectDepartment 標籤設為可轉移。

範例 工作階段標籤的角色信任政策範例
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowIamUserAssumeRole", "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": {"AWS": "arn:aws:iam::123456789012:user/test-session-tags"}, "Condition": { "StringLike": { "aws:RequestTag/Project": "*", "aws:RequestTag/CostCenter": "*", "aws:RequestTag/Department": "*" }, "StringEquals": {"sts:ExternalId": "Example987"} } }, { "Sid": "AllowPassSessionTagsAndTransitive", "Effect": "Allow", "Action": "sts:TagSession", "Principal": {"AWS": "arn:aws:iam::123456789012:user/test-session-tags"}, "Condition": { "StringLike": { "aws:RequestTag/Project": "*", "aws:RequestTag/CostCenter": "*" }, "StringEquals": { "aws:RequestTag/Department": [ "Engineering", "Marketing" ] }, "ForAllValues:StringEquals": { "sts:TransitiveTagKeys": [ "Project", "Department" ] } } } ] }

此政策的功能為何?

  • AllowIamUserAssumeRole 陳述式允許 test-session-tags 使用者擔任連接政策的角色。當該使用者擔任角色時,他們必須傳遞必要的工作階段標籤和外部 ID

    • 此陳述式的第一個條件區塊要求使用者傳遞 ProjectCostCenterDepartment 工作階段標籤。由於標籤值在此陳述式中不重要,因此您可以針對標籤值使用萬用字元 (*)。此區塊會確保使用者至少傳遞這三個工作階段標籤。否則,操作會失敗。使用者可傳遞其他標籤。

    • 第二個條件區塊則會要求使用者傳遞值為 Example987外部 ID

  • AllowPassSessionTagsAndTransitive 陳述式允許 sts:TagSession 僅許可動作。必須先允許此動作,使用者才能傳遞工作階段標籤。如果您的政策包含第一個陳述式,但沒有第二個陳述式,使用者便無法擔任角色。

    • 此陳述式的第一個條件區塊允許使用者針對 CostCenterProject 工作階段標籤傳遞任何值。您可以使用萬用字元 (*) 做為原則中的標籤值,這會要求您使用StringLike條件運算子。

    • 第二個條件區塊則只會允許使用者針對 Engineering 工作階段標籤傳遞 MarketingDepartment 值。

    • 第三個條件區塊則會列出您可設為可轉移的標籤組上限。使用者可以選擇將一部分,或是不將任何標籤設為可轉移。使用者無法將其他標籤設為可轉移。您可以新增另一個包含 "Null":{"sts:TransitiveTagKeys":"false"} 的條件區塊,來要求使用者將其中至少一個標籤設為可轉移。

使用傳遞會話標籤 AssumeRole

AssumeRole作業會傳回一組可用來存取 AWS 資源的暫時認證。您可以使用使用IAM者或角色認證來呼叫AssumeRole。要在擔任角色時傳遞會話標籤,請使用--tags AWS CLI 選項或Tags AWS API參數。

若要將標籤設定為可轉移,請使用--transitive-tag-keys AWS CLI 選項或TransitiveTagKeys AWS API參數。可轉移標籤會在角色鏈結期間保存。如需詳細資訊,請參閱 使用工作階段標籤鏈結角色

以下範例顯示使用 AssumeRole 的範例請求。在此範例中,當您擔任 my-role-example 角色時,您可以建立名為 my-session 的工作階段。您可以新增工作階段標籤鍵/值對 Project = AutomationCostCenter = 12345Department = Engineering。您也可以透過指定其鍵,將 ProjectDepartment 標籤設為可轉移。您必須為每個工作階段標籤傳遞單一值。 AWS STS 不支援多值工作階段標籤。

範例 AssumeRole CLI請求示例
aws sts assume-role \ --role-arn arn:aws:iam::123456789012:role/my-role-example \ --role-session-name my-session \ --tags Key=Project,Value=Automation Key=CostCenter,Value=12345 Key=Department,Value=Engineering \ --transitive-tag-keys Project Department \ --external-id Example987

使用傳遞會話標籤 AssumeRoleWith SAML

AssumeRoleWithSAML作業會使用SAML以聯合為基礎的驗證。此作業會傳回一組可用來存取 AWS 資源的暫時認證。如需有關使用SAML基於聯合進行 AWS Management Console 存取的詳細資訊,請參閱啟用 SAML 2.0 聯合身分的使用者存取 AWS Management Console。如需有關 AWS CLI 或 AWS API存取的詳細資訊,請參閱SAML联邦。如需為 Active Directory 使用者設定SAMLAWS 同盟的教學課程,請參閱 AWS 安全性部落格中的使用中目錄同盟服務的同盟驗證 (ADFS)

身為系統管理員,您可以允許公司目錄的成員 AWS 使用此 AWS STS AssumeRoleWithSAML作業聯合。若要執行此操作,您必須完成下列任務:

AWS 包括具有認證 end-to-end 經驗的身份提供者,以及其身份解決方案的會話標籤 如要了解如何使用這些身分提供者來設定工作階段標籤,請參閱 將第三方 SAML 解決方案提供者與 AWS

若要傳遞SAML屬性作為工作階段標籤,請包含Name屬性設定為的Attribute元素https://aws.amazon.com/SAML/Attributes/PrincipalTag:{TagKey}。使用 AttributeValue 元素指定標籤的值。為每個工作階段標籤包含個別的 Attribute 元素。

例如,假設您希望將下列身分屬性做為工作階段標籤傳遞:

  • Project:Automation

  • CostCenter:12345

  • Department:Engineering

要傳遞這些屬性,請在SAML斷言中包含以下元素。

範例 SAML斷言的示例片段
<Attribute Name="https://aws.amazon.com/SAML/Attributes/PrincipalTag:Project"> <AttributeValue>Automation</AttributeValue> </Attribute> <Attribute Name="https://aws.amazon.com/SAML/Attributes/PrincipalTag:CostCenter"> <AttributeValue>12345</AttributeValue> </Attribute> <Attribute Name="https://aws.amazon.com/SAML/Attributes/PrincipalTag:Department"> <AttributeValue>Engineering</AttributeValue> </Attribute>

如要將前述標籤設為可轉移,請在其中包含另一個 Attribute 元素,並將其 Name 屬性設為 https://aws.amazon.com/SAML/Attributes/TransitiveTagKeys。可轉移標籤會在角色鏈結期間保存。如需詳細資訊,請參閱 使用工作階段標籤鏈結角色

如要將 ProjectDepartment 標籤設為可轉移,請使用以下多值屬性:

範例 SAML斷言的示例片段
<Attribute Name="https://aws.amazon.com/SAML/Attributes/TransitiveTagKeys"> <AttributeValue>Project</AttributeValue> <AttributeValue>Department</AttributeValue> </Attribute>

使用傳遞會話標籤 AssumeRoleWithWebIdentity

使用 OpenID Connect (OIDC) 相容的聯盟來驗證AssumeRoleWithWebIdentity作業。此作業會傳回一組可用來存取 AWS 資源的暫時認證。如需有關使用 Web 身分同盟進行 AWS Management Console 存取的詳細資訊,請參閱OIDC联邦

要從 OpenID Connect(OIDC)傳遞會話標籤,您必須在 JSON Web 令牌(JWT)中包含會話標記。在您提交 https://aws.amazon.com/tags 請求時,您必須在權杖中的 AssumeRoleWithWebIdentity 命名空間內包含工作階段標籤。要了解有關OIDC令牌和聲明的更多信息,請參閱Amazon Cognito 開發人員指南中的將令牌與用戶池一起使用。

例如,以下解碼JWT使用令牌AssumeRoleWithWebIdentityProjectCostCenterDepartment會話標籤一起調用。權杖也會將 ProjectCostCenter 標籤設為可轉移。可轉移標籤會在角色鏈結期間保存。如需詳細資訊,請參閱使用工作階段標籤鏈結角色

範例 解碼的 JSON Web 令牌示例
{ "sub": "johndoe", "aud": "ac_oic_client", "jti": "ZYUCeRMQVtqHypVPWAN3VB", "iss": "https://xyz.com", "iat": 1566583294, "exp": 1566583354, "auth_time": 1566583292, "https://aws.amazon.com/tags": { "principal_tags": { "Project": ["Automation"], "CostCenter": ["987654"], "Department": ["Engineering"] }, "transitive_tag_keys": [ "Project", "CostCenter" ] } }

使用傳遞會話標籤 GetFederationToken

GetFederationToken 允許您聯合您的使用者。此作業會傳回一組可用來存取 AWS 資源的暫時認證。若要將標籤新增至您的同盟使用者工作階段,請使用--tags AWS CLI 選項或Tags AWS API參數。當您使用時,您無法將工作階段標籤設為可轉移GetFederationToken,因為您無法使用臨時憑證來擔任角色。在這種情況下,您無法使用角色鏈結。

以下範例顯示使用 GetFederationToken 的範例請求。在此範例中,當您請求權杖時,您會建立名為 my-fed-user 的工作階段。您可以新增工作階段標籤鍵/值對 Project = AutomationDepartment = Engineering

範例 GetFederationToken CLI請求示例
aws sts get-federation-token \ --name my-fed-user \ --tags key=Project,value=Automation key=Department,value=Engineering

當您使用 GetFederationToken 操作傳回的暫時憑證時,工作階段的主體標籤會包含使用者的標籤和傳遞的工作階段標籤。

使用工作階段標籤鏈結角色

您可以擔任一個角色,然後使用暫時憑證來擔任另一個角色。您可以從一個工作階段繼續前往另一個工作階段。這稱為角色鏈結。當您在擔任角色期間傳遞工作階段標籤時,您可以將鍵設為可轉移。這可確保會在角色鏈中,將這些工作階段標籤傳遞到後續的工作階段。您無法將角色標籤設為可轉移。如要將這些標籤傳遞至後續工作階段,請將這些標籤指定為工作階段標籤。

注意

可轉移標籤在角色鏈結期間會持續存在,並在角色信任政策評估期間取代相符的 ResourceTag 值。

下列範例顯示如何將工作階段標籤、轉移標籤和角色標籤 AWS STS 傳遞至角色鏈中的後續工作階段。

在此範例角色鏈結案例中,您可以使用中的使用IAM者存取金鑰 AWS CLI 來承擔名為Role1的角色。您接著會使用產生的工作階段憑證來擔任名為 Role2 的第二個角色。您接著可以使用第二個工作階段憑證來擔任名為 Role3 的第三個角色。這些請求會以三個不同操作的形式發生。中已標記每個角色IAM。而在每個請求期間,您會傳遞其他工作階段標籤。

角色鏈結

鏈結角色時,您可以確保將先前工作階段的標籤保存到後續工作階段。若要使用assume-roleCLI指令執行此操作,您必須將標籤作為工作階段標籤傳遞,並將標籤設定為可傳遞。您將標籤 Star = 1 設為工作階段標籤。命令還會將標籤 Heart = 1 連接到角色,並在您使用工作階段時作為主體標籤套用。但是,您也希望 Heart = 1 標籤能自動傳遞到第二個或第三個工作階段。若要執行此作業,您可以手動將其做為工作階段標籤包含在其中。產生的工作階段主體標籤包含這兩個標籤,並將其設定為可轉移。

擔任角色鏈中的第一個角色

您可以使用下列 AWS CLI 命令來執行此要求:

範例 AssumeRole CLI請求示例
aws sts assume-role \ --role-arn arn:aws:iam::123456789012:role/Role1 \ --role-session-name Session1 \ --tags Key=Star,Value=1 Key=Heart,Value=1 \ --transitive-tag-keys Star Heart

然後,您可以使用該工作階段的憑證來擔任 Role2。命令會將標籤 Sun = 2 連接至第二個角色,並在您使用第二個工作階段時作為主體標籤套用。HeartStar 標籤會繼承自第一個工作階段中的可轉移工作階段。第二個工作階段所產生的主體標籤是 Heart = 1Star = 1Sun = 2HeartStar 會繼續處於可轉移狀態。連接至 Role2Sun 標籤並未標記為可轉移,因為其不是工作階段標籤。未來的工作階段不會繼承此標籤。

擔任角色鏈中的第二個角色

您可以使用下列 AWS CLI 命令執行第二個要求:

範例 AssumeRole CLI請求示例
aws sts assume-role \ --role-arn arn:aws:iam::123456789012:role/Role2 \ --role-session-name Session2

您接著會使用第二個工作階段憑證來擔任 Role3。第三個工作階段的主體標籤是來自任何新的工作階段標籤、繼承的可轉移工作階段標籤,以及角色標籤。第二個工作階段上的 Heart = 1Star = 1 標籤是繼承自第一個工作階段中的可轉移工作階段標籤。如您嘗試傳遞 Sun = 2 工作階段標籤,操作將會失敗。繼承的 Star = 1 工作階段標籤會覆寫角色的 Star = 3 標籤。在角色鏈結過程中,進行角色信任政策評估之後,可轉移標籤的值會覆寫與 ResourceTag 值相符的角色。在此範例中,若 Role3 在角色信任政策中使用 Star 作為 ResourceTag,並將 ResourceTag 值設定為來自呼叫角色工作階段的可轉移標籤值。角色的 Lightning 標籤也會套用到第三個工作階段,且並未設為可轉移。

擔任角色鏈中的第三個角色

您可以使用下列 AWS CLI 命令執行第三個要求:

範例 AssumeRole CLI請求示例
aws sts assume-role \ --role-arn arn:aws:iam::123456789012:role/Role3 \ --role-session-name Session3

使用工作階段標籤 ABAC

以屬性為基礎的存取控制 (ABAC) 使用根據標籤屬性定義權限的授權策略。

如果您的公司使用SAML基於OIDC或的身分識別提供者 (IdP) 來管理使用者身分識別,您可以設定宣告以將工作階段標記傳遞給。 AWS例如,對於公司使用者識別,當您的員工聯合到時 AWS,會將其屬性 AWS 套用至其產生的主參與者。然後,您可以根據這些屬性使用ABAC來允許或拒絕權限。如需詳細資訊,請參閱 IAM自學課程:使用SAML階段作業標籤 ABAC

如需搭配使用 IAM Identity Center 的詳細資訊ABAC,請參閱《使指南》中的AWS IAM Identity Center 用於存取控制的屬性

檢視工作階段標籤 CloudTrail

您可以使用 AWS CloudTrail 來檢視用來擔任角色或同盟使用者的要求。記 CloudTrail錄檔案包含指定角色或同盟使用者工作階段之主要標籤的相關資訊。如需詳細資訊,請參閱記錄IAM和 AWS STS API通話 AWS CloudTrail

例如,假設您提出 AWS STS AssumeRoleWithSAML要求、傳遞工作階段標籤,並將這些標籤設定為可傳遞。您可以在 CloudTrail 日誌中找到以下信息。

範例 AssumeRoleWithSAML CloudTrail 記錄
"requestParameters": { "sAMLAssertionID": "_c0046cEXAMPLEb9d4b8eEXAMPLE2619aEXAMPLE", "roleSessionName": "MyRoleSessionName", "principalTags": { "CostCenter": "987654", "Project": "Unicorn" }, "transitiveTagKeys": [ "CostCenter", "Project" ], "durationSeconds": 3600, "roleArn": "arn:aws:iam::123456789012:role/SAMLTestRoleShibboleth", "principalArn": "arn:aws:iam::123456789012:saml-provider/Shibboleth" },

您可以檢視下列範例 CloudTrail 記錄,以檢視使用工作階段標記的事件。