配置 AWS CLI 为使用 IAM Identity Center 令牌提供商凭证,并自动刷新身份验证 - AWS Command Line Interface

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

配置 AWS CLI 为使用 IAM Identity Center 令牌提供商凭证,并自动刷新身份验证

本主题介绍如何配置以使用 AWS IAM Identity Center (IAM I AWS CLI dentity Center)令牌提供商配置对用户进行身份验证。使用此 SSO 令牌提供程序配置,您的 AWS SDK 或工具可以自动检索刷新的身份验证令牌。

使用 IAM Identity Center 时,您可以登录到 Active Directory、内置 IAM Identity Center 目录或已连接到 IAM Identity Center 的另一个 IdP。您可以将这些证书映射到 AWS Identity and Access Management (IAM) 角色以供您运行 AWS CLI 命令。

无论您使用哪个 IdP,IAM Identity Center 都会将这些区别抽象出来。例如,您可以连接 Microsoft Azure AD,如博客文章 IAM Identity Center 的下一个演进中所述。

注意

有关使用不使用账户 ID 和角色的不记名身份验证的信息,请参阅 A mazon CodeCatalyst 用户指南 CodeCatalyst中的设置 AWS CLI 与一起使用

您可以使用 SSO 令牌提供程序配置根据应用程序的需要自动刷新身份验证令牌,也可以使用延长会话持续时间选项。您可以通过下列方式来执行此配置:

  • 自动,使用 aws configure ssoaws configure sso-session 命令。以下命令是向导,指导您完成配置文件和 sso-session 信息的配置:

  • 手动,通过编辑存储命名配置文件的 config 文件。

先决条件

  • 安装 AWS CLI。有关更多信息,请参阅 安装或更新到最新版本的 AWS CLI

  • 您必须先有权访问 IAM Identity Center 中的 SSO 身份验证。选择以下方法之一来访问您的 AWS 证书。

请按照《AWS IAM Identity Center 用户指南》入门中的说明操作。此过程激活 IAM Identity Center,创建管理用户并添加适当的最低权限集。

注意

创建应用最低权限权限的权限集。除非您的雇主已为此目的创建自定义权限集,否则建议使用预定义的 PowerUserAccess 权限集。

退出门户并再次登录以查看您的 AWS 账户 和Administrator或选项PowerUserAccess。在使用开发工具包时选择 PowerUserAccess。这也可以帮助您找到有关编程访问的详细信息。

AWS 通过身份提供商的门户网站登录。如果您的云管理员已授予您PowerUserAccess(开发者)权限,则您 AWS 账户 会看到您有权访问的权限和权限集。在您的权限集名称旁边,可以看到有关使用该权限集手动或以编程方式访问账户的选项。

自定义实现可能会产生不同的体验,例如不同的权限集名称。如果您不确定要使用哪个权限集,请联系 IT 团队以寻求帮助。

AWS 通过 AWS 访问门户登录。如果您的云管理员已授予您PowerUserAccess(开发者)权限,则您 AWS 账户 会看到您有权访问的权限和权限集。在您的权限集名称旁边,可以看到有关使用该权限集手动或以编程方式访问账户的选项。

请联系您的 IT 团队以寻求帮助。

使用 aws configure sso 向导配置您的配置文件

在 AWS CLI中同时配置 IAM Identity Center 配置文件和 sso-session
  1. 通过执行以下操作收集您的 IAM Identity Center 信息:

    1. 在您的 AWS 访问门户中,选择用于开发的权限集,然后选择访问密钥链接。

    2. 在 “获取凭据” 对话框中,选择与您的操作系统匹配的选项卡。

    3. 选择 IAM Identity Center 凭证方法以获取运行 aws configure sso 所需的 SSO Start URLSSO Region 值。

    4. 有关要注册哪些范围值的信息,请参阅《IAM Identity Center 用户指南》中的 OAuth 2.0 访问范围

  2. 在您的首选终端中,运行aws configure sso命令并提供您的 IAM Identity Center 起始 URL 和托管身份中心目录的 AWS 区域。

    $ aws configure sso SSO session name (Recommended): my-sso SSO start URL [None]: https://my-sso-portal.awsapps.com/start SSO region [None]: us-east-1 SSO registration scopes [None]: sso:account:access
  3. AWS CLI 尝试打开您的默认浏览器并开始您的 IAM Identity Center 账户的登录过程。

    Attempting to automatically open the SSO authorization page in your default browser.

    如果 AWS CLI 无法打开浏览器,则会显示以下消息,其中包含有关如何手动启动登录过程的说明。

    If the browser does not open or you wish to use a different device to authorize this request, open the following URL: https://device.sso.us-west-2.amazonaws.com/ Then enter the code: QCFK-N451

    IAM Identity Center 使用代码将 IAM Identity Center 会话与当前 AWS CLI 会话关联。IAM Identity Center 浏览器页面会提示您使用 IAM Identity Center 凭证登录。这授予了检索和显示您有权在 IAM Identity Center 中使用的 AWS 账户和角色的权限。 AWS CLI

    注意

    登录过程可能会提示您允许 AWS CLI 访问您的数据。由于 AWS CLI 是在适用于 Python 的 SDK 之上构建的,因此权限消息可能包含botocore名称的变体。

  4. AWS CLI 显示可供您使用的 AWS 帐户。如果您只能使用一个帐户,则会自动为您 AWS CLI 选择该帐户并跳过提示。可供您使用的 AWS 账户由您在 IAM Identity Center 中的用户配置决定。

    There are 2 AWS accounts available to you. > DeveloperAccount, developer-account-admin@example.com (123456789011) ProductionAccount, production-account-admin@example.com (123456789022)

    使用箭头键选择要使用的账户。左侧的“>”字符指向当前选择。按 Enter 进行选择。

  5. AWS CLI 确认您的账户选择,并显示所选账户中可供您使用的 IAM 角色。如果所选账户仅列出一个角色,则会自动为您 AWS CLI 选择该角色并跳过提示。可供您使用的角色由 IAM Identity Center 中的用户配置决定。

    Using the account ID 123456789011 There are 2 roles available to you. > ReadOnly FullAccess

    使用箭头键选择要使用的 IAM 角色,然后按 <ENTER> 键。

  6. 指定默认输出格式、要向其发送命令的默认 AWS 区域,并提供配置文件名称,以便您可以从本地计算机上定义的所有配置文件中引用此配置文件。在以下示例中,用户输入默认区域、默认输出格式和配置文件的名称。如果您具有以前的现有配置,也可以按下 <ENTER> 以选择方括号之间显示的任何默认值。建议的配置文件名称是账户 ID 号,并依次后跟下划线和角色名称。

    CLI default client Region [None]: us-west-2<ENTER> CLI default output format [None]: json<ENTER> CLI profile name [123456789011_ReadOnly]: my-dev-profile<ENTER>
    注意

    如果您指定default为配置文件名称,则当您运行 AWS CLI 命令而不指定配置文件名称时,该配置文件将成为使用的配置文件。

  7. 最后一条消息描述了完成的配置文件配置。

    To use this profile, specify the profile name using --profile, as shown: aws s3 ls --profile my-dev-profile
  8. 这会导致在 ~/.aws/config 中创建 sso-session 部分和命名配置文件,具体如下所示:

    [profile my-dev-profile] sso_session = my-sso sso_account_id = 123456789011 sso_role_name = readOnly region = us-west-2 output = json [sso-session my-sso] sso_region = us-east-1 sso_start_url = https://my-sso-portal.awsapps.com/start sso_registration_scopes = sso:account:access

    现在,您可以使用此 sso-session 和配置文件来请求刷新的凭证。使用 aws sso login 命令请求和检索运行命令所需的凭证。有关说明,请参阅使用 IAM Identity Center 命名配置文件

使用 aws configure sso-session 向导仅配置您的 sso-session 部分

aws configure sso-session 命令仅更新 ~/.aws/config 文件中的 sso-session 部分。此命令可用于创建或更新您的会话。如果您已有现有的配置设置并且想要创建新的 sso-session 配置或编辑现有的这一配置,这很有用。

运行aws configure sso-session命令并提供您的 IAM Identity Center 起始 URL 和托管身份中心目录的 AWS 区域。

$ aws configure sso-session SSO session name: my-sso SSO start URL [None]: https://my-sso-portal.awsapps.com/start SSO region [None]: us-east-1 SSO registration scopes [None]: sso:account:access

输入您的信息后,会有一条消息描述已完成的配置文件配置。

Completed configuring SSO session: my-sso Run the following to login and refresh access token for this session: aws sso login --sso-session my-sso
注意

如果您已登录到您正在更新的 sso-session,请运行 aws sso login 命令来刷新您的令牌。

使用 config 文件手动配置

config文件的sso-session部分用于对用于获取 SSO 访问令牌的配置变量进行分组,然后可以使用这些变量来获取 AWS 凭证。使用了以下设置:

您定义一个 sso-session 部分并将其关联到配置文件。必须在 sso-session 部分内设置 sso_regionsso_start_url。通常,sso_account_idsso_role_name 必须在 profile 部分进行设置,以便 SDK 可以请求 SSO 凭证。

以下示例将 SDK 配置为请求 SSO 凭证并支持自动令牌刷新:

[profile dev] sso_session = my-sso sso_account_id = 111122223333 sso_role_name = SampleRole [sso-session my-sso] sso_region = us-east-1 sso_start_url = https://my-sso-portal.awsapps.com/start

这也允许在多个配置文件中重复使用 sso-session 配置:

[profile dev] sso_session = my-sso sso_account_id = 111122223333 sso_role_name = SampleRole [profile prod] sso_session = my-sso sso_account_id = 111122223333 sso_role_name = SampleRole2 [sso-session my-sso] sso_region = us-east-1 sso_start_url = https://my-sso-portal.awsapps.com/start

但是,并不是所有 SSO 令牌配置场景都需要 sso_account_idsso_role_name。如果您的应用程序仅使用支持持有者身份验证的 AWS 服务,则不需要传统 AWS 凭证。持有者身份验证是一种 HTTP 身份验证方案,它使用称为持有者令牌的安全令牌。在这种情况下,不需要 sso_account_idsso_role_name。请参阅 AWS 服务的单独指南,以确定其是否支持持有者令牌授权。

此外,可以作为 sso-session 的一部分配置注册范围。范围是 OAuth 2.0 中的一种机制,用于限制应用程序对用户账户的访问。应用程序可以请求一个或多个范围,向应用程序签发的访问令牌将仅限于授予的范围。这些范围定义了为已注册的 OIDC 客户端请求授权的权限和客户端检索的访问令牌。以下示例将 sso_registration_scopes 设置为提供已列出账户/角色的访问权限:

[sso-session my-sso] sso_region = us-east-1 sso_start_url = https://my-sso-portal.awsapps.com/start sso_registration_scopes = sso:account:access

身份验证令牌缓存到 ~/.aws/sso/cache 目录下的磁盘上,文件名基于会话名称。