Amazon API Gateway
開発者ガイド

バックエンドによる認証のためのクライアント側 SSL 証明書を使用する

API Gateway を使用して SSL 証明書を生成し、バックエンドでそのパブリックキーを使用して、バックエンドシステムへの HTTP リクエストが API Gateway からのものであることを確認できます。これにより、HTTP バックエンドは、バックエンドがパブリックにアクセス可能であっても、Amazon API Gateway から送信されるリクエストのみを制御し、受け入れることができます。

注記

一部のバックエンドサーバーは、API Gateway のようには SSL クライアント認証をサポートしていない場合があり、SSL 証明書エラーを返す可能性があります。互換性のないバックエンドサーバーのリストについては、「Amazon API Gateway の重要な注意点」を参照してください。

API Gateway によって生成される SSL 証明書は自己署名されており、証明書のパブリックキーのみ API Gateway コンソールで、または API を通じて表示されます。

API Gateway コンソールを使用してクライアント証明書を生成する

  1. メインナビゲーションペインで、[クライアント証明書] を選択します。

  2. [クライアント証明書] ペインから、[クライアント証明書の生成] を選択します。

  3. オプションで、[編集] により、生成された証明書を説明するタイトルを追加し、[保存] を選択してその説明を保存できます。API Gateway は新しい証明書を生成し、PEM エンコードされた公開鍵とともに新しい証明書 GUID を返します。

これで API で証明書を使用するように設定する準備が整いました。

API で SSL 証明書を使用するように設定する

これらの手順は、「API Gateway コンソールを使用してクライアント証明書を生成する」をすでに完了していることを前提としています。

  1. API Gateway コンソールで、クライアント証明書を使用する API を作成するか開きます。API がステージにデプロイされていることを確認します。

  2. 選択された API で [ステージ] を選択し、ステージを選択します。

  3. [ステージエディター] パネルで、[クライアント証明書] セクションの証明書を選択します。

  4. [変更の保存] を選択して設定を保存します。

    API が API Gateway コンソールで以前にデプロイ済みの場合、変更を有効にするには再デプロイする必要があります。

API に対して証明書が選択され保存されると、API Gateway は API での HTTP 統合へのすべての呼び出しにこの証明書を使用します。

クライアント証明書の設定を確認するテスト呼び出し

  1. API メソッドを選択します。[クライアント] で、[テスト] を選択します。

  2. [クライアント証明書] から、[テスト] を選択してメソッドリクエストを呼び出します。

API Gateway は、API を認証するために、選択された SSL 証明書を HTTP バックエンドに提示します。

クライアント証明書を確認するバックエンド HTTPS サーバーの設定

以下の手順は、「API Gateway コンソールを使用してクライアント証明書を生成する」を完了し、クライアント証明書のコピーをダウンロード済みであることが前提です。クライアント証明書は、API Gateway REST API の clientcertificate:by-id または AWS CLI の get-client-certificate を呼び出すことでダウンロードできます。

API Gateway のクライアント SSL 証明書を確認するバックエンド HTTPS サーバーを設定する前に、PEM エンコードされたプライベートキーと、信頼された証明機関によって提供されたサーバー側証明書を取得しておく必要があります。

サーバーのドメイン名が myserver.mydomain.com の場合、サーバー証明書の CNAME 値は myserver.mydomain.com または *.mydomain.com にする必要があります。

サポートされている証明機関は、Let's Encrypt や「HTTP および HTTP プロキシ統合のために API Gateway によりサポートされる証明機関」のいずれかなどです。

たとえば、クライアント証明書ファイルが apig-cert.pem であり、サーバーのプライベートキーと証明書ファイルがそれぞれ server-key.pem および server-cert.pem である場合、バックエンドの Node.js サーバーでは、次のように設定できます。

var fs = require('fs'); var https = require('https'); var options = { key: fs.readFileSync('server-key.pem'), cert: fs.readFileSync('server-cert.pem'), ca: fs.readFileSync('apig-cert.pem'), requestCert: true, rejectUnauthorized: true }; https.createServer(options, function (req, res) { res.writeHead(200); res.end("hello world\n"); }).listen(443);

node-express アプリの場合、client-certificate-auth モジュールを使用して、PEM エンコードされた証明書を使用するクライアントのリクエストを認証できます。

その他の HTTPS サーバーについては、サーバーのドキュメントを参照してください。

失効したクライアント証明書の更新

API Gateway によって生成されたクライアント証明書は 365 日間有効です。API のダウンタイムを避けるため、API ステージのクライアント証明書が失効する前に、証明書を更新する必要があります。証明書の有効期限は、API Gateway REST API の clientCertificate:by-id または get-client-certificate の AWS CLI コマンドを呼び出して、返される expirationDate プロパティを調べることで確認できます。

クライアント証明書を更新するには、次のステップに従います。

  1. API Gateway REST API の clientcertificate:generate または generate-client-certificate の AWS CLI コマンドを呼び出して、新しいクライアント証明書を生成します。このチュートリアルでは、新しいクライアント証明書 ID を ndiqef とします。

  2. バックエンドサーバーを更新して新しいクライアント証明書を含めます。既存のクライアント証明書はまだ削除しないでください。

    更新を完了するためにサーバーの再起動が必要になる場合があります。更新中にサーバーを再起動する必要があるかどうかは、サーバーのドキュメントを参照してください。

  3. API Gateway REST API の stage:update を呼び出し、新しいクライアント証明書 ID (ndiqef) を使用して新しいクライアント証明書を使用するように API ステージを更新します。

    PATCH /restapis/{restapi-id}/stages/stage1 HTTP/1.1 Content-Type: application/json Host: apigateway.us-east-1.amazonaws.com X-Amz-Date: 20170603T200400Z Authorization: AWS4-HMAC-SHA256 Credential=... { "patchOperations" : [ { "op" : "replace", "path" : "/clientCertificateId", "value" : "ndiqef" } ] }

    または、update-stage の CLI コマンドを呼び出します。

  4. バックエンドサーバーを更新して古い証明書を削除します。

  5. 古い証明書の clientCertificateId (a1b2c3) を指定して API Gateway REST API の clientcertificate:delete を呼び出し、古い証明書を API Gateway から削除します。

    DELETE /clientcertificates/a1b2c3

    または、delete-client-certificate の CLI コマンドを呼び出します。

    aws apigateway delete-client-certificate --client-certificate-id a1b2c3

以前にデプロイされた API のコンソールでクライアント証明書を更新するには、以下のようにします。

  1. メインナビゲーションペインで、[クライアント証明書] を選択します。

  2. [クライアント証明書] ペインから、[クライアント証明書の生成] を選択します。

  3. クライアント証明書を使用する API を開きます。

  4. 選択された API で [ステージ] を選択し、ステージを選択します。

  5. [ステージエディタ] パネルで、[クライアント証明書] セクションの新しい証明書を選択します。

  6. [変更の保存] を選択して設定を保存します。

    変更を有効にするには、API を再デプロイする必要があります。