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

跨账号仅通过VPN访问S3静态网站的配置问题排查

AWS Client VPN跨账号访问S3存储桶静态网站排查指南

现有配置概述

存储桶策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": "account-prod",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::bucket/*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceVpc": "vpc-1"
                }
            }
        },
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": "account-network",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::bucket/*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceVpc": "vpc-2"
                }
            }
        }
    ]
}

环境配置

  • 采用Transit Gateway(TGW) + network账号下的AWS Client VPN
  • 已配置S3 VPC接口端点,尝试过aws:SourceVpc/aws:SourceVpce条件
  • 已在VPN端点、安全组、认证规则中放行S3端点IP,TGW配置了S3前缀列表路由
  • 存储桶为私有ACL+对象所有者权限+存储桶策略,已尝试添加规范账号ID授权

核心排查点

1. 主体(Principal)配置正确性

  • 确认account-network是12位数字的规范账号ID,而非账号别名或根用户ARN。S3存储桶策略仅识别规范ID或IAM实体ARN,账号别名无法匹配。
  • 若授权network账号下的特定IAM角色/用户,直接指定对应ARN(如arn:aws:iam::123456789012:role/vpn-access-role),避免泛账号授权导致的匹配失效。

2. 源条件(Condition)逻辑错误

  • aws:SourceVpc不支持跨账号:该条件仅对prod账号内的VPC生效,network账号的VPC-2无法被S3识别,直接排除此配置。
  • aws:SourceVpce需用完整ARN:使用network账号中S3接口端点的完整ARN(如arn:aws:ec2:us-east-1:123456789012:vpc-endpoint/vpce-xxxxxx),而非仅VPCE ID。同时确保VPCE安全组允许Client VPN流量访问HTTPS(443)端口。

3. Transit Gateway路由与关联验证

  • 确认TGW路由表中,S3前缀列表的路由条目指向network账号的S3接口端点,而非prod账号的端点。
  • 检查Client VPN路由表,确认S3域名/前缀已指向TGW,确保流量走TGW到S3接口端点。
  • 验证跨账号TGW资源共享:prod账号需授权network账号的TGW访问存储桶所在VPC资源,或TGW已正确关联prod账号的目标VPC(若适用)。

4. S3接口端点策略限制

  • 检查network账号中S3接口端点的端点策略,需手动添加跨账号授权,允许访问prod账号的目标存储桶(arn:aws:s3:::bucket/*)及s3:GetObject动作。默认端点策略仅允许同账号S3访问。

5. 静态网站访问路径问题

  • 静态网站端点域名(如bucket.s3-website-us-east-1.amazonaws.com)不支持VPC接口端点,流量会走公网,导致源条件不匹配。
  • 改用S3 REST API域名(如bucket.s3.us-east-1.amazonaws.com)访问静态内容,或配置CloudFront通过VPCE对接S3,再让VPN用户访问CloudFront端点。

6. 权限叠加与冲突检查

  • 开启存储桶对象所有权控制的"ACLs disabled"或"Bucket owner preferred",确保桶所有者拥有对象权限,避免对象ACL覆盖存储桶策略授权。
  • 检查network账号中VPN用户的IAM权限,需同时授予s3:GetObject访问prod存储桶的权限(跨账号访问需要两端权限:存储桶策略允许+IAM用户/角色有权限)。

7. 流量与日志验证

  • 从VPN客户端用curl --debug或AWS CLI带--debug参数测试访问,查看请求的源IP/VPCE信息,确认流量是否经过预期路径。
  • 在prod账号启用S3访问日志,查看被拒绝请求的source-vpc、source-vpce、principal-id字段,对比存储桶策略条件是否匹配。

内容的提问来源于stack exchange,提问作者MOps

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:05:25