暗号化されていない API Gateway キャッシュ

API Gateway のキャッシュを使用する場合は、キャッシュデータの暗号化を有効にしてください。

説明

API のレスポンスキャッシュには、リクエストの結果や関連データが保存されます。キャッシュを暗号化しない場合、保存されたレスポンスは保存時の暗号化で保護されません。ユーザー情報や内部向けレスポンスを扱う API では特に注意が必要です。

キャッシュを使う際は、性能だけでなく保存データの保護も設定してください。暗号化は、不適切なキャッシュキーやアクセス権限によって別のユーザーのレスポンスが返される問題を防ぐものではありません。

想定される影響

  • キャッシュストレージへの不正アクセスにより、レスポンス内の機密情報が漏えいするリスクが高まるおそれがあります。
  • 組織の API キャッシュの暗号化要件を満たせない場合があります。

対処方法

  • キャッシュを使用するメソッドでは cache_data_encrypted = true を明示してください。
  • 必要なメソッドだけをキャッシュし、機密情報の有無、キャッシュキー、権限を確認してください。
  • 反映後はステージのキャッシュとメソッドの暗号化設定を確認し、正常にレスポンスを処理できるか試してください。

例

別途定義した REST API とステージを参照する抜粋です。キャッシュの利用には、ステージのキャッシュクラスターも有効になっている必要があります。

変更前

hcl
resource "aws_api_gateway_method_settings" "cached_method" {
  rest_api_id = aws_api_gateway_rest_api.example.id
  stage_name  = aws_api_gateway_stage.example.stage_name
  method_path = "path1/GET"

  settings {
    metrics_enabled       = true
    logging_level         = "INFO"
    caching_enabled       = true
    cache_data_encrypted  = false
  }
}

メソッドのキャッシュは有効ですが、キャッシュデータの暗号化は無効です。

変更後

hcl
resource "aws_api_gateway_method_settings" "cached_method" {
  rest_api_id = aws_api_gateway_rest_api.example.id
  stage_name  = aws_api_gateway_stage.example.stage_name
  method_path = "path1/GET"

  settings {
    metrics_enabled       = true
    logging_level         = "INFO"
    caching_enabled       = true
    cache_data_encrypted  = true
  }
}

キャッシュを維持しながら暗号化を有効にします。レスポンスを共有してよい範囲と権限は、別途確認してください。

参考資料