配置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,提问作者李世峰
相关产品推荐
相关产品推荐

