目前,我们有一个静态站点部署到ECS(弹性容器服务),并由ELB(Elastic Load Balancer)部署。这个模型真的没有意义,因为容器只是运行NGINX来提供静态资产。
然而,我们从这个模型得到的是,只对VPN进行网站访问(我们的VPN客户端将所有10.x流量转发到我们的VPC),以及ELB上的HTTPS侦听器,这两者都是我们的事情。想留下来。
将当前只能通过VPN访问的静态网站迁移到通过HTTPS从S3 / Cloudfront提供并且只能通过VPN访问的最佳方法是什么?
We have the same VPN configuration as in this answer.这个答案对我们有用,但它并没有解决S3存储桶IP可能发生变化的问题(这会使VPN客户端上建议的路由规则失效),而且我会这样做。我不清楚如何让HTTPS与它一起工作(AFAIK,您需要将CF放在S3静态站点前面,但我不确定如何通过我们的VPN将流量路由到Cloudfront。)
答案 0 :(得分:1)
我决定使用VPC endpoints来控制入口。有一个内部负载均衡器(私有子网)只能通过VPC / VPN访问,它可以将流量路由到VPC端点。
Bucket政策看起来像(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静态站点本身也无法解析)。
请参阅http://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies-vpc-endpoint.html。