

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

# 使用 AWS SDKs和工具進行身分驗證和存取
<a name="access"></a>

當您開發 AWS SDK 應用程式或使用 AWS 工具來使用 時 AWS 服務，您必須建立程式碼或工具的驗證方式 AWS。您可以根據程式碼執行的環境和您可用的存取權，以不同的方式設定 AWS 資源的程式設計 AWS 存取。

以下選項是[登入資料提供者鏈結](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html#credentialProviderChain)的一部分。這表示透過相應地設定您的共用 AWS `config`和`credentials`檔案，您的 AWS SDK 或工具將自動探索和使用該身分驗證方法。

## 選擇驗證應用程式碼的方法
<a name="authDecisionTree"></a>

選擇一種方法來驗證應用程式 AWS 對 發出的呼叫。

### 您是否在 內部執行程式碼 AWS 服務 （例如 Amazon EC2、Lambda、Amazon ECS、Amazon EKS、CodeBuild)？
<a name="a"></a>

如果您的程式碼在 上執行 AWS，登入資料可以自動提供給您的應用程式。例如，如果您的應用程式託管在 Amazon Elastic Compute Cloud 上，而且有與該資源相關聯的 IAM 角色，則登入資料會自動提供給您的應用程式。同樣地，如果您使用 Amazon ECS 或 Amazon EKS 容器，IAM 角色的登入資料集可以透過 SDK 的[登入資料提供者鏈](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html#credentialProviderChain)，由容器內執行的程式碼自動取得。

#### 您的程式碼是否在 Amazon Elastic Compute Cloud 執行個體中？
<a name="a1"></a>

[使用 IAM 角色來驗證部署到 Amazon EC2 的應用程式](access-iam-roles-for-ec2.md) – 使用 IAM 角色在 Amazon EC2 執行個體上安全地執行應用程式。

#### 您的程式碼是否在 AWS Lambda 函數中？
<a name="a2"></a>

當您建立 Lambda [函數時，Lambda 會建立](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)具有最少許可的執行角色。軟體 AWS 開發套件或工具接著會透過 Lambda 執行環境，自動使用在執行時間連接至 Lambda 的 IAM 角色。

#### 您的程式碼是否在 Amazon Elastic Container Service 中 （在 Amazon EC2 或 AWS Fargate Amazon ECS 上）？
<a name="a3"></a>

使用任務的 IAM 角色。您必須[建立任務角色](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)，並在 [Amazon ECS 任務定義](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)中指定該角色。軟體 AWS 開發套件或工具接著會透過 Amazon ECS 中繼資料，自動使用在執行時間指派給任務的 IAM 角色。

#### 您的程式碼是否在 Amazon Elastic Kubernetes Service 中？
<a name="a4"></a>

我們建議您使用 [Amazon EKS Pod 身分](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html)。

注意：如果您認為[服務帳戶 (IRSA) 的 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html)可能更符合您的獨特需求，請參閱《Amazon [EKS 使用者指南》中的比較 EKS Pod 身分和 IRSA](https://docs.aws.amazon.com/eks/latest/userguide/service-accounts.html#service-accounts-iam)。 ****

#### 您的程式碼是否在 中執行 AWS CodeBuild
<a name="a5"></a>

請參閱[使用 CodeBuild 的身分型政策](https://docs.aws.amazon.com/codebuild/latest/userguide/auth-and-access-control-iam-identity-based-access-control.html)。

#### 您的程式碼是否在另一個程式碼中 AWS 服務？
<a name="a6"></a>

請參閱 的專用指南 AWS 服務。當您在 上執行程式碼時 AWS，開發套件[登入資料提供者鏈](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html#credentialProviderChain)可以自動為您取得和重新整理登入資料。

### 您要建立行動應用程式或用戶端型 Web 應用程式嗎？
<a name="b"></a>

如果您要建立需要存取的行動應用程式或用戶端型 Web 應用程式 AWS，請建置您的應用程式，以便使用 Web 聯合身分動態請求臨時 AWS 安全登入資料。

有了 Web 聯合身分，您就不需要建立自訂登入代碼，或管理您自己的使用者身分。反之，應用程式使用者可以使用知名的外部身分提供者 (IdP) 登入，例如 Login with Amazon、Facebook、Google 或任何其他與 OpenID Connect (OIDC) 相容的 IdP。他們可以接收身分驗證字符，然後交換該字符以取得 中的臨時安全登入資料 AWS ，該登入資料對應至具有許可的 IAM 角色，以使用您 中的資源 AWS 帳戶。

若要了解如何為您的 SDK 或工具設定此項目，請參閱 [使用 Web 身分或 OpenID Connect 擔任角色以驗證 AWS SDKs和工具](access-assume-role-web.md)。

對於行動應用程式，請考慮使用 Amazon Cognito。Amazon Cognito 充當身分經紀人，並為您執行大部分聯合工作。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[將 Amazon Cognito 用於行動應用程式](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc_cognito.html)。

### 您是否正在開發和執行程式碼 LOCALLY？
<a name="c"></a>

我們建議使用 [使用主控台登入資料來驗證 AWS SDKs和工具](access-login.md)。

在快速瀏覽器型身分驗證流程之後， AWS 會自動產生臨時登入資料，以跨 CLI AWS Tools for PowerShell 和 AWS SDKs AWS 等本機開發工具運作。

#### 如果您使用 Identity Center 進行 AWS 帳戶存取
<a name="idc"></a>

如果您已經擁有 AWS 帳戶的存取權和/或需要管理人力資源的存取權，請使用 IAM Identity Center 來驗證 AWS SDK 和工具。作為安全最佳實務，我們建議您使用 AWS Organizations 搭配 IAM Identity Center 來管理所有 AWS 帳戶的存取權。您可以在 IAM Identity Center 中建立使用者、使用 Microsoft Active Directory、使用 SAML 2.0 身分提供者 (IdP)，或將 IdP 個別聯合到 AWS 帳戶。若要檢查您的區域是否支援 IAM Identity Center，請參閱《Amazon Web Services 一般參考》中的 [使用 IAM Identity Center 驗證 AWS SDK 和工具](access-sso.md)IAM Identity Center 端點和配額。

#### 如果您正在尋找其他方法來驗證
<a name="owa"></a>

在您的目標角色中建立具有 許可的最低權限 IAM `sts:AssumeRole` 使用者。然後，設定您的設定檔以使用該使用者的`source_profile`設定來擔任角色。

您也可以透過環境變數或共用登入資料檔案使用臨時 IAM AWS 登入資料。請參閱使用短期憑證來驗證 AWS SDKs和工具。

注意：僅在沙盒或學習環境中，您可以考慮使用長期登入資料來驗證 AWS SDKs和工具。

### 此程式碼是在內部部署或在混合式/隨需 VM 中執行 （例如從 Amazon S3 讀取或寫入 Amazon S3 的伺服器，或是部署到雲端的 Jenkins)？
<a name="d"></a>

#### 您是否使用 X.509 用戶端憑證？
<a name="d1"></a>

是：請參閱 [使用 IAM Roles Anywhere 驗證 AWS SDKs和工具](access-rolesanywhere.md)。您可以使用 IAM Roles Anywhere 在 IAM 中取得臨時安全登入資料，例如在 外部執行的伺服器、容器和應用程式 AWS。若要使用 IAM Roles Anywhere，您的工作負載必須使用 X.509 憑證。

#### 環境是否可以安全地連線至聯合身分提供者 （例如 Microsoft Entra 或 Okta) 來請求臨時 AWS 憑證？
<a name="d2"></a>

##### 是：使用 [程序登入資料提供者](feature-process-credentials.md)
<a name="d2a"></a>

使用 [程序登入資料提供者](feature-process-credentials.md) 在執行時間自動擷取登入資料。這些系統可能會使用協助程式工具或外掛程式來取得登入資料，並且可能會使用 在幕後擔任 IAM 角色`sts:AssumeRole`。

##### 否：使用透過 注入的臨時登入資料 AWS Secrets Manager
<a name="d2b"></a>

使用透過 注入的臨時登入資料 AWS Secrets Manager。如需取得短期存取金鑰的選項，請參閱《*IAM 使用者指南*》中的[請求臨時安全登入](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)資料。如需存放這些臨時登入資料的選項，請參閱 [AWS 存取金鑰](feature-static-credentials.md)。

您可以使用這些登入資料，從 [Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access.html) 安全地擷取更廣泛的應用程式許可，您可以在其中存放生產秘密或長期的角色型登入資料。

### 您是否使用不在 中的第三方工具 AWS？
<a name="e"></a>

使用第三方供應商撰寫的文件，以取得取得登入資料的最佳指引。

#### 如果您的第三方未提供文件，您可以安全地插入臨時登入資料嗎？
<a name="e1"></a>

是：使用環境變數和暫時 AWS STS 登入資料。

否：使用存放在加密秘密管理器 （上次排序） 中的靜態存取金鑰。

## 身分驗證方法
<a name="authOptions"></a>

**在 AWS 環境中執行之程式碼的身分驗證方法 **

如果您的程式碼在 上執行 AWS，登入資料可以自動提供給您的應用程式。例如，如果您的應用程式託管在 Amazon Elastic Compute Cloud 上，而且有與該資源相關聯的 IAM 角色，則登入資料會自動提供給您的應用程式。同樣地，如果您使用 Amazon ECS 或 Amazon EKS 容器，IAM 角色的登入資料集可以透過 SDK 的登入資料提供者鏈，由容器內執行的程式碼自動取得。
+ [使用 IAM 角色來驗證部署到 Amazon EC2 的應用程式](access-iam-roles-for-ec2.md) – 使用 IAM 角色在 Amazon EC2 執行個體上安全地執行應用程式。
+  您可以使用 IAM Identity Center 以程式設計方式與 AWS 互動，方法如下：
  + 使用 從主控台[AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/)執行 AWS CLI 命令。
  + 若要為軟體開發團隊嘗試雲端協作空間，請考慮使用 [Amazon CodeCatalyst](https://docs.aws.amazon.com/codecatalyst/latest/userguide/welcome.html)。

**透過 Web 型身分提供者進行身分驗證 - 行動或用戶端型 Web 應用程式**

如果您要建立需要存取的行動應用程式或用戶端型 Web 應用程式 AWS，請建置您的應用程式，以便使用 Web 聯合身分動態請求臨時 AWS 安全登入資料。

有了 Web 聯合身分，您就不需要建立自訂登入代碼，或管理您自己的使用者身分。反之，應用程式使用者可以使用知名的外部身分提供者 (IdP) 登入，例如 Login with Amazon、Facebook、Google 或任何其他與 OpenID Connect (OIDC) 相容的 IdP。他們可以接收身分驗證字符，然後交換該字符以取得 中的臨時安全登入資料 AWS ，該登入資料對應至具有許可的 IAM 角色，以使用您 中的資源 AWS 帳戶。

若要了解如何為您的 SDK 或工具設定此項目，請參閱 [使用 Web 身分或 OpenID Connect 擔任角色以驗證 AWS SDKs和工具](access-assume-role-web.md)。

對於行動應用程式，請考慮使用 Amazon Cognito。Amazon Cognito 充當身分經紀人，並為您執行大部分聯合工作。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[將 Amazon Cognito 用於行動應用程式](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc_cognito.html)。

**在本機執行之程式碼的身分驗證方法 （不在 中 AWS) **
+ [使用主控台登入資料來驗證 AWS SDKs和工具](access-login.md) – 此功能可與 AWS Command Line Interface 和 Tools for PowerShell 搭配使用，並提供可重新整理的登入資料，可用於 CLI、Tools for PowerShell AWS 和 等本機開發工具 AWS。
+ [使用 IAM Identity Center 驗證 AWS SDK 和工具](access-sso.md) – 作為安全最佳實務，我們建議您使用 AWS Organizations 搭配 IAM Identity Center 來管理所有 的存取 AWS 帳戶。您可以在 中建立使用者 AWS IAM Identity Center、使用 Microsoft Active Directory、使用 SAML 2.0 身分提供者 (IdP)，或個別聯合您的 IdP AWS 帳戶。若要檢查您的區域是否支援 IAM Identity Center，請參閱 中的[AWS IAM Identity Center 端點和配額](https://docs.aws.amazon.com/general/latest/gr/sso.html)*Amazon Web Services 一般參考*。
+ [使用 IAM Roles Anywhere 驗證 AWS SDKs和工具](access-rolesanywhere.md) – 您可以使用 IAM Roles Anywhere 在 IAM 中取得臨時安全登入資料，例如在 外部執行的伺服器、容器和應用程式 AWS。若要使用 IAM Roles Anywhere，您的工作負載必須使用 X.509 憑證。
+  [使用 AWS 登入資料來擔任角色以驗證 AWS SDKs和工具](access-assume-role.md) – 您可以擔任 IAM 角色來暫時存取您可能無法存取 AWS 的資源。
+  [使用 AWS 存取金鑰來驗證 AWS SDKs和工具](access-users.md) – 可能較不方便或可能會增加 AWS 資源安全風險的其他選項。

**有關存取管理的詳細資訊**

*IAM 使用者指南*提供下列有關安全控制 AWS 資源存取的資訊：
+ [IAM 身分 （使用者、使用者群組和角色）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html) – 了解其中身分的基本概念 AWS。
+ [IAM 中的安全最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) – 根據[共同責任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)開發 AWS 應用程式時應遵循的安全建議。

*Amazon Web Services 一般參考* 具有下列基本概念：
+ [了解並取得您的 AWS 登入](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html)資料 – 主控台和程式設計存取的存取金鑰選項和管理實務。

**要存取的 IAM Identity Center 受信任身分傳播 (TIP) 外掛程式 AWS 服務**
+ [使用 TIP 外掛程式存取 AWS 服務](access-tip.md) – 如果您要為 Amazon Q Business 或其他支援受信任身分傳播的服務建立應用程式，並使用 適用於 Java 的 AWS SDK 或 適用於 JavaScript 的 AWS SDK，您可以使用 TIP 外掛程式來簡化授權體驗。

## AWS 建構家 ID
<a name="bid"></a>

您的 AWS 建構家 ID 補充 AWS 帳戶 您可能已經擁有或想要建立的任何 。雖然 AWS 帳戶 充當您建立 AWS 之資源的容器，並為這些資源提供安全界限，但 AWS 建構家 ID 代表您做為個人。您可以使用 登入 AWS 建構家 ID ，以存取開發人員工具和服務，例如 Amazon Q 和 Amazon CodeCatalyst。
+ *AWS 登入 《 使用者指南*》中的[使用 登入 AWS 建構家 ID](https://docs.aws.amazon.com/signin/latest/userguide/sign-in-aws_builder_id.html) – 了解如何建立和使用 AWS 建構家 ID ，並了解建置器 ID 提供的內容。
+ [CodeCatalyst 概念 - AWS 建構家 ID](https://docs.aws.amazon.com/codecatalyst/latest/userguide/concepts.html#sign-in-concept) 在 *Amazon CodeCatalyst 使用者指南*中 - 了解 CodeCatalyst 如何使用 AWS 建構家 ID。

# 使用主控台登入資料來驗證 AWS SDKs和工具
<a name="access-login"></a>

在本機環境或其他非AWS 運算服務環境中開發 AWS 應用程式時，建議使用主控台登入資料來提供 AWS 登入資料。如果您是在 AWS 資源上進行開發，例如 Amazon Elastic Compute Cloud (Amazon EC2) 或 AWS CloudShell，我們建議您改為從該服務取得登入資料。

您也可以透過 IAM Identity Center 進行身分驗證[使用 IAM Identity Center 驗證 AWS SDK 和工具](access-sso.md)。此選項是組織管理人力資源存取權的常見方式，需要啟用 Identity Center。

## 其運作方式？
<a name="access-login-how"></a>

[使用主控台登入資料進行 AWS 本機開發](https://docs.aws.amazon.com/signin/latest/userguide/command-line-sign-in.html)可讓您使用現有的 AWS 管理主控台登入資料，以程式設計方式存取 AWS 服務。在瀏覽器型身分驗證流程之後， AWS 會產生臨時登入資料，可用於 CLI、Tools for PowerShell AWS 和 AWS SDKs等本機開發工具。此功能可簡化設定和管理 AWS CLI 登入資料的程序，尤其是如果您偏好互動式身分驗證，而不是管理長期存取金鑰。

透過此程序，您可以使用在初始帳戶設定期間建立的根登入資料、IAM 使用者或身分提供者的聯合身分進行身分驗證。

如果您使用SDKs進行開發，軟體開發套件用戶端將透過 使用臨時登入資料[AWS SDKs和工具標準化登入資料提供者](standardized-credentials.md)。您也可以設定 [登入憑證提供者](feature-login-credentials.md)。

CLI AWS 和 Tools for PowerShell 都支援透過登入命令進行驗證：
+ [使用主控台登入資料登入 AWS 進行本機開發](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sign-in.html)
+  AWS Tools for PowerShell 使用者指南中的[使用主控台登入資料登入](https://docs.aws.amazon.com/powershell/v5/userguide/creds-idc.html#login-con-creds) 

# 使用 IAM Identity Center 驗證 AWS SDK 和工具
<a name="access-sso"></a>

 AWS IAM Identity Center 可用於在非AWS 運算服務環境中開發 AWS 應用程式時提供 AWS 登入資料。如果您是在 AWS 資源上進行開發，例如 Amazon Elastic Compute Cloud (Amazon EC2) 或 AWS Cloud9，我們建議您改為從該服務取得登入資料。

如果您已經使用 Identity Center 進行 AWS 帳戶存取，或需要管理組織的存取，請使用 IAM Identity Center 身分驗證。

在本教學課程中，您將建立 IAM Identity Center 存取權，並使用 AWS 存取入口網站和 ，為您的 SDK 或工具進行設定 AWS CLI。
+  AWS 存取入口網站是您手動登入 IAM Identity Center 的 Web 位置。URL 的格式為 `d-xxxxxxxxxx.awsapps.com/start`或 `your_subdomain.awsapps.com/start`。登入 AWS 存取入口網站時，您可以檢視已為該使用者設定的 AWS 帳戶 和 角色。此程序使用 AWS 存取入口網站來取得 SDK/工具身分驗證程序所需的組態值。
+  AWS CLI 用於設定 SDK 或工具，以使用 IAM Identity Center 身分驗證進行程式碼發出的 API 呼叫。此一次性程序會更新您的共用 AWS `config`檔案，然後在您執行程式碼時由軟體開發套件或工具使用。

## 先決條件
<a name="prereq-auth"></a>

開始此程序之前，您應該已完成下列操作：
+ 如果您沒有 AWS 帳戶，[請註冊 AWS 帳戶](https://portal.aws.amazon.com/billing/signup)。
+ 如果您尚未啟用 IAM Identity Center，請依照 *AWS IAM Identity Center 使用者指南*中的指示[啟用 IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-set-up-for-idc.html)。

## 使用 IAM Identity Center 設定程式設計存取
<a name="idcGettingStarted"></a>

### 步驟 1：建立存取權並選取適當的許可集
<a name="establishAccess"></a>

選擇下列其中一種方法來存取您的 AWS 登入資料。

#### 我沒有透過 IAM Identity Center 建立存取權
<a name="idc-access"></a>

1. 遵循*AWS IAM Identity Center 《 使用者指南*》中的[使用預設 IAM Identity Center 目錄程序設定使用者存取權，](https://docs.aws.amazon.com/singlesignon/latest/userguide/quick-start-default-idc.html)以新增使用者和新增管理許可。

1. `AdministratorAccess` 許可集不應用於定期開發。我們建議您改為使用預先定義的`PowerUserAccess`許可集，除非您的雇主已為此目的建立自訂許可集。

   再次遵循相同的[設定使用者存取與預設的 IAM Identity Center 目錄](https://docs.aws.amazon.com/singlesignon/latest/userguide/quick-start-default-idc.html)程序，但這次：
   + 與其建立`Admin team`群組，請建立`Dev team`群組，並在之後於指示中取代此群組。
   + 您可以使用現有的使用者，但必須將使用者新增至新`Dev team`群組。
   + 與其建立`AdministratorAccess`許可集，請建立`PowerUserAccess`許可集，並在之後於指示中取代。

   完成後，您應該具備下列項目：
   + `Dev team` 群組。
   + 連接至 `Dev team`群組的`PowerUserAccess`許可集。
   + 您的使用者已新增至 `Dev team`群組。

1. 退出入口網站並再次登入，以查看 `Administrator`或 的 AWS 帳戶 和 選項`PowerUserAccess`。使用工具/SDK `PowerUserAccess`時選取 。

#### 我已經 AWS 可以透過我的雇主管理的聯合身分提供者 （例如 Microsoft Entra 或 Okta) 存取
<a name="federated-access"></a>

 AWS 透過身分提供者的入口網站登入 。如果您的雲端管理員已授予您 `PowerUserAccess`（開發人員） 許可，您會看到您有權存取 AWS 帳戶 的 和許可集。您會在許可集名稱旁，看到使用該許可集手動或以程式設計方式存取帳戶的選項。

若您自訂實作，可能會產生不同體驗，例如不同的許可集名稱。若您不確定要使用哪個許可集，請聯絡您的 IT 團隊尋求協助。

#### 我已經 AWS 可以透過我的雇主管理的 AWS 存取入口網站存取
<a name="accessportal-access"></a>

透過 AWS AWS 存取入口網站登入 。若雲端管理員已授予您 `PowerUserAccess` (開發人員) 權限，您會看到您有權存取的 AWS 帳戶 和許可集。您會在許可集名稱旁，看到使用該許可集手動或以程式設計方式存取帳戶的選項。

#### 我已經 AWS 可以透過我的雇主管理的聯合身分自訂身分提供者存取
<a name="customfederated-access"></a>

請聯絡您的 IT 團隊尋求協助。

### 步驟 2：設定 SDKs和工具以使用 IAM Identity Center
<a name="configureAccess"></a>

1.  在開發機器上安裝最新的 AWS CLI。

   1. 請參閱*AWS Command Line Interface 《 使用者指南*》中的[安裝或更新最新版本的 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

   1.  （選用） 若要驗證 AWS CLI 是否正常運作，請開啟命令提示字元並執行 `aws --version`命令。

1. 登入 AWS 存取入口網站。您的雇主可能會提供此 URL，您也可以依照**步驟 1：建立存取權**，在電子郵件中取得此 URL。如果沒有，請在 ****[https://console.aws.amazon.com/singlesignon/](https://console.aws.amazon.com/singlesignon/)：// 儀表板上尋找您的**AWS 存取入口網站 URL**。

   1. 在 AWS 存取入口網站**的帳戶**索引標籤中，選取要管理的個別帳戶。使用者的角色隨即顯示。選擇**存取金鑰**以取得命令列的登入資料，或為適當的許可集取得程式設計存取。使用預先定義的`PowerUserAccess`許可集，或您或您的雇主建立的任何許可集，以套用開發的最低權限許可。

   1. 在**取得憑證**對話方塊中，選擇**MacOS 和 Linux** 或 **Windows**，具體取決於您的作業系統。

   1. 選擇 **IAM Identity Center 登入**資料方法，以取得下一個步驟所需的 `Issuer URL`和 `SSO Region`值。注意： `SSO Start URL`可與 互換使用`Issuer URL`。

1. 在 AWS CLI 命令提示字元中，執行 `aws configure sso`命令。出現提示時，輸入您在上一個步驟中收集的組態值。如需此 AWS CLI 命令的詳細資訊，請參閱[使用`aws configure sso`精靈設定設定檔](https://docs.aws.amazon.com/cli/latest/userguide/sso-configure-profile-token.html#sso-configure-profile-token-auto-sso)。

   1. 針對提示 `SSO Start URL`，輸入您為 取得的值`Issuer URL`。

   1.  對於 **CLI 設定檔名稱**，我們建議您在開始使用時輸入*預設值*。如需如何設定非預設 （已命名） 設定檔及其相關聯環境變數的資訊，請參閱 [個人檔案](file-format.md#file-format-profile)。

1. （選用） 在 AWS CLI 命令提示字元中，執行 `aws sts get-caller-identity` 命令以確認作用中的工作階段身分。回應應會顯示您設定的 IAM Identity Center 許可集。

1. 如果您使用的是 AWS 開發套件，請在開發環境中為您的開發套件建立應用程式。

   1. 對於某些 SDKs，`SSOOIDC`您必須將 `SSO`和 等其他套件新增至您的應用程式，才能使用 IAM Identity Center 身分驗證。如需詳細資訊，請參閱您的特定 SDK。

   1.  如果您先前已設定 的存取權 AWS，請檢閱共用 AWS `credentials`檔案是否有任何 [AWS 存取金鑰](feature-static-credentials.md)。由於[了解登入資料提供者鏈結](standardized-credentials.md#credentialProviderChain)優先順序，您必須移除任何靜態登入資料，開發套件或工具才會使用 IAM Identity Center 登入資料。

 如需深入了解SDKs和工具如何使用此組態來使用和重新整理登入資料，請參閱 [如何解決 AWS SDKs IAM Identity Center 身分驗證](understanding-sso.md)。

若要直接在共用`config`檔案中設定 IAM Identity Center 提供者設定，請參閱本指南[IAM Identity Center 憑證提供者](feature-sso-credentials.md)中的 。

## 重新整理入口網站存取工作階段
<a name="refreshSession"></a>

您的存取最終將過期，開發套件或工具將遇到身分驗證錯誤。當此過期發生時，取決於您設定的工作階段長度。若要在需要時再次重新整理存取入口網站工作階段，請使用 AWS CLI 執行 `aws sso login`命令。

您可以同時延長 IAM Identity Center 存取入口網站工作階段持續時間和許可集工作階段持續時間。這可延長您可以執行程式碼的時間，之後才需要再次使用 手動登入 AWS CLI。如需詳細資訊，請參閱《*AWS IAM Identity Center 使用者指南*》中的以下主題：
+ **IAM Identity Center 工作階段持續時間** – [設定使用者 AWS 存取入口網站工作階段的持續時間](https://docs.aws.amazon.com/singlesignon/latest/userguide/configure-user-session.html) 
+ **許可集工作階段持續時間** – [設定工作階段持續時間 ](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtosessionduration.html)

# 如何解決 AWS SDKs IAM Identity Center 身分驗證
<a name="understanding-sso"></a>



## 相關的 IAM Identity Center 術語
<a name="ssoterms"></a>

下列術語可協助您了解背後的程序和組態 AWS IAM Identity Center。適用於 AWS SDK APIs 的文件針對其中一些身分驗證概念使用與 IAM Identity Center 不同的名稱。知道這兩個名稱會很有幫助。

下表顯示替代名稱如何互相關聯。


| IAM Identity Center 名稱 | SDK API 名稱 | Description | 
| --- | --- | --- | 
| Identity Center  | sso  | 雖然已重新命名 AWS 單一登入，但 sso API 命名空間會保留其原始名稱，以用於回溯相容性。如需詳細資訊，請參閱《AWS IAM Identity Center 使用者指南》中的 [IAM Identity Center 重新命名](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html#renamed)。 | 
| IAM Identity Center 主控台管理主控台 |   | 您用來設定單一登入的主控台。 | 
| AWS 存取入口網站 URL  |  | IAM Identity Center 帳戶的唯一 URL，例如 https://xxx.awsapps.com/start。您可以使用 IAM Identity Center 登入憑證登入此入口網站。 | 
| IAM Identity Center Access Portal 工作階段  | 身分驗證工作階段  | 為發起人提供承載存取字符。 | 
| 許可集工作階段  |   | 軟體開發套件在內部用來進行 AWS 服務 呼叫的 IAM 工作階段。在非正式討論中，您可能會看到此錯誤稱為「角色工作階段」。 | 
| 許可集登入資料  | AWS 登入資料sigv4 登入資料  | 軟體開發套件實際用於大多數 AWS 服務 呼叫的登入資料 （特別是所有 sigv4 AWS 服務 calls)。在非正式討論中，您可能會看到這不正確地稱為「角色登入資料」。 | 
| IAM Identity Center 憑證提供者  | SSO 登入資料提供者  | 如何取得登入資料，例如提供 功能的類別或模組。 | 

## 了解 的 SDK 登入資料解析 AWS 服務
<a name="idccredres"></a>

IAM Identity Center API 會交換 sigv4 登入資料的承載字符登入資料。大多數 AWS 服務 是 sigv4 APIs，但有一些例外狀況，例如 Amazon CodeWhisperer 和 Amazon CodeCatalyst。以下說明登入資料解析程序，支援透過 對應用程式碼進行大多數 AWS 服務 呼叫 AWS IAM Identity Center。

### 啟動 AWS 存取入口網站工作階段
<a name="idccredres1"></a>
+ 使用您的登入資料登入工作階段，以啟動程序。
  + 在 AWS Command Line Interface () 中使用 `aws sso login`命令AWS CLI。如果您還沒有作用中的工作階段，這會啟動新的 IAM Identity Center 工作階段。
+ 當您啟動新的工作階段時，您會收到來自 IAM Identity Center 的重新整理權杖和存取權杖。 AWS CLI 也會使用新的存取權杖更新 SSO 快取 JSON 檔案，並重新整理權杖，讓軟體SDKs使用。
+ 如果您已經有作用中的工作階段， AWS CLI 命令會重複使用現有的工作階段，並會在現有的工作階段過期時過期。若要了解如何設定 IAM Identity Center 工作階段的長度，請參閱*AWS IAM Identity Center 《 使用者指南*》中的[設定使用者 AWS 存取入口網站工作階段的持續時間](https://docs.aws.amazon.com/singlesignon/latest/userguide/configure-user-session.html)。
  + 工作階段長度上限已延長至 90 天，以減少頻繁登入的需求。

### 開發套件如何取得 AWS 服務 呼叫的登入資料
<a name="idccredres2"></a>

當您執行個體化每個服務的用戶端物件 AWS 服務 時，SDKs會提供 的存取權。為 IAM Identity Center 登入資料解析設定共用 AWS `config`檔案的所選設定檔時，IAM Identity Center 會用來解析應用程式的登入資料。
+ 建立用戶端時，[登入資料解析程序](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html#credentialProviderChain)會在執行時間完成。

若要使用 IAM Identity Center 單一登入來擷取 sigv4 APIs 的登入資料，開發套件會使用 IAM Identity Center 存取字符來取得 IAM 工作階段。此 IAM 工作階段稱為許可集工作階段，它透過擔任 IAM 角色來提供 SDK 的 AWS 存取權。
+  許可集工作階段持續時間與 IAM Identity Center 工作階段持續時間獨立設定。
  + 若要了解如何設定許可集工作階段持續時間，請參閱*AWS IAM Identity Center 《 使用者指南*》中的[設定工作階段持續時間](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtosessionduration.html)。
+  請注意，在大多數 AWS SDK API 文件中，許可集登入資料也稱為*AWS 登入資料*和 *sigv4 登入*資料。

許可集登入資料會從 IAM Identity Center API 的 [getRoleCredentials](https://docs.aws.amazon.com/singlesignon/latest/PortalAPIReference/API_GetRoleCredentials.html) 呼叫傳回至 SDK。SDK 的用戶端物件使用 擔任的 IAM 角色來呼叫 AWS 服務，例如要求 Amazon S3 列出您帳戶中的儲存貯體。用戶端物件可以繼續使用這些許可集憑證來操作，直到許可集工作階段過期為止。

### 工作階段過期和重新整理
<a name="idccredres3"></a>

使用 時[SSO 權杖提供者組態](feature-sso-credentials.md#sso-token-config)，從 IAM Identity Center 取得的每小時存取權杖會使用重新整理權杖自動重新整理。
+ 如果存取字符在 SDK 嘗試使用時已過期，則 SDK 會使用重新整理字符來嘗試取得新的存取字符。IAM Identity Center 會將重新整理字符與您的 IAM Identity Center 存取入口網站工作階段持續時間進行比較。如果重新整理字符未過期，IAM Identity Center 會以另一個存取字符回應。
+ 此存取權杖可用來重新整理現有用戶端的許可集工作階段，或解析新用戶端的登入資料。

不過，如果 IAM Identity Center 存取入口網站工作階段已過期，則不會授予新的存取字符。因此，無法續約許可集持續時間。每當快取的許可設定現有用戶端的工作階段長度逾時時，就會過期 （且將失去存取權）。

一旦 IAM Identity Center 工作階段過期，任何建立新用戶端的程式碼都會失敗身分驗證。這是因為未快取許可集登入資料。在您擁有有效的存取權杖之前，您的程式碼將無法建立新的用戶端並完成登入資料解析程序。

總而言之，當開發套件需要新的許可集登入資料時，開發套件會先檢查任何有效的現有登入資料，並使用這些登入資料。無論登入資料是用於新用戶端，還是具有過期登入資料的現有用戶端，這都適用。如果找不到登入資料或登入資料無效，則 SDK 會呼叫 IAM Identity Center API 以取得新的登入資料。若要呼叫 API，它需要存取權杖。如果存取權杖已過期，開發套件會使用重新整理權杖嘗試從 IAM Identity Center 服務取得新的存取權杖。如果您的 IAM Identity Center 存取入口網站工作階段未過期，則會授予此權杖。

# 使用 IAM Roles Anywhere 驗證 AWS SDKs和工具
<a name="access-rolesanywhere"></a>

您可以使用 IAM Roles Anywhere 在 IAM 中取得臨時安全登入資料，例如在 外部執行的伺服器、容器和應用程式 AWS。若要使用 IAM Roles Anywhere，您的工作負載必須使用 X.509 憑證。您的雲端管理員應提供所需的憑證和私有金鑰，以將 IAM Roles Anywhere 設定為您的憑證提供者。

## 步驟 1：隨處設定 IAM 角色
<a name="config-ira"></a>

IAM Roles Anywhere 提供取得在 外部執行之工作負載或程序的臨時登入資料的方法 AWS。信任錨點會與憑證授權單位建立，以取得相關聯 IAM 角色的臨時憑證。當您的程式碼向 IAM Roles Anywhere 驗證時，該角色會設定工作負載將擁有的許可。

如需設定信任錨點、IAM 角色和 IAM Roles Anywhere 描述檔的步驟，請參閱《IAM [Roles Anywhere 使用者指南》中的在 AWS Identity and Access Management Roles Anywhere 中建立信任錨點和描述檔](https://docs.aws.amazon.com/rolesanywhere/latest/userguide/getting-started.html)。 **

**注意**  
*IAM Roles Anywhere 使用者指南*中的*設定檔*是指 IAM Roles Anywhere 服務中的唯一概念。它與共用 AWS `config`檔案中的設定檔無關。

## 步驟 2：隨處使用 IAM 角色
<a name="use-ira"></a>

若要從 IAM Roles Anywhere 取得臨時安全登入資料，請使用 IAM Roles Anywhere 提供的登入資料協助程式工具。登入資料工具會實作 IAM Roles Anywhere 的簽署程序。

如需下載登入資料協助程式工具的指示，請參閱《IAM [AWS Identity and Access Management Roles Anywhere 使用者指南》中的從 Roles Anywhere 取得臨時安全登入](https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html)資料。 **

若要使用 IAM Roles Anywhere AWS SDKs和 的臨時安全登入資料 AWS CLI，您可以在共用 AWS `config`檔案中設定 `credential_process` 設定。SDKs和 AWS CLI 支援使用 `credential_process` 驗證的程序登入資料提供者。以下顯示設定 的一般結構`credential_process`。

```
credential_process = [path to helper tool] [command] [--parameter1 value] [--parameter2 value] [...]  
```

協助程式工具的 `credential-process`命令會以與 `credential_process`設定相容的標準 JSON 格式傳回臨時登入資料。請注意，命令名稱包含連字號，但設定名稱包含底線。命令需要下列參數：
+ `private-key` – 簽署請求之私有金鑰的路徑。
+ ` certificate` – 憑證的路徑。
+ `role-arn` – 要取得暫時登入資料的 角色 ARN。
+ `profile-arn` – 提供指定角色映射之設定檔的 ARN。
+ `trust-anchor-arn` – 用於驗證的信任錨點 ARN。

您的雲端管理員應該提供憑證和私有金鑰。您可以從 複製這三個 ARN 值 AWS 管理主控台。下列範例顯示共用`config`檔案，用於設定從協助程式工具擷取臨時登入資料。

```
[profile dev]
credential_process = ./aws_signing_helper credential-process --certificate /path/to/certificate --private-key /path/to/private-key --trust-anchor-arn arn:aws:rolesanywhere:region:account:trust-anchor/TA_ID --profile-arn arn:aws:rolesanywhere:region:account:profile/PROFILE_ID --role-arn arn:aws:iam::account:role/ROLE_ID
```

 如需選用參數和其他協助程式工具詳細資訊，請參閱 GitHub 上的 [IAM Roles Anywhere Credential Helper](https://github.com/aws/rolesanywhere-credential-helper#readme)。

如需 SDK 組態設定本身和程序登入資料提供者的詳細資訊，請參閱本指南[程序登入資料提供者](feature-process-credentials.md)中的 。

# 使用 AWS 登入資料來擔任角色以驗證 AWS SDKs和工具
<a name="access-assume-role"></a>

假設角色涉及使用一組臨時安全登入資料來存取 AWS 您可能無法存取的資源。這些臨時登入資料由存取金鑰 ID、私密存取金鑰和安全字符組成。若要進一步了解 AWS Security Token Service (AWS STS) API 請求，請參閱 *AWS Security Token Service API 參考*中的[動作](https://docs.aws.amazon.com/STS/latest/APIReference/API_Operations.html)。

若要設定軟體開發套件或工具以擔任角色，您必須先建立或識別要擔任的特定*角色*。IAM 角色由角色 Amazon Resource Name ([ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)) 唯一識別。角色會與其他實體建立信任關係。使用 角色的信任實體可能是 AWS 服務 或另一個 AWS 帳戶。若要進一步了解 IAM 角色，請參閱《[IAM 使用者指南》中的使用 IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html)。 **

識別 IAM 角色之後，如果您受該角色信任，您可以將 SDK 或工具設定為使用角色授予的許可。

**注意**  
 AWS 最佳實務是盡可能使用區域端點並設定您的 [AWS 區域](feature-region.md)。

## 擔任 IAM 角色
<a name="credOrSourceAssumeRole"></a>

擔任角色時， 會 AWS STS 傳回一組臨時安全登入資料。這些登入資料來自另一個設定檔，或是您的程式碼執行所在的執行個體或容器。當您有一個帳戶的 AWS 登入資料，但您的應用程式需要存取另一個帳戶中的資源時，通常會使用這種類型的擔任角色。

### 步驟 1：設定 IAM 角色
<a name="credOrSourceAssumeRole_step1"></a>

若要設定軟體開發套件或工具以擔任角色，您必須先建立或識別要擔任的特定角色。IAM 角色是使用角色 [ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html) 唯一識別的。角色與另一個實體建立信任關係，通常是在您的 帳戶內或跨帳戶存取。若要設定此項，請參閱《[IAM 使用者指南》中的建立 IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)。 **

### 步驟 2：設定 SDK 或工具
<a name="credOrSourceAssumeRole_step2"></a>

設定 SDK 或工具，從 `credential_source`或 取得登入資料`source_profile`。

使用 從 Amazon ECS 容器、Amazon EC2 執行個體或環境變數`credential_source`取得登入資料。

使用 來從另一個設定檔`source_profile`取得登入資料。 `source_profile`也支援角色鏈結，這是設定檔的階層，接著會使用 擔任的角色來擔任另一個角色。

當您在設定檔中指定此項目時，軟體開發套件或工具會自動為您進行對應的 AWS STS [https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) API 呼叫。若要透過擔任角色來擷取和使用臨時登入資料，請在共用 AWS `config`檔案中指定下列組態值。如需這些設定的詳細資訊，請參閱 [擔任角色登入資料提供者設定](feature-assume-role-credentials.md#feature-assume-role-credentials-settings)一節。
+ `role_arn` - 來自您在步驟 1 中建立的 IAM 角色
+ 設定 `credential_source`或 `source_profile`
+ (選用) `duration_seconds`
+ (選用) `external_id`
+ (選用) `mfa_serial`
+ (選用) `role_session_name` 

下列範例顯示共用`config`檔案中兩個擔任角色選項的組態：

```
role_arn = arn:aws:iam::123456789012:role/my-role-name
credential_source = Ec2InstanceMetadata
```

```
[profile-with-user-that-can-assume-role]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
aws_session_token=IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZVERYLONGSTRINGEXAMPLE

[profile dev]
region = us-east-1
output = json
role_arn = arn:aws:iam::123456789012:role/my-role-name
source_profile = profile-with-user-that-can-assume-role
role_session_name = my_session
```

如需所有擔任角色登入資料提供者設定的詳細資訊，請參閱本指南[擔任角色登入資料提供者](feature-assume-role-credentials.md)中的 。

# 使用 Web 身分或 OpenID Connect 擔任角色以驗證 AWS SDKs和工具
<a name="access-assume-role-web"></a>

假設角色涉及使用一組臨時安全登入資料來存取 AWS 您可能無法存取的資源。這些臨時登入資料由存取金鑰 ID、私密存取金鑰和安全字符組成。若要進一步了解 AWS Security Token Service (AWS STS) API 請求，請參閱 *AWS Security Token Service API 參考*中的[動作](https://docs.aws.amazon.com/STS/latest/APIReference/API_Operations.html)。

若要設定軟體開發套件或工具以擔任角色，您必須先建立或識別要擔任的特定*角色*。IAM 角色由角色 Amazon Resource Name ([ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)) 唯一識別。角色會與其他實體建立信任關係。使用 角色的信任實體可能是 Web 身分提供者或 OpenID Connect(OIDC) 或 SAML 聯合。若要進一步了解 IAM 角色，請參閱《*IAM 使用者指南*》中的[擔任角色的方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)。

在軟體開發套件中設定 IAM 角色之後，如果該角色設定為信任您的身分提供者，您可以進一步設定軟體開發套件擔任該角色，以取得臨時 AWS 登入資料。

**注意**  
 AWS 最佳實務是盡可能使用區域端點並設定您的 [AWS 區域](feature-region.md)。

## 與 Web 身分或 OpenID Connect 聯合
<a name="webidentity"></a>

您可以使用公有身分提供者的 JSON Web Token (JWTs)，例如 Login With Amazon、Facebook、Google，以使用 取得臨時 AWS 登入資料`AssumeRoleWithWebIdentity`。視其使用方式而定，這些 JWTs可能會稱為 ID 字符或存取字符。您也可以使用從與 OIDC 探索通訊協定相容的身分提供者 (IdPs) 發行的 JWTs，例如 EntraId 或 PingFederate。

如果您使用的是 Amazon Elastic Kubernetes Service，此功能可讓您為 Amazon EKS 叢集中的每個服務帳戶指定不同的 IAM 角色。此 Kubernetes 功能會將 JWTs 分發到您的 Pod，然後由此登入資料提供者用來取得臨時 AWS 登入資料。如需此 Amazon EKS 組態的詳細資訊，請參閱《**Amazon EKS 使用者指南*》中的*[服務帳戶的 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html)。不過，對於更簡單的選項，如果您的 [SDK 支援](feature-container-credentials.md#feature-container-credentials-sdk-compat)，建議您改用 [Amazon EKS Pod 身分](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html)。

### 步驟 1：設定身分提供者和 IAM 角色
<a name="webidentity_step1"></a>

若要使用外部 IdP 設定聯合，請使用 IAM 身分提供者來通知 AWS 外部 IdP 及其組態。這會在您的 AWS 帳戶 和外部 IdP 之間建立*信任*。設定 SDK 以使用 JSON Web Token (JWT) 進行身分驗證之前，您必須先設定身分提供者 (IdP) 和用來存取它的 IAM 角色。若要設定這些項目，請參閱《*IAM 使用者指南*》中的[為 Web 身分或 OpenID Connect Federation （主控台） 建立角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)。

### 步驟 2：設定 SDK 或工具
<a name="webidentity_step2"></a>

設定 SDK 或工具以使用來自 的 JSON Web Token (JWT) AWS STS 進行身分驗證。

當您在設定檔中指定此項目時，軟體開發套件或工具會自動為您進行對應的 AWS STS [https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) API 呼叫。若要使用 Web 聯合身分擷取和使用臨時憑證，請在共用 AWS `config`檔案中指定下列組態值。如需這些設定的詳細資訊，請參閱 [擔任角色登入資料提供者設定](feature-assume-role-credentials.md#feature-assume-role-credentials-settings)一節。
+ `role_arn` - 來自您在步驟 1 中建立的 IAM 角色
+ `web_identity_token_file` - 從外部 IdP
+ (選用) `duration_seconds`
+ (選用) `role_session_name` 

以下是使用 Web 身分擔任角色的共用`config`檔案組態範例：

```
[profile web-identity]
role_arn=arn:aws:iam::123456789012:role/my-role-name
web_identity_token_file=/path/to/a/token
```

**注意**  
對於行動應用程式，請考慮使用 Amazon Cognito。Amazon Cognito 充當身分中介裝置，並為您執行大部分聯合工作。不過，Amazon Cognito 身分提供者不包含在SDKs和工具核心程式庫中，就像其他身分提供者一樣。若要存取 Amazon Cognito API，請在 SDK 或工具的建置或程式庫中包含 Amazon Cognito 服務用戶端。如需使用 AWS SDKs請參閱《*Amazon Cognito 開發人員指南*》中的[程式碼範例](https://docs.aws.amazon.com/cognito/latest/developerguide/service_code_examples.html)。

如需所有擔任角色登入資料提供者設定的詳細資訊，請參閱本指南[擔任角色登入資料提供者](feature-assume-role-credentials.md)中的 。

# 使用 AWS 存取金鑰來驗證 AWS SDKs和工具
<a name="access-users"></a>

使用 AWS SDKs和工具時，使用 AWS 存取金鑰是身分驗證的選項。

## 使用短期登入資料
<a name="credentials-temporary"></a>

 我們建議您設定軟體開發套件或工具，[使用 IAM Identity Center 驗證 AWS SDK 和工具](access-sso.md)以使用延長的工作階段持續時間選項。

不過，若要直接設定 SDK 或工具的臨時登入資料，請參閱 [使用短期登入資料來驗證 AWS SDKs和工具短期憑證](access-temp-idc.md)。

## 使用長期登入資料
<a name="credentials-long-term"></a>

**警告**  
為避免安全風險，在開發專用軟體或使用真實資料時，請勿使用 IAM 使用者進行身分驗證。相反地，搭配使用聯合功能和身分提供者，例如 [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)。

### 管理跨 的存取 AWS 帳戶
<a name="manage-access-accounts"></a>

作為安全最佳實務，我們建議您使用 AWS Organizations 搭配 IAM Identity Center 來管理所有 的存取 AWS 帳戶。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 中的安全性最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

您可以在 IAM Identity Center 中建立使用者、使用 Microsoft Active Directory、使用 SAML 2.0 身分提供者 (IdP)，或個別聯合您的 IdP AWS 帳戶。使用這些方法之一，您可以為使用者提供單一登入體驗。您也可以強制執行多重要素驗證 (MFA)，並使用臨時登入資料進行 AWS 帳戶 存取。這與 IAM 使用者不同，IAM 使用者是可共用的長期登入資料，可能會增加 AWS 資源的安全風險。

### 僅為沙盒環境建立 IAM 使用者
<a name="create-iam-user-sandbox"></a>

如果您是初次使用 AWS，您可以建立測試 IAM 使用者，然後使用它來執行教學課程，並探索 AWS 提供的內容。您可以在學習時使用此類型的登入資料，但我們建議您避免在沙盒環境之外使用。

對於下列使用案例，在 中開始使用 IAM 使用者可能很合理 AWS：
+ 開始使用 AWS SDK 或工具，並在沙盒 AWS 服務 環境中探索 。
+ 在學習過程中，執行不支援人工登入程序的排程指令碼、任務和其他自動化程序。

如果您在這些使用案例之外使用 IAM 使用者，請 AWS 帳戶 盡快轉換至 IAM Identity Center 或聯合身分提供者至 。如需詳細資訊，請參閱 [中的聯合身分 AWS](https://aws.amazon.com/identity/federation/)。

### 安全 IAM 使用者存取金鑰
<a name="secure-iam-access-keys"></a>

您應該定期輪換 IAM 使用者存取金鑰。請遵循《*IAM 使用者指南*》中的[輪換存取金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_RotateAccessKey)的指引。如果您認為自己不小心共用了 IAM 使用者存取金鑰，請輪換存取金鑰。

IAM 使用者存取金鑰應存放在本機電腦上的共用 AWS `credentials`檔案中。請勿將 IAM 使用者存取金鑰存放在程式碼中。請勿在任何原始碼管理軟體中包含包含 IAM 使用者存取金鑰的組態檔案。開放原始碼專案 [git-secrets](https://github.com/awslabs/git-secrets) 等外部工具可協助您避免不小心將敏感資訊遞交至 Git 儲存庫。如需詳細資訊，請參閱《 IAM 使用者指南》**中的 [IAM 身分 (使用者、使用者群組和角色)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)。

若要設定 IAM 使用者以開始使用，請參閱 [使用長期登入資料來驗證 AWS SDKs和工具](access-iam-users.md)。

# 使用短期登入資料來驗證 AWS SDKs和工具
<a name="access-temp-idc"></a>

 我們建議您設定軟體 AWS 開發套件或工具，以[使用 IAM Identity Center 驗證 AWS SDK 和工具](access-sso.md)搭配延長的工作階段持續時間選項使用。不過，您可以複製並使用 AWS 存取入口網站中提供的臨時登入資料。若這些憑證過期，便需要複製新憑證。您可以在設定檔中使用臨時憑證，或用作系統屬性和環境變數的值。

最佳實務：我們建議您的應用程式使用從下列位置交付的臨時登入資料，而不是手動管理登入資料檔案中的存取金鑰和權杖：
+  AWS 運算服務，例如在 Amazon Elastic Compute Cloud 或 中執行應用程式 AWS Lambda。
+ 登入資料提供者鏈結中的另一個選項，例如 [使用 IAM Identity Center 驗證 AWS SDK 和工具](access-sso.md)。
+ 或使用 [程序登入資料提供者](feature-process-credentials.md)擷取臨時登入資料。

**使用從 AWS 存取入口網站擷取的短期登入資料來設定登入資料檔案**

1. [建立共用的登入資料檔案](https://docs.aws.amazon.com/sdkref/latest/guide/file-location.html)。

1. 在登入資料檔案中，貼上下列預留位置文字，直到您貼上運作中的臨時登入資料為止。

   ```
   [default]
   aws_access_key_id=<value from AWS access portal>
   aws_secret_access_key=<value from AWS access portal>
   aws_session_token=<value from AWS access portal>
   ```

1. 儲存檔案。檔案現在`~/.aws/credentials`應該存在於您的本機開發系統上。此檔案包含軟體開發套件或工具在未指定特定具名設定檔時使用的 [【預設】](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html#file-format-profile) 設定檔。

1. [登入 AWS 存取入口網站](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtosignin.html)。

1. 請遵循這些[手動登入資料重新整理](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtogetcredentials.html#how-to-get-temp-credentials)的指示，從 AWS 存取入口網站複製 IAM 角色登入資料。

   1. 針對連結指示中的步驟 4，選擇 IAM 角色名稱，為您的開發需求授予存取權。此角色的名稱通常如 **PowerUserAccess** 或 **Developer**。

   1. 針對連結指示中的步驟 7，選取**手動將設定檔新增至您的 AWS 登入資料檔案**選項，然後複製內容。

1. 將複製的登入資料貼到您的本機`credentials`檔案。如果您使用設定檔，則不需要產生的`default`設定檔名稱。您的 檔案應該類似以下內容。

   ```
   [default]
   aws_access_key_id=AKIAIOSFODNN7EXAMPLE
   aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   aws_session_token=IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZVERYLONGSTRINGEXAMPLE
   ```

1. 儲存 `credentials` 檔案。

SDK 在建立服務用戶端時，會存取這些臨時憑證並用於每個要求。在步驟 5a 中選擇的 IAM 角色設定會決定[臨時憑證的有效時長](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtosessionduration.html)。最長持續時間為 12 小時。

臨時憑證過期後，請重複步驟 4 至 7。

# 使用長期登入資料來驗證 AWS SDKs和工具
<a name="access-iam-users"></a>

**警告**  
為避免安全風險，在開發專用軟體或使用真實資料時，請勿使用 IAM 使用者進行身分驗證。相反地，搭配使用聯合功能和身分提供者，例如 [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)。

如果您使用 IAM 使用者執行程式碼，則開發環境中的 SDK 或工具會使用共用 AWS `credentials`檔案中的長期 IAM 使用者憑證進行驗證。檢閱 [IAM 主題中的安全最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)，並盡快轉換為 IAM Identity Center 或其他暫時登入資料。

## 憑證的重要警告和指引
<a name="iam-warnings-and-guidelines"></a>

**憑證警告**
+ ***請勿***使用您帳戶的根憑證存取 AWS 資源。這些登入資料可讓未管制的帳戶存取和很難撤銷這些帳戶。
+ ***請勿***在應用程式檔案中放置常值存取金鑰或憑證資訊。如果您不小心這麼做了，則會有暴露您登入資料的風險，例如，當您上傳專案到公有儲存庫時。
+ ***請勿在***您的專案區域中放入包含憑證的檔案。
+ 請注意，存放在共用 AWS `credentials`檔案中的任何登入資料都會以純文字儲存。

**安全管理憑證的其他指引**

如需如何安全管理 AWS 登入資料的一般討論，請參閱《》中的[管理 AWS 存取金鑰的最佳實務](https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html)[AWS 一般參考](https://docs.aws.amazon.com/general/latest/gr/)。除了討論之外，請考慮下列事項：
+ 使用適用於 Amazon Elastic Container Service (Amazon ECS) 任務的[任務 IAM 角色](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)。
+ 使用在 Amazon EC2 執行個體上執行的應用程式的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。

## 先決條件：建立 AWS 帳戶
<a name="signup"></a>

若要使用 IAM 使用者存取 AWS 服務，您需要 AWS 帳戶和 AWS 登入資料。

1. **建立帳戶。**

   若要建立 AWS 帳戶，請參閱 *AWS 帳戶管理 參考指南*中的[入門：您是第一次 AWS 使用嗎？](https://docs.aws.amazon.com/accounts/latest/reference/welcome-first-time-user.html)。

1. **建立管理使用者。**

   避免使用根使用者帳戶 (您建立的初始帳戶) 來存取管理主控台與服務。反之，請依據 *IAM 使用者指南*的[建立管理使用者](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-set-up.html#create-an-admin)中的說明，建立管理使用者帳戶。

   建立管理使用者帳戶並記錄登入詳細資料之後，**請務必登出您的根使用者帳戶**，然後使用管理帳戶重新登入。

這些帳戶都不適用於在 上執行開發 AWS 或在 上執行應用程式 AWS。最佳實務是，您需要建立適合這些任務的使用者、許可集或服務角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的[套用最低權限許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)。

## 步驟 1：建立 IAM 使用者
<a name="step1authIamUser"></a>
+ 按照 *IAM 使用者指南*中的[建立 IAM 使用者 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console) 程序來建立 IAM 使用者。建立 IAM 使用者時：
  + 我們建議您選取**提供使用者對 的存取權 AWS 管理主控台**。這可讓您檢視與在視覺化環境中執行的程式碼 AWS 服務 相關的 ，例如檢查 AWS CloudTrail 診斷日誌或將檔案上傳至 Amazon Simple Storage Service，這在偵錯程式碼時很有幫助。
  + 針對**設定許可** - **許可選項**，選取**直接連接政策**，以了解如何將許可指派給此使用者。
    + 多數「入門」SDK 教學都使用 Amazon S3 服務做為範例。若要讓應用程式能夠完整存取 Amazon S3，請選取要連接至此使用者的 `AmazonS3FullAccess` 政策。
  + 您可以忽略該程序有關設定許可界限或標籤的選用步驟。

## 步驟 2：取得您的存取金鑰
<a name="stepGetKeys"></a>

1. 在 IAM 主控台的導覽窗格中，選取**使用者**，然後選取您先前建立使用者的 **User name**。

1. 在使用者頁面上，選取**安全憑證**頁面。接著，在**存取金鑰**下，選取**建立存取金鑰**。

1. 針對**建立存取金鑰步驟 1**，選擇**命令列界面 (CLI)** 或**本機程式碼**。這兩個選項都會產生與 AWS CLI 和 SDKs 搭配使用的相同類型金鑰。

1. 在**建立存取金鑰步驟 2** 中，輸入選用標籤並選取**下一步**。

1. 在**建立存取金鑰步驟 3** 中，選取**下載 .csv 檔案**，以儲存包含 IAM 使用者存取金鑰和私密存取金鑰的 `.csv` 檔案。您之後將會用到此資訊。
**警告**  
使用適當的安全措施來保護這些登入資料的安全。

1. 選取 **Done** (完成)。

## 步驟 3：更新共用`credentials`檔案
<a name="stepauthIamUser"></a>

1. 建立或開啟共用的 AWS `credentials` 檔案。這個檔案是位於 Linux 和 macOS 系統上的 `~/.aws/credentials` 和 Windows 上的 `%USERPROFILE%\.aws\credentials`。如需詳細資訊，請參閱[登入資料檔案的位置](https://docs.aws.amazon.com/credref/latest/refdocs/file-location.html)。

1. 將以下文字新增至共用的 `credentials` 檔案。將範例 ID 值和範例索引鍵值取代為您先前下載的`.csv`檔案中的值。

   ```
   [default]
   aws_access_key_id = AKIAIOSFODNN7EXAMPLE
   aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   ```

   

1. 儲存檔案。

共用`credentials`檔案是存放登入資料的最常見方式。這些也可以設定為環境變數，請參閱 [AWS 存取金鑰](feature-static-credentials.md) 以取得環境變數名稱。這是讓您開始使用的方法，但我們建議您盡快轉換到 IAM Identity Center 或其他臨時登入資料。在您不使用長期登入資料後，請記得從共用`credentials`檔案刪除這些登入資料。

# 使用 IAM 角色來驗證部署到 Amazon EC2 的應用程式
<a name="access-iam-roles-for-ec2"></a>

此範例涵蓋設定具有 Amazon S3 存取權 AWS Identity and Access Management 的角色，以便在部署到 Amazon Elastic Compute Cloud 執行個體的應用程式中使用。

若要在 Amazon Elastic Compute Cloud 執行個體上執行 AWS SDK 應用程式，請建立 IAM 角色，然後授予 Amazon EC2 執行個體對該角色的存取權。如需更多詳細資訊，請參閱 *Amazon EC2 使用者指南*中的 [Amazon EC2 的 IAM 角色](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)。

## 建立 IAM 角色
<a name="createRoleForEc2"></a>

您開發的 AWS SDK 應用程式可能存取至少一個 AWS 服務 來執行動作。建立 IAM 角色，授予應用程式執行所需的必要許可。

 此程序會建立角色，以授予 Amazon S3 的唯讀存取權做為範例。許多 AWS SDK 指南都有從 Amazon S3 讀取的「入門」教學課程。

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 的 IAM 主控台。

1. 在導覽窗格中，選取**角色**，然後選取**建立角色**。

1. 對於**選取信任的實體**，在**信任的實體類型**下，選擇 **AWS 服務**。

1. 在**使用案例中**，選擇 **Amazon EC2**，然後選擇**下一步**。

1. 對於**新增許可**，請從政策清單中選取 **Amazon S3 唯讀存取**的核取方塊，然後選取**下一步**。

1. 輸入角色的名稱，然後選取**建立角色**。*請記住此名稱，因為您在建立 Amazon EC2 執行個體時需要此名稱。*

## 啟動 Amazon EC2 執行個體並指定您的 IAM 角色
<a name="launchAndSpecify"></a>

您可以使用 IAM 角色建立和啟動 Amazon EC2 執行個體，方法如下：
+ 遵循《*Amazon EC2 使用者指南*》中的[快速啟動執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html#liw-quickly-launch-instance)。不過，在最終提交步驟之前，也請執行下列動作：
  + 在**進階詳細資訊**下，針對 **IAM 執行個體描述檔**，選擇您在上一個步驟中建立的角色。

 透過此 IAM 和 Amazon EC2 設定，您可以將應用程式部署到 Amazon EC2 執行個體，而您的應用程式將具有 Amazon S3 服務的讀取存取權。

## 連線至 EC2 執行個體
<a name="net-dg-hosm-connect"></a>

連線至 Amazon EC2 執行個體，以便您可以將應用程式轉移到該執行個體，然後執行應用程式。建立執行個體時，您需要包含金鑰對 **（登入） 下所用金鑰對**私有部分的 檔案，也就是 PEM 檔案。

您可以遵循執行個體類型的指引來執行此操作：[連接至 Linux 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html)或[連接至 Windows 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connecting_to_windows_instance.html)。當您連線時，請以可讓您將檔案從開發機器傳輸到執行個體的方式執行此操作。

**注意**  
在 Linux 或 macOS 終端機上，您可以使用安全複製命令來複製應用程式。若要`scp`搭配金鑰對使用 ，您可以使用下列命令：`scp -i path/to/key file/to/copy ec2-user@ec2-xx-xx-xxx-xxx.compute.amazonaws.com:~`。  
如需 Windows 的詳細資訊，請參閱[將檔案傳輸至 Windows 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instanceWindowsFileTransfer.html)。

如果您使用的是 AWS Toolkit，通常也可以使用 Toolkit 連線到執行個體。如需詳細資訊，請參閱您使用之 Toolkit 的特定使用者指南。

## 在 EC2 執行個體上執行您的應用程式
<a name="net-dg-hosm-run-the-app"></a>

1. 將您的應用程式檔案從本機磁碟機複製到 Amazon EC2 執行個體。

1. 啟動應用程式，並確認其執行的結果與開發機器上的結果相同。

1. （選用） 驗證應用程式是否使用 IAM 角色提供的登入資料。

   1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)：// 開啟 Amazon EC2 主控台。

   1. 選取執行個體。

   1. 選擇**動作**、**安全性**，然後選擇**修改 IAM 角色**。

   1.  對於 **IAM 角色**，選擇**無 IAM 角色來分離 IAM 角色**。

   1.  選擇**更新 IAM 角色**。

   1. 再次執行應用程式並確認傳回授權錯誤。

# 使用 TIP 外掛程式存取 AWS 服務
<a name="access-tip"></a>

 信任的身分傳播 (TIP) 是 的一項功能 AWS IAM Identity Center ，可讓 的管理員根據 群組關聯等使用者屬性 AWS 服務 授予許可。透過受信任的身分傳播，身分內容會新增至 IAM 角色，以識別請求存取 AWS 資源的使用者。此內容會傳播到其他 AWS 服務。

 身分內容包含的資訊， AWS 服務 用於在收到存取請求時做出授權決策。此資訊包含識別請求者的中繼資料 （例如，IAM Identity Center 使用者）、請求存取的 AWS 服務 （例如，Amazon Redshift)，以及存取範圍 （例如，唯讀存取）。接收 AWS 服務 使用此內容，以及指派給使用者的任何許可，來授權存取其資源。如需詳細資訊，請參閱 AWS IAM Identity Center 《 使用者指南》中的[信任身分傳播概觀中的 ](https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation-overview.html)。

 TIP 外掛程式可與支援受信任身分傳播 AWS 服務 的 搭配使用。做為參考使用案例，請參閱《[Amazon Q Business 使用者指南》中的使用 設定 AWS IAM Identity Center](https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/create-application.html) *Amazon Q Business* 應用程式。

**注意**  
 如果您使用的是 Amazon Q Business，請參閱[使用 設定 Amazon Q Business 應用程式 AWS IAM Identity Center](https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/create-application.html)以取得服務特定指示。

## 使用 TIP 外掛程式的先決條件
<a name="prereq-tip"></a>

需要下列資源，外掛程式才能運作：

1. 您必須使用 適用於 Java 的 AWS SDK 或 適用於 JavaScript 的 AWS SDK。

1. 確認您正在使用的服務支援信任的身分傳播。

   請參閱《 *AWS IAM Identity Center 使用者指南*》中[AWS 透過與](https://docs.aws.amazon.com/singlesignon/latest/userguide/awsapps-that-work-with-identity-center.html) **IAM Identity Center 整合之受管應用程式的 IAM Identity Center 啟用受信任身分傳播**欄。

1. 啟用 IAM Identity Center 和信任的身分傳播。

   請參閱*AWS IAM Identity Center 《 使用者指南*》中的 [TIP 先決條件和考量](https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation-overall-prerequisites.html)事項。

1. 您必須擁有 Identity-Center-integrated的應用程式。

   請參閱*AWS IAM Identity Center 《 使用者指南*》中的[AWS 受管應用程式](https://docs.aws.amazon.com/singlesignon/latest/userguide/awsapps-quick-start-setting-up-identity-center-to-test-awsmanagedapps.html)或[客戶受管應用程式](https://docs.aws.amazon.com/singlesignon/latest/userguide/customermanagedapps-trusted-identity-propagation-set-up-your-own-app-OAuth2.html)。

1. 您必須設定信任的權杖發行者 (TTI)，並將您的服務連線至 IAM Identity Center。

   請參閱《 *AWS IAM Identity Center 使用者指南*》中[設定](https://docs.aws.amazon.com/singlesignon/latest/userguide/setuptrustedtokenissuer.html#setuptrustedtokenissuer-tasks)[信任權杖發行者的先決條件](https://docs.aws.amazon.com/singlesignon/latest/userguide/using-apps-with-trusted-token-issuer.html#trusted-token-issuer-prerequisites)和任務。

## 在程式碼中使用 TIP 外掛程式
<a name="using-tip"></a>

1. 建立信任身分傳播外掛程式的執行個體。

1. 建立服務用戶端執行個體以與您的 互動， AWS 服務 並透過新增信任的身分傳播外掛程式來自訂服務用戶端。

TIP 外掛程式採用下列輸入參數：
+ **`webTokenProvider`**：客戶實作以從外部身分提供者取得 OpenID 字符的函數。
+ **`accessRoleArn`**：由具有使用者身分內容的外掛程式擔任的 IAM 角色 ARN，以取得身分增強憑證。
+ **`applicationArn`**：用戶端或應用程式的唯一識別符字串。此值是已設定 OAuth 授予的應用程式 ARN。
+ **`ssoOidcClient`**：（選用） SSO OIDC 用戶端，例如[https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/ssooidc/SsoOidcClient.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/ssooidc/SsoOidcClient.html)適用於 Java 的 或[https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-client-sso-oidc/](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-client-sso-oidc/)適用於 JavaScript 的 ，具有客戶定義的組態。若未提供，則會使用 `applicationRoleArn` 建立並啟用預設的 OIDC 用戶端。
+  **`stsClient`**：（選用） AWS STS 具有客戶定義組態的用戶端，用於`accessRoleArn`以使用者的身分內容擔任 。如果未提供，`applicationRoleArn`則會執行個體化並使用 的 AWS STS 用戶端。
+ **`applicationRoleArn`**：（選用） 要擔任的 IAM 角色 ARN，`AssumeRoleWithWebIdentity`以便可以引導 OIDC 和 AWS STS 用戶端。
  + 如果未提供，則必須**同時**提供 `ssoOidcClient`和 `stsClient` 參數。
  + 如果提供， `applicationRoleArn`不能與 `accessRoleArn` 參數的值相同。 `applicationRoleArn` 用於建置 stsClient，其用於擔任 accessRole。如果 `applicationRole`和 都使用相同的角色`accessRole`，則表示使用角色來擔任自己 （自我角色假設），這會不建議這麼做 AWS。如需詳細資訊，請參閱[公告](https://aws.amazon.com/blogs/security/announcing-an-update-to-iam-role-trust-policy-behavior/)。

### `ssoOidcClient`、 `stsClient`和 `applicationRoleArn` 參數的考量事項
<a name="considerations-tip"></a>

設定 TIP 外掛程式時，請根據您提供的參數，考慮下列許可要求：
+ 如果您要提供 `ssoOidcClient`和 `stsClient`：
  + 上的登入資料`ssoOidcClient`應具有呼叫身分中心的`oauth:CreateTokenWithIAM`許可，以取得身分中心特定的使用者內容。
  + 上的登入資料`stsClient`應具有 `sts:AssumeRole`和 上的`sts:SetContext`許可`accessRole`。 `accessRole`也需要設定與 上登入資料的信任關係`stsClient`。
+ 如果您要提供 `applicationRoleArn`：
  + `applicationRole` 應該具有必要資源 (IdC 執行個體 `accessRole`) 的 `oauth:CreateTokenWithIAM``sts:AssumeRole`和 `sts:SetContext`許可，因為它將用於建置 OIDC 和 STS 用戶端。
  + `applicationRole` 應與用於產生 的身分提供者具有信任關係`webToken`，因為 `webToken`將用於透過外掛程式的 [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) 呼叫擔任 applicationRole。

**ApplicationRole 組態範例：**

具有 Web 權杖提供者的信任政策：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws:iam::ACCOUNT_ID:oidc-provider/IDENTITY_PROVIDER_URL"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "IDENTITY_PROVIDER_URL:aud": "CLIENT_ID_TO_BE_TRUSTED"
                }
            }
        }
    ]
}
```

許可政策：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole",
                "sts:SetContext"
            ],
            "Resource": [
                "accessRoleArn"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "sso-oauth:CreateTokenWithIAM"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

## 使用 TIP 的程式碼範例
<a name="tip-code-example"></a>

以下範例示範如何使用 適用於 Java 的 AWS SDK 或 在程式碼中實作 TIP 外掛程式 適用於 JavaScript 的 AWS SDK。

------
#### [ Java ]

若要在 適用於 Java 的 AWS SDK 專案中使用 TIP 外掛程式，您需要在專案的 `pom.xml`檔案中將其宣告為相依性。

```
<dependency>
<groupId>software.amazon.awsidentity.trustedIdentityPropagation</groupId>
<artifactId>aws-sdk-java-trustedIdentityPropagation-java-plugin</artifactId>
   <version>2.0.0</version>
</dependency>
```

在您的原始程式碼中，包含 所需的套件陳述式`software.amazon.awssdk.trustedidentitypropagation`。

下列範例顯示建立受信任身分傳播外掛程式執行個體並將其新增至服務用戶端的兩種方式。這兩個範例都使用 Amazon S3 做為服務，並使用 `S3AccessGrantsPlugin` 來管理使用者特定許可，但可以套用到支援受信任身分傳播 (TIP) 的任何 AWS 服務 。

**注意**  
對於這些範例，您需要從 S3 Access Grants 設定使用者特定許可。如需詳細資訊，請參閱 [S3 Access Grants 文件](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants.html)。

**選項 1：建置並傳遞 OIDC 和 STS 用戶端**

```
SsoOidcClient oidcClient = SsoOidcClient.builder()
    .region(Region.US_EAST_1)
    .credentialsProvider(credentialsProvider).build();

StsClient stsClient = StsClient.builder()
    .region(Region.US_EAST_1)
    .credentialsProvider(credentialsProvider).build();

TrustedIdentityPropagationPlugin trustedIdentityPropagationPlugin = TrustedIdentityPropagationPlugin.builder()
        .webTokenProvider(() -> webToken)
        .applicationArn(idcApplicationArn)
        .accessRoleArn(accessRoleArn)
        .ssoOidcClient(oidcClient)
        .stsClient(stsClient)
        .build();

S3AccessGrantsPlugin accessGrantsPlugin = S3AccessGrantsPlugin.builder()
        .build();

S3Client s3Client =
        S3Client.builder().region(Region.US_EAST_1)
                .crossRegionAccessEnabled(true)
                .addPlugin(trustedIdentityPropagationPlugin)
                .addPlugin(accessGrantsPlugin)
                .build();

final var resp = s3Client.getObject(GetObjectRequest.builder()
        .key("path/to/object/fileName")
        .bucket("bucketName")
        .build());
```

**選項 2：將 applicationRoleArn 和延遲用戶端建立傳遞至外掛程式**

```
TrustedIdentityPropagationPlugin trustedIdentityPropagationPlugin = TrustedIdentityPropagationPlugin.builder()
        .webTokenProvider(() -> webToken)
        .applicationArn(idcApplicationArn)
        .accessRoleArn(accessRoleArn)
        .applicationRoleArn(applicationRoleArn)
        .build();

S3AccessGrantsPlugin accessGrantsPlugin = S3AccessGrantsPlugin.builder()
        .build();

S3Client s3Client =
        S3Client.builder().region(Region.US_EAST_1)
                .crossRegionAccessEnabled(true)
                .addPlugin(trustedIdentityPropagationPlugin)
                .addPlugin(accessGrantsPlugin)
                .build();

final var resp = s3Client.getObject(GetObjectRequest.builder()
        .key("path/to/object/fileName")
        .bucket("bucketName")
        .build());
```

如需其他詳細資訊和來源，請參閱 GitHub 上的 [ trusted-identity-propagation-java](https://github.com/aws-sdk-plugin/trusted-identity-propagation-java)。

------
#### [ JavaScript ]

執行下列命令，在您的 適用於 JavaScript 的 AWS SDK 專案中安裝 TIP 身分驗證外掛程式套件：

```
$  npm i @aws-sdk-extension/trusted-identity-propagation
```

最終`package.json`應包含類似如下的相依性：

```
  "dependencies": {
"@aws-sdk-extension/trusted-identity-propagation": "^2.0.0"
  },
```

 在您的原始程式碼中，匯入所需的`TrustedIdentityPropagationExtension`相依性。

 下列範例顯示建立受信任身分傳播外掛程式執行個體並將其新增至服務用戶端的兩種方式。這兩個範例都使用 Amazon S3 做為服務，並使用 Amazon S3 Access Grants 來管理使用者特定許可，但可以套用到支援受信任身分傳播 (TIP) 的任何 AWS 服務 。

**注意**  
如需這些範例，您需要從 Amazon S3 Access Grants 設定使用者特定許可，請參閱 [Amazon S3 Access Grants 文件](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants.html)以取得更多詳細資訊。

**選項 1：建置並傳遞 OIDC 和 STS 用戶端**

```
import { S3Client, GetObjectCommand } from "@aws-sdk/client-s3";
import { S3ControlClient, GetDataAccessCommand } from "@aws-sdk/client-s3-control";
import { TrustedIdentityPropagationExtension } from "@aws-sdk-extension/trusted-identity-propagation";

const s3ControlClient = new S3ControlClient({
    region: "us-east-1",
    extensions: [
        TrustedIdentityPropagationExtension.create({
            webTokenProvider: async () => {
                return 'ID_TOKEN_FROM_YOUR_IDENTITY_PROVIDER';
            },
            ssoOidcClient: customOidcClient,
            stsClient: customStsClient,
            accessRoleArn: accessRoleArn,
            applicationArn: applicationArn,
        }),
    ],
});

const getDataAccessParams = {
  Target: "S3_URI_PATH",
  Permission: "READ",
  AccountId: ACCOUNT_ID,
  InstanceArn: S3_ACCESS_GRANTS_ARN,
  TargetType: "Object",
};

try {
  const command = new GetDataAccessCommand(getDataAccessParams);
  const response = await s3ControlClient.send(command);

  const credentials = response.Credentials;

  // Create a new S3 client with the temporary credentials
  const temporaryS3Client = new S3Client({
    region: "us-east-1",
    credentials: {
      accessKeyId: credentials.AccessKeyId,
      secretAccessKey: credentials.SecretAccessKey,
      sessionToken: credentials.SessionToken,
    },
  });

  // Use the temporary S3 client to perform the operation
  const s3Params = {
    Bucket: "BUCKET_NAME",
    Key: "S3_OBJECT_KEY",
  };
  const getObjectCommand = new GetObjectCommand(s3Params);
  const s3Object = await temporaryS3Client.send(getObjectCommand);

  const fileContent = await s3Object.Body.transformToString();

  // Process the S3 object data
  console.log("Successfully retrieved S3 object:", fileContent);
} catch (error) {
  console.error("Error accessing S3 data:", error);
}
```

**選項 2：將 applicationRoleArn 和延遲用戶端建立傳遞至外掛程式**

```
import { S3Client, GetObjectCommand } from "@aws-sdk/client-s3";
import { S3ControlClient, GetDataAccessCommand } from "@aws-sdk/client-s3-control";
import { TrustedIdentityPropagationExtension } from "@aws-sdk-extension/trusted-identity-propagation";

const s3ControlClient = new S3ControlClient({
    region: "us-east-1",
    extensions: [
        TrustedIdentityPropagationExtension.create({
            webTokenProvider: async () => {
                return 'ID_TOKEN_FROM_YOUR_IDENTITY_PROVIDER';
            },
            accessRoleArn: accessRoleArn,
            applicationRoleArn: applicationRoleArn,
            applicationArn: applicationArn,
        }),
    ],
});

// Same S3 AccessGrants workflow as Option 1
const getDataAccessParams = {
  Target: "S3_URI_PATH",
  Permission: "READ",
  AccountId: ACCOUNT_ID,
  InstanceArn: S3_ACCESS_GRANTS_ARN,
  TargetType: "Object",
};

try {
  const command = new GetDataAccessCommand(getDataAccessParams);
  const response = await s3ControlClient.send(command);

  const credentials = response.Credentials;

  const temporaryS3Client = new S3Client({
    region: "us-east-1",
    credentials: {
      accessKeyId: credentials.AccessKeyId,
      secretAccessKey: credentials.SecretAccessKey,
      sessionToken: credentials.SessionToken,
    },
  });

  const s3Params = {
    Bucket: "BUCKET_NAME",
    Key: "S3_OBJECT_KEY",
  };
  const getObjectCommand = new GetObjectCommand(s3Params);
  const s3Object = await temporaryS3Client.send(getObjectCommand);

  const fileContent = await s3Object.Body.transformToString();

  console.log("Successfully retrieved S3 object:", fileContent);
} catch (error) {
  console.error("Error accessing S3 data:", error);
}
```

如需其他詳細資訊和來源，請參閱 GitHub 上的 [trusted-identity-propagation-js](https://github.com/aws-sdk-plugin/trusted-identity-propagation-js)。

------