MSK クラスターの暗号化設定の確認

MSK の既定の保存時暗号化を確認し、実際のクライアント・ブローカー間の通信に TLS を要求してください。

説明

Kafka ストリームはサービス間のメッセージやイベントを運ぶため、保存データだけでなく、ブローカー間の通信とクライアント接続も保護する必要があります。Amazon MSK は保存データを常に暗号化し、キーを指定しなければ既定の AWS マネージド KMS キーを使用します。既定ではクライアント接続に TLS を要求し、ブローカー間の通信も暗号化します。

encryption_info の省略は、平文での保存や転送を意味しません。ただし、PLAINTEXT や TLS_PLAINTEXT を許可したり、in_cluster を無効にしたりすると、平文での通信が可能になります。TLS とは別にクライアント認証を設定し、トピックの権限とネットワークアクセスも制限する必要があります。

想定される影響

平文の通信経路にアクセスできる攻撃者は、メッセージや機密情報を盗聴、改ざんする可能性があります。KMS キーの無効化や必要な権限の取り消しによって、データへのアクセスやサービスの運用が妨げられるおそれもあります。

対処方法

  • クライアントの TLS 接続を準備し、client_broker = "TLS" と in_cluster = true を明示してください。正規のプロデューサーとコンシューマーの接続と権限を確認してください。
  • 組織のキー管理要件に応じて、既定のキーまたはカスタマーマネージドキーを選び、必要な権限を維持してください。
  • 既存のクラスターでは、Terraform の計画でサポートされる変更と置き換えの有無を確認してください。置き換えが必要な場合は、データを保持し、クライアントと処理ワークロードの切り替えを準備してください。

例

暗号化設定を比較する抜粋です。サポートされる Kafka バージョンと、必要なブローカー、サブネット、セキュリティグループの設定は別途用意してください。二つ目の抜粋にも、残りのクラスター設定と有効な KMS キーが必要です。

変更前

hcl
resource "aws_msk_cluster" "msk_cluster" {
  cluster_name           = "example"
  kafka_version          = var.kafka_version
  number_of_broker_nodes = 3

  encryption_info {
    encryption_in_transit {
      client_broker = "PLAINTEXT"
      in_cluster    = false
    }
  }
}

クライアント接続に平文を使用し、ブローカー間の暗号化も無効にします。保存データ自体は MSK の既定の暗号化で保護されます。

変更後

hcl
resource "aws_msk_cluster" "msk_cluster" {
  encryption_info {
    encryption_at_rest_kms_key_arn = aws_kms_key.kms.arn

    encryption_in_transit {
      client_broker = "TLS"
      in_cluster    = true
    }
  }
}

クライアント接続とブローカー間通信を暗号化し、保存データのキーを明示しています。この設定は、認証や権限の確認の代わりにはなりません。

参考資料