本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在負載平衡的 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 執行個體公有憑證的內容。