説明
Amazon MSK は保存データを常に暗号化します。作成時に KMS キーを指定しなければ AWS マネージドキーを使用します。既定ではクライアントとブローカー間の通信は TLS のみを許可し、ブローカー間の通信も暗号化します。EncryptionInfo の省略だけで、データが平文で保存・送信されるとは判断できません。
ただし、クライアント接続で PLAINTEXT や TLS_PLAINTEXT を許可したり、InCluster を無効にしたりすると、平文通信が可能になります。TLS の暗号化とは別に、クライアント認証、トピックの権限、ネットワークからのアクセスも制限してください。
想定される影響
平文通信の経路にアクセスできる攻撃者に、メッセージや機密情報を盗み見られたり改ざんされたりするおそれがあります。キーの無効化や必要な権限の削除は、保存データへのアクセスやサービスの運用を妨げる可能性があります。
対処方法
- クライアントの TLS 接続を準備し、
ClientBroker: TLSとInCluster: trueを使用してください。正当なプロデューサーとコンシューマーの接続と権限を確認します。 - 組織のキー管理要件に応じて既定のキーまたはカスタマーマネージドキーを選び、必要な権限を維持してください。
- 既存クラスターでは変更セットを確認してください。CloudFormation で
InClusterを変更すると置き換えが必要になるため、データの移行とクライアントの切り替えを計画します。
例
作成時の既定値と明示的な設定を比較します。サポートされている Kafka バージョン、異なる三つのアベイラビリティーゾーンのサブネット、適切なセキュリティグループを指定してください。クライアントの認証と権限は別途設定が必要です。
既定の暗号化設定
yaml
Parameters:
KafkaVersion:
Type: String
BrokerSubnets:
Type: List<AWS::EC2::Subnet::Id>
BrokerSecurityGroups:
Type: List<AWS::EC2::SecurityGroup::Id>
Resources:
TestCluster:
Type: AWS::MSK::Cluster
Properties:
ClusterName: ClusterWithAllProperties
KafkaVersion: !Ref KafkaVersion
NumberOfBrokerNodes: 3
BrokerNodeGroupInfo:
InstanceType: kafka.m5.large
ClientSubnets: !Ref BrokerSubnets
SecurityGroups: !Ref BrokerSecurityGroups
既定の保存時の暗号化と TLS 設定を使用します。この設定だけで平文通信が許可されているとは判断できません。
暗号化設定とキーの指定
yaml
Parameters:
KafkaVersion:
Type: String
BrokerSubnets:
Type: List<AWS::EC2::Subnet::Id>
BrokerSecurityGroups:
Type: List<AWS::EC2::SecurityGroup::Id>
DataKeyArn:
Type: String
Resources:
TestCluster:
Type: AWS::MSK::Cluster
Properties:
ClusterName: ClusterWithAllProperties
KafkaVersion: !Ref KafkaVersion
NumberOfBrokerNodes: 3
EncryptionInfo:
EncryptionAtRest:
DataVolumeKMSKeyId: !Ref DataKeyArn
EncryptionInTransit:
ClientBroker: TLS
InCluster: true
BrokerNodeGroupInfo:
InstanceType: kafka.m5.large
ClientSubnets: !Ref BrokerSubnets
SecurityGroups: !Ref BrokerSecurityGroups
通信設定と実際の KMS キー ARN を指定します。キーの権限を確認し、既存クラスターに適用する場合は置き換えの有無と切り替え手順を検討してください。