繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM