如何解决无法在EC2实例上扮演角色
我的目标是让一个帐户中的EC2实例从另一个帐户中的S3存储桶中读取。我遵循了教程here。
我在一个具有内联策略的EC2实例上附加了一个角色,该策略使EC2在另一个帐户中承担另一个角色。
这是一个例子:
附加到EC2实例的角色:RoleA
-AccountID: 11111111111
将假定的角色:RoleB
-AccountID: 22222222222
.aws / config
[profile RoleA]
role_arn = arn:iam::22222222222:role/RoleB
credential_source = EC2InstanceMetadata
当我运行命令aws sts get-caller-identity --profile RoleA
时,输出应类似于:
"Account": "22222222222","UserId": "AROAEXAMPLEID:sessionName","Arn": "arn:aws:sts::22222222222:assumed-role/RoleB/sessionName"
但是我看到的是:
"Account": "11111111111","Arn": "arn:aws:sts::11111111111:assumed-role/RoleA/sessionName"
在创建角色或其他地方时我搞砸了吗?
解决方法
或者,您可以使用桶策略。
场景:
-
帐户A中的
- EC2实例,使用角色A
- 帐户B中的S3存储桶(B桶)
向存储桶B添加一个存储桶策略,以允许角色A进行访问:
{
"Version": "2012-10-17","Statement": [
{
"Effect": "Allow","Principal": {
"AWS": "arn:aws:iam::111122223333:role/role-a"
},"Action": [
"s3:GetObject"
],"Resource": [
"arn:aws:s3:::awsexamplebucket1/*"
]
}
]
}
这允许EC2使用的IAM角色从存储桶访问“获取对象”。不需要其他角色或承担任何角色。
,您必须明确承担这个角色。为此,在您的实例中,您必须执行assume-role CLI命令,例如:
aws sts assume-role --role-arn arn:aws:sts::22222222222:assumed-role/RoleB/sessionName --role-session-name <session-name> --region <region>
这将返回一组临时凭证:SecretAccessKey
,SessionToken
和AccessKeyId
。有了新的凭据,您可以在使用CLI访问另一个帐户中的S3存储桶之前将它们导出为环境变量。
替代方法是使用以下角色设置CLI配置文件:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。