

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 IAM 身份中心对 AWS SDK 和工具进行身份验证
<a name="access-sso"></a>

 AWS IAM Identity Center 可用于在非AWS 计算服务环境中开发 AWS 应用程序时提供 AWS 凭证。如果您正在使用诸如亚马逊弹性计算云 (Amazon EC2) AWS Cloud9或 Amazon EC2之类的 AWS 资源进行开发，我们建议改为从该服务获取证书。

如果您已经使用身份中心进行 AWS 账户访问或需要管理组织的访问权限，请使用 IAM Identity Center 身份验证。

在本教程中，您将建立 IAM Identity Center 访问权限，并将使用 AWS 访问门户和，为您的软件开发工具包或工具配置访问权限 AWS CLI。
+  AWS 访问门户是您手动登录 IAM 身份中心的网址。URL 的格式为 `d-xxxxxxxxxx.awsapps.com/start` 或 `your_subdomain.awsapps.com/start`。登录 AWS 访问门户后，您可以查看 AWS 账户 已为该用户配置的角色。此过程使用 AWS 访问门户获取 SDK/tool 身份验证过程所需的配置值。
+  AWS CLI 用于配置您的软件开发工具包或工具，使其对您的代码发出的 API 调用使用 IAM 身份中心身份验证。此一次性过程会更新您的共享 AWS `config`文件，然后在您运行代码时由您的 SDK 或工具使用该文件。

## 先决条件
<a name="prereq-auth"></a>

在开始此过程之前，您应已经完成下列步骤：
+ 如果您没有 AWS 账户，[请注册 AWS 账户](https://portal.aws.amazon.com/billing/signup).
+ 如果您尚未启用 IAM Identity Center，请按照《AWS IAM Identity Center 用户指南》中 [enable 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 用户指南》中 [Configure user access with the default IAM Identity Center directory](https://docs.aws.amazon.com/singlesignon/latest/userguide/quick-start-default-idc.html)** 说明的过程添加用户并添加管理员权限。

1. `AdministratorAccess` 权限集不应用于普通开发用途。相反，我们建议使用预定义的 `PowerUserAccess` 权限集，除非您的雇主已为此目的创建了自定义权限集。

   再次按照 [Configure user access with the default IAM Identity Center directory](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. 退出门户并再次登录以查看您的 AWS 账户 和`Administrator`或选项`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 身份中心的工具
<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。如果没有，请在的**控制面板**上找到您的**AWS 访问门户 URL [https://console.aws.amazon.com/singlesignon/](https://console.aws.amazon.com/singlesignon/)**。

   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 配置文件名称**，我们建议您在开始*default*时输入。有关如何设置非默认（已命名）配置文件及其关联环境变量的信息，请参阅 [配置文件](file-format.md#file-format-profile)。

1. （可选）在 AWS CLI 命令提示符下，通过运行`aws sts get-caller-identity`命令确认活动会话身份。响应应显示您配置的 IAM Identity Center 权限集。

1. 如果您使用的是 S AWS DK，请在您的开发环境中为您的 SDK 创建应用程序。

   1. 对于某些人来说 SDKs，在使用 IAM Identity Center 身份验证之前，`SSOOIDC`必须将其他软件包（例如`SSO`和）添加到您的应用程序中。有关详细信息，请参阅特定的 SDK。

   1.  如果您之前配置了对的访问权限 AWS，请查看您的共享 AWS `credentials`文件是否有任何访问权限[AWS 访问密钥](feature-static-credentials.md)。由于 [了解默认凭证提供者链](standardized-credentials.md#credentialProviderChain) 优先级，在 SDK 或工具使用 IAM Identity Center 凭证之前，您必须移除所有静态凭证。

 要深入了解 SDKs 和工具如何使用和使用此配置刷新凭据，请参阅[如何解决 AWS SDKs 和工具的 IAM 身份中心身份验证问题](understanding-sso.md)。

要直接在共享的 `config` 文件中配置 IAM Identity Center 提供者设置，请参阅本指南中的 [IAM Identity Center 凭证提供者](feature-sso-credentials.md)。

## 刷新门户访问会话
<a name="refreshSession"></a>

您的访问权限最终将过期，并且 SDK 或工具将遇到身份验证错误。何时过期取决于您配置的会话时长。要在需要时再次刷新访问门户会话， 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 身份中心身份验证问题
<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 名称 | 说明 | 
| --- | --- | --- | 
| 身份中心  | sso  | 尽管已重命名 AWS 单点登录，但出于向后兼容目的，ssoAPI 命名空间仍将保留其原始名称。有关更多信息，请参阅 AWS IAM Identity Center 用户指南中的 [IAM Identity Center 重命名](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html#renamed)。 | 
| IAM Identity Center 控制台管理控制台 |   | 用于配置单点登录的控制台。 | 
| AWS 访问门户网址  |  | 您的 IAM Identity Center 账户独有的 URL，例如 https://xxx.awsapps.com/start。您使用您的 IAM Identity Center 登录凭证来登录此门户。 | 
| IAM Identity Center 访问门户会话  | 身份验证会话  | 向调用者提供持有者访问令牌。 | 
| 权限集会话  |   | 软件开发工具包内部用于进行调用的 IAM 会 AWS 服务 话。在非正式讨论中，您可能会看到它被错误地称为 “角色会话”。 | 
| 权限集凭证  | AWS 证书sigv4 凭证  | SDK 实际用于大多数 AWS 服务 调用（特别是所有 sigv4 AWS 服务 调用）的凭证。在非正式讨论中，您可能会看到它被错误地称为 “角色凭证”。 | 
| IAM Identity Center 凭证提供者  | SSO 凭证提供者  | 如何获取凭证，例如提供功能的类或模块。 | 

## 了解 SDK 凭据解析 AWS 服务
<a name="idccredres"></a>

IAM Identity Center API 将持有者令牌凭证交换为 sigv4 凭证。大多数 AWS 服务 都是 sigv4 APIs，但也有一些例外，比如 Amazon CodeWhisperer 和。 Amazon CodeCatalyst以下内容描述了通过 AWS IAM Identity Center支持大多数应用程序代码 AWS 服务 调用的凭证解析流程。

### 启动 AWS 访问门户会话
<a name="idccredres1"></a>
+ 使用您的凭证登录会话以开始该过程。
  + 使用 AWS Command Line Interface (AWS CLI) 中的`aws sso login`命令。如果您还没有活动会话，这将启动一个新的 IAM Identity Center 会话。
+ 启动新会话时，您将收到来自 IAM Identity Center 的刷新令牌和访问令牌。 AWS CLI 还会使用新的访问令牌和刷新令牌更新 SSO 缓存 JSON 文件，并使其可供使用。 SDKs
+ 如果您已经有一个活动会话，则该 AWS CLI 命令将重复使用现有会话，并且将在现有会话过期时过期。要了解如何设置 IAM Identity Center 会话[的时长，请参阅用户*指南*中的配置用户 AWS 访问门户会话](https://docs.aws.amazon.com/singlesignon/latest/userguide/configure-user-session.html)的AWS IAM Identity Center 持续时间。
  + 最大会话时长已延长至 90 天，以减少频繁登录的需求。

### SDK 如何获取 AWS 服务 通话凭证
<a name="idccredres2"></a>

SDKs AWS 服务 当您为每个服务实例化客户端对象时，提供访问权限。将共享 AWS `config`文件的选定配置文件配置为 IAM Identity Center 凭证解析时，将使用 IAM Identity Center 来解析您的应用程序的证书。
+ 在创建客户端时，[凭证解析过程](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html#credentialProviderChain)将在运行时完成。

要 APIs 使用 IAM 身份中心单点登录检索 sigv4 的证书，软件开发工具包使用 IAM 身份中心访问令牌获取 IAM 会话。此 IAM 会话称为权限集会话，它通过担任 IAM 角色提供对软件开发工具包的 AWS 访问权限。
+  权限集会话持续时间与 IAM Identity Center 会话持续时间是分开设置的。
  + 要了解如何设置权限集会话持续时间，请参阅*AWS IAM Identity Center 用户指南*中的[设置会话持续时间](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtosessionduration.html)。
+  请注意，在大多数 S AWS DK API 文档中，权限集*AWS 凭据*也被称为*凭证和 sigv4 凭证*。

对软件开发工具包的 IAM Identity Center API [getRoleCredentials](https://docs.aws.amazon.com/singlesignon/latest/PortalAPIReference/API_GetRoleCredentials.html)的调用会返回权限集证书。软件开发工具包的客户端对象使用该代入的 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 需要新的权限集凭证时，SDK 会首先检查所有有效的现有凭证并使用这些凭证。无论凭证是针对新客户端，还是凭证已过期的现有客户端，这都适用。如果找不到凭证或凭证无效，则 SDK 会调用 IAM Identity Center API 来获取新凭证。要调用 API，它需要访问令牌。如果访问令牌已过期，SDK 会使用刷新令牌尝试从 IAM Identity Center 服务获取新的访问令牌。如果您的 IAM Identity Center 访问门户会话未过期，则会授予此令牌。