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

在 AWS STS 中傳遞工作階段標籤

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

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

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

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

  3. IAM 標籤 – 連接至 IAM 的標籤擔任角色。

工作階段標記操作

您可以在 AWS CLI 中使用下列 AWS 或 AWS STS API 操作來傳遞工作階段標籤。「AWS Management ConsoleSwitch Role (切換角色) 功能不允許您傳遞工作階段標籤。」

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

比較傳遞工作階段標籤的方法
操作 誰可以擔任這個角色 傳遞標籤的方法 設定可轉移標籤的方法
assume-role CLI 或 AssumeRole API 操作 IAM 使用者或工作階段 Tags API 參數或 --tags CLI 選項 TransitiveTagKeys API 參數或 --transitive-tag-keys CLI 選項
assume-role-with-saml CLI 或 AssumeRoleWithSAML API 操作 使用 SAML 身分提供者進行身分驗證的任何使用者 PrincipalTag SAML 屬性 TransitiveTagKeys SAML 屬性
assume-role-with-web-identity CLI 或 AssumeRoleWithWebIdentity API 操作 使用 Web 身分提供者進行身分驗證的使用者 PrincipalTag web 身分權杖 TransitiveTagKeys web 身分權杖
get-federation-token CLI 或 GetFederationToken API 操作 IAM 使用者或根使用者 Tags API 參數或 --tags CLI 選項 不支援

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

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

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

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

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

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

工作階段標籤的須知事項

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

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

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

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

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

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

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

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

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

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

  • 您可以在 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 標籤設為可轉移。

範例 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

使用 AssumeRoleWithSAML 傳遞工作階段標籤

AssumeRoleWithSAML 操作是使用 SAML 類型的聯合進行身分驗證。此操作會傳回一組暫時憑證,讓您用來存取 AWS 資源。如需有關使用 SAML 類型聯合以存取 AWS Management Console的資訊,請參閱 使 SAML 2.0 聯合身分使用者能夠存取 AWS Management Console。如需 AWS CLI 或 AWS API 存取的詳細資訊,請參閱 關於以 SAML 2.0 為基礎的聯合身分。如需為您的 Active Directory 使用者設定 SAML 聯合的教學,請參閱 AWS 安全部落格中的搭配 Active Directory 同盟服務 (ADFS) 的 AWS 聯合身分驗證

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

AWS 包含使用其身分解決方案,針對工作階段標籤具備經認證端對端體驗的身分提供者。如要了解如何使用這些身分提供者來設定工作階段標籤,請參閱 第三方 SAML 解決方案提供者與 AWS 進行整合

如要將 SAML 屬性做為工作階段標籤傳遞,請在其中包含 Attribute 元素,並將其 Name 屬性設為 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) 相容的 web 聯合身分對 AssumeRoleWithWebIdentity 操作進行身分驗證。此操作會傳回一組暫時憑證,讓您用來存取 AWS 資源。如需有關使用 web 聯合身分存取 AWS Management Console 的詳細資訊,請參閱 關於 Web 聯合身分

如要從 OpenID Connect (OIDC) 傳遞工作階段標籤,您必須在 JSON Web 權杖 (JWT) 中包含工作階段標籤。在您提交 http://aws.amazon.com/tags 請求時,您必須在權杖中的 AssumeRoleWithWebIdentity 命名空間內包含工作階段標籤。若要進一步了解 OIDC 權杖和要求,請參閱《Amazon Cognito 開發人員指南》中的搭配使用者集區使用權杖

例如,以下解碼後的 JWT 會使用權杖搭配 ProjectCostCenterDepartment 工作階段標籤來呼叫 AssumeRoleWithWebIdentity。權杖也會將 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 操作傳回的暫時憑證時,工作階段的委託人標籤會包含使用者的標籤和傳遞的工作階段標籤。

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

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

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

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


        角色鏈結

鏈結角色時,您可以確保將先前工作階段的標籤保存到後續工作階段。若要執行此操作,請使用 assume-role CLI 命令;您必須將標籤作為工作階段標籤傳遞,並將標籤設為可轉移。您將標籤 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 標籤是繼承自第一個工作階段中的可轉移工作階段標籤。如您嘗試傳遞 Heart = 3 工作階段標籤,操作將會失敗。繼承的 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) 會使用一種授權策略,根據標籤屬性定義許可。

如果您的公司使用 OIDC 或 SAML 類型的身分提供者 (IdP) 來管理使用者身分,您可以將您的聲明設為將工作階段標籤傳遞到 AWS。例如,使用公司使用者身分識別,當您的員工聯合 AWS 時,AWS 會將其屬性套用至其產生的委託人。您接著可以使用 ABAC 來根據這些屬性允許或拒絕許可。如需詳細資訊,請參閱 IAM 教學課程:針對 ABAC 使用 SAML 工作階段標記

如需有關 AWS SSO 搭配 ABAC 使用的詳細資訊,請參閱《AWS Single Sign-On 使用者指南》中的存取控制的屬性

在 CloudTrail 中檢視工作階段標籤

您可以使用 AWS CloudTrail 來檢視為了擔任角色或聯合身分使用者而提出的請求。CloudTrail 日誌檔案包含經擔任角色或聯合身分使用者工作階段的委託人標籤資訊。如需詳細資訊,請參閱 使用 AWS CloudTrail 記錄 IAM 和 AWS STS API 呼叫

例如,假設您提出了 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 日誌,來檢視使用工作階段標籤的事件。