如何使用仅限于 VPC 的 S3 接入点访问另一个账户中的存储桶?
我在不同的 AWS 账户中有一个 AWS Identity and Access Management(IAM)实体和存储桶。我想使用仅限于 Amazon Virtual Private Cloud(Amazon VPC)的 Amazon Simple Storage Service(Amazon S3)接入点授予 IAM 实体对存储桶的跨账户存取权限。
解决方法
要使用仅限于 Amazon VPC 的 S3 接入点授予 AWS 账户(账户 A)中的 IAM 角色或用户访问另一个 AWS 账户(账户 B)中的 Amazon S3 存储桶的权限,请执行以下操作:
- 创建一个 Amazon S3 接入点并将其附加到账户 B 中的存储桶。
- 在账户 A 中创建 Amazon S3 VPC 网关端点。
- 附加接入点、存储桶和 IAM policy。
创建一个 Amazon S3 接入点并将其附加到账户 B 中的存储桶
- 打开 Amazon S3 控制台。
- 在导航窗格中,选择 Access Points(接入点)。
- 选择 Create access point(创建接入点)。
- 在 Access point name(接入点名称)中,输入接入点的名称。有关更多信息,请参阅命名 Amazon S3 接入点的规则。
- 在 Bucket name(存储桶名称)中,输入您要附加接入点的账户 B 中的存储桶的名称。
- 为 Network Origin(网络源)选择 Virtual Private Cloud (VPC) [虚拟私有云(VPC)]。
- 对于 VPC ID,输入第一个 AWS 账户(账户 A)的 VPC ID。
- 在 Block Public Access settings for this Access Point(此接入点的阻止公共访问设置)下,选择要应用于接入点的阻止公共访问设置。
注意:Amazon S3 目前不支持在接入点创建后更改接入点的阻止公共访问设置。 - 将 Access Point policy(接入点策略)留空。
- 选择 Create access point(创建接入点)。
在账户 A 中创建 Amazon S3 VPC 网关端点
在初始 AWS 账户(账户 A)中创建 S3 网关 VPC 端点,该端点与您授予跨账户存取权限的存储桶位于同一区域。
- 打开 Amazon VPC 控制台。
- 在导航窗格中,选择 Endpoints(端点)。
- 选择 Create endpoint(创建端点)。
- 对于 Service category(服务类别),选择 AWS services(AWS 服务)。
- 对于 Services(服务),添加筛选条件 Type: Gateway(类型:网关)并选择用于创建接入点的相同区域。
- 对于 VPC,选择用于创建接入点的相同 VPC。
- 对于 Route tables(路由表),选择端点要使用的路由表。
- 选择 Full access(完全访问)策略。或者,选择 Custom(自定义)并确保策略允许所需的 S3 操作。
注意:网关端点不允许来自其他 AWS 区域的访问。以下是允许对所有存储桶执行所有 S3 操作的 VPC 端点策略示例:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:*"
}]
}
附加接入点、存储桶和 IAM policy
要允许初始 AWS 账户(账户 A)的 IAM 实体通过接入点跨账户存取另一个 AWS 账户(账户 B)的存储桶,您必须从接入点、存储通和 IAM policy 授予权限。以下是为每个实体授予所需权限的策略。
接入点策略:
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "DelegateControlToAccessPoint",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::AccountA-ID:user/user1",
"arn:aws:iam::AccountA-ID:role/role01"
]
},
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-acess-point/object/*",
"arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-access-point"
]
}]
}
注意:此策略向来自源 AWS 账户(账户 A)的 IAM 用户或角色授予访问目标 AWS 账户(账户 B)中接入点的权限。
存储桶策略:
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "AllowCrossAccountAccess",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::AccountA-ID:user/user1",
"arn:aws:iam::AccountA-ID:role/role01"
]
},
"Action": [
"s3:GetObject",
"s3:ListBucket",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
],
"Condition": {
"StringEquals": {
"s3:DataAccessPointArn": "arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-access-point"
}
}
}]
}
注意:此策略使用接入点向源 AWS 账户(账户 A)的 IAM 用户授予访问存储桶(账户 B)的权限。
IAM policy:
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "AllowCrossAccountAccessToBucketAndAP",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-access-point",
"arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-access-point/object/*",
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
]
}]
}
注意:附加到源 AWS 账户(账户 A)的 IAM 角色或用户的此 IAM policy 向目标 AWS 账户(账户 B)的存储桶和接入点授予权限。
使用接入点对存储桶执行 S3 操作的 AWS CLI 命令示例:
**注意:**如果在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI。
列出:
aws s3 ls arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-access-point
上传:
aws s3 cp file.txt s3://arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-access-point
下载:
aws s3 cp s3://arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-access-point file.txt
注意:请求必须源自 VPC 中的 Amazon Elastic Compute Cloud(Amazon EC2)实例,并且必须与存储桶位于同一区域。

相关内容
- 已提问 1 个月前lg...
- 已提问 4 个月前lg...
- 已提问 2 个月前lg...
- 已提问 4 个月前lg...
- 已提问 4 个月前lg...
- AWS 官方已更新 5 个月前
- AWS 官方已更新 7 个月前
- AWS 官方已更新 1 年前