説明
SQS のサーバー側暗号化は、キューに保存するメッセージ本文を保護します。無効にすると、それ以降に届くメッセージはこの保護なしで保存されます。現在、新しいキューで KmsMasterKeyId と SqsManagedSseEnabled の両方を省略すると SSE-SQS が既定で有効になるため、省略だけで非暗号化と判断してはいけません。
想定される影響
メッセージ本文が暗号化されていないと、保存データの露出時に機密内容を保護しにくくなります。サーバー側暗号化も、許可された取得や過剰なキュー権限を防ぐものではありません。
対処方法
SQS に管理させる場合は SqsManagedSseEnabled: true を設定してください。KMS キーの管理が必要なら KmsMasterKeyId を指定し、送受信する主体に必要なキー権限を付与してください。変更は既存のメッセージを遡って暗号化しないため、必要な旧キーの権限を維持して送受信を確認してください。TLS とキューのアクセスポリシーも別途管理してください。
例
異なる二つのキューの抜粋です。QueueKeyId には利用可能な KMS キーを指定してください。
変更前
yaml
Resources:
MyQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: SampleQueue
MyQueue2:
Type: AWS::SQS::Queue
Properties:
QueueName: SampleQueue2
SqsManagedSseEnabled: false
MyQueue は現在の既定値である SSE-SQS を使います。MyQueue2 は管理型暗号化を明示的に無効にし、他の暗号化キーも指定していません。
変更後
yaml
Resources:
MyQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: SampleQueue
KmsMasterKeyId: !Ref QueueKeyId
MyQueue2:
Type: AWS::SQS::Queue
Properties:
QueueName: SampleQueue2
SqsManagedSseEnabled: true
MyQueue は指定した KMS キー、MyQueue2 は SSE-SQS を使います。メッセージ属性など、すべてのメタデータを暗号化する設定ではありません。