在負載平衡的 Elastic Beanstalk 環境中設定端對端加密 - AWS Elastic Beanstalk

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在負載平衡的 Elastic Beanstalk 環境中設定端對端加密

終止負載平衡器的安全連線並於後端使用 HTTP,對您的應用程式而言可能已足夠。即使在相同帳戶中執行,AWS 資源間的網路流量仍無法由不屬於該連線的執行個體接聽。

不過,若正開發的應用程式需要遵循嚴格的外部法規,您可能需要保護所有網路連線。您可使用 Elastic Beanstalk 主控台或組態檔案,將您 Elastic Beanstalk 環境的負載平衡器安全地連接至後端執行個體,以滿足這些要求。下列程序著重於組態檔案。

首先,將安全接聽程式新增至您的負載平衡器 (若尚未執行)。

您亦必須設定環境中的執行個體,以接聽安全的連接埠並終止 HTTPS 連線。每個組態視平台而有所不同。如需說明,請參閱 在執行個體設定HTTPS終止。您的 EC2 執行個體可使用自我簽署的簽憑,而不會出現問題。

接著,將接聽程式設定為在您應用程式所用之安全連接埠上使用 HTTPS 來轉送流量。根據您環境中使用的負載平衡器類型,使用以下其中一個組態檔案。

.ebextensions/https-reencrypt-clb.config

搭配 Classic Load Balancer 使用此組態檔案。除了設定負載平衡器,組態檔案也會變更預設的運作狀態檢查來使用連接埠 443 和 HTTPS,以確保負載平衡器能夠安全地連線。

option_settings: aws:elb:listener:443: InstancePort: 443 InstanceProtocol: HTTPS aws:elasticbeanstalk:application: Application Healthcheck URL: HTTPS:443/

.ebextensions/https-reencrypt-alb.config

搭配 Application Load Balancer 使用此組態檔案。

option_settings: aws:elbv2:listener:443: DefaultProcess: https ListenerEnabled: 'true' Protocol: HTTPS aws:elasticbeanstalk:environment:process:https: Port: '443' Protocol: HTTPS

.ebextensions/https-reencrypt-nlb.config

搭配 Network Load Balancer 使用此組態檔案。

option_settings: aws:elbv2:listener:443: DefaultProcess: https ListenerEnabled: 'true' aws:elasticbeanstalk:environment:process:https: Port: '443'

DefaultProcess 選項會以此方式命名,是因為 Application Load Balancer 可能在相同連接埠上,針對傳送至特定路徑的流量使用非預設的接聽程式 (詳細資訊請參閱Application Load Balancer)。以 Network Load Balancer 而言,此選項會指定此接聽程式的唯一目標程序。

在此範例中,我們將程序命名為 https,因為它會接聽安全 (HTTPS) 流量。由於 Network Load Balancer 僅能與 TCP 搭配運作,因此接聽程式會使用 TCP 通訊協定,將流量傳送至指定連接埠上的程序。此作法沒問題,因為 HTTP 和 HTTPS 的網路流量實作於 TCP 之上。

注意

EB CLI 和 Elastic Beanstalk 主控台會為前述選項套用建議的數值。若您想要使用組態檔進行相同的設定,您必須移除這些設定。如需詳細資訊,請參閱「建議值」。

在接下來的任務,您需要修改負載平衡器的安全群組,以允許流量。根據您啟動您環境的 Amazon Virtual Private Cloud (Amazon VPC)—預設 VPC 或自訂 VPC—負載平衡器的安全群組將會不同。在預設 VPC 中,Elastic Load Balancing 會提供預設安全群組,所有負載平衡器均可加以使用。在您建立的 Amazon VPC 中,Elastic Beanstalk 會針對要使用的負載平衡器建立安全群組。

為了同時滿足這兩種情境,您可建立安全群組,並指示 Elastic Beanstalk 使用該安全群組。下列組態檔案會建立安全群組,並將其連接至負載平衡器。

.ebextensions/https-lbsecuritygroup.config

option_settings: # Use the custom security group for the load balancer aws:elb:loadbalancer: SecurityGroups: '`{ "Ref" : "loadbalancersg" }`' ManagedSecurityGroup: '`{ "Ref" : "loadbalancersg" }`' Resources: loadbalancersg: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: load balancer security group VpcId: vpc-######## SecurityGroupIngress: - IpProtocol: tcp FromPort: 443 ToPort: 443 CidrIp: 0.0.0.0/0 - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: 0.0.0.0/0 SecurityGroupEgress: - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: 0.0.0.0/0

將醒目提示的文字取代為您的預設或自訂 VPC ID。先前範例包含連接埠 80 上的進出流量,可允許 HTTP 連線。若您僅允許安全連線,可移除這些屬性。

最後,新增可允許負載平衡器安全群組和執行個體安全群組透過連接埠 443 進行通訊的輸入和輸出規則。

.ebextensions/https-backendsecurity.config

Resources: # Add 443-inbound to instance security group (AWSEBSecurityGroup) httpsFromLoadBalancerSG: Type: AWS::EC2::SecurityGroupIngress Properties: GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]} IpProtocol: tcp ToPort: 443 FromPort: 443 SourceSecurityGroupId: {"Fn::GetAtt" : ["loadbalancersg", "GroupId"]} # Add 443-outbound to load balancer security group (loadbalancersg) httpsToBackendInstances: Type: AWS::EC2::SecurityGroupEgress Properties: GroupId: {"Fn::GetAtt" : ["loadbalancersg", "GroupId"]} IpProtocol: tcp ToPort: 443 FromPort: 443 DestinationSecurityGroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}

此作法不在建立安全群組時進行,可讓您限制來源和目的安全群組,無須建立循環相依性。

在您完成所有前述步驟後,負載平衡器即可使用 HTTPS 安全連接至您的後端執行個體。不論您執行個體的憑證為自我簽署或由信任憑證授權單位核發,負載平衡器都會接受任何向其遞交的憑證。

您可新增政策至負載平衡器,指示其僅信任特定憑證,藉此變更此行為。下列組態檔案會建立兩個政策。一個政策指定公有憑證,另一個則指示負載平衡器僅信任該憑證來連接至執行個體連接埠 443。

.ebextensions/https-backendauth.config

option_settings: # Backend Encryption Policy aws:elb:policies:backendencryption: PublicKeyPolicyNames: backendkey InstancePorts: 443 # Public Key Policy aws:elb:policies:backendkey: PublicKey: | -----BEGIN CERTIFICATE----- ################################################################ ################################################################ ################################################################ ################################################################ ################################################ -----END CERTIFICATE-----

將醒目提示的文字取代為您的 EC2 執行個體公有憑證的內容。