You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 23:16:18