

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

# サーバー証明書
<a name="configuring-https.certificate"></a>

このトピックでは、HTTPS の設定に使用できるさまざまなタイプの証明書と、それぞれを適用するタイミングについて説明します。このセクションのサブトピックでは、独自の証明書を作成する手順と、それをアップロードする方法を説明します。

**AWS Certificate Manager (ACM)**  
ACM は、サーバー証明書をプロビジョン、管理、デプロイするための推奨ツールです。これは、プログラムまたは を使用して行うことができます AWS CLI。ACM を使用すると、ドメイン名用の信頼された証明書を無料で作成できます。

 ACM 証明書は AWS ロードバランサーと Amazon CloudFront ディストリビューションでのみ使用でき、ACM は特定の AWS リージョンでのみ使用できます。Elastic Beanstalk で ACM 証明書を使用するには、「[ロードバランサーでの HTTPS 終端の設定](configuring-https-elb.md)」を参照してください。ACM の詳細については、「[AWS Certificate Manager ユーザーガイド](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html)」を参照してください。

**注記**  
 ACM を使用できるリージョンのリストについては、「Amazon Web Services 全般のリファレンス」の「ACM のエンドポイントとクォータ」を参照してください。

ACM が AWS リージョンで利用できない場合は、サードパーティーまたは自己署名証明書とプライベートキーを AWS Identity and Access Management (IAM) にアップロードできます。を使用して証明書 AWS CLI をアップロードできます。IAM に保存されている証明書は、ロードバランサーと CloudFront ディストリビューションで使用できます。詳細については、「[IAM に証明書をアップロードする](configuring-https-ssl-upload.md)」を参照してください。

**サードパーティー証明書**  
ACM がお客様のリージョンで使用できない場合は、信頼された証明書を第三者から購入できます。第三者からの証明書はロードバランサー、バックエンドインスタンス、またはその両方で HTTPS トラフィックの復号に使用できます。

**証明書が自己署名です**  
開発およびテスト目的で、オープンソースのツールを使用して自分で[証明書を作成して署名](configuring-https-ssl.md)できます。自己署名証明書は無料で簡単に作成できますが、公開サイトのフロントエンド復号化に使用することはできません。クライアントへの HTTPS 接続に自己署名証明書を使用しようとした場合、ユーザーのブラウザではウェブサイトが安全でないことを示すエラーメッセージが表示されます。ただし、バックエンド接続の保護に自己署名証明書を使用することは問題ありません。

# X509 証明書を作成し署名する
<a name="configuring-https-ssl"></a>

`OpenSSL` を使用してアプリケーションの X509 証明書を作成できます。OpenSSL は標準のオープンソースライブラリーで、x509 証明書の作成と署名を含む包括的な暗号関数をサポートしています。OpenSSL の詳細については、[www.openssl.org](https://www.openssl.org/) を参照してください。

**注記**  
[HTTPS を単一インスタンス環境で使用する](https-singleinstance.md)か、自己署名証明書を使用して、[バックエンドで再度暗号化する](configuring-https-endtoend.md)には、証明書をローカルに作成する必要があります。ドメイン名を所有している場合は、 ( AWS Certificate Manager ACM) を使用して で証明書を作成し、ロードバランシングされた環境で無料で AWS 使用できます。手順については、*AWS Certificate Manager ユーザーガイド*の「[証明書のリクエスト](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request.html)」を参照してください。

コマンドラインで `openssl version` を実行して、OpenSSL がすでにインストールされているかどうかを確認します。OpenSSL をインストールしていない場合は、「[公開 GitHub リポジトリ](https://github.com/openssl/openssl)」の指示を使用してソースコードをインストールするか、または好みのパッケージマネージャを使用できます。OpenSSL は Elastic Beanstalk の Linux イメージにもインストールされているため、簡単な代替策として、次のように [EB CLI](eb-cli3.md) の **eb ssh** コマンドを使用して実行環境の EC2 インスタンスに接続できます。

```
~/eb$ eb ssh
[ec2-user@ip-255-55-55-255 ~]$ openssl version
OpenSSL 1.0.1k-fips 8 Jan 2015
```

証明書署名リクエスト（CSR）を作成するための RSA プライベートキーを作成する必要があります。プライベートキーを作成するには、**openssl genrsa** コマンドを使用します。

```
[ec2-user@ip-255-55-55-255 ~]$ openssl genrsa 2048 > privatekey.pem
Generating RSA private key, 2048 bit long modulus
.................................................................................................................................+++
...............+++
e is 65537 (0x10001)
```

*privatekey.pem*  
プライベートキーを保存するファイルの名前です。通常、**openssl genrsa** コマンドは画面にプライベートキーの内容を表示しますが、このコマンドは出力をファイルにパイプします。任意のファイル名を選択し、ファイルを後から取得できるように安全な場所に保存します。プライベートキーをなくした場合は、証明書を使用することはできません。

CSR は、デジタルサーバー証明書を申請するために認証機関（CA）に送信するファイルです。CSR を作成するには、**openssl req** コマンドを使用します。

```
$ openssl req -new -key privatekey.pem -out csr.pem
You are about to be asked to enter information that will be incorporated 
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
```

要求された情報を入力して、**Enter** を押します。以下の表は、各フィールドの例を表示して説明したものです。


****  

| 名前 | 説明 | 例 | 
| --- | --- | --- | 
| 国名 | 2 文字の ISO 略称 (国名コード)。 | 例 :US = アメリカ | 
| 州または県 | あなたが所属する組織の所在地の州または県。この名前を省略することはできません。 | ワシントン | 
| 市区町村 | あなたが所属する組織の所在地の市区町村。 | Seattle | 
| 組織名 | 組織の正式名称。組織名は、省略不可です。 | Example Corp | 
| 部門名 | 追加の部門情報は、省略可能です。 | Marketing | 
| 共通名 | ウェブサイトの完全修飾ドメイン名 これは、ユーザーがサイトを訪問したときに表示されるドメイン名と一致する必要があります。一致しない場合は証明書エラーが表示されます。 | www.example.com | 
| E メールアドレス | サイト管理者の E メールアドレス | someone@example.com | 

署名を要求する署名リクエストをサードパーティに送信するか、または開発とテスト用に自分で署名することができます。自己署名証明書は、ロードバランサーと EC2 インスタンス間のバックエンド HTTPS にも使用できます。

証明書に署名するには、**openssl x509** コマンドを使用します。以下の例では、以前のステップ (*privatekey.pem*) のプライベートキーおよび署名リクエスト (*csr.pem*) を使用して、*365* 日間有効な *public.crt* という名前の公開証明書を作成します。

```
$ openssl x509 -req -days 365 -in csr.pem -signkey privatekey.pem -out public.crt
Signature ok
subject=/C=us/ST=washington/L=seattle/O=example corporation/OU=marketing/CN=www.example.com/emailAddress=someone@example.com
Getting Private key
```

秘密キーと公開証明書は後で使用できるようにしておきます。署名リクエストは破棄できます。必ず、[プライベートキーは安全な場所に保存し](https-storingprivatekeys.md)、ソースコードには追加しないことをお勧めします。

Windows Server プラットフォームを使用して証明書を使用するには、PFX 形式に変換する必要があります。プライベートキーとパブリック証明書ファイルから PFX 証明書を作成するには、次のコマンドを使用します。

```
$ openssl pkcs12 -export -out example.com.pfx -inkey privatekey.pem -in public.crt
Enter Export Password: password
Verifying - Enter Export Password: password
```

証明書があるため、ロードバランサーで使用するために、[IAM にアップロードする](configuring-https-ssl-upload.md)か、[HTTPS を終了するように環境内のインスタンスを設定](https-singleinstance.md)します。

# IAM に証明書をアップロードする
<a name="configuring-https-ssl-upload"></a>

Elastic Beanstalk 環境のロードバランサーで証明書を使用するには、証明書とプライベートキーを AWS Identity and Access Management (IAM) にアップロードします。IAM に保存されている証明書は、Elastic Load Balancing ロードバランサーおよび Amazon CloudFront ディストリビューションで使用できます。

**注記**  
AWS Certificate Manager (ACM) は、サーバー証明書のプロビジョニング、管理、デプロイに推奨されるツールです。ACM 証明書のリクエストの詳細については、*AWS Certificate Manager ユーザーガイド*の「[証明書のリクエスト](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request.html)」を参照してください。ACM へのサードパーティー証明書のインポートの詳細については、*AWS Certificate Manager ユーザーガイド*の「[証明書のインポート](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html)」を参照してください。IAM を使用して証明書をアップロードするには、[AWS リージョンで ACM が使用できない場合に限ります](https://docs.aws.amazon.com/general/latest/gr/acm.html)。

 AWS Command Line Interface (AWS CLI) を使用して証明書をアップロードできます。次のコマンドは、*https-cert.crt* という名前の自己署名証明書を、*private-key.pem* という名前のプライベートキーとともにアップロードします。

```
$ aws iam upload-server-certificate --server-certificate-name elastic-beanstalk-x509 --certificate-body file://https-cert.crt --private-key file://private-key.pem
{
    "ServerCertificateMetadata": {
        "ServerCertificateId": "AS5YBEIONO2Q7CAIHKNGC",
        "ServerCertificateName": "elastic-beanstalk-x509",
        "Expiration": "2017-01-31T23:06:22Z",
        "Path": "/",
        "Arn": "arn:aws:iam::123456789012:server-certificate/elastic-beanstalk-x509",
        "UploadDate": "2016-02-01T23:10:34.167Z"
    }
}
```

`file://` プレフィックスは、現在のディレクトリにファイルの内容を読み込む AWS CLI ように に指示します。 *elastic-beanstalk-x509* は、IAM で証明書を呼び出す名前を指定します。

証明機関から証明書を購入し、証明書チェーンファイルを受け取った場合は、`--certificate-chain` オプションを含めることで、そのファイルもアップロードします。

```
$ aws iam upload-server-certificate --server-certificate-name elastic-beanstalk-x509 --certificate-chain file://certificate-chain.pem --certificate-body file://https-cert.crt --private-key file://private-key.pem
```

証明書の Amazon リソースネーム（ARN）をメモします。これは、HTTPS を使用するロードバランサー設定を更新する際に使用します。

**注記**  
IAM にアップロードされた証明書は、環境のロードバランサーで使用されなくなっても保存されたままになります。これには重要なデータが含まれています。どの環境にも証明書が不要になった場合は、必ず削除してください。IAM から証明書を削除する方法の詳細については、「[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html#delete-server-certificate](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html#delete-server-certificate)」を参照してください。

IAM のサーバー証明書の詳細については、「IAM ユーザーガイド」の[サーバー証明書の使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html)に関するページを参照してください。

# 秘密キーを Amazon S3 に安全に保存する
<a name="https-storingprivatekeys"></a>

パブリック証明書の署名に使用するプライベートキーはプライベートであるため、ソースコードにコミットしないでください。プライベートキーファイルを Amazon S3 にアップロードしておき、アプリケーションのデプロイ時に Amazon S3 からダウンロードされるように Elastic Beanstalk を設定することで、設定ファイルにプライベートキーを保存しなくて済みます。

以下の例で示している[設定ファイル](ebextensions.md)の[リソース](environment-resources.md)セクションと[ファイル](customize-containers-ec2.md#linux-files)セクションでは、Amazon S3 バケットからプライベートキーファイルをダウンロードしています。

**Example .ebextensions/privatekey.config**  

```
Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Auth:
          type: "s3"
          buckets: ["elasticbeanstalk-us-west-2-123456789012"]
          roleName: 
            "Fn::GetOptionSetting": 
              Namespace: "aws:autoscaling:launchconfiguration"
              OptionName: "IamInstanceProfile"
              DefaultValue: "aws-elasticbeanstalk-ec2-role"
files:
  # Private key
  "/etc/pki/tls/certs/server.key":
    mode: "000400"
    owner: root
    group: root
    authentication: "S3Auth"
    source: https://elasticbeanstalk-us-west-2-123456789012.s3.us-west-2.amazonaws.com/server.key
```

例に使用しているバケット名と URL は独自のものに置き換えてください。このファイルの最初のエントリは、環境の Auto Scaling グループのメタデータに `S3Auth` という名前の認証方法を追加します。お客様の環境用にカスタム[インスタンスプロファイル](concepts-roles-instance.md)を設定している場合はそのプロファイルが使用されますが、設定していない場合は `aws-elasticbeanstalk-ec2-role` のデフォルト値が適用されます。デフォルトのインスタンスプロファイルには、Elastic Beanstalk ストレージバケットからの読み取り権限があります。別のバケットを使用する場合は、[インスタンスプロファイルに許可を追加](iam-instanceprofile.md#iam-instanceprofile-addperms)します。

2 番目のエントリは、`S3Auth` 認証方法を使用して、指定された URL からプライベートキーをダウンロードし、`/etc/pki/tls/certs/server.key` に保存します。プロキシサーバーは、この場所からプライベートキーを読み取って、[インスタンスで HTTPS 接続を終了](https-singleinstance.md)できます。

環境の EC2 インスタンスに割り当てられるインスタンスプロファイルには、指定したバケットからキーオブジェクトを読み取るための権限がなければなりません。[インスタンスプロファイルに IAM のオブジェクトを読み取るアクセス許可があること](iam-instanceprofile.md#iam-instanceprofile-verify)と、バケットおよびオブジェクトに対するアクセス許可でインスタンスプロファイルが禁止されていないことを確認します。

**バケットの権限を表示するには**

1. [Amazon S3 マネジメントコンソール](https://console.aws.amazon.com/s3/home)を開きます。

1. バケットを選択します。

1. [**プロパティ**] を選択して、[**アクセス許可**] を選択します。

1. アカウントがバケットの読み取り権限を持っていることを確認します。

1. バケットポリシーがアタッチされている場合は、[**バケットポリシー**] を選択して、バケットに割り当てられているアクセス許可を表示します。