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

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

傳遞工作階段標籤 AWS STS

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

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

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

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

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

工作階段標記操作

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

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

比較傳遞工作階段標籤的方法
操作 誰可以擔任這個角色 傳遞標籤的方法 設定可轉移標籤的方法
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 操作 使用 OIDC 提供者驗證的任何使用者 PrincipalTagOIDC 令牌 TransitiveTagKeysOIDC 令牌
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

使用 AssumeRoleWith SAML 傳遞工作階段標記

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

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

AWS 包括具有認證 end-to-end 經驗的身份提供者,以及其身份解決方案的會話標籤 如要了解如何使用這些身分提供者來設定工作階段標籤,請參閱 將第三方 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) 相容的聯盟來驗證作業。AssumeRoleWithWebIdentity此作業會傳回一組可用來存取 AWS 資源的暫時認證。如需有關使用 Web 身分同盟進行 AWS Management Console 存取的詳細資訊,請參閱OIDC 聯盟

如要從 OpenID Connect (OIDC) 傳遞工作階段標籤,您必須在 JSON Web 權杖 (JWT) 中包含工作階段標籤。在您提交 https://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 操作傳回的暫時憑證時,工作階段的主體標籤會包含使用者的標籤和傳遞的工作階段標籤。

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

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

注意

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

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

在此範例角色鏈結案例中,您可以使用中的 IAM 使用者存取金鑰 AWS CLI 來承擔名為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 標籤是繼承自第一個工作階段中的可轉移工作階段標籤。如您嘗試傳遞 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) 會使用一種授權策略,根據標籤屬性定義許可。

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

如需有關 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 記錄,以檢視使用工作階段標記的事件。