我需要创建一个跨帐户角色,以从我拥有的另一个AWS帐户中访问S3存储桶的资源。
请帮助我使用Cross帐户IAM角色实施此功能,而无需使用访问或秘密键。
假设您有:
- 在帐户中的角色a
- 实例a与角色A 相关的帐户A中
- 帐户中的桶B
您希望允许应用程序A访问BucketB。
的内容您可以将其用于策略变量文档的请求信息显示了一个表,显示了aws:userid
的各种值,包括:
对于分配给Amazon EC2实例的角色,将其设置为
role-id:ec2-instance-id
因此,您可以使用与Amazon EC2实例关联的角色的角色ID 允许访问或实例ID 。
例如,此存储策略基于角色ID :
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SID123",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::MYBUCKET",
"arn:aws:s3:::MYBUCKET/*"
],
"Principal": "*",
"Condition": {
"StringLike": {
"aws:userid": [
"AROAIIPEUJOUGITIU5BB6*"
]
}
}
}
]
}
要获得角色ID,请使用:
aws iam get-role --role-name ROLENAME
此存储牌策略基于实例ID :
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SID123",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::MYBUCKET",
"arn:aws:s3:::MYBUCKET/*"
],
"Principal": "*",
"Condition": {
"StringLike": {
"aws:userid": [
"*:i-03c9a5f3fae4b630a"
]
}
}
}
]
}
实例ID将保留在实例中,但是如果启动了新实例,即使是从同一Amazon Machine Image(AMI(启动的新实例。
当然,您可能想将这些权限限制在s3:GetObject
而不是s3:*
。
(基于基于角色名称授予对S3资源的访问的答案。(