Amazon API Gateway API の相互トランスポート層セキュリティ (TLS) 認証を設定するときに、サードパーティが発行したクライアント証明書を使用したいと考えています。
解決方法
TLS 認証で API Gateway にサードパーティの署名付きクライアント証明書を使用するには、次の手順に従います。
- サードパーティの署名付き証明書を使用するトラストストアを作成します。
- API Gateway API のカスタムドメイン名と API マッピングを作成します。
- DNS レコードを作成して、カスタムドメイン名を API Gateway にマッピングします。
- デフォルトエンドポイントを無効にします。
- API をテストします。
注:
- AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、最新バージョンの AWS CLIを使用していることを確認してください。
- 相互 TLS はプライベート API ではサポートされていません。
サードパーティの署名付き証明書を使用するトラストストアを作成する
1. ルート CA を生成します。ルート CA はクライアント証明書の発行に使用されます。
openssl genrsa -out RootCA.key 4096
openssl req -new -x509 -days 3650 -key RootCA.key -out RootCA.pem
-
必須フィールドに入力し、ドメイン名を入力します。
-
クライアント証明書のプライベートキー、証明書署名要求 (CSR)、およびクライアント証明書を作成します。
openssl genrsa -out my_client.key 2048
openssl req -new -key my_client.key -out my_client.csr
- 以前に作成した CA を使用してクライアント証明書に署名します。
openssl x509 -req -in my_client.csr -CA RootCA.pem -CAkey RootCA.key -set_serial 01 -out my_client.pem -days 3650 -sha256
-
truststore.pem ファイルを保存する Amazon Simple Storage Service (Amazon S3) バケットを作成します。
-
Amazon S3 バケットトラストストアに Rootca.pem をアップロードします。
-
(オプション) 中間 CA 証明書からルート CA までの証明書チェーンファイルを作成します。
Cat Intermediate.pem ca.pem >ca-chain.pem.
詳細については、「トラストストアの設定」を参照してください。
API Gateway API のカスタムドメイン名と API マッピングを作成する
**注:**API Gateway では、キーサイズが 2048 ビットの証明書のみが表示されます。証明書のサイズは 2048 ビットを超えることはできません。
-
API Gateway コンソールを開き、**[カスタムドメイン名]**を選択します。
-
[ドメイン名] で、ドメイン名を入力して **[作成]**を選択します。
-
[ドメイン名] に、ドメイン名を入力します。
-
[TLS の最小バージョン] で **[TLS 1.2]**を選択します。
-
相互 TLS 認証を有効にします。
-
**[トラストストア URI] **には、以前に作成した Amazon S3 URI を入力します。
-
[エンドポイント設定] では、**[リージョン]**を選択します。
-
[証明書の種類] で証明書の種類を選択し、**[ドメイン名を作成]**を選択します。
-
カスタムドメイン名を選択し、**[API マッピングを設定]**を選択します。
-
**[新しいマッピングを追加]**を選択します。
-
マッピングの [API]、[ステージ]、[パス]を選択し、[保存] を選択します。
詳細については、「API Gateway API のカスタムドメイン名を設定するにはどうすればよいですか?」を参照してください。
DNS レコードを作成してカスタムドメイン名を API Gateway にマッピングする
DNS レコードを作成し、カスタムドメイン名に API Gateway リージョンドメイン名を指定します。これにより、カスタムドメイン名にバインドされているトラフィックを API リージョンホスト名のホストにルーティングできます。DNS レコードは CNAME タイプまたは「A エイリアス」タイプです。
詳細については、「API Gateway エンドポイントにトラフィックをルーティングするように Route 53 を設定する」を参照してください。
デフォルトエンドポイントを無効にする
デフォルトでは、クライアントは API Gateway が API 用に生成する execute-api エンドポイントを使用して API を呼び出すことができます。デフォルトの execute-api エンドポイントを無効にして、クライアントがカスタムドメイン名のみを使用して API にアクセスできるようにします。
HTTP API については、「HTTP API のデフォルトエンドポイントの無効化」を参照してください。
REST API については、「REST API のデフォルトエンドポイントの無効化」を参照してください。
API をテストする
--key と**--cert** パラメータを使用して API をテストし、リクエストの一部としてクライアント証明書を送信します。
$ curl -v https://{YourCustomDomainName}/{resource} --key my_client.key --cert my_client.pem
注: リクエストを正常に実行するには、クライアント証明書 my\ _client.pem だけでなく、プライベートキー my\ _client.key もリクエストで送信する必要があります。
関連情報
カスタムドメインと相同 TLS が有効になっている Amazon API Gateway の証明書チェーンと自己署名証明書の問題のトラブルシューティングするにはどうすればよいですか?
Amazon API ゲートウェイの相互 TLS 認証の導入
相互 TLS を必要とする API Gateway カスタムドメイン名からの HTTP 403 禁止エラーをトラブルシューティングする方法を教えてください。