使用HTTPS侦听器创建 Classic Load Balancer - Elastic Load Balancing

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用HTTPS侦听器创建 Classic Load Balancer

负载均衡器接受来自客户端的请求,并将请求分发到向负载均衡器注册的EC2实例中。

您可以创建一个同时监听 HTTP (80) 和 HTTPS (443) 端口的负载均衡器。如果您指定HTTPS监听器通过端口 80 向实例发送请求,则负载均衡器会终止请求,并且不会加密从负载均衡器到实例的通信。如果HTTPS侦听器通过端口 443 向实例发送请求,则会加密从负载均衡器到实例的通信。

如果负载均衡器使用加密连接与实例通信,您可以选择启用实例身份验证。这可确保只有在实例的公钥与您出于通信目的为负载均衡器指定的密钥匹配时,负载均衡器才与实例通信。

有关向现有负载均衡HTTPS器添加侦听器的信息,请参阅为您的 Classic HTTPS Load Balancer 配置侦听器

先决条件

在您开始之前,请确保您已符合以下先决条件:

  • 完成 给你的建议 VPC 中的步骤。

  • 启动您计划向负载均衡器注册的EC2实例。这些实例的安全组必须允许来自负载均衡器的流量。

  • EC2实例必须使用HTTP状态代码 200 响应运行状况检查的目标。有关更多信息,请参阅 对您的 Classic Load Balancer 的实例进行运行状况检查

  • 如果您计划在EC2实例上启用 keep-alive 选项,我们建议您将保持活动设置至少设置为负载均衡器的空闲超时设置。如果要确保由负载均衡器负责关闭与实例的连接,请确保在实例上设置的保持活动时间值要大于在负载均衡器上设置的空闲超时设置。有关更多信息,请参阅 配置经典负载均衡器的空闲连接超时

  • 如果您创建安全侦听器,则必须在负载均衡器上部署SSL服务器证书。负载均衡器会在将请求发送到实例之前,使用证书终止并解密请求。如果您没有SSL证书,则可以创建一个。有关更多信息,请参阅 SSL/经典负载均衡器的TLS证书

使用控制台创建HTTPS负载均衡器

在此示例中,您为负载均衡器配置了两个侦听器。第一个监听器在端口 80 上接受HTTP请求,然后使用将请求发送到端口 80 上的实例HTTP。第二个侦听器在端口 443 上接受HTTPS请求,并使用HTTP端口 80(如果要配置后端实例身份验证,则使用HTTPS端口 443)将请求发送到实例。

侦听器是用于检查连接请求的进程。使用前端 (客户端到负载均衡器) 连接的协议和端口与后端 (负载均衡器到实例) 连接的协议和端口配置侦听器。有关 Elastic Load Balancing 支持的端口、协议和侦听器配置的信息,请参阅经典负载均衡器的侦听器

使用控制台创建安全的 Classic Load Balancer
  1. 打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/

  2. 在导航栏上,选择您的负载均衡器所在的区域。请务必选择与您为EC2实例选择的相同区域。

  3. 在导航窗格上的 Load Balancing (负载均衡) 下,选择 Load Balancers (负载均衡器)。

  4. 选择 Create Load Balancer (创建负载均衡器)

  5. 展开经典负载均衡器部分,然后选择创建

  6. 基本配置

    1. 对于负载均衡器名称,键入负载均衡器的名称。

      在当前区域的经典负载均衡器集内,经典负载均衡器的名称必须唯一,最多可以有 32 个字符,只能包含字母数字字符和连字符,不能以连字符开头或结尾。

    2. 对于模式,选择面向互联网

  7. 网络映射

    1. 对于 VPC,请选择与VPC您为实例选择的相同。

    2. 对于映射,首先选择一个可用区,然后从其可用子网中选择一个公有子网。每个可用区只能选择一个子网。要提高负载均衡器的可用性,请选择多个可用区和子网。

  8. 安全组

    1. 对于安全组,请选择一个现有安全组,该安全组已配置为允许端口 80 上的所需HTTPHTTPS流量和端口 443 上的流量。

      如果安全组不存在,则可以创建一个具有必要规则的新安全组。

  9. 侦听器和路由

    1. 保留默认侦听器的默认设置,然后选择添加侦听器

    2. 对于新侦听器的侦听器部分,选择 HTTPS,因为协议和端口将更新为 443。默认情况下,实例将使用 HTTP 协议和端口 80

    3. 如果需要进行后端身份验证,请将实例协议更改为 HTTPS。此操作还会将实例端口更改为 443

  10. 安全侦听器设置

    在SSL为前端侦听器使用HTTPS或时,必须在负载均衡器上部署SSL证书。负载均衡器先使用此证书终止连接,解密来自客户端的请求,然后再将请求发送到实例。您还必须指定安全策略。Elastic Load Balancing 提供具有预定义SSL协商配置的安全策略,或者您可以创建自己的自定义安全策略。如果您在后端连接SSL上配置了HTTPS/,则可以启用实例的身份验证。

    1. 对于安全策略,我们建议您始终使用最新的预定义安全策略,或者创建自定义策略。请参见更新SSL协商配置

    2. 对于 “默认”SSL/TLS证书,有以下选项可用:

      • 如果您使用创建或导入了证书 AWS Certificate Manager,请选择 “”ACM,然后从 “选择证书” 中选择证书

      • 如果您使用导入证书IAM,请选择 “”IAM,然后从 “选择证书” 中选择您的证书

      • 如果您有要导入的证书,但在您所在的地区ACM不可用,请选择导入,然后选择收件人IAM。证书名称字段中输入证书的名称。在 “证书私钥” 中,复制并粘贴私钥文件(PEM-编码)的内容。在证书正文中,复制并粘贴公钥证书文件(PEM-编码)的内容。在证书链中,复制并粘贴证书链文件(PEM-encoded)的内容,除非您使用的是自签名证书,并且浏览器是否隐式接受证书并不重要。

    3. (可选)如果您将HTTPS侦听器配置为使用加密连接与实例通信,则可以选择在后端身份验证证书中设置实例的身份验证

      注意

      如果看不到后端身份验证证书部分,请返回侦听器和路由部分,然后对于实例的协议选择 HTTPS

      1. 对于 Certificate name,键入公钥证书的名称。

      2. 对于证书正文(PEM已编码),请复制并粘贴证书的内容。只有在实例的公钥与此密钥匹配时,负载均衡器才会与该实例通信。

      3. 要添加其他证书,请选择添加新后端证书。最多可以添加五个。

  11. 运行状况检查

    1. Ping 目标部分中,选择一个 Ping 协议Ping 端口。您的EC2实例必须接受指定 ping 端口上的流量。

    2. 对于 Ping 端口,确保端口为 80

    3. 对于 Ping 路径,请将默认值替换为单正斜线(/)。这会指示 Elastic Load Balancing 将运行状况检查请求发送到您的 Web 服务器的默认主页,如 index.html

    4. 对于高级运行状况检查设置,请使用默认值。

  12. 实例

    1. 选择添加实例,这时将显示实例选择页面。

    2. 可用实例下,您可以根据之前选择的网络设置,从负载均衡器可用的当前实例中进行选择。

    3. 确认选择无误后,选择确认以将要注册的实例添加到负载均衡器。

  13. Attributes

    1. 对于启用跨可用区负载均衡启用连接耗尽以及超时(耗尽间隔时间),请保留默认值。

  14. 负载均衡器标签(可选)

    1. 字段为必填项。

    2. 字段为可选项。

    3. 要添加其他标签,请选择添加新标签,然后输入字段的值,以及可选的字段的值。

    4. 要移除现有标签,请选择要移除的标签旁的移除

  15. 摘要和创建

    1. 如果需要更改任何设置,请选择需要更改的设置旁的编辑

    2. 确认摘要中显示的所有设置无误后,选择创建负载均衡器以开始创建负载均衡器。

    3. 在最终创建页面上,选择查看负载均衡器以在 Amazon EC2 控制台中查看您的负载均衡器。

  16. 验证

    1. 选择新的负载均衡器。

    2. 目标实例选项卡中,选中运行状态列。在您的至少一个EC2实例处于服务状态后,您可以测试您的负载均衡器。

    3. 在 “详细信息” 部分中,复制负载均衡器DNS名称,该名称应类似于。my-load-balancer-1234567890.us-east-1.elb.amazonaws.com

    4. 将您的负载均衡器DNS名称粘贴到连接公共 Internet 的 Web 浏览器的地址字段中。如果负载均衡器运行正常,则会看到服务器的默认页面。

  17. 删除(可选)

    1. 如果您的域名CNAME记录指向您的负载均衡器,请将其指向新的位置并等待DNS更改生效,然后再删除您的负载均衡器。

    2. 打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/

    3. 选择负载均衡器。

    4. 依次选择操作删除负载均衡器

    5. 提示进行确认时,键入 confirm,然后选择删除

    6. 删除负载均衡器后,在该负载均衡器中注册的EC2实例将继续运行。您将按实例继续运行的部分或完整小时数付费。当您不再需要某个EC2实例时,可以停止或终止该实例,以免产生额外费用。

使用创建HTTPS负载均衡器 AWS CLI

按照以下说明使用创建HTTPS/SSL负载均衡器 AWS CLI。

步骤 1:配置侦听器

侦听器是用于检查连接请求的进程。使用前端 (客户端到负载均衡器) 连接的协议和端口与后端 (负载均衡器到实例) 连接的协议和端口配置侦听器。有关 Elastic Load Balancing 支持的端口、协议和侦听器配置的信息,请参阅经典负载均衡器的侦听器

在此示例中,通过指定要用于前端和后端连接的端口和协议为您的负载均衡器配置两个侦听器。第一个监听器在端口 80 上接受HTTP请求,并使用将请求发送到端口 80 上的实例HTTP。第二个监听器在端口 443 上接受HTTPS请求,并使用HTTP端口 80 向实例发送请求。

由于第二个侦听器HTTPS用于前端连接,因此您必须在负载均衡SSL器上部署服务器证书。负载均衡器会在将请求发送到实例之前,使用证书终止并解密请求。

为您的负载均衡器配置侦听器
  1. 获取SSL证书的 Amazon 资源名称 (ARN)。例如:

    ACM

    arn:aws:acm:region:123456789012:certificate/12345678-1234-1234-1234-123456789012

    IAM

    arn:aws:iam::123456789012:server-certificate/my-server-certificate
  2. 使用以下create-load-balancer命令为负载均衡器配置两个侦听器:

    aws elb create-load-balancer --load-balancer-name my-load-balancer --listeners "Protocol=http,LoadBalancerPort=80,InstanceProtocol=http,InstancePort=80" "Protocol=https,LoadBalancerPort=443,InstanceProtocol=http,InstancePort=80,SSLCertificateId="ARN" --availability-zones us-west-2a

    以下为响应示例:

    { "DNSName": "my-loadbalancer-012345678.us-west-2.elb.amazonaws.com" }
  3. (可选)使用以下describe-load-balancers命令查看您的负载均衡器的详细信息:

    aws elb describe-load-balancers --load-balancer-name my-load-balancer

步骤 2:配置SSL安全策略

您可选择预定义安全策略之一,或者可创建自己的自定义安全策略。否则,Elastic Load Balancing 使用默认预定义安全策略 ELBSecurityPolicy-2016-08 配置您的负载均衡器。有关更多信息,请参阅 SSL经典负载均衡器的协商配置

验证您的负载均衡器是否与默认安全策略关联

使用以下 describe-load-balancers 命令:

aws elb describe-load-balancers --load-balancer-name my-loadbalancer

以下为响应示例。请注意,ELBSecurityPolicy-2016-08 已在端口 443 上与负载均衡器关联。

{ "LoadBalancerDescriptions": [ { ... "ListenerDescriptions": [ { "Listener": { "InstancePort": 80, "SSLCertificateId": "ARN", "LoadBalancerPort": 443, "Protocol": "HTTPS", "InstanceProtocol": "HTTP" }, "PolicyNames": [ "ELBSecurityPolicy-2016-08" ] }, { "Listener": { "InstancePort": 80, "LoadBalancerPort": 80, "Protocol": "HTTP", "InstanceProtocol": "HTTP" }, "PolicyNames": [] } ], ... } ] }

如果您愿意,可以为负载均衡器配置SSL安全策略,而不是使用默认安全策略。

(可选)使用预定义SSL的安全策略
  1. 使用以下describe-load-balancer-policies命令列出预定义安全策略的名称:

    aws elb describe-load-balancer-policies

    有关预定义安全策略的配置的信息,请参阅预定义SSL的安全策略

  2. 使用以下create-load-balancer-policy命令使用您在上一步中描述的预定义安全策略之一创建SSL协商策略:

    aws elb create-load-balancer-policy --load-balancer-name my-loadbalancer --policy-name my-SSLNegotiation-policy --policy-type-name SSLNegotiationPolicyType --policy-attributes AttributeName=Reference-Security-Policy,AttributeValue=predefined-policy
  3. (可选)使用以下describe-load-balancer-policies命令验证策略是否已创建:

    aws elb describe-load-balancer-policies --load-balancer-name my-loadbalancer --policy-name my-SSLNegotiation-policy

    响应包括策略的描述。

  4. 使用以下 set-load-balancer-policiesof-listener 命令在负载均衡器端口 443 上启用该策略:

    aws elb set-load-balancer-policies-of-listener --load-balancer-name my-loadbalancer --load-balancer-port 443 --policy-names my-SSLNegotiation-policy
    注意

    set-load-balancer-policies-of-listener 命令将指定负载均衡器端口的当前策略集替换为指定的策略集。--policy-names 列表必须包括要启用的所有策略。如果您省略当前已启用的策略,则禁用此策略。

  5. (可选)使用以下describe-load-balancers命令验证策略是否已启用:

    aws elb describe-load-balancers --load-balancer-name my-loadbalancer

    以下是指明已在端口 443 上启用策略的响应示例。

    { "LoadBalancerDescriptions": [ { .... "ListenerDescriptions": [ { "Listener": { "InstancePort": 80, "SSLCertificateId": "ARN", "LoadBalancerPort": 443, "Protocol": "HTTPS", "InstanceProtocol": "HTTP" }, "PolicyNames": [ "my-SSLNegotiation-policy" ] }, { "Listener": { "InstancePort": 80, "LoadBalancerPort": 80, "Protocol": "HTTP", "InstanceProtocol": "HTTP" }, "PolicyNames": [] } ], ... } ] }

当您创建自定义安全策略时,必须至少启用一项协议和一个密码。DSA和RSA密码是签名算法所特有的,用于创建证书。SSL如果您已经拥有SSL证书,请确保启用用于创建证书的密码。您的自定义策略的名称不得以 ELBSecurityPolicy-ELBSample- 开头,因为这些前缀是为预定义安全策略的名称保留的。

(可选)使用自定义SSL安全策略
  1. 使用create-load-balancer-policy命令使用自定义安全策略创建SSL协商策略。例如:

    aws elb create-load-balancer-policy --load-balancer-name my-loadbalancer --policy-name my-SSLNegotiation-policy --policy-type-name SSLNegotiationPolicyType --policy-attributes AttributeName=Protocol-TLSv1.2,AttributeValue=true AttributeName=Protocol-TLSv1.1,AttributeValue=true AttributeName=DHE-RSA-AES256-SHA256,AttributeValue=true AttributeName=Server-Defined-Cipher-Order,AttributeValue=true
  2. (可选)使用以下describe-load-balancer-policies命令验证策略是否已创建:

    aws elb describe-load-balancer-policies --load-balancer-name my-loadbalancer --policy-name my-SSLNegotiation-policy

    响应包括策略的描述。

  3. 使用以下 set-load-balancer-policiesof-listener 命令在负载均衡器端口 443 上启用该策略:

    aws elb set-load-balancer-policies-of-listener --load-balancer-name my-loadbalancer --load-balancer-port 443 --policy-names my-SSLNegotiation-policy
    注意

    set-load-balancer-policies-of-listener 命令将指定负载均衡器端口的当前策略集替换为指定的策略集。--policy-names 列表必须包括要启用的所有策略。如果您省略当前已启用的策略,则禁用此策略。

  4. (可选)使用以下describe-load-balancers命令验证策略是否已启用:

    aws elb describe-load-balancers --load-balancer-name my-loadbalancer

    以下是指明已在端口 443 上启用策略的响应示例。

    { "LoadBalancerDescriptions": [ { .... "ListenerDescriptions": [ { "Listener": { "InstancePort": 80, "SSLCertificateId": "ARN", "LoadBalancerPort": 443, "Protocol": "HTTPS", "InstanceProtocol": "HTTP" }, "PolicyNames": [ "my-SSLNegotiation-policy" ] }, { "Listener": { "InstancePort": 80, "LoadBalancerPort": 80, "Protocol": "HTTP", "InstanceProtocol": "HTTP" }, "PolicyNames": [] } ], ... } ] }

步骤 3:配置后端实例身份验证(可选)

如果您在后端连接SSL上设置了HTTPS/,则可以选择设置实例的身份验证。

在设置后端实例身份验证时,您将创建一个公钥策略。接下来,您可使用此公钥策略创建后端实例身份验证策略。最后,您可以使用HTTPS协议的实例端口来设置后端实例身份验证策略。

只有在实例提供给负载均衡器的公钥与负载均衡器的身份验证策略中的公钥匹配时,负载均衡器才会与实例通信。

配置后端实例身份验证
  1. 使用以下命令检索公钥:

    openssl x509 -in your X509 certificate PublicKey -pubkey -noout
  2. 使用以下create-load-balancer-policy命令创建公钥策略:

    aws elb create-load-balancer-policy --load-balancer-name my-loadbalancer --policy-name my-PublicKey-policy \ --policy-type-name PublicKeyPolicyType --policy-attributes AttributeName=PublicKey,AttributeValue=MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w 0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5 jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw 3rrszlaEXAMPLE=
    注意

    要指定 --policy-attributes 的公钥值,请删除公钥的第一行和最后一行内容 (包含“-----BEGIN PUBLIC KEY-----”和“-----END PUBLIC KEY-----”的两行)。 AWS CLI 不接受中的空格字符--policy-attributes

  3. 使用以下create-load-balancer-policy命令使用创建后端实例身份验证my-PublicKey-policy策略。

    aws elb create-load-balancer-policy --load-balancer-name my-loadbalancer --policy-name my-authentication-policy --policy-type-name BackendServerAuthenticationPolicyType --policy-attributes AttributeName=PublicKeyPolicyName,AttributeValue=my-PublicKey-policy

    您可以选择使用多个公钥策略。负载均衡器会尝试所有密钥,一次尝试一个。如果实例提供的公钥与其中一个公钥匹配,则表示此实例已经过身份验证。

  4. 使用以下 set-load-balancer-policies-for-backend-server 命令设置my-authentication-policy为的实例端口HTTPS。在此示例中,实例端口为端口 443。

    aws elb set-load-balancer-policies-for-backend-server --load-balancer-name my-loadbalancer --instance-port 443 --policy-names my-authentication-policy
  5. (可选)使用以下describe-load-balancer-policies命令列出您的负载均衡器的所有策略:

    aws elb describe-load-balancer-policies --load-balancer-name my-loadbalancer
  6. (可选)使用以下describe-load-balancer-policies命令查看策略的详细信息:

    aws elb describe-load-balancer-policies --load-balancer-name my-loadbalancer --policy-names my-authentication-policy

步骤 4:配置运行状况检查(可选)

Elastic Load Balancing 会根据您配置的运行状况检查定期检查每个注册EC2实例的运行状况。如果 Elastic Load Balancing 发现某一运行不正常的实例,它会停止向这个实例发送流量,并将流量路由到运行正常的实例。有关更多信息,请参阅 对您的 Classic Load Balancer 的实例进行运行状况检查

当您创建负载均衡器时,Elastic Load Balancing 会使用运行状况检查的默认设置。如果您愿意,您可更改负载均衡器的运行状况检查配置,而不是使用默认设置。

为您的实例配置运行状况检查

使用以下 configure-health-check 命令:

aws elb configure-health-check --load-balancer-name my-loadbalancer --health-check Target=HTTP:80/ping,Interval=30,UnhealthyThreshold=2,HealthyThreshold=2,Timeout=3

以下为响应示例:

{ "HealthCheck": { "HealthyThreshold": 2, "Interval": 30, "Target": "HTTP:80/ping", "Timeout": 3, "UnhealthyThreshold": 2 } }

步骤 5:注册EC2实例

创建负载均衡器后,您必须向负载均衡器注册您的EC2实例。您可以从与负载均衡器位于同一区域内的单个可用区或多个可用区中选择EC2实例。有关更多信息,请参阅 经典负载均衡器的已注册实例

按如下方式使用 register-instances-with-load-balancer 命令:

aws elb register-instances-with-load-balancer --load-balancer-name my-loadbalancer --instances i-4f8cf126 i-0bb7ca62

以下为响应示例:

{ "Instances": [ { "InstanceId": "i-4f8cf126" }, { "InstanceId": "i-0bb7ca62" } ] }

步骤 6:验证实例

当您的任何一个已注册实例处于 InService 状态后,您的负载均衡器即可使用。

要检查您新注册的EC2实例的状态,请使用以下describe-instance-health命令:

aws elb describe-instance-health --load-balancer-name my-loadbalancer --instances i-4f8cf126 i-0bb7ca62

以下为响应示例:

{ "InstanceStates": [ { "InstanceId": "i-4f8cf126", "ReasonCode": "N/A", "State": "InService", "Description": "N/A" }, { "InstanceId": "i-0bb7ca62", "ReasonCode": "Instance", "State": "OutOfService", "Description": "Instance registration is still in progress" } ] }

如果实例的 State 字段为 OutOfService,则可能是因为您的实例仍在注册中。有关更多信息,请参阅 对经典负载均衡器进行故障排除:实例注册

在您的至少一个实例的状态为 InService 后,便可测试负载均衡器。要测试您的负载均衡器,请复制负载均衡器的DNS名称并将其粘贴到联网的 Web 浏览器的地址字段中。如果您的负载均衡器正在运行,则会看到HTTP服务器的默认页面。

步骤 7:删除您的负载均衡器(可选)

删除负载均衡器会自动注销其关联EC2实例。当负载均衡器被删除之后,您便不再需要支付负载均衡器费用。但是,这些EC2实例会继续运行,并且您会继续产生费用。

要删除您的负载均衡器,请使用以下delete-load-balancer命令:

aws elb delete-load-balancer --load-balancer-name my-loadbalancer

要停止您的EC2实例,请使用 stop-instances 命令。要终止您的EC2实例,请使用终止实例命令