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

配置S3静态网页仅VPN访问:VPC端点无效遇403错误求助

问题描述

我希望创建一个仅在连接VPN时可访问的S3静态网页,但配置VPC端点后无效果。使用的端点策略如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowVPC",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::123-bucket/*",
            "Condition": {
                "StringEquals": {
                    "aws:sourceVpce": [
                        "vpce-123",
                        "vpce-123"
                    ],
                    "aws:sourceVpc": "vpc-123"
                }
            }
        }
    ]
}

该VPC终端节点为Gateway类型,已配置指向S3的路由规则,但似乎无效。尝试将bucket设置为公开访问也无济于事,连接VPN并输入VPC的IP后仍返回错误:

403 Forbidden

  • Code: AccessDenied
  • Message: Access Denied

请问该如何解决?

解决方案

1. 修正VPC端点策略的资源与条件

当前策略存在两个问题:

  • 仅授权了桶内对象的访问权限,但访问静态网页需要对桶本身的基础操作权限(如s3:GetBucketLocation、s3:ListBucket),需补充桶级资源授权。
  • Gateway类型VPC端点无需aws:sourceVpce条件,网关端点通过VPC路由识别流量,该条件属于冗余配置。

修正后的策略示例:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowVPCBucketActions",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::123-bucket",
            "Condition": {
                "StringEquals": {
                    "aws:sourceVpc": "vpc-123"
                }
            }
        },
        {
            "Sid": "AllowVPCObjectActions",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::123-bucket/*",
            "Condition": {
                "StringEquals": {
                    "aws:sourceVpc": "vpc-123"
                }
            }
        }
    ]
}

2. 调整S3静态网页的访问方式

  • 不要直接用VPC IP访问S3静态页,必须使用S3静态网站的专属域名,格式为bucket-name.s3-website-<区域>.amazonaws.com(不同区域域名后缀可能有差异)。
  • 连接VPN后,通过traceroute bucket-name.s3-website-<区域>.amazonaws.com验证流量是否经过VPC网关端点,确保路由生效。

3. 验证VPC路由表配置

  • 确认VPN客户端所在子网的路由表中,添加了对应区域S3服务前缀的路由,目标指向S3 Gateway端点(可在AWS控制台的S3服务前缀页面查询对应区域的IP范围)。
  • 检查路由表是否正确关联了VPN客户端所在的子网(站点到站点VPN关联本地网关对应子网;客户端VPN关联客户端IP分配的子网)。

4. 检查S3存储桶的公共访问设置

  • 关闭存储桶的“阻止所有公共访问”(若开启会覆盖VPC端点策略),或在例外规则中允许VPC访问。不建议设置公开ACL,仅通过VPC端点策略授权即可保障安全性。

5. 确认IAM权限逻辑

如果VPN客户端使用IAM身份(如EC2实例、IAM用户),需确保对应的IAM策略也允许访问S3桶及对象。VPC端点策略与IAM策略为逻辑与关系,两者均允许才能正常访问。

内容的提问来源于stack exchange,提问作者李世峰

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:53:17