CloudFront 接続Connection Function と KVS を使用した取り消し - Amazon CloudFront

CloudFront 接続Connection Function と KVS を使用した取り消し

CloudFront Connection Functions と KeyValueStore を組み合わせて、相互 TLS 認証に証明書失効チェックを実装できます。このアプローチは、CloudFront の組み込み証明書検証を補完するスケーラブルでリアルタイムの証明書失効メカニズムを提供します。

Connection Functions は、CloudFront エッジロケーションでの TLS 接続の確立中に実行される JavaScript 関数で、mTLS 認証用のカスタム証明書検証ロジックを実装できます。Connection Functions の詳細については、「CloudFront Connection Function を関連付ける」を参照してください。

Connection Functions での証明書失効の仕組み

CloudFront の標準証明書検証は、証明書チェーン、署名、有効期限を検証しますが、組み込みの証明書失効チェックは含みません。Connection Functions を使用すると、TLS ハンドシェイク中にカスタム失効チェックを実装できます。

証明書の失効プロセスは次のように機能します。

  1. 失効した証明書のシリアル番号を CloudFront KeyValueStore に保存します。

  2. クライアントが証明書を提示すると、Connection Function が呼び出されます。

  3. 関数は、証明書のシリアル番号と KeyValueStore を照合します。

  4. シリアル番号がストアで見つかった場合、証明書は失効しています。

  5. 関数は、失効した証明書の接続を拒否します。

このアプローチは、CloudFront のグローバルエッジネットワーク全体でほぼリアルタイムの失効チェックを提供します。

失効した証明書の KeyValueStore を設定する

まず、失効した証明書のシリアル番号を保存する KeyValueStore を作成します。

KeyValueStore を作成するには (コンソール)

  1. AWS マネジメントコンソールにサインインし、https://console.aws.amazon.com/cloudfront/v4/home で CloudFront コンソールを開きます。

  2. ナビゲーションペインで、[キーバリューストア] を選択します。

  3. [キーバリューストアを作成] を選択します。

  4. キーバリューストアを作成の名前を入力します (revoked-certificates など)。

  5. (オプション) 説明を入力します。

  6. [キーバリューストアを作成] を選択します。

KeyValueStore を作成するには (AWS CLI)

次の例は、KeyValueStore を作成する方法を示します。

aws cloudfront create-key-value-store \ --name "revoked-certificates" \ --comment "Store for revoked certificate serial numbers"

失効した証明書のシリアル番号をインポートする

KeyValueStore を作成した後、失効した証明書のシリアル番号をインポートする必要があります。

失効データを準備する

失効した証明書のシリアル番号を使用して JSON ファイルを作成します。

{ "data": [ { "key": "ABC123DEF456", "value": "" }, { "key": "789XYZ012GHI", "value": "" } ] }

S3 からのインポート

  1. S3 バケットに JSON ファイルをアップロードする

  2. ファイルを KeyValueStore にインポートします。

    aws cloudfront create-key-value-store \ --name "revoked-certificates" \ --import-source '{ "SourceType": "S3", "SourceARN": "arn:aws:s3:::amzn-s3-demo-bucket1/revoked-serials.json" }'

失効チェックの Connection Function を作成する

証明書のシリアル番号と KeyValueStore を照合する Connection Function を作成します。

Connection Function のコード例

次の例は、証明書失効チェックを実行する Connection Function を示します。

import cf from 'cloudfront'; async function connectionHandler(connection) { const kvsHandle = cf.kvs(); // Get client certificate serial number const clientSerialNumber = connection.clientCertificate.certificates.leaf.serialNumber; // Check if the serial number exists in the KeyValueStore const isRevoked = await kvsHandle.exists(clientSerialNumber.replaceAll(':', '')); if (isRevoked) { console.log(`Certificate ${clientSerialNumber} is revoked. Denying connection.`); connection.logCustomData(`REVOKED:${clientSerialNumber}`); connection.deny(); } else { console.log(`Certificate ${clientSerialNumber} is valid. Allowing connection.`); connection.allow(); } }

Connection Function を作成するには (AWS CLI)

次の例は、Connection Function と KeyValueStore の関連付けを作成方法を示します。

aws cloudfront create-connection-function \ --name "revocation-checker" \ --connection-function-config '{ "Comment": "Certificate revocation checking function", "Runtime": "cloudfront-js-2.0", "KeyValueStoreAssociations": { "Quantity": 1, "Items": [ { "KeyValueStoreARN": "arn:aws:cloudfront::123456789012:key-value-store/revoked-certificates" } ] } }' \ --connection-function-code fileb://revocation-checker.js

関数をディストリビューションに関連付ける

Connection Function を作成して公開した後、「CloudFront Connection Function を関連付ける」セクションの説明に従って、mTLS 対応の CloudFront ディストリビューションに関連付けます。