有没有办法在没有负载均衡器的情况下在 Elastic Beanstalk 上启用 HTTPS?

问题描述 投票:0回答:4

这是我第一次使用 AWS 或任何其他此类平台。我的网站需要 https,因为我使用 stripe。我已经使用 AWS 证书管理器获得了 SSL 证书。但使用它的唯一方法是您的实例上有负载均衡器。我不想支付负载均衡器的费用,因为这样做的项目太小了。

还有其他方法可以在没有负载均衡器的情况下启用 HTTPS 吗?

amazon-web-services amazon-elastic-beanstalk
4个回答
6
投票

最简单的方法是通过 CloudFront (CF):

为此,您将创建一个 CF 发行版并设置您的 SSL 证书和一个自定义域(必需),并将 EB 环境设置为自定义源。

替代方案是在 EB 实例上配置 nginx 以使用 SSL。为此,您还需要查看一些有关如何使用 nginx 来处理 https 请求的教程或文档。一些例子:

  • 如何在 NGINX 上启用 SSL
但据我记得,这不适用于 ACM 证书。这是这种方法的一个局限性。


3
投票
正如 jarmod 所提到的,您只能将 ACM 证书与 ALB 或 Cloudfront 一起使用,而这两者都不是免费的。据我所知,还没有完全免费的 AWS 服务可以实现这一点。您可以使用

Let's Encrypt 免费自动更新证书来安装在您的网络服务器上。


0
投票
Cloudflare 提供代理功能,包括免费的 SSL 证书,可将流量安全地路由到您的主机。设置方法如下。

SSL 通信模式

  • 灵活模式:Cloudflare 和 AWS 之间的通信未加密。
  • 完整模式:通信已加密。如果您需要端到端加密,请使用此模式。

步骤

  1. 配置 Cloudflare

      将您的域名添加到 Cloudflare。
    • 在 DNS 设置中,配置要代理的域。
    • 在 SSL 设置下:
      • 将模式设置为完全(严格)。
      • 在“SSL / Origin Server”部分,生成有效期为15年的证书。将这些证书用于 AWS Elastic Beanstalk。
  2. 在 AWS Systems Manager 中存储证书

      将生成的证书(server.crt 和 server.key)添加为 AWS Systems Manager 中的密钥:
      • /app/ssl/server-crt
        
        
      • /app/ssl/server-key
        
        
  3. 更新 AWS IAM 策略以从 AWS Systems Manager 读取

      授予 Elastic Beanstalk 实例访问密钥的权限:
      • 更新角色 aws-elasticbeanstalk-ec2-role。
      • 添加名为
      • ReadSSLSecretKeys: 的新策略
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ssm:GetParameter", "Resource": "arn:aws:ssm:region:account_id:parameter/your-game-changer/ssl/server-crt" }, { "Effect": "Allow", "Action": "ssm:GetParameter", "Resource": "arn:aws:ssm:region:account_id:parameter/your-game-changer/ssl/server-key" } ] }

  1. 修改 Elastic Beanstalk 配置
    创建一个名为
  • .ebextensions/01_https-instance-securitygroup.config
    :
    的文件
Resources: sslSecurityGroupIngress: Type: AWS::EC2::SecurityGroupIngress Properties: GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]} IpProtocol: tcp ToPort: 443 FromPort: 443 CidrIp: 0.0.0.0/0

    创建一个名为
  • .ebextensions/02_https-instance.config
    :
    的文件
files: /etc/pki/tls/certs/server.crt: mode: "000400" owner: root group: root content: | -----BEGIN CERTIFICATE----- certificate file contents -----END CERTIFICATE----- /etc/pki/tls/certs/server.key: mode: "000400" owner: root group: root content: | -----BEGIN RSA PRIVATE KEY----- private key contents # See note below. -----END RSA PRIVATE KEY----- container_commands: 01_fetch_server_crt: command: | aws ssm get-parameter --name "/app/ssl/server-crt" --with-decryption --query "Parameter.Value" --output text > /etc/pki/tls/certs/server.crt 02_fetch_server_key: command: | aws ssm get-parameter --name "/app/ssl/server-key" --with-decryption --query "Parameter.Value" --output text > /etc/pki/tls/certs/server.key

    添加名为
  • .platform/nginx/conf.d/https.conf
    :
    的文件
server { listen 443 ssl; ssl_certificate /etc/pki/tls/certs/server.crt; ssl_certificate_key /etc/pki/tls/certs/server.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { proxy_pass http://127.0.0.1:8000; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; } }
通过执行这些步骤,您将拥有安全的 HTTPS 设置,并将 Cloudflare 的代理和 SSL 证书集成到 AWS Elastic Beanstalk 中。


-1
投票
我们可以使用 eb-extensions 从 S3 部署 SSL 证书并将其添加为环境变量的一部分 -> 有关详细参考,请参阅此

doc

© www.soinside.com 2019 - 2024. All rights reserved.