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