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

ネットワークロードバランサー でこの設定ファイルを使用します。

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

DefaultProcess オプションの名前は、Application Load Balancer が特定のパスへのトラフィックについて同じポートにデフォルトでないリスナーを設定できることにちなんでいます (詳細については、Application Load Balancer を参照)。ネットワークロードバランサー のこのオプションは、このリスナーのターゲットプロセスのみ指定します。

この例では、セキュアな (HTTPS) トラフィックをリッスンするため、プロセスは https という名前になります。ネットワークロードバランサー は 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 を使用してバックエンドインスタンスに安全に接続します。ロードバランサーは、インスタンスの証明書が信頼できる認証局によって発行されたものであるかどうかを確認しません。また、提供される証明書をすべて受け入れます。

特定の証明書のみを信頼するように指示するポリシーをロードバランサーに追加することで、この動作を変更できます。以下の設定ファイルは 2 つのポリシーを作成します。1 つのポリシーは公開証明書を指定し、もう 1 つは、インスタンスポート 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 インスタンスの公開証明書の内容に置き換えます。