我在帐户B中有S3存储桶“ cross-bucket”。现在,我希望帐户A中存在的EC2可以访问帐户B中的存储桶“ cross-bucket”。
我需要使用IAM角色来实现此目的,因为我们不允许创建用户。
我已使用以下模板在帐户B中创建角色
AWSTemplateFormatVersion : '2010-09-09'
Description: 'Cross account role for S3'
Parameters:
AccountId:
Type: String
Description: Account ID of admin account (containing user to allow)
Resources:
CrossAccountRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Action: sts:AssumeRole
Principal:
AWS:
- !Sub arn:aws:iam::${AccountId}:root
Path: /
Policies:
- PolicyName: my-s3-delegate
PolicyDocument:
Statement:
- Effect: Allow
Action:
- s3:ListBucket
- s3:GetObject
Resource: "*"
RootInstanceProfile:
Type: "AWS::IAM::InstanceProfile"
Properties:
Path: "/"
Roles:
-
Ref: "CrossAccountRole"
创建此角色后,应如何将其附加到帐户A中存在的实例? 还是我在这里想念什么?
答案 0 :(得分:2)
创建此角色后,应如何将其附加到帐户A中存在的实例?
您没有将其附加到Acc A中的实例。相反,您在Acc A中创建了一个实例角色。该角色将具有权限,可以从Acc B担任角色。
因此,实例角色将具有类似于以下内容的策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "<ARN-of-ROLE-in-ACC-B>"
}
}
]
}
然后,在实例上运行的任何应用程序都必须使用 sts假定角色实际承担角色并在Acc B中执行操作。
答案 1 :(得分:2)
您的情况是:
有两种方法可以做到这一点:
只需向帐户B中的存储桶添加存储桶策略,即可授予对EC2实例使用的IAM角色的访问权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
],
"Principal": {
"AWS": [
"arn:aws:iam::ACCOUNT-A:role/my-ec2-role"
]
}
}
]
}
EC2实例将使用其常规IAM角色凭据访问存储桶。另外,请确保IAM角色已授予使用Amazon S3来访问存储桶的权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bucket-b",
"arn:aws:s3:::bucket-b/*"
]
}
]
}
AssumeRole()