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