[英]AWS S3 static site with HTTPS and VPN-only access
目前我们有一个静态站点部署到 ECS(弹性容器服务)并由 ELB(弹性负载均衡器)前端。 这个模型没有意义,因为容器只是运行 NGINX 来服务静态资产。
然而,我们从这个模型中得到的是,仅通过 VPN 访问网站(我们的 VPN 客户端将所有 10.x 流量转发到我们的 VPC),以及 ELB 上的 HTTPS 侦听器,这些都是我们想要保留的.
将这个目前只能通过 VPN 访问的静态站点迁移到通过 HTTPS 从 S3/Cloudfront 提供服务并且只能通过 VPN 访问的最佳方法是什么?
我们具有与此答案相同的 VPN 配置。 这个答案对我们有用,但它没有解决 S3 存储桶 IP 可能发生变化的问题(这会使 VPN 客户端上提议的路由规则无效),而且我不清楚如何让 HTTPS 与此一起工作(AFAIK,您需要将 CF 放在 S3 静态站点的前面,但我不确定如何通过我们的 VPN 将流量路由到 Cloudfront。)
我决定使用VPC 端点来控制入口。 有一个只能通过 VPC/VPN 访问的内部负载平衡器(私有子网),它将流量路由到 VPC 终端节点。
存储桶策略看起来像(Terraform 模板)
{
"Version": "2012-10-17",
"Id": "Policy1415115909152",
"Statement": [
{
"Sid": "deny-get-if-not-from-vpce",
"Action": [
"s3:GetObject"
],
"Effect": "Deny",
"Resource": [
"arn:aws:s3:::${bucket}",
"arn:aws:s3:::${bucket}/*"
],
"Condition": {
"StringNotEquals": {
"aws:sourceVpce": "${vpce_id}"
}
},
"Principal": "*"
},
{
"Sid": "allow-get-if-from-vpce",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::${bucket}",
"arn:aws:s3:::${bucket}/*"
],
"Condition": {
"StringEquals": {
"aws:sourceVpce": "${vpce_id}"
}
},
"Principal": "*"
}
]
}
它有效! 我们获得了 SSL 连接,并且负载均衡器在 VPN 外零访问(负载均衡器 DNS 无法解析,S3 静态站点本身上的 403)。
请参阅http://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies-vpc-endpoint.html 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.