如何通过PrivateLink实现跨AWS账户访问S3存储桶?
跨AWS账户通过PrivateLink访问S3存储桶的实现方案
完全可行,核心是结合S3网关型VPC终端节点(即PrivateLink针对S3的实现)与跨账户IAM权限配置,让源账户的私有网络流量通过私有链路访问目标账户的S3桶,无需走公网。以下是具体实现步骤:
前提确认
你已具备:
- 跨账户IAM角色(源账户可扮演目标账户的该角色)
- 源账户内的私有VPC及实例(无公网访问能力)
具体配置步骤
1. 源账户配置S3网关终端节点
在源账户的目标区域内,为VPC创建S3网关型终端节点:
- 终端节点类型选择Gateway,关联目标VPC及需要访问S3的子网路由表
- 路由表中会自动添加前缀列表
com.amazonaws.<区域>.s3指向该终端节点,确保S3流量走私有链路
2. 目标账户调整S3桶策略
修改目标账户的S3桶策略,同时允许跨账户角色访问、并限制流量来自源账户的VPC(保证仅通过PrivateLink访问)。示例桶策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<源账户ID>:role/<跨账户角色名称>" }, "Action": [ "s3:GetObject", "s3:ListBucket" // 根据需求添加其他权限,如PutObject等 ], "Resource": [ "arn:aws:s3:::<目标桶名称>", "arn:aws:s3:::<目标桶名称>/*" ], "Condition": { "StringEquals": { "aws:SourceVpc": "<源账户VPC ID>" } } } ] }
3. 源账户实例验证访问
在源账户的私有实例上,通过STS AssumeRole获取目标账户的临时凭证,然后执行S3操作:
# 假设角色获取临时凭证 aws sts assume-role --role-arn "arn:aws:iam::<目标账户ID>:role/<跨账户角色名称>" --role-session-name "cross-account-s3-access" # 使用临时凭证访问目标桶(替换以下变量为实际值) export AWS_ACCESS_KEY_ID=<临时AccessKey> export AWS_SECRET_ACCESS_KEY=<临时SecretKey> export AWS_SESSION_TOKEN=<临时SessionToken> # 验证访问 aws s3 ls s3://<目标桶名称> aws s3 cp s3://<目标桶名称>/test.txt ./
关键注意事项
- 区域限制:S3网关终端节点是区域级资源,源账户VPC与目标S3桶必须处于同一AWS区域
- 路由配置:确保源实例所在子网的路由表已正确关联S3网关终端节点,否则流量仍会走公网
- 权限联动:跨账户角色的信任策略需允许源账户的实例角色/用户扮演该角色,同时桶策略的
Principal需指向该跨账户角色
内容的提问来源于stack exchange,提问作者J R
相关产品推荐
相关产品推荐

