在負載平衡的 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 執行個體公有憑證的內容。