

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

# 建置您的整合
<a name="temporary-delegation-building-integration"></a>

## 了解請求生命週期
<a name="temporary-delegation-request-lifecycle"></a>

在建置整合之前，請務必了解委派請求從建立到完成的進度。

### 請求狀態
<a name="temporary-delegation-request-states"></a>

委派請求會進行下列狀態：


| State | Description | 
| --- | --- | 
| 未指派 | 已建立請求，但尚未與客戶帳戶和 IAM 主體建立關聯。可能已建立請求，但未指定目標帳戶，或使用目標帳戶 ID，但尚未由帳戶擁有者宣告。 | 
| 已指派 | 與客戶帳戶相關聯並等待審核的請求 | 
| 待核准 | 客戶已將請求轉送給管理員進行核准 | 
| 已接受 | 請求獲得客戶核准，但交換字符尚未發佈 | 
| 完成 | 發佈給產品供應商的 Exchange 權杖。委派期間 （交換字符有效性） 會在請求達到完成狀態時開始 | 
| 已拒絕 | 客戶拒絕的請求 | 
| 已過期 | 請求因閒置或逾時而過期 | 

### 狀態轉換
<a name="temporary-delegation-state-transitions"></a>

*正常流程 （核准路徑）*
+ 未指派 → 已指派：客戶將請求與其帳戶建立關聯
+ 已指派 → 已接受或已指派 → 待核准：客戶直接核准請求，或轉送給管理員以供檢閱
+ 待核准 → 已接受：管理員核准請求
+ 已接受 → 已完成：客戶發行交換字符

*拒絕路徑*
+ 已指派 → 已拒絕：客戶拒絕請求
+ 待核准 → 已拒絕：管理員拒絕請求
+ 已接受 → 已拒絕：客戶在釋出權杖之前撤銷核准

*過期路徑*

如果在指定的時間範圍內未採取任何動作，請求會自動過期：
+ 未指派 → 已過期 (1 天）
+ 指派 → 已過期 (7 天）
+ 待核准 → 已過期 (7 天）
+ 已接受 → 已過期 (7 天）
+ 拒絕 → 已過期 (7 天）
+ 完成 → 已過期 (7 天）

*終端機狀態*

下列狀態為終端機 （沒有進一步轉換）：
+ 完成：已傳送 Exchange Token
+ 拒絕：請求遭拒
+ 已過期：請求逾時或委派期間已結束

過期的請求最終會在保留期間之後從系統中刪除。

### 管理應用程式中的委派請求狀態
<a name="temporary-delegation-managing-states"></a>

身為合作夥伴，您必須追蹤系統中的委派請求狀態，並將其呈現給客戶。當您收到狀態變更的 SNS 通知時，請將這些更新存放在後端，並在面向客戶的 UI 中反映這些更新。請特別注意待核准狀態 - 當客戶轉送請求給管理員以供檢閱時， 會 AWS 傳送待核准通知給您。在等待管理員動作時，請求可保持此狀態長達 7 天。在此期間，向客戶顯示他們的請求正在等待您應用程式中的管理員核准。考慮提供深入的 AWS 主控台連結，客戶可以在其中檢查請求狀態或追蹤管理員。正確處理後端中的狀態機器，並在每個階段向客戶提供正確的狀態資訊，對於良好的整合體驗至關重要。

![狀態圖表顯示從未指派到已指派、待核准，到已接受、已拒絕、已完成、已過期或已刪除狀態的委派請求流程。](http://docs.aws.amazon.com/zh_tw/IAM/latest/UserGuide/images/delegation-states.png)


## 設定 通知
<a name="temporary-delegation-configuring-notifications"></a>

IAM 使用 Amazon Simple Notification Service (SNS) 將委派請求狀態變更傳達給您。建立委派請求時，您必須從已註冊的 AWS 帳戶提供 SNS 主題 ARN。IAM 會將重要事件的訊息發佈至此主題，包括客戶核准或拒絕請求的時間，以及交換字符何時準備就緒。

**注意**  
SNS 主題不能位於選擇加入 AWS 區域。您的 SNS 主題必須位於預設啟用的 AWS 區域中。如需選擇加入區域的清單，請參閱 AWS 帳戶管理指南中的管理 AWS 區域。

### SNS 主題組態
<a name="temporary-delegation-sns-topic-configuration"></a>

若要接收委派請求通知，您必須設定 SNS 主題，以授予 IAM 發佈訊息的許可。將下列政策陳述式新增至 SNS 主題政策：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowIAMServiceToPublish",
            "Effect": "Allow",
            "Principal": {
                "Service": "iam.amazonaws.com"
            },
            "Action": "SNS:Publish",
            "Resource": "arn:aws:sns:REGION:ACCOUNT-ID:TOPIC-NAME"
        }
    ]
}
```

**重要**  
SNS 主題必須位於其中一個已註冊 AWS 帳戶中。IAM 不接受來自其他帳戶的 SNS 主題。如果主題政策未正確設定，您將不會收到狀態變更通知或交換字符。

### 通知類型
<a name="temporary-delegation-notification-types"></a>

IAM 傳送兩種類型的通知：

*StateChange 通知*

當委派請求轉換為新狀態 （已指派、待核准、已接受、已完成、已拒絕、已過期） 時傳送。

*ExchangeToken 通知*

當客戶釋出委派字符 （狀態已完成） 時傳送。此通知包含您取得憑證所需的交換字符。

### 通知狀態
<a name="temporary-delegation-notification-states"></a>

您將會收到下列委派請求狀態的通知：


| State | 通知類型 | Description | 
| --- | --- | --- | 
| 已指派 | 狀態變更 | 請求已與客戶帳戶相關聯 | 
| 待核准 | 狀態變更 | 客戶已將請求轉送給管理員進行核准 | 
| 已接受 | 狀態變更 | 客戶已核准請求，但尚未釋出字符 | 
| 已定案 | 狀態變更 | 客戶已釋出交換字符 | 
| 已定案 | ExchangeToken | 此通知包含 Exchange Token | 
| REJECTED | 狀態變更 | 客戶已拒絕請求 | 
| 已過期 | 狀態變更 | 請求在完成之前已過期 | 

### 通知訊息格式
<a name="temporary-delegation-notification-message-format"></a>

IAM 發佈標準 SNS 通知。委派請求資訊包含在訊息欄位中，做為 JSON 字串。

*常見欄位 （所有通知）*


| 欄位 | Type | 說明 | 
| --- | --- | --- | 
| Type | String | "StateChange" 或 "ExchangeToken" | 
| RequestId | String | IAM 委派請求 ID | 
| RequestorWorkflowId | String | 您在建立請求時提供的工作流程 ID | 
| State | String | 請求的目前狀態 | 
| OwnerAccountId | String | 客戶的 AWS 帳戶 ID | 
| UpdatedAt | String | 狀態變更時的時間戳記 (ISO 8601 格式） | 

*其他欄位 （僅限 ExchangeToken 通知）*


| 欄位 | Type | 說明 | 
| --- | --- | --- | 
| ExchangeToken | String | 使用 AWS STS GetDelegatedAccessToken API 交換登入資料的字符 | 
| ExpiresAt | String | 委派存取過期時 (ISO 8601 格式） | 

### 範例通知
<a name="temporary-delegation-example-notifications"></a>

*StateChange 通知*

```
{
  "Type": "Notification",
  "MessageId": "61ee8ad4-6eec-56b5-8f3d-eba57556aa13",
  "TopicArn": "arn:aws:sns:us-east-1:123456789012:partner-notifications",
  "Message": "{\"RequestorWorkflowId\":\"workflow-12345\",\"Type\":\"StateChange\",\"RequestId\":\"dr-abc123\",\"State\":\"ACCEPTED\",\"OwnerAccountId\":\"111122223333\",\"UpdatedAt\":\"2025-01-15T10:30:00.123Z\"}",
  "Timestamp": "2025-01-15T10:30:00.456Z",
  "SignatureVersion": "1",
  "Signature": "...",
  "SigningCertURL": "...",
  "UnsubscribeURL": "..."
}
```

*ExchangeToken 通知*

```
{
  "Type": "Notification",
  "MessageId": "e44e5435-c72c-5333-aba3-354406782f5b",
  "TopicArn": "arn:aws:sns:us-east-1:123456789012:partner-notifications",
  "Message": "{\"RequestId\":\"dr-abc123\",\"RequestorWorkflowId\":\"workflow-12345\",\"State\":\"FINALIZED\",\"OwnerAccountId\":\"111122223333\",\"ExchangeToken\":\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\"ExpiresAt\":\"2025-01-15T18:30:00.123Z\",\"UpdatedAt\":\"2025-01-15T10:30:00.456Z\",\"Type\":\"ExchangeToken\"}",
  "Timestamp": "2025-01-15T10:30:00.789Z",
  "SignatureVersion": "1",
  "Signature": "...",
  "SigningCertURL": "...",
  "UnsubscribeURL": "..."
}
```

## Exchange 權杖
<a name="temporary-delegation-exchange-tokens"></a>

當客戶接受並完成委派請求時，IAM 會發出交換字符或權杖中的交易。產品提供者使用此交換或權杖中的交易來呼叫 AWS STS GetDelegatedAccessToken API，以取得具有客戶核准許可的臨時 AWS 登入資料。交換字符本身不會授予 AWS 資源的存取權；必須透過 AWS STS 交換實際登入資料。

交換字符只能由建立委派請求的產品提供者帳戶兌換。請求帳戶內嵌在權杖中，確保只有授權的產品提供者可以取得登入資料來存取客戶帳戶。

### 存取持續時間
<a name="temporary-delegation-access-duration"></a>

委派期間會在客戶釋出交換權杖時開始，而不是產品提供者兌換權杖時。一旦客戶釋出字符：
+ 產品提供者透過 SNS 通知接收字符
+ 他們可以立即交換登入資料
+ 登入資料過期時間：發行時間 \+ 核准的持續時間
+ 產品提供者可以在過期前多次交換字符，以在需要時取得新的登入資料

### 多次兌換
<a name="temporary-delegation-multiple-redemptions"></a>

產品提供者可以在有效期間多次交換字符，以取得新的登入資料。不過，從相同交換字符取得的所有登入資料都會同時過期，取決於您何時釋出字符。

範例：如果您核准 2 小時委派請求，並在上午 10：00 釋出權杖：


| 權杖發行時間 | 字符交換時間 | 登入資料過期 | 可用時間 | 
| --- | --- | --- | --- | 
| 上午 10：00 | 上午 10：00 | 12:00 PM | 2 小時 | 
| 上午 10：00 | 上午 10：20 | 12:00 PM | 1 小時 40 分鐘 | 
| 上午 10：00 | 上午 11：40 | 12:00 PM | 20 分鐘 | 
| 上午 10：00 | 中午 12：10 | 失敗 （權杖過期） | 0 分鐘 | 

如表格所示，稍後在有效期間交換字符會導致產品供應商的可用時間變少。