

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

# 將 AWS 身分聯合到外部服務
<a name="id_roles_providers_outbound"></a>

IAM 傳出聯合身分可讓您的 AWS 工作負載安全地存取外部服務，而無需存放長期憑證。您的 AWS 工作負載可以呼叫 [GetWebIdentityToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetWebIdentityToken.html) API，向 AWS Security Token Service () 請求短期 JSON Web Token JWTs AWS STS)。這些字符以密碼編譯方式簽署，可公開驗證，並包含一組完整的宣告，可向外部服務宣告 AWS 工作負載的身分。您可以搭配各種第三方雲端提供者、SaaS 平台和自我託管應用程式使用這些字符。外部服務會使用在已知端點上發佈 AWS的驗證金鑰來驗證字符的真偽，並使用字符中的資訊進行身分驗證和授權決策。

傳出聯合身分不需要在應用程式程式碼或環境變數中存放長期登入資料，例如 API 金鑰或密碼，可改善您的安全狀態。您可以使用 IAM 政策控制權杖產生和強制執行權杖屬性的存取，例如簽署演算法、允許的受眾和持續時間。所有字符請求都會登入 AWS ，為安全性監控和合規報告提供完整的稽核線索。您也可以使用顯示為自訂宣告的標籤來自訂權杖，讓外部服務實作精細的屬性型存取控制。

## 常用案例
<a name="outbound-federation-use-cases"></a>

使用傳出聯合身分，您的 AWS 工作負載可以安全地：
+ 存取外部雲端提供者中的資源和服務。例如，Lambda 函數處理資料可以將結果寫入外部雲端提供者的儲存服務，或查詢其資料庫。
+ 與外部software-as-a-service(SaaS) 供應商整合，用於分析、資料處理、監控等。例如，您的 Lambda 函數可以將指標傳送至可觀測性平台。
+ 使用託管在 AWS外部雲端提供者或內部部署資料中心上的應用程式進行驗證，以啟用安全的混合和多雲端架構。例如，您的 AWS 工作負載可以與內部部署 Kubernetes 叢集中執行的容器化應用程式互動。

## 運作方式
<a name="outbound-federation-how-it-works"></a>

![\[alt text not found\]](http://docs.aws.amazon.com/zh_tw/IAM/latest/UserGuide/images/outbound-use-cases.png)


1. Lambda 函數會呼叫 [GetWebIdentityToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetWebIdentityToken.html) API，向 AWS Security Token Service () 請求 JSON Web Token (JWT)AWS STS。

1. AWS STS 會驗證請求，並將已簽署的 JWT 傳回 Lambda 函數。

1. Lambda 函數會將 JWT 傳送至外部服務。

1. 外部服務會從權杖擷取發行者 URL、驗證是否符合已知信任的發行者，以及從 OIDC 探索端點擷取 AWS驗證金鑰和中繼資料。

1. 外部服務使用驗證金鑰來驗證字符的簽章，並驗證過期時間、主旨和對象等宣告。

1. 驗證成功後，外部服務會授予 Lambda 函數的存取權。

# 開始使用傳出聯合身分
<a name="id_roles_providers_outbound_getting_started"></a>

本指南說明如何為 AWS 您的帳戶啟用傳出聯合身分，並取得您的第一個 JSON Web Token (JWT) （使用 [GetWebIdentityToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetWebIdentityToken.html) API)。您將啟用此功能、與外部服務建立信任關係、設定 IAM 許可，以及使用 AWS CLI 或 AWS SDK for Python (Boto3) 請求權杖。

## 先決條件
<a name="outbound-federation-prerequisites"></a>

開始前，請確保您具備以下條件：
+ 已安裝最新版本的 AWS CLI 或 Python 3.8 （或更新版本） 和 Boto3 （適用於 AWS SDK 範例）
+ 您可以在其中設定信任關係的外部服務帳戶 （例如外部雲端提供者、SaaS 提供者或測試應用程式）

**注意**  
此 `GetWebIdentityToken` API 無法在 STS 全域端點上使用。
`GetWebIdentityToken` API 產生的 JSON Web Token (JWTs) 無法用於 AWS （透過 [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) API) 的 OpenID Connect (OIDC) 聯合。

## 為您的帳戶啟用傳出聯合身分
<a name="enable-outbound-federation"></a>

您必須先啟用傳出聯合身分，才能請求字符。您可以使用 AWS 管理主控台或以程式設計方式使用 [EnableOutboundWebIdentityFederation](https://docs.aws.amazon.com/IAM/latest/APIReference/API_EnableOutboundWebIdentityFederation.html) API 來啟用此功能。

### 使用 AWS CLI
<a name="enable-using-cli"></a>

```
aws iam enable-outbound-web-identity-federation
```

### 使用適用於 Python 的 AWS SDK
<a name="enable-using-sdk"></a>

```
import boto3

# Create IAM client
iam_client = boto3.client('iam')

# Enable outbound identity federation
response = iam_client.enable_outbound_web_identity_federation()
print(f"Feature enabled. Issuer URL: {response['IssuerUrl']}")
print(f"Status: {response['Status']}")
```

### 使用 AWS 主控台
<a name="enable-using-console"></a>

導覽至 IAM，然後在左側導覽功能表的**存取管理**區段下選取**帳戶設定** 

![\[alt text not found\]](http://docs.aws.amazon.com/zh_tw/IAM/latest/UserGuide/images/outbound-screen-1.png)


啟用此功能後，請記下您的帳戶特定發行者 URL。在外部服務中設定信任關係時，您將使用此 URL。您也可以視需要使用 [GetOutboundWebIdentityFederationInfo](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetOutboundWebIdentityFederationInfo.html) API 擷取此發行者 URL。

![\[alt text not found\]](http://docs.aws.amazon.com/zh_tw/IAM/latest/UserGuide/images/outbound-screen-2.png)


## 在外部服務中建立信任關係
<a name="establish-trust-relationship"></a>

設定外部服務以信任和接受 AWS 帳戶發行的字符。具體步驟因服務而異，但通常涉及：
+ 將 AWS 您的帳戶發行者 URL 註冊為信任的身分提供者
+ 設定要驗證的宣告 （對象、主體模式）
+ 將字符宣告映射至外部服務中的許可

如需詳細的組態指示，請參閱外部服務文件。

## 設定 IAM 許可
<a name="configure-iam-permissions"></a>

建立 IAM 政策，授予呼叫 [GetWebIdentityToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetWebIdentityToken.html) API 的許可，並將政策連接到需要產生字符的 IAM 角色。

此範例政策授予具有特定限制的權杖產生存取權。它只允許以「https://api.example.com」為對象請求字符，並強制執行字符生命週期上限為 5 分鐘 (300 秒）。如需可用來強制執行權杖屬性的條件金鑰[IAM 和 AWS STS 條件內容索引鍵](reference_policies_iam-condition-keys.md)清單，請參閱 。

### IAM 政策範例
<a name="example-iam-policy"></a>

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:GetWebIdentityToken",
            "Resource": "*",
            "Condition": {
                "ForAllValues:StringEquals": {
                    "sts:IdentityTokenAudience": "https://api.example.com"
                },
                "NumericLessThanEquals": {
                    "sts:DurationSeconds": 300
                }
            }
        }
    ]
}
```

## 請求您的第一個 JSON Web 權杖 (JWT)
<a name="request-first-jwt"></a>

您可以使用 [GetWebIdentityToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetWebIdentityToken.html) API 請求 JSON Web 權杖。您可以在呼叫 API 時指定下列參數：
+ **對象 （必要）：**字符的預期收件人。此值會在 JWT 中填入「aud」宣告。外部服務會驗證此宣告，以確保權杖適用於它們。
+ **SigningAlgorithm （必要）：**用於簽署字符的密碼編譯演算法。有效值為 ES384 和 RS256。使用 ES384 獲得最佳安全性和效能，或 RS256 與不支援 ECDSA 的系統具有更廣泛的相容性。
+ **DurationSeconds （選用）：**字符生命週期，以秒為單位。有效值的範圍為 60 到 3600。預設值為 300 (5 分鐘)。我們建議較短的字符生命週期，以提高安全性。
+ **標籤 （選用）：**要做為自訂宣告包含在字符中的鍵值對清單。外部服務可以使用這些宣告進行精細授權。

API 會傳回下列欄位：
+ **IdentityToken：**簽署的 JWT 做為 base64url 編碼字串。在對外部服務的請求中包含此字符。
+ **過期：**字符過期時的 UTC 時間戳記。

### 使用 AWS CLI
<a name="using-aws-cli"></a>

```
aws sts get-web-identity-token \
    --audience "https://api.example.com" \
    --signing-algorithm ES384 \
    --duration-seconds 300 \
    --tags Key=team,Value=data-engineering \
           Key=environment,Value=production \
           Key=cost-center,Value=analytics
```

### 使用適用於 Python 的 AWS SDK
<a name="using-aws-sdk-python"></a>

```
import boto3

sts_client = boto3.client('sts')

response = sts_client.get_web_identity_token(
    Audience=['https://api.example.com'],
    DurationSeconds=300,
    SigningAlgorithm='RS256',
    Tags=[
        {'Key': 'team', 'Value': 'data-engineering'},
        {'Key': 'environment', 'Value': 'production'},
        {'Key': 'cost-center', 'Value': 'analytics'}
    ]
)

token = response['WebIdentityToken']
```

您也可以解碼 JWT，使用 PyJWT、Python-jose for Python、Nimbus JOSE\$1JWT for Java 或 jwt.io 等偵錯工具等標準 JWT 程式庫來檢查其內容。如需字符中包含之宣告[了解字符宣告](id_roles_providers_outbound_token_claims.md)的詳細資訊，請參閱 。

## 搭配外部服務使用字符
<a name="use-token-with-external-service"></a>

收到字符後，將其包含在外部服務的請求中。該方法因服務而異，但大多數服務接受授權標頭中的字符。外部服務應實作權杖驗證邏輯，從發行者的已知端點擷取 JWKS 金鑰、驗證權杖的簽章，並在授予 AWS 工作負載存取權之前驗證基本宣告。

## 從 OpenID Connect (OIDC) 端點擷取驗證金鑰和中繼資料
<a name="fetch-verification-keys"></a>

您 AWS 帳戶的唯一發行者 URL 託管 OpenID Connect (OIDC) 探索端點，其中包含權杖驗證所需的驗證金鑰和中繼資料。

OIDC 探索端點 URL 包含一些提供者用來驗證字符的中繼資料。可在以下位置取得：

```
{issuer_url}/.well-known/openid-configuration
```

JWKS (JSON Web 金鑰集） 端點包含用於驗證字符簽章的金鑰。可在以下位置取得：

```
{issuer_url}/.well-known/jwks.json
```

### 使用 curl 擷取 JWKS
<a name="fetch-jwks-curl"></a>

```
curl https://{issuer_url}/.well-known/jwks.json
```

回應：

```
{
  "keys": [
    {
      "kty": "EC",
      "use": "sig",
      "kid": "key-id-1",
      "alg": "ES384",
      "crv": "P-384",
      "x": "base64-encoded-x-coordinate",
      "y": "base64-encoded-y-coordinate"
    },
    {
      "kty": "RSA",
      "use": "sig",
      "kid": "key-id-2",
      "n": "base64-encoded-modulus",
      "e": "AQAB"
    }
  ]
}
```

### 使用適用於 Python 的 AWS SDK
<a name="fetch-using-sdk"></a>

```
import requests

# Fetch Openid Configuration
open_id_config_response = requests.get("https://{issuer_url}/.well-known/openid-configuration")
open_id_config = open_id_config_response.json()

# Fetch JWKS
jwks_response = requests.get("https://{issuer_url}/.well-known/jwks.json")
jwks = jwks_response.json()
```

我們建議您快取這些金鑰，以避免在每次權杖驗證時擷取它們。

### 基本宣告驗證
<a name="essential-claim-validations"></a>
+ **主旨 (sub)：**確認主旨宣告包含預期的 IAM 主體 ARN 模式。
+ **過期 (exp)：**確保字符尚未過期。JWT 程式庫通常會自動處理。
+ **對象 (aud)：**驗證對象是否符合您的預期值。這可防止其他 服務的字符與您的 搭配使用。
+ **發行者 (iss)：**確認發行者符合您信任 AWS 的帳戶 (s)。維護信任的發行者 URLs清單。

您應該盡可能驗證額外的 AWS特定宣告，以在外部服務中實作精細存取控制。例如，驗證 org\$1id 宣告以限制對 AWS 組織中 IAM 主體的存取、檢查 principal\$1tags 以強制執行屬性型存取控制 （例如僅允許生產環境或特定團隊），或驗證工作階段內容宣告，例如 lambda\$1source\$1function\$1arn 或 ec2\$1instance\$1source\$1vpc，以根據運算資源限制存取。如需[字符中包含的完整聲明清單，請參閱了解字符宣告](id_roles_providers_outbound_token_claims.md)。

# 了解字符宣告
<a name="id_roles_providers_outbound_token_claims"></a>

當您呼叫 [GetWebIdentityToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetWebIdentityToken.html) API 時， AWS Security Token Service 會傳回已簽署的 JSON Web Token (JWT)，其中包含一組代表 IAM 主體身分的宣告。這些字符符合 [RFC 7519](https://datatracker.ietf.org/doc/html/rfc7519)。了解這些字符的結構和內容可協助您實作安全身分驗證流程、在外部服務中設定適當的宣告驗證，以及有效地使用自訂宣告進行精細存取控制。

JWT 包含標準 OpenID Connect (OIDC) 宣告，例如主體 ("sub")、受眾 ("aud")、發行者 ("iss")，以促進不同外部服務的互通性。 會在適用時將 AWS 身分特定宣告 （例如 AWS 帳戶 ID 和主體標籤） 和工作階段內容宣告 （例如 EC2 執行個體 ARNs) AWS STS 填入字符。您也可以將自訂宣告做為請求標籤傳遞至 [GetWebIdentityToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetWebIdentityToken.html) API，藉此將自訂宣告新增至權杖。 AWS 身分特定的宣告、工作階段內容宣告和自訂宣告會巢狀在權杖中的「https://sts.amazonaws.com/」命名空間下。

如需字符中包含的宣告清單，請參閱以下範例字符。請注意，所有這些宣告可能不會同時出現在字符中。

```
{
  "iss": "https://abc123-def456-ghi789-jkl012.tokens.sts.global.api.aws",
  "aud": "https://api.example.com",
  "sub": "arn:aws:iam::123456789012:role/DataProcessingRole",
  "iat": 1700000000,
  "exp": 1700000900,
  "jti": "xyz123-def456-ghi789-jkl012",
  "https://sts.amazonaws.com/": {
    "aws_account": "123456789012",
    "source_region": "us-east-1",
    "org_id": "o-abc1234567",
    "ou_path": "o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/",
    "principal_tags": {
      "environment": "production",
      "team": "data-engineering",
      "cost-center": "engineering"
    },
    "lambda_source_function_arn": "arn:aws:lambda:us-east-1:123456789012:function:process-data",
    "request_tags": {
        "job-id": "job-2024-001",
        "priority": "high",
        "data-classification": "sensitive"
    }
  }
}
```

## 標準宣告
<a name="standard-claims"></a>

字符中存在的標準 OIDC 宣告有助於與各種外部服務互通。這些宣告可以使用大多數 JWT 程式庫進行驗證。


| 取得 | 名稱 | 描述 | 範例值 | 
| --- | --- | --- | --- | 
| iss | 發行者 | 您的帳戶特定發行者 URL。外部服務會驗證此宣告，以確保其符合其信任的發行者。 | https://abc123-def456-ghi789-jkl012.tokens.sts.global.api.aws | 
| aud | 目標對象 | [GetWebIdentityToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetWebIdentityToken.html) 請求中指定字符的預期收件人。 | https://api.example.com | 
| sub | 主旨 | 請求權杖之 IAM 主體的 ARN。 | arn：aws：iam：：123456789012：role/DataProcessingRole | 
| iat | 在 發行 | 識別發出 JWT 時間的 NumericDate 值。 | 1700000000 | 
| exp | Expiration | 識別過期時間的 NumericDate 值，在此時間之後，JWT 不得接受處理。 | 1700000900 | 
| jti | JWT ID | 此字符執行個體的唯一識別符。 | xyz123-def456-ghi789-jkl012 | 

## 自訂宣告
<a name="custom-claims"></a>

除了標準 OIDC 宣告之外， 還會在適用時 AWS STS 新增有關身分和工作階段內容的宣告。您也可以將自己的宣告做為請求標籤傳遞至權杖。自訂宣告會巢狀在 https://sts.amazonaws.com/ 命名空間下。

### AWS 身分宣告
<a name="aws-identity-claims"></a>

這些宣告提供有關 AWS 您的帳戶、組織結構和 IAM 主體的詳細資訊。


| 取得 | Description | 條件索引鍵的映射 | 範例值 | 
| --- | --- | --- | --- | 
| aws\$1account |  AWS 您的帳戶 ID | [aws：PrincipalAccount](reference_policies_condition-keys.md#condition-keys-principalaccount) | 123456789012 | 
| source\$1region | 請求字符 AWS 的區域 | [aws:RequestedRegion](reference_policies_condition-keys.md#condition-keys-requestedregion) | us-east-1 | 
| org\$1id | 您的 AWS Organizations ID （如果您的帳戶是組織的一部分） | [aws:PrincipalOrgID](reference_policies_condition-keys.md#condition-keys-principalorgid) | o-abc1234567 | 
| ou\$1path | 您的組織單位路徑 （如適用） | [aws:PrincipalOrgPaths](reference_policies_condition-keys.md#condition-keys-principalorgpaths) | o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/ | 
| principal\$1tags | 連接至 IAM 主體或擔任角色工作階段的標籤。當請求的 IAM 主體同時具有主體標籤和工作階段標籤時，請求權杖時，工作階段標籤會出現在 JWT 中。 | [aws：PrincipalTag/<tag-key>](reference_policies_condition-keys.md#condition-keys-principaltag) | \$1"環境"： "生產"、"團隊"： "資料工程"、"成本中心"："工程"\$1 | 

### 工作階段內容宣告
<a name="session-context-claims"></a>

這些宣告提供有關字符請求發起的運算環境和工作階段的資訊。根據請求主體的工作階段內容，當適用時 AWS AWS STS ， 會自動包含這些宣告。


| 取得 | Description | 條件索引鍵的映射 | 範例值 | 
| --- | --- | --- | --- | 
| original\$1session\$1exp | 原始角色工作階段登入資料過期的時間 （適用於擔任的角色） | N/A | 2024-01-15T10：00：00Z | 
| federated\$1provider | 聯合工作階段的身分提供者名稱 | [aws:FederatedProvider](reference_policies_condition-keys.md#condition-keys-federatedprovider) | arn：aws：iam：：111122223333：oidc-provider/your\$1oidc\$1provider | 
| identity\$1store\$1user\$1id | IAM Identity Center 使用者 ID | [identitystore：UserId](reference_policies_condition-keys.md#condition-keys-identity-store-user-id) | user-abc123def456 | 
| identity\$1store\$1arn | Identity Center 身分存放區的 ARN | [identitystore：IdentityStoreArn](https://docs.aws.amazon.com/singlesignon/latest/userguide/condition-context-keys-sts-idc.html#condition-keys-identity-store-arn) | arn：aws：identitystore：：123456789012：identitystore/d-abc1234567 | 
| ec2\$1source\$1instance\$1arn | 請求 EC2 執行個體的 ARN | [ec2：SourceInstanceArn](reference_policies_condition-keys.md#condition-keys-ec2-source-instance-arn) | arn：aws：ec2：us-east-1：123456789012：instance/i-abc123def456 | 
| ec2\$1instance\$1source\$1vpc | 交付 EC2 角色登入資料的 VPC ID | [aws：Ec2InstanceSourceVpc](reference_policies_condition-keys.md#condition-keys-ec2instancesourcevpc) | vpc-abc123def456 | 
| ec2\$1instance\$1source\$1private\$1ipv4 | EC2 執行個體的私有 IPv4 地址 | [aws：Ec2InstanceSourcePrivateIPv4](reference_policies_condition-keys.md#condition-keys-ec2instancesourceprivateip4) | 10.0.1.25 | 
| ec2\$1role\$1delivery | 執行個體中繼資料服務版本 | [ec2：RoleDelivery](reference_policies_condition-keys.md#condition-keys-ec2-role-delivery) | 2 | 
| source\$1identity | 委託人設定的來源身分 | [aws：SourceIdentity](reference_policies_condition-keys.md#condition-keys-sourceidentity) | admin-user | 
| lambda\$1source\$1function\$1arn | 呼叫 Lambda 函數的 ARN | [lambda：SourceFunctionArn](reference_policies_condition-keys.md#condition-keys-lambda-source-function-arn) | arn：aws：lambda：us-east-1：123456789012：function：my-function | 
| glue\$1credential\$1issuing\$1service | AWS Glue 任務的 Glue 服務識別符 | [glue：CredentialIssuingService](reference_policies_condition-keys.md#condition-keys-glue-credential-issuing) | glue.amazonaws.com | 

### 請求標籤
<a name="request-tags"></a>

您可以在 [GetWebIdentityToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetWebIdentityToken.html) API 請求中指定標籤，將自訂宣告新增至權杖。這些宣告會出現在字符的 request\$1tags 欄位下，可讓您傳遞外部服務可用於精細授權決策的特定資訊。每個請求最多可以指定 50 個標籤。

範例請求：

```
response = sts_client.get_web_identity_token(
    Audience=['https://api.example.com'],
    SigningAlgorithm='ES384'
    Tags=[
        {'Key': 'team', 'Value': 'data-engineering'},
        {'Key': 'cost-center', 'Value': 'analytics'},
        {'Key': 'environment', 'Value': 'production'}
    ]
)
```

權杖中產生的宣告：

```
{
  "request_tags": {
    "team": "data-engineering",
    "cost-center": "analytics",
    "environment": "production"
  }
}
```

# 使用 IAM 政策控制存取
<a name="id_roles_providers_outbound_policies"></a>

IAM 提供多種政策類型，以控制對傳出聯合身分功能的存取。您可以使用[身分型政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)來控制哪些 IAM 主體可以請求權杖，並強制執行特定權杖屬性，例如對象、生命週期和簽署演算法。[服務控制政策](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) SCPs) 可讓您對 Organizations 中的所有帳戶強制執行 AWS 整個組織的字符產生限制。[資源控制政策](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html) RCPs) 控制資源層級的存取。您也可以使用 [VPC 端點政策](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)來限制哪些主體可以透過 VPC 端點存取 API，將 AWS STS `GetWebIdentityToken`網路層級控制新增至您的安全狀態。本節說明如何使用這些政策類型和條件索引鍵實作精細存取控制。

若要請求身分字符，IAM 主體必須具有 `sts:GetWebIdentityToken`許可。透過連接至 IAM 使用者或角色的身分政策授予此許可。若要允許標籤 （金鑰、值對） 傳遞給 GetWebIdentityToken 呼叫，IAM 主體必須具有 `sts:TagGetWebIdentityToken`許可。
+ 使用 [sts：IdentityTokenAudience](reference_policies_iam-condition-keys.md#ck_identitytokenaudience) 條件金鑰來限制哪些外部服務可以接收字符。
+ 使用 [sts：DurationSeconds](reference_policies_iam-condition-keys.md#ck_durationseconds) 條件金鑰來強制執行字符生命週期上限。
+ 使用 [sts：SigningAlgorithm](reference_policies_iam-condition-keys.md#ck_signingalgorithm) 條件金鑰來要求特定的密碼編譯演算法。
+ 使用 [aws：RequestTag](reference_policies_condition-keys.md#condition-keys-requesttag) 條件金鑰，將請求中傳遞的標籤鍵值對與您在政策中指定的標籤對進行比較。
+ 使用 [aws：TagKeys](reference_policies_condition-keys.md#condition-keys-tagkeys) 條件索引鍵，將請求中的標籤索引鍵與您在政策中指定的索引鍵進行比較。

請參閱 [IAM 和 AWS STS](reference_policies_iam-condition-keys.md) 條件金鑰，進一步了解 IAM 政策中可用的條件金鑰。

此範例身分政策結合了多個條件索引鍵：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowTokenGenerationWithRestrictions",
            "Effect": "Allow",
            "Action": "sts:GetWebIdentityToken",
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "sts:IdentityTokenAudience": [
                        "https://api1.example.com",
                        "https://api2.example.com"
                    ]
                },
                "NumericLessThanEquals": {
                    "sts:DurationSeconds": 300
                },
                "StringEquals": {
                    "sts:SigningAlgorithm": "ES384"
                }
            }
        }
    ]
}
```

## 最佳實務
<a name="outbound-best-practices"></a>

遵循這些建議，將 AWS 您的身分安全地聯合到外部 服務。
+ **使用較短的字符生命週期：**請求具有最短生命週期的字符，以符合您的操作需求。
+ **使用 IAM 政策實作最低權限存取並限制權杖屬性：**僅將 `sts:GetWebIdentityToken`許可授予需要它的 IAM 主體。視需要使用條件索引鍵來指定簽署演算法、允許的權杖對象和權杖生命週期上限。
+ **驗證外部服務中的宣告：**為了安全起見，請一律驗證相關宣告，例如主旨 ("sub")、受眾 ("aud") 等，以確保符合您預期的值。盡可能驗證自訂宣告，以在外部服務中啟用精細的授權決策。