メニュー
AWS Elastic Beanstalk
開発者ガイド (API Version 2010-12-01)

ロードバランシングされた Elastic Beanstalk 環境でエンドツーエンドの暗号化を設定する

ロードバランサーとの安全な接続を終了し、バックエンドで HTTP を使用すると、アプリケーションにとってかもしあります。AWS リソースの間のネットワークトラフィックは、同じアカウントで実行中であっても、接続の一部ではないインスタンスがリッスンすることはできません。

ただし、厳格な外部規制を遵守するために必要なアプリケーションを開発している場合は、すべてのネットワーク接続を確保することを要求することができます。設定ファイルを使用し、Elastic Beanstalk 環境のロードバランサーをバックエンドインスタンスに接続して、これらの要件を満たすことができます。

まだ追加していない場合は、最初にロードバランサーにセキュアリスナーを追加します。

.ebextensions/https-lbterminate.config

option_settings:
  aws:elb:listener:443:
    SSLCertificateId: arn:aws:acm:us-east-1:#############:certificate/####################################
    ListenerProtocol: HTTPS

環境にインスタンスを設定して、安全なポートでリッスンして HTTPS 接続を終了する必要もあります。設定はプラットフォームによって異なります。手順については、「インスタンスで HTTPS 接続を終了するようにアプリケーションを設定する」を参照してください。自己署名証明書を EC2 インスタンスで問題なく使用できます。

次に、アプリケーションが使用するセキュリティポートで HTTPS を使用してトラフィックを転送するように、リスナーを設定します。このポートとプロトコルを使用するようにデフォルトのヘルスチェックを変更して、ロードバランサーが安全に接続できるようにすることもできます。以下の設定ファイルが両方を実行します。

.ebextensions/https-reencrypt.config

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

注記

EB CLI および Elastic Beanstalk コンソールは、上記のオプションで推奨値も適用します。設定ファイルを使用して設定する場合、これらの設定は削除する必要があります。詳細については、「推奨値」を参照してください。

以下の部分はより複雑です。トラフィックを許可するようにロードバランサーのセキュリティグループを変更する必要がありますが、環境を起動するのがデフォルト VPC であるかカスタム VPC であるかによって、ロードバランサーのセキュリティグループが異なります。デフォルト VPC では、Elastic Load Balancing がすべてのロードバランサーで使用できるデフォルトのセキュリティグループを提供します。自分で作成した 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 インスタンスの公開証明書の内容に置き換えます。