我的目标是让一个帐户中的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",
"UserId": "AROAEXAMPLEID:sessionName",
"Arn": "arn:aws:sts::11111111111:assumed-role/RoleA/sessionName"
在创建角色或其他地方时我搞砸了吗?
答案 0 :(得分:2)
或者,您可以使用桶策略。
场景:
向存储桶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角色从存储桶访问“获取对象”。不需要其他角色或承担任何角色。
答案 1 :(得分:0)
您必须明确承担这个角色。为此,在您的实例中,您必须执行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配置文件: