我正在为实例配置文件分配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
3 回答
首先,不应使用
ec2-describe-instances
之类的单独命令,而应使用AWS Command-Line Interface (CLI) .此AWS CLI允许以多种方式指定凭据,包括:
环境变量(如上所述)
配置文件(通过
aws configure
命令创建并通过--profile
激活因此,您可以:
调用
assume-role
以检索凭据Store them in the credentials file,例如使用
aws configure --profile foo
然后只需调用
aws ec2 describe-instances --profile foo
等命令如果使用配置文件,您可以让CLI为您完成所有操作 . 例如,如果您的凭证文件(〜/ .aws / credentials)看起来像这样(通过
aws configure
设置):你的配置文件(〜/ .aws / config)如下所示:
然后,CLI将自动承担角色,缓存并刷新它们以减少承担角色的调用次数 . 请注意,您需要更改这些配置文件以匹配您的确切配置(尤其是区域) .
更多文档here .
提到的解决方案“假设 - 角色 - 配置文件”没有硬编码凭据,动态设置所有内容:
您使用假定角色创建配置文件:
要为新配置文件提供凭据,您必须使用以下行之一:
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的凭据 .
之后,您可以使用新的配置文件,例如:
文件:https://docs.aws.amazon.com/cli/latest/topic/config-vars.html#using-aws-iam-roles