如何使用 AWS CLI 代入 IAM 角色?
我想使用 AWS 命令行界面 (AWS CLI) 代入 AWS Identity and Access Management (IAM) 角色。
解决方案
**注意:**如果在运行 AWS CLI 命令时收到错误,请参阅排查 AWS CLI 错误。此外,请确保您使用的是最新版本的 AWS CLI。
要使用 AWS CLI 代入 IAM 角色并拥有对 Amazon Elastic Compute Cloud (Amazon EC2) 实例的只读访问权限,请完成以下操作。
重要事项: 当您在以下步骤中运行命令时,您的凭证(例如密码)将以纯文本形式显示。在您代入 IAM 角色后,最佳做法是更改密码。
创建有权代入角色的 IAM 用户
- 使用以下命令从 AWS CLI 创建 IAM 用户:
**注意:**将 Bob 替换为您的 IAM 用户名 - 创建能够向用户 Bob 授予权限的 IAM 策略。为此,请使用您选择的文本编辑器创建定义 IAM 策略的 JSON 文件。您可以使用以下 JSON 示例 example-policy.json 作为模板:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:Describe*", "iam:ListRoles", "sts:AssumeRole" ], "Resource": "*" } ] }
有关创建 IAM 策略的详细信息,请参阅创建 IAM 策略、基于身份的 IAM 策略示例和 IAM JSON 策略参考。
创建 IAM 策略
要创建您的 IAM 策略,请完成以下步骤:
- 运行以下 aws iam create-policy 命令:
aws iam create-policy 命令会输出几条信息,包括 IAM 策略的 ARN(Amazon 资源名称),如下所示:aws iam create-policy --policy-name example-policy --policy-document file://example-policy.json
**注意:**将 123456789012 替换为您自己的账户 ID。arn:aws:iam::123456789012:policy/example-policy
- 记下输出中的 IAM 策略的 ARN,并使用 attach-user-policy 命令将策略附加到 Bob。然后,使用 list-attached-user-policies 命令检查以确保附加是否到位,如下所示:
aws iam attach-user-policy --user-name Bob --policy-arn "arn:aws:iam::123456789012:policy/example-policy" aws iam list-attached-user-policies --user-name Bob
创建定义 IAM 角色信任关系的 JSON 文件
使用文本编辑器创建定义信任关系的 JSON 文件。您可以使用以下信任策略作为示例:
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": { "AWS": "123456789012" }, "Action": "sts:AssumeRole" } }
借助此信任策略,如果账户 123456789012 的用户和角色允许在其权限策略中执行 sts:AssumeRole 操作,则可以代入此角色。您还可以限制信任关系,这样 IAM 角色便只能由特定的 IAM 用户代入。为此,请指定与 arn:aws:iam::123456789012:user/example-username 类似的主体。有关详细信息,请参阅 AWS JSON 策略元素: 主体。
创建 IAM 角色并附加策略
创建一个 IAM 角色,该角色可由 Bob 代入并对 Amazon Relational Database Service (Amazon RDS) 实例具有只读访问权限。要允许 IAM 用户代入 IAM 角色,您必须指定一个主体以允许 IAM 用户代入该角色。例如,类似于 arn:aws:iam::123456789012:root 的主体允许账户 123456789012 的所有 IAM 身份代入该角色。有关详细信息,请参阅创建角色以向 IAM 用户委派权限。
-
创建对 Amazon RDS 数据库实例具有只读访问权限的 IAM 角色。根据您的安全要求将 IAM 策略附加到您的 IAM 角色。
aws iam create-role 命令创建 IAM 角色并定义您在已创建的 JSON 文件中定义的信任关系。aws iam attach-role-policy 命令将 AWS 托管式策略 AmazonRDSReadOnlyAccess 附加到该角色。您可以根据您的安全要求附加不同的策略(包括托管策略和自定义策略)。aws iam list-attached-role-policies 命令显示附加到 IAM 角色 example-role 的 IAM 策略。例如,运行以下命令:
aws iam create-role --role-name example-role --assume-role-policy-document file://example-role-trust-policy.json aws iam attach-role-policy --role-name example-role --policy-arn "arn:aws:iam::aws:policy/AmazonRDSReadOnlyAccess" aws iam list-attached-role-policies --role-name example-role
**注意:**验证 Bob 是否具有 EC2 实例的只读访问权限并且可以代入 example-role。
-
使用以下命令为 Bob 创建访问密钥:
aws iam create-access-key --user-name Bob
**重要事项:**AWS CLI 命令会输出访问密钥 ID 和秘密访问密钥。请务必记下这些密钥。
配置访问密钥
要配置访问密钥,请使用默认配置文件或特定配置文件。要配置默认配置文件,请运行 aws configure。要创建新的特定配置文件,请运行 aws configure --profile example_-_profile-name。在此示例中,默认配置文件配置如下:
aws configure AWS Access Key ID [None]: ExampleAccessKeyID1 AWS Secret Access Key [None]: ExampleSecretKey1 Default region name [None]: eu-west-1 Default output format [None]: json
注意:对于默认区域名称,请指定您的 AWS 区域。
验证 AWS CLI 命令是否已调用,然后再验证 IAM 用户访问权限
完成以下步骤:
-
按如下方式运行 aws sts get-caller-identity 命令:
aws sts get-caller-identity
aws sts get-caller-identity 命令的输出包括 ARN。要验证 AWS CLI 命令是否作为 Bob 调用,请检查输出是否包含与 arn:aws:iam::123456789012:user/Bob 类似的内容。
-
运行以下命令以确认 IAM 用户对 EC2 实例具有只读访问权限且无权访问 Amazon RDS 数据库实例:
aws ec2 describe-instances --query "Reservations[*].Instances[*].[VpcId, InstanceId, ImageId, InstanceType]" aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier, DBName, DBInstanceStatus, AvailabilityZone, DBInstanceClass]"
aws ec2 describe-instances 命令向您显示位于 eu-west-1 区域内的所有 EC2 实例。aws rds describe-db-instances 命令会生成表示“访问被拒绝”的错误消息,因为 Bob 无权访问 Amazon RDS。
代入 IAM 角色
执行以下操作之一:
在 ~/.aws/config 文件中创建配置文件以使用 AIM 角色。有关详细信息,请参阅在 AWS CLI 中使用 IAM 角色。
-或-
运行以下命令以代入 IAM 角色:
-
使用以下命令获取角色的 ARN:
aws iam list-roles --query "Roles[?RoleName == 'example-role'].[RoleName, Arn]"
-
该命令列出了 IAM 角色,但按角色名称对输出结果进行了筛选。要代入 IAM 角色,请运行以下命令:
aws sts assume-role --role-arn "arn:aws:iam::123456789012:role/example-role" --role-session-name AWSCLI-Session
这些命令会输出多条信息。在凭证区块中,您需要 AccessKeyId、SecretAccessKey 与 SessionToken。此示例使用环境变量 RoleAccessKeyID、RoleSecretKey 与 RoleSessionToken。请注意,过期字段的时间戳采用 UTC 时区。时间戳指示 IAM 角色的临时凭证何时到期。如果临时凭证已过期,则必须再次执行 sts:AssumeRole API 调用。
**注意:**您可以使用 DurationSeconds 参数延长 IAM 角色临时凭证的最大会话到期时间。
创建环境变量以代入 IAM 角色并验证访问权限
-
创建三个环境变量以代入 IAM 角色。这些环境变量包含以下输出:
export AWS_ACCESS_KEY_ID=RoleAccessKeyID export AWS_SECRET_ACCESS_KEY=RoleSecretKey export AWS_SESSION_TOKEN=RoleSessionToken
**注意:**对于 Windows 系统,将此命令中的 export 替换为 set。
-
运行以下命令以验证您是否代入了 IAM 角色:
aws sts get-caller-identity
如果您代入 example-role,则此 AWS CLI 命令将 ARN 输出为 arn:aws:sts::123456789012:assumed-role/example-role/AWSCLI-Session,而非 arn:aws:iam::123456789012:user/Bob。
-
运行以下命令以验证您是否已创建具有 Amazon RDS 数据库实例只读访问权限且无权访问 EC2 实例的 IAM 角色:
aws ec2 describe-instances --query "Reservations[*].Instances[*].[VpcId, InstanceId, ImageId, InstanceType]" aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier, DBName, DBInstanceStatus, AvailabilityZone, DBInstanceClass]"
aws ec2 describe-instances 命令会生成表示“访问被拒绝”的错误消息。aws rds describe-db-instances 命令会返回 Amazon RDS 数据库实例。这将验证分配给 IAM 角色的权限是否正常运行。
-
要返回 IAM 用户,请按如下方式移除环境变量:
unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN aws sts get-caller-identity
unset 命令会移除环境变量,aws sts get-caller-identity 命令则会验证您是否以 IAM 用户 Bob 的身份返回。
**注意:**对于 Windows 系统,请将环境变量设置为空字符串,以清除其内容,如下所示:
SET AWS_ACCESS_KEY_ID= SET AWS_SECRET_ACCESS_KEY= SET AWS_SESSION_TOKEN=
相关信息

相关内容
- AWS 官方已更新 1 年前
- AWS 官方已更新 10 个月前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前