目前,我们有一个静态站点部署到ECS (弹性集装箱服务)和前端的ELB (弹性负载均衡器)。这个模型没有什么意义,因为容器只是运行NGINX来提供静态资产。
然而,我们从这个模型中得到的是VPN --只访问网站(我们的VPN客户端将所有10.x流量转发给我们的VPC),以及ELB上的HTTPS侦听器,这两者都是我们想要保留的。
目前只能通过VPN访问这个静态站点的最佳方法是通过HTTPS从S3/Cloudfront获得服务,并且只能通过VPN访问?
我们有与这个答案相同的VPN配置。这个答案对我们有用,但它没有解决S3桶I可能改变的问题(这将使提议的VPN客户端路由规则失效),我也不清楚如何让HTTPS处理这个问题(AFAIK,您需要将CF放在S3静态站点的前面,但我不确定如何通过我们的VPN将流量路由到Cloudfront )。
发布于 2017-03-17 16:55:28
我决定用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。
https://stackoverflow.com/questions/42265849
复制相似问题