

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 負荷分散された Elastic Beanstalk 環境でエンドツーエンドの暗号化を設定する
<a name="configuring-https-endtoend"></a>

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

ただし、厳格な外部規制を遵守する必要があるアプリケーションを開発している場合は、すべてのネットワーク接続をセキュリティで保護しなければならないことがあります。Elastic Beanstalk コンソールまたは[設定ファイル](ebextensions.md)を使用し、Elastic Beanstalk 環境のロードバランサーをバックエンドインスタンスに接続することで、これらの要件を満たすことができます。次の手順では、設定ファイルを使用します。

まだ追加していない場合は、まず、[ロードバランサーにセキュアリスナーを追加](configuring-https-elb.md)します。

環境にインスタンスを設定して、安全なポートでリッスンして HTTPS 接続を終端する必要もあります。設定はプラットフォームによって異なります。手順については「[インスタンスでの HTTPS 終端の設定](https-singleinstance.md)」を参照してください。[自己署名証明書](configuring-https-ssl.md)を 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](environments-cfg-alb.md)」を参照してください)。Network Load Balancer の場合、このオプションでは、このリスナーの唯一のターゲットプロセスを指定します。

この例では、セキュアな (HTTPS) トラフィックをリッスンするため、プロセスは `https` という名前になります。Network Load Balancer は TCP でのみ使用できるため、リスナーは、TCP プロトコルを使用して、指定ポートのプロセスにトラフィックを送信します。HTTP および HTTPS のネットワークトラフィックは TCP の上で実装されるため、これは問題ありません。

**注記**  
EB CLI および Elastic Beanstalk コンソールでは、上記のオプションに推奨値が適用されます。設定ファイルを使用して同じファイルを設定する場合は、これらの設定を削除する必要があります。詳細については、「[推奨値](command-options.md#configuration-options-recommendedvalues)」を参照してください。

次のタスクでは、トラフィックを許可するようにロードバランサーのセキュリティグループを変更する必要があります。環境を起動する [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/) (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 インスタンスの公開証明書の内容に置き換えます。