

# CloudFront 接続Connection Function と KVS を使用した取り消し
<a name="revocation-connection-function-kvs"></a>

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

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

## Connection Functions での証明書失効の仕組み
<a name="how-revocation-works"></a>

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

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

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

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

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

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

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

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

## 失効した証明書の KeyValueStore を設定する
<a name="setup-kvs-revoked-certs"></a>

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

### KeyValueStore を作成するには (コンソール)
<a name="create-kvs-console"></a>

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

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

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

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

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

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

### KeyValueStore を作成するには (AWS CLI)
<a name="create-kvs-cli"></a>

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

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

## 失効した証明書のシリアル番号をインポートする
<a name="import-revoked-serials"></a>

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

### 失効データを準備する
<a name="prepare-revocation-data"></a>

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

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

### S3 からのインポート
<a name="import-from-s3"></a>

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

1. ファイルを 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 を作成する
<a name="create-revocation-connection-function"></a>

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

### Connection Function のコード例
<a name="revocation-function-example"></a>

次の例は、証明書失効チェックを実行する 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)
<a name="create-revocation-function-cli"></a>

次の例は、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
```

## 関数をディストリビューションに関連付ける
<a name="associate-revocation-function"></a>

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