我正在为实例配置文件分配EC2实例。实例配置文件有权承担跨帐户角色(例如,帐户B)
aws sts assume-role --role-arn "arn:aws:iam::Account_B_ID:role/admin"
- role-session-name" Admin_in_acc_B"
通过运行此命令,它将返回包含会话令牌的临时安全凭证。现在谈谈如何利用信息将其注入环境变量,以便CLI能够在帐户B上运行任务(ec2-describe-instances)。
export EC2_URL=https://ec2.ap-southeast-1.amazonaws.com
export EC2_HOME=/usr/bin
export JAVA_HOME=/usr/lib/jvm/default-java/jre
export AWS_ACCESS_KEY=
export AWS_SECRET_KEY=
export AWS_SESSION_TOKEN=
PATH=$PATH:/usr/bin
ec2-describe-instances

答案 0 :(得分:1)
如果您使用配置文件,您可以让CLI为您完成所有操作。例如,如果您的凭证文件(〜/ .aws / credentials)看起来像这样(通过aws configure
设置):
[assume-role-source-credentials]
aws_access_key_id = akid
aws_secret_access_key = skid
您的配置文件(〜/ .aws / config)如下所示:
[profile assume-role-profile]
source_profile = assume-role-source-credentials
role_arn = arn:aws:iam::Account_B_ID:role/admin
role_session_name = Admin_in_acc_B
region = us-west-2
然后,CLI将自动承担角色,缓存并刷新它们以减少承担角色的调用次数。请注意,您需要更改这些配置文件以匹配您的确切配置(尤其是区域)。
更多文档here。
答案 1 :(得分:0)
首先,您应该使用AWS Command-Line Interface (CLI),而不是使用ec2-describe-instances
等个别命令。
此AWS CLI允许以多种方式指定凭据,包括:
aws configure
命令创建,并通过--profile
因此,您可以:
assume-role
以检索凭据aws configure --profile foo
aws ec2 describe-instances --profile foo
答案 2 :(得分:0)
上述解决方案"假设 - 角色简介"没有硬编码凭证,动态设置所有内容:
您可以使用假定角色创建配置文件:
aws configure --profile assume-role-profile set role_arn arn:aws:iam::Account_B_ID:role/admin
要为新配置文件提供凭据,您必须使用以下行之一:
aws configure --profile assume-role-profile set source_profile default
aws configure --profile assume-role-profile set credential_source Ec2InstanceMetadata
aws configure --profile assume-role-profile set credential_source EcsContainer
我的个人电脑上的第1行是正确的,因为我使用了默认配置文件。
第2行应该是正确的,使用带有实例配置文件的EC2实例(正确的措辞:实例有角色)
当我使用AWS CodeBuild测试代码时,第3行是正确的。新配置文件使用了codepipeline-role的凭据。
之后,您可以使用新的个人资料,例如:
aws --profile assume-role-profile ec2 describe-instances
文档:https://docs.aws.amazon.com/cli/latest/topic/config-vars.html#using-aws-iam-roles