在中使用IAM角色 AWS CLI - AWS Command Line Interface

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

在中使用IAM角色 AWS CLI

AWS Identity and Access Management (IAM) 角色是一种授权工具,它允许用户获得额外(或不同)权限,或者获得在其他 AWS 账户中执行操作的权限。

先决条件

要运行 iam 命令,您需要安装和配置 AWS CLI。有关更多信息,请参阅 安装或更新到最新版本的 AWS CLI

IAM角色使用概述

通过在文件中为IAM角色定义配置~/.aws/config文件,可以将 AWS Command Line Interface (AWS CLI) 配置为使用角色。

以下示例显示了一个名为 marketingadmin 的角色配置文件。如果您使用运行命令--profile marketingadmin(或使用 AWS_PROFILE 环境变量指定),则 AWS CLI 使用在单独的配置文件中定义的凭证user1来代入带有 Amazon 资源名称 (ARN) 的角色arn:aws:iam::123456789012:role/marketingadminrole。您可以运行分配给该角色的权限所允许的任何操作。

[profile marketingadmin] role_arn = arn:aws:iam::123456789012:role/marketingadminrole source_profile = user1

然后,您可以指定一个指向单独的命名配置文件的 source_profile,此配置文件包含用户凭证及使用该角色的权限。在上一个示例中,marketingadmin 配置文件使用 user1 配置文件中的凭证。当您指定 AWS CLI 命令使用配置文件时marketingadmin, AWS CLI 会自动查找关联user1配置文件的凭证,并使用这些凭证请求指定IAM角色的临时证书。在后台CLI使用 sts: AssumeRole 操作来完成此操作。然后,使用这些临时凭证来运行请求的 AWS CLI 命令。指定的角色必须附加允许所请求的 AWS CLI 命令运行的IAM权限策略。

要在亚马逊弹性计算云 (AmazonEC2) 实例或亚马逊弹性容器服务 (AmazonECS) 容器中运行 AWS CLI 命令,您可以使用附加到实例配置文件或容器的IAM角色。如果未指定配置文件或未设置环境变量,则将直接使用该角色。这让您能够避免在实例上存储长时间生存的访问密钥。您也可以使用这些实例或容器角色仅获取其他角色的凭证。为此,请使用 credential_source(而不是 source_profile)指定如何查找凭证。credential_source 属性支持以下值:

  • Environment – 从环境变量检索源凭证。

  • Ec2InstanceMetadata— 使用附加到 Amazon EC2 实例配置文件的IAM角色。

  • EcsContainer— 使用附加到 Amazon ECS 容器的IAM角色。

以下示例显示了通过引用 Amazon EC2 实例配置文件所使用的相同marketingadminrole角色。

[profile marketingadmin] role_arn = arn:aws:iam::123456789012:role/marketingadminrole credential_source = Ec2InstanceMetadata

当您调用角色时,您可以要求使用其他选项,例如,使用多重身份验证和外部 ID(供第三方公司用于访问其客户的资源)。您还可以指定唯一的角色会话名称,以便更轻松地在 AWS CloudTrail 日志中进行审计。

配置和使用角色

当您使用指定IAM角色的配置文件运行命令时,会 AWS CLI 使用源配置文件的凭据来调用 AWS Security Token Service (AWS STS) 并请求指定角色的临时证书。源配置文件中的用户必须具有为指定配置文件中的角色调用 sts:assume-role 的权限。该角色必须具有允许源配置文件中的用户使用角色的信任关系。检索角色的临时凭证然后使用临时凭证的过程通常称为代入角色

您可以IAM按照用户指南中创建向用户委派权限的角色下的步骤来创建具有您希望IAM用户代入的权限的AWS Identity and Access Management 角色。如果该角色和源配置文件的 用户在同一个账户中,在配置角色的信任关系时,您可以输入自己的账户 ID。

在创建角色后,请修改信任关系以允许 用户担任该角色。

以下示例显示了一个可附加到角色的信任策略。该策略允许账户 123456789012 中的任何用户代入该角色,前提是该账户的管理员向该用户显式授予了 sts:AssumeRole 权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": "sts:AssumeRole" } ] }

信任策略不会实际授予权限。账户管理员必须通过附加具有适当权限的策略才能将代入角色的权限委派给各个用户。以下示例显示了一个可附加到用户的策略,该策略仅允许用户代入 marketingadminrole 角色。有关向用户授予角色访问权限的更多信息,请参阅《用户指南》中的授予IAM用户切换角色的权限

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::123456789012:role/marketingadminrole" } ] }

用户无需拥有其他权限即可使用角色配置文件运行 AWS CLI 命令。相反,运行命令的权限来自附加到角色 的权限。您可以为角色附加权限策略,以指定可以对哪些 AWS 资源执行哪些操作。有关为角色授予权限(其作用与用户相同)的更多信息,请参阅《用户指南》IAM中的更改IAM用户权限

既然您已正确地配置角色配置文件、角色权限、角色信任关系和用户权限,那么就可以通过调用 --profile 选项在命令行中使用该角色了。例如,下面的内容使用附加到 ls 角色(由本主题开头的示例定义)的权限调用 Amazon S3 marketingadmin 命令。

$ aws s3 ls --profile marketingadmin

要对多个调用使用角色,您可以从命令行设置当前会话的 AWS_PROFILE 环境变量。定义该环境变量后,就不必对每个命令都指定 --profile 选项。

Linux 或 macOS

$ export AWS_PROFILE=marketingadmin

Windows

C:\> setx AWS_PROFILE marketingadmin

有关配置用户和角色的更多信息,请参阅《用户指南》中的IAM身份(用户、IAM用户组和IAM角色)和角色

使用多重验证

为了提高安全性,您可以要求用户在尝试使用角色配置文件拨打电话时提供由多重身份验证 (MFA) 设备、U2F 设备或移动应用程序生成的一次性密钥。

首先,您可以选择根据需要修改IAM角色的信任关系MFA。这可以防止任何人在未事先通过使用进行身份验证的情况下使用MFA该角色。有关示例,请参阅下面示例中的 Condition 行。此策略允许名anika为的用户代入策略所关联的角色,但前提是他们必须使用进行身份验证MFA。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/anika" }, "Action": "sts:AssumeRole", "Condition": { "Bool": { "aws:multifactorAuthPresent": true } } } ] }

接下来,在角色配置文件中添加一行,指定用户的MFA设备。ARN以下示例 config 文件条目显示两个角色配置文件,它们都使用用户 anika 的访问密钥来请求角色 cli-role 的临时凭证。用户 anika 有权代入角色,这是由角色的信任策略授予的。

[profile role-without-mfa] region = us-west-2 role_arn= arn:aws:iam::128716708097:role/cli-role source_profile=cli-user [profile role-with-mfa] region = us-west-2 role_arn= arn:aws:iam::128716708097:role/cli-role source_profile = cli-user mfa_serial = arn:aws:iam::128716708097:mfa/cli-user [profile cli-user] region = us-west-2 output = json

mfa_serial设置可以采用硬件令牌的序列ARN号(如图所示),也可以采用硬件MFA令牌的序列号。

第一个配置文件不需要MFA。role-without-mfa但是,由于前面附加到该角色的信任策略示例需要MFA,因此任何使用此配置文件运行命令的尝试都会失败。

$ aws iam list-users --profile role-without-mfa An error occurred (AccessDenied) when calling the AssumeRole operation: Access denied

第二个配置文件条目标识要使用的MFA设备。role-with-mfa当用户尝试使用此配置文件运行 AWS CLI 命令时, AWS CLI 会提示用户输入MFA设备提供的一次性密码 (OTP)。如果MFA身份验证成功,则该命令将执行请求的操作。屏幕上OTP不显示。

$ aws iam list-users --profile role-with-mfa Enter MFA code for arn:aws:iam::123456789012:mfa/cli-user: { "Users": [ { ...

跨账户角色和外部 ID

通过将角色配置为跨账户角色,您可以让 用户使用属于不同账户的角色。在创建角色期间,将角色类型设置为 “其他 AWS 账户”,如创建向IAM用户委派权限的角色中所述。(可选)选择 “需要” MFA。Req MFA uir e 在信任关系中配置适当的条件,如中所述。使用多重验证

如果使用外部 ID 来加强控制可跨账户使用角色的人员,则还必须将 external_id 参数添加到角色配置文件。通常情况下,仅应在其他账户由公司或组织外部的人员控制时才使用该功能。

[profile crossaccountrole] role_arn = arn:aws:iam::234567890123:role/SomeRole source_profile = default mfa_serial = arn:aws:iam::123456789012:mfa/saanvi external_id = 123456

指定角色会话名称以便于审核

当许多人共享一个角色时,审核会变得比较困难。您希望将调用的每个操作与调用该操作的个人关联。但是,当个人使用角色时,个人代入角色是一项独立于调用操作的行为,您必须手动将这两者关联起来。

通过在用户代入角色时指定唯一的角色会话名称,您可以简化此过程。只需向指定某一角色的 role_session_name 文件中的每个命名配置文件添加 config 参数,即可实现这一点。该role_session_name值将传递给AssumeRole操作并成为角色会话的一部分。ARN它也包含在所有已记录操作的 AWS CloudTrail 日志中。

例如,您可以创建基于角色的配置文件,如下所示。

[profile namedsessionrole] role_arn = arn:aws:iam::234567890123:role/SomeRole source_profile = default role_session_name = Session_Maria_Garcia

这会导致角色会话具有以下内容ARN。

arn:aws:iam::234567890123:assumed-role/SomeRole/Session_Maria_Garcia

此外,所有 AWS CloudTrail 日志在为每个操作捕获的信息中都包含角色会话名称。

通过 Web 身份代入角色

您可以使用 Web 联合身份验证和 Open ID Connect (OIDC) 配置配置文件,以指示他们 AWS CLI 应该扮演角色。当您在配置文件中指定此项时, AWS CLI 会自动为您 AWS STS AssumeRoleWithWebIdentity拨打相应的呼叫。

注意

当您指定使用IAM角色的配置文件时, AWS CLI 会进行相应的调用以检索临时证书。这些凭证存储在 ~/.aws/cli/cache 中。指定相同配置文件的后续 AWS CLI 命令将使用缓存的临时证书,直到它们过期。此时,会 AWS CLI 自动刷新凭证。

要通过 Web 联合身份验证检索和使用临时凭证,您可以在共享配置文件中指定以下配置值。

role_arn

指定要担任ARN的角色。

web_identity_token_file

指定包含身份提供者提供的 OAuth 2.0 访问令牌或 OpenID Connect ID 令牌的文件路径。 AWS CLI 加载此文件,并将其内容作为 WebIdentityToken 操作的 AssumeRoleWithWebIdentity 参数传递。

role_session_name

指定应用于此代入角色会话的可选名称。

以下是使用 Web 身份配置文件配置代入角色所需的最少量配置的示例。

# In ~/.aws/config [profile web-identity] role_arn=arn:aws:iam:123456789012:role/RoleNameToAssume web_identity_token_file=/path/to/a/token

您也可以使用环境变量提供此配置。

AWS_ROLE_ARN

要承担ARN的角色。

AWS_WEB_IDENTITY_TOKEN_FILE

Web 身份令牌文件的路径。

AWS_ROLE_SESSION_NAME

应用于此代入角色会话的名称。

注意

这些环境变量当前仅适用于通过 Web 身份提供程序代入角色。它们不适用于常规的代入角色提供程序配置。

清除缓存的凭证

当您使用角色时,会在本地 AWS CLI 缓存临时证书,直到它们过期。下次您尝试使用它们时,会 AWS CLI 尝试以您的名义续订它们。

如果您的角色的临时凭证已吊销,它们不会自动续订,并且使用它们的尝试将失败。但是,您可以删除缓存以强制检索新的凭据。 AWS CLI

Linux 或 macOS

$ rm -r ~/.aws/cli/cache

Windows

C:\> del /s /q %UserProfile%\.aws\cli\cache