

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

# AWS 合作夥伴的 IAM 暫時委派
<a name="access_policies-temporary-delegation-partner-guide"></a>

## 概觀
<a name="temporary-delegation-partner-overview"></a>

IAM 暫時委派可讓 AWS 客戶透過互動式引導式工作流程，順暢地將 AWS 合作夥伴產品加入和/或整合到其 AWS 環境中。客戶可以授予 AWS 合作夥伴有限的暫時存取權，以設定所需的 AWS 服務、減少加入摩擦並加速實現價值的時間。

IAM 暫時委派可讓合作夥伴：
+ 透過自動化資源佈建簡化客戶加入
+ 消除手動組態步驟，降低整合複雜性
+ 透過透明、客戶核准的許可建立信任
+ 使用許可界限啟用具有長期存取模式的持續操作

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

1. *合作夥伴建立委派請求* - 合作夥伴建立請求，指定他們需要的許可以及持續多久

1. * AWS 主控台中的客戶評論* - 客戶查看合作夥伴正在請求的許可以及原因

1. *客戶核准* - 客戶核准請求並釋出交換字符。權杖會在此指定的 SNS 主題上傳送給合作夥伴。

1. *合作夥伴收到臨時登入*資料 - 合作夥伴將字符交換為臨時 AWS 登入資料

1. *合作夥伴設定資源* - 合作夥伴使用登入資料來設定客戶帳戶中的必要資源

## 合作夥伴資格
<a name="temporary-delegation-partner-qualification"></a>

若要符合暫時委派整合的資格，合作夥伴必須符合下列要求：
+ *ISV Accelerate 參與* – 您必須註冊 [ISV Accelerate (ISVA)](https://aws.amazon.com/partners/programs/isv-accelerate/) 計畫。
+ *AWS Marketplace 清單* – 您的產品必須在 AWS Marketplace 中以「部署上 AWS」徽章列出。

## 加入程序
<a name="temporary-delegation-onboarding-process"></a>

完成下列步驟，將暫時委派整合到您的產品中：

1. *步驟 1：檢閱需求*

   檢閱本文件以了解資格要求，並完成下方的合作夥伴問卷。

1. *步驟 2：提交您的加入請求*

   傳送電子郵件至 aws-iam-partner-onboarding@amazon.com 或聯絡您的 AWS 代表。將您完成的合作夥伴問卷包含下表中的所有必要欄位。

1. *步驟 3： AWS 驗證和檢閱*

   AWS 將：
   + 驗證您是否符合資格條件
   + 檢閱您的政策範本和許可界限
   + 針對您提交的成品提供意見回饋

1. *步驟 4：精簡您的政策*

   回應 AWS 意見回饋，並視需要提交更新的政策範本或許可界限。

1. *步驟 5：完成註冊*

   核准後， AWS 將：
   + 為指定的帳戶啟用 API 存取
   + 共用政策範本和許可界限ARNs （如適用）

   加入完成時，您會收到確認。然後，您可以從您的註冊帳戶存取暫時委派 APIs、CreateDelegationRequest 和 GetDelegatedAccessToken，並開始將委派請求工作流程整合至您的產品。

## 合作夥伴問卷
<a name="temporary-delegation-partner-questionnaire"></a>

下表列出加入合作夥伴所需的資訊：


| 資訊 | Description | 必要 | 
| --- | --- | --- | 
| Partner Central AccountID | 您在 [AWS Partner Central](https://partnercentral.awspartner.com/partnercentral2/s/login) 上註冊 AWS 帳戶的帳戶 ID。 | 是 | 
| PartnerId | Partner [AWS Central 提供的合作夥伴](https://partnercentral.awspartner.com/partnercentral2/s/login) ID。 | 否 | 
| AWS Marketplace 產品 ID | [AWS Partner Central](https://partnercentral.awspartner.com/partnercentral2/s/login) 提供的產品 ID。 | 是 | 
| AWS accountIDs | 您要用來呼叫暫時委派 APIs AWS 的帳戶 ID 清單。 IDs 這應該包括您的生產和非生產/測試帳戶。 | 是 | 
| 合作夥伴名稱 | 當客戶檢閱您的暫時委派請求時，此名稱會顯示在 AWS 管理主控台中。 | 是 | 
| 聯絡電子郵件 (s) | 一或多個電子郵件地址，我們可用來就整合事宜與您聯絡。 | 是 | 
| 請求者網域 | 您的網域 （例如 www.example.com) | 是 | 
| 整合描述 | 您想要使用此功能解決的使用案例簡短描述。您可以包含文件或其他公有資料的參考連結。 | 是 | 
| 架構圖 | 架構圖說明您的整合使用案例 (s)。 | 否 | 
| 政策範本 | 您必須為此功能註冊至少一個政策範本。政策範本會定義您想要在客戶 AWS 帳戶中請求的暫時許可。如需詳細資訊，請參閱政策範本一節。 | 是 | 
| 政策範本名稱 | 您要註冊的政策範本名稱。 | 是 | 
| 許可界限 | 如果您想要使用暫時許可在客戶的帳戶中建立 IAM 角色，則必須向 IAM 註冊許可界限。許可界限會連接到您建立的 IAM 角色，以限制角色的最大許可。您可以使用選取的 AWS 受管政策做為許可界限，或註冊新的自訂許可界限 (JSON)。如需詳細資訊，請參閱許可界限一節。 | 否 | 
| 許可邊界名稱 | 許可界限的名稱。格式為：arn：aws：iam：：partner：policy/permission\$1boundary/<partner\$1domain>/<policy\$1name>\$1<date> 政策名稱必須包含建立日期做為尾碼。建立許可界限後，就無法更新名稱。如果您使用的是現有的 AWS 受管政策，請改為提供 受管政策 ARN。 | 否 | 
| 許可界限描述 | 許可界限的說明。建立許可界限後，就無法更新此描述。 | 否 | 

# 了解您的整合
<a name="temporary-delegation-understanding-integration"></a>

完成加入程序後，您可以建立與 IAM 臨時委派的整合。完整的整合通常涉及三個主要的工作類別：

## 1. 使用者體驗和工作流程設計
<a name="temporary-delegation-user-experience"></a>

在合作夥伴應用程式中建立前端體驗，引導客戶完成暫時委派工作流程。合作夥伴應用程式應該：
+ 提供明確的加入或組態流程，讓客戶可以授予暫時存取權。清楚標記此動作，例如「使用 IAM 暫時委派進行部署」。
+ 將客戶重新導向至 AWS 管理主控台，以使用 CreateDelegationRequest API 傳回的主控台連結來檢閱和核准委派請求
+ 提供有關請求哪些許可及其原因的適當訊息。客戶可以在委派請求詳細資訊頁面上看到此訊息。
+ 在客戶完成核准後，處理客戶傳回至您的應用程式 AWS。

## 2. API 整合
<a name="temporary-delegation-api-integration"></a>

使用 IAM 暫時委派 APIs來傳送和管理委派請求。註冊 AWS 帳戶後，您就可以存取下列 APIs：
+ *IAM CreateDelegationRequest* – 為客戶 AWS 的帳戶建立委派請求。此 API 會傳回主控台連結，您可以將客戶重新導向至 ，以檢閱和核准請求。
+ *AWS STS GetDelegatedAccessToken* – 在客戶核准委派請求後擷取臨時 AWS 憑證。使用這些登入資料在客戶的帳戶中執行動作。

您的整合應處理委派請求的完整生命週期，包括建立請求、監控其狀態，以及在核准時擷取臨時憑證。

## 3. 資源組態和協調
<a name="temporary-delegation-resource-configuration"></a>

取得臨時登入資料後，請協調必要的工作流程，以設定客戶 AWS 帳戶中的資源。這可能包括：
+ 直接呼叫 AWS 服務 APIs以建立和設定資源
+ 使用 AWS CloudFormation 範本部署基礎設施
+ 建立持續存取的 IAM 角色 （需要使用許可界限）

您的協同運作邏輯應該是等冪的，並正常處理失敗，因為客戶可能需要重試或修改其委派核准。

# 了解許可
<a name="temporary-delegation-understanding-permissions"></a>

作為功能加入程序的一部分，您需要向 IAM 註冊政策，以定義您想要在客戶 AWS 帳戶中請求的許可。註冊程序為客戶提供更一致的體驗，並有助於避免政策撰寫中的常見陷阱。

在註冊期間， 會根據一組驗證 AWS 來評估您的政策。這些驗證旨在標準化政策格式和結構，並針對已知的反模式提供基本保護。驗證也會降低提升權限、意外跨帳戶存取，以及廣泛存取客戶帳戶中高價值資源的風險。

## 許可類型
<a name="temporary-delegation-permission-types"></a>

AWS 會考慮兩種類型的許可：暫時和長期。

### 暫時許可
<a name="temporary-delegation-temporary-permissions"></a>

暫時許可會限制指派給任何暫時委派存取工作階段的許可。暫時許可會在套用至委派工作階段的政策範本中說明。範本支援您在建立委派請求時提供的參數。這些參數值接著會繫結至工作階段。暫時許可的運作方式與 AWS STS 目前提供的工作階段政策相同：政策會限制基礎使用者的功能，但不授予任何其他存取權。如需詳細資訊，請參閱工作階段政策 AWS STS 的文件。

### 長期許可
<a name="temporary-delegation-long-term-permissions"></a>

長期許可會限制透過暫時存取建立或管理之任何角色的許可。長期許可會實作為 IAM 許可界限。您可以在加入 AWS 時向 提交一或多個許可界限。核准後， AWS 將與您共用政策 ARN，供您在政策中參考。

這些界限政策有兩個值得注意的功能。首先，它們是不可變的。如果您想要更新許可，您可以註冊新的許可界限。然後，您可以透過傳送新的委派請求，將新的許可界限連接到客戶的角色。其次，政策不會建立範本。由於相同的界限政策是全域共用的，因此無法針對每位客戶修改。

**重要**  
許可界限的大小上限為 6，144 個字元。

**注意**  
如果您想要更新許可界限或政策範本，請透過 aws-iam-partner-onboarding@amazon.com 聯絡 IAM。註冊新的許可界限後，您就可以傳送委派請求給客戶，以更新 IAM 角色並連接新註冊的許可界限。如需詳細資訊，請參閱範例一節。

## 範例使用案例：資料處理工作負載
<a name="temporary-delegation-example-use-case"></a>

考慮在客戶帳戶中執行資料處理工作負載的產品供應商。供應商需要在初始加入期間設定基礎設施，但也需要持續存取才能操作工作負載。

*暫時許可 （用於初始設定）：*
+ 建立 Amazon EC2 執行個體、VPC 和安全群組
+ 為已處理的資料建立 Amazon S3 儲存貯體
+ 建立持續操作的 IAM 角色
+ 將許可界限連接至 IAM 角色

*長期許可 （具有持續操作許可界限的 IAM 角色）：*
+ 啟動和停止 Amazon EC2 執行個體以執行處理任務
+ 從 Amazon S3 儲存貯體讀取輸入資料
+ 將處理的結果寫入 Amazon S3 儲存貯體

臨時許可會在加入期間使用一次，以設定基礎設施。在此過程中建立的 IAM 角色具有許可界限，其最大許可僅限於持續工作負載管理所需的操作。這可確保即使修改角色的政策，也不能超過邊界中定義的許可。

# 政策評估準則
<a name="temporary-delegation-policy-evaluation-guidelines"></a>

AWS 會根據一組準則來評估您提交的政策。相同的評估準則同時適用於政策範本和許可界限，並在適當時記下細微差異。

基於評估目的，我們會將服務分成不同的群組。最重要的區別在於管理存取、登入資料和金鑰的安全敏感服務。授予這些服務存取權的政策需要專注於已完成的工作。安全敏感服務包括下列項目： AWS Identity and Access Management (IAM)、 AWS Key Management Service (KMS)、 AWS Resource Access Manager (RAM)、 AWS IAM Identity Center、 AWS Organizations 和 AWS Secrets Manager。

次要區別是可以跨帳戶邊界存取資料的 服務。這些服務的政策必須包含保護，以防止意外的跨帳戶存取。

## 常見驗證
<a name="temporary-delegation-common-validations"></a>

所有政策陳述式都必須遵循下列準則：
+ 所有陳述式都必須依該順序包含效果、動作 （或 NotAction)、資源和條件欄位
+ 單一陳述式中的所有動作都必須依字母順序列出
+ 政策中包含的所有 ARNs 必須遵循相關服務的公有文件中定義的語法
+ NotAction 欄位只能用於拒絕陳述式
+ 允許陳述式中的動作必須包含服務代碼。不允許一般萬用字元 ("\$1")

## 安全敏感的服務限制
<a name="temporary-delegation-security-sensitive-restrictions"></a>

下列限制適用於上述對安全敏感的服務：
+ 允許陳述式中的動作必須比 【服務】：\$1 更具體
+ 暫時存取政策範本的允許陳述式中的動作不得包含萬用字元
+ 如 iam：PassRole 或 iam：CreateServiceLinkedRole 等敏感動作需要額外範圍，例如特定資源或條件式檢查。這些動作包括：
  + IAM 角色傳遞
  + IAM 角色修改動作
  + IAM 政策修改動作
  + AWS KMS 寫入或密碼編譯操作
  + AWS RAM 寫入或共用操作
  + AWS 擷取或修改秘密或修改資源政策的 Secrets Manager 操作
+ 其他動作可能會使用萬用字元資源，例如 iam：ListUsers 或 iam：GetPolicy
+ 會封鎖管理登入資料的動作，例如 iam：CreateAccessKey

## IAM 特定限制
<a name="temporary-delegation-iam-specific-restrictions"></a>

對於 IAM：
+ IAM 角色和政策只允許有限的寫入操作。您無法請求其他 IAM 資源的許可，例如使用者、群組和憑證。
+ 政策連接或內嵌政策管理動作僅限於具有許可界限的角色。許可界限必須是合作夥伴提供的，或在允許的 AWS 受管政策清單中。如果未授予高權限或管理許可，則可能允許受 AWS 管政策。例如，可接受特定工作職能或 SecurityAudit 政策的 AWS 受管政策。 AWS 將在加入程序期間case-by-case每個 AWS 受管政策。
+ 政策管理僅適用於具有合作夥伴特定路徑的政策：arn：aws：iam：：@\$1AccountId\$1：policy/partner\$1domain.com/【feature】\$1
+ 標籤只能在資源建立期間套用，且僅適用於角色和政策
+ iam：PassRole 檢查必須符合特定名稱或路徑字首

## AWS STS特定限制
<a name="temporary-delegation-sts-specific-restrictions"></a>

對於 AWS STS：
+ sts：AssumeRole 必須範圍限定為特定角色 ARN、角色 ARN 字首，或限制為一組帳戶或組織 ID/組織單位

## IAM Identity Center 限制
<a name="temporary-delegation-identity-center-restrictions"></a>

對於 AWS IAM Identity Center，會封鎖下列動作：
+ 處理許可管理的所有動作 （例如，sso：AttachCustomerManagedPolicyReferenceToPermissionSet)
+  AWS Identity Store 的使用者、群組和成員資格修改
+ 標籤管理

## AWS Organizations 限制
<a name="temporary-delegation-organizations-restrictions"></a>

對於 AWS Organizations，僅允許讀取動作。

## 其他服務特定的驗證
<a name="temporary-delegation-additional-service-validations"></a>
+ 取得秘密或登入資料的動作，例如 glue：GetConnection 或 redshift：GetClusterCredentials，必須具有符合完整 ARNs、ARN 字首或標籤的條件
+ 對於 Amazon Redshift：僅允許在特定資料庫名稱上使用 redshift：GetClusterCredentials，且僅允許在特定工作群組名稱上使用 redshift：GetClusterCredentialsWithIAM 

**注意**  
管理帳戶中的 IAM 資源時，建議使用指出您名稱的路徑，例如 arn：aws：iam：：111122223333：role/partner.com/rolename。這將有助於區分與您的整合相關聯的資源，讓客戶更容易探索、稽核和分析。

## 跨帳戶存取要求
<a name="temporary-delegation-cross-account-requirements"></a>

可能允許跨帳戶存取的陳述式必須至少包含下列其中一項：
+ 為資源指定帳戶或組織的條件 （例如，aws：ResourceOrgId 符合一或多個預期值）
+ 包含特定帳戶的資源欄位 （例如 arn：aws：sqs：\$1：111122223333：\$1)
+ 包含非萬用字元帳戶和完整資源名稱的資源欄位 （例如 arn：aws：s3：：full-bucket-name)

**注意**  
跨帳戶存取是一種敏感功能，需要明確的業務理由。 AWS 將在加入過程中仔細審查跨帳戶存取的需求。

# 政策範本
<a name="temporary-delegation-policy-templates"></a>

政策範本是一種新的 IAM 建構，旨在定義合作夥伴在客戶帳戶中請求的暫時許可。與一般 IAM 政策一樣，它們使用具有效果、動作、資源和條件元素的陳述式來定義許可。關鍵差異在於政策範本包含參數 （例如 @\$1bucketName\$1)，這些參數會在您建立委派請求時以實際值取代。

## 政策範本的運作方式
<a name="temporary-delegation-how-policy-templates-work"></a>

在加入程序中，您會向 註冊政策範本 AWS。 AWS 會為每個範本指派唯一的 ARN，供您在建立委派請求時參考。

當您建立委派請求時，您可以指定：
+ 政策範本 ARN
+ 要取代為範本的參數值

AWS 會將 範本與您的參數值合併，以產生標準 IAM 政策。客戶在核准委派請求時檢閱此最終轉譯政策，並查看將授予哪些許可。

**注意**  
最終轉譯政策的大小上限為 2048 個字元。

以下是示範範本替換如何運作的簡單範例。

政策範本：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::@{bucketName}/*"
        }
    ]
}
```

委派請求中提供的參數：

```
{
    "Name": "bucketName",
    "Values": ["customer-data-bucket"],
    "Type": "String"
}
```

最終轉譯政策 （客戶看到的內容）：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::customer-data-bucket/*"
        }
    ]
}
```

## 範本語法
<a name="temporary-delegation-template-syntax"></a>

政策範本使用兩個主要功能來提供彈性：參數替換和條件式陳述式。參數替換可讓您在範本中定義預留位置，這些預留位置會在建立委派請求時以實際值取代。條件式陳述式可讓您根據參數值包含或排除整個政策陳述式。

### 參數替代和類型
<a name="temporary-delegation-parameter-substitution"></a>

使用 @\$1parameterName\$1 語法來定義政策範本中的參數。建立委派請求時，您必須指定每個參數的類型。

#### String
<a name="temporary-delegation-string-type"></a>

直接替換為範本的單一值。

範本：

```
"Resource": "arn:aws:s3:::@{bucketName}/*"
```

參數：

```
{
    "Name": "bucketName",
    "Values": ["my-bucket"],
    "Type": "String"
}
```

轉譯的結果：

```
"Resource": "arn:aws:s3:::my-bucket/*"
```

#### StringList
<a name="temporary-delegation-stringlist-type"></a>

產生多個資源項目的多個值。在資源 ARN 中使用 StringList 參數時，它會展開以為每個值建立個別的資源項目。

範本：

```
"Resource": "arn:aws:s3:::@{bucketNames}/*"
```

參數：

```
{
    "Name": "bucketNames",
    "Values": ["bucket-1", "bucket-2"],
    "Type": "StringList"
}
```

轉譯的結果：

```
"Resource": [
    "arn:aws:s3:::bucket-1/*",
    "arn:aws:s3:::bucket-2/*"
]
```

#### 跨產品行為
<a name="temporary-delegation-cross-product-behavior"></a>

在相同的資源 ARN 中使用多個參數時，StringList 參數會建立所有組合的跨產品。

範本：

```
"Resource": "arn:aws:s3:::@{bucketNames}/@{prefix}/*"
```

參數：

```
[
    {
        "Name": "bucketNames",
        "Values": ["bucket-1", "bucket-2"],
        "Type": "StringList"
    },
    {
        "Name": "prefix",
        "Values": ["data"],
        "Type": "String"
    }
]
```

轉譯的結果：

```
"Resource": [
    "arn:aws:s3:::bucket-1/data/*",
    "arn:aws:s3:::bucket-2/data/*"
]
```

### 條件式陳述式
<a name="temporary-delegation-conditional-statements"></a>

使用 @Enabled 指令，根據參數值有條件地包含或排除整個陳述式。

語法：
+ @Enabled： "parameterName" - 當參數值為 "True" 時包含陳述式
+ @Enabled： "！parameterName" - 當參數值不是 "True" （否定） 時包含陳述式

範本：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": ["s3:GetObject"],
            "Resource": "*"
        },
        {
            "@Enabled": "ENABLE_S3_WRITE",
            "Effect": "Allow",
            "Action": ["s3:PutObject"],
            "Resource": "arn:aws:s3:::@{bucketName}/*"
        }
    ]
}
```

參數 （當 ENABLE\$1S3\$1WRITE 為 "True" 時）：

```
[
    {
        "Name": "bucketName",
        "Values": ["my-bucket"],
        "Type": "String"
    },
    {
        "Name": "ENABLE_S3_WRITE",
        "Values": ["True"],
        "Type": "String"
    }
]
```

轉譯的結果：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": ["s3:GetObject"],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": ["s3:PutObject"],
            "Resource": "arn:aws:s3:::my-bucket/*"
        }
    ]
}
```

參數 （當 ENABLE\$1S3\$1WRITE 為 "False" 時）：

```
[
    {
        "Name": "bucketName",
        "Values": ["my-bucket"],
        "Type": "String"
    },
    {
        "Name": "ENABLE_S3_WRITE",
        "Values": ["False"],
        "Type": "String"
    }
]
```

轉譯的結果：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": ["s3:GetObject"],
            "Resource": "*"
        }
    ]
}
```

當 ENABLE\$1S3\$1WRITE 設為 "True" 時，會包含條件式陳述式。設定為 "False" 時，陳述式會從轉譯政策中排除。

## 其他範例
<a name="temporary-delegation-additional-examples"></a>

下列範例示範在暫時委派中使用政策範本的常見模式。他們專注於建立具有長期存取許可界限的 IAM 角色，並顯示將許可範圍限定到特定資源的不同策略。這些範例說明如何使用 ARN 字首、資源標記和許可界限更新等技術，在彈性與安全性之間取得平衡。

### 範例 1：授予特定資源的長期存取權
<a name="temporary-delegation-example-1"></a>

下列許可界限會提交為 "partner.com" 的 "SQSAccessorBoundary"：

```
{
    "Effect": "Allow",
    "Action": [
        "sqs:DeleteMessage",
        "sqs:ReceiveMessage",
        "sqs:SendMessage"
    ],
    "Resource": "arn:aws:sqs:*:*:*",
    "Condition": {
        "StringEquals": {
            "aws:ResourceAccount": "${aws:PrincipalAccount}"
        }
    }
}
```

**注意**  
這包括相同的帳戶條件，以避免將存取權授予具有開啟資源政策的其他帳戶中的佇列。無法包含客戶帳戶 ID 的直接參考，因為邊界會跨所有客戶共用，且無法進行範本化。

由於這是此政策的第一個版本，其 ARN 為 arn：aws：iam：：partner：policy/permissions-boundary/partner.com/SQSAccessorBoundary\$12025\$101\$115

提交下列政策範本以取得臨時存取許可：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sqs:ListQueues"
            ],
            "Resource": "arn:aws:sqs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateRole",
                "iam:PutRolePermissionsBoundary",
                "iam:PutRolePolicy"
            ],
            "Resource": "arn:aws:iam::@{AccountId}:role/partner.com/SQSAccessor",
            "Condition": {
                "StringEquals": {
                    "iam:PermissionsBoundary": "arn:aws:iam::partner:policy/permissions-boundary/partner.com/SQSAccessorBoundary_2025_01_15"
                }
            }
        }
    ]
}
```

### 範例 2：使用 ARN 字首
<a name="temporary-delegation-example-2"></a>

許可界限可以指定資源 ARN 字首來限制存取：

```
"Resource": "arn:aws:sqs:*:@{AccountId}:PartnerPrefix*"
```

這只會限制存取具有該字首的資源，從而減少可存取資源的範圍。

### 範例 3：使用標籤進行資源存取控制
<a name="temporary-delegation-example-3"></a>

您可以在暫時委派存取期間標記資源，並依賴這些標籤進行長期存取控制。

允許存取已標記資源的許可界限：

```
{
    "Effect": "Allow",
    "Action": [
        "sqs:DeleteMessage",
        "sqs:ReceiveMessage",
        "sqs:SendMessage"
    ],
    "Resource": "arn:aws:sqs:*:*:*",
    "Condition": {
        "Null": {
            "aws:ResourceTag/ManagedByPartnerDotCom": "false"
        },
        "StringEquals": {
            "aws:ResourceAccount": "${aws:PrincipalAccount}"
        }
    }
}
```

在建立時標記新佇列的政策範本：

```
{
    "Effect": "Allow",
    "Action": [
        "sqs:CreateQueue",
        "sqs:TagQueue"
    ],
    "Resource": "arn:aws:sqs:*:*:*",
    "Condition": {
        "Null": {
            "aws:RequestTag/ManagedByPartnerDotCom": "false"
        }
    }
}
```

標記預先存在佇列並建立角色的政策範本：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sqs:TagQueue"
            ],
            "Resource": "arn:aws:sqs:*:@{AccountId}:@{QueueName}",
            "Condition": {
                "ForAllValues:StringEquals": {
                    "aws:TagKeys": "ManagedByPartnerDotCom"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateRole",
                "iam:PutRolePermissionsBoundary",
                "iam:PutRolePolicy"
            ],
            "Resource": "arn:aws:iam::@{AccountId}:role/partner.com/SQSAccessor",
            "Condition": {
                "StringEquals": {
                    "iam:PermissionsBoundary": "arn:aws:iam::partner:policy/permissions-boundary/partner.com/SQSAccessorBoundary_2025_01_15"
                }
            }
        }
    ]
}
```

此方法可讓客戶明確確認可以長期存取哪些特定資源。

### 範例 4：更新許可界限
<a name="temporary-delegation-example-4"></a>

若要更新許可界限，請使用新的日期尾碼註冊新版本，並請求替換許可。

使用其他許可更新許可界限：

```
{
    "Effect": "Allow",
    "Action": [
        "sqs:DeleteMessage",
        "sqs:PurgeQueue",
        "sqs:ReceiveMessage",
        "sqs:SendMessage"
    ],
    "Resource": "arn:aws:sqs:*:*:*",
    "Condition": {
        "StringEquals": {
            "aws:ResourceAccount": "${aws:PrincipalAccount}"
        }
    }
}
```

做為第二個版本，此政策具有 ARN：arn：aws：iam：：partner：policy/permissions-boundary/partner.com/SQSAccessorBoundary\$12025\$101\$120

更新現有角色許可界限的政策範本：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:PutRolePermissionsBoundary"
            ],
            "Resource": "arn:aws:iam::@{AccountId}:role/partner.com/SQSAccessor",
            "Condition": {
                "StringEquals": {
                    "iam:PermissionsBoundary": "arn:aws:iam::partner:policy/permissions-boundary/partner.com/SQSAccessorBoundary_2025_01_20"
                }
            }
        }
    ]
}
```

客戶必須核准此委派請求，才能更新現有角色的許可界限。

# 建置您的整合
<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 主控台連結，客戶可以在其中檢查請求狀態或追蹤管理員。正確處理後端中的狀態機器，並在每個階段向客戶提供正確的狀態資訊，對於良好的整合體驗至關重要。

![\[alt text not found\]](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": "..."
}
```

## 交換字符
<a name="temporary-delegation-exchange-tokens"></a>

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

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

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

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

### 多個兌換
<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 分鐘 | 

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