API Gateway キャッシュの暗号化が無効

API Gateway で機密性の高い応答をキャッシュする場合は暗号化し、キャッシュキーとアクセス権限も確認してください。

説明

API Gateway REST API のキャッシュは、繰り返しのリクエストに応答するためデータを保存します。機密性の高い応答を保存する場合は暗号化が必要です。CloudFormation の StageDescription.CacheDataEncrypted: true はキャッシュ応答の暗号化を要求します。

実際にキャッシュが動作するには、キャッシュクラスターのプロビジョニングが必要です。ステージの既定値とメソッドごとの上書き設定が異なる場合があるため、利用するメソッドの設定を確認してください。

想定される影響

  • 機密性の高いキャッシュ応答が、必要な保存時の暗号化で保護されない可能性があります。
  • 暗号化だけでは不適切なキャッシュキーや過剰な API 権限は解消されません。ある利用者向けの応答が別の利用者に再利用されない構成が必要です。

対処方法

  • キャッシュが必要なメソッドで暗号化を有効にし、デプロイ済みのステージとメソッド別の設定を確認してください。
  • 機密性の高い応答をキャッシュする必要性を検討し、データに合わせてキャッシュキー、有効期間、API の認可を設定してください。
  • 変更後の応答とキャッシュ動作を検証してください。既存キャッシュの削除が必要な場合は、元のサービスへの一時的な負荷増加も考慮してください。

例

MyApi にはメソッドと統合が構成済みの REST API ID を指定してください。どちらの例もキャッシュクラスターを明示的に作成するため、キャッシュの料金が発生します。メソッド別の上書き設定とアクセス権限は別途管理してください。

キャッシュ暗号化を無効化

yaml
Parameters:
  MyApi:
    Type: String
Resources:
  Deployment:
    Type: AWS::ApiGateway::Deployment
    Properties:
      RestApiId: !Ref MyApi
      Description: My deployment
      StageName: DummyStage
      StageDescription:
        CacheClusterEnabled: true
        CacheClusterSize: "0.5"
        CachingEnabled: true
        CacheDataEncrypted: false

キャッシュを利用しますが、保存する応答の暗号化は無効です。

キャッシュ暗号化を有効化

yaml
Parameters:
  MyApi:
    Type: String
Resources:
  Deployment:
    Type: AWS::ApiGateway::Deployment
    Properties:
      RestApiId: !Ref MyApi
      Description: My deployment
      StageName: DummyStage
      StageDescription:
        CacheClusterEnabled: true
        CacheClusterSize: "0.5"
        CachingEnabled: true
        CacheDataEncrypted: true

同じキャッシュ構成で応答の暗号化を有効にします。利用者ごとのデータ分離と認可も引き続き必要です。

参考資料