SQS メッセージの保存時暗号化設定を確認

SQS の既定の暗号化と明示的な無効化を区別し、メッセージ本文を保護します。

説明

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 を使います。メッセージ属性など、すべてのメタデータを暗号化する設定ではありません。

参考資料