具有HTTPS和VPN访问权限的AWS S3静态站点

时间:2017-02-16 05:39:59

标签: amazon-web-services amazon-s3 https vpn amazon-cloudfront

目前,我们有一个静态站点部署到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。)

1 个答案:

答案 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