説明
MSK Provisioned クラスターの PublicAccess.Type: SERVICE_PROVIDED_EIPS は、ブローカーへの公開アクセスを有効にします。公開接続には、対応するクラスターバージョン、パブリックサブネットと経路、セキュリティグループ、認証、暗号化が必要です。公開アクセスだけで、認証なしのメッセージ読み書きを許可するわけではありません。
想定される影響
- 不要な送信元にブローカーポートを許可すると、外部からの接続試行や攻撃にさらされる可能性があります。
- 過剰な権限や認証の不備が重なると、イベントデータの漏えい・変更や処理の中断につながる可能性があります。
対処方法
- 公開接続が不要なら
PublicAccess.Type: DISABLEDに変更してください。先にクライアントのプライベート経路と適切なブートストラップアドレスを用意してください。 - 公開接続が必要なら、セキュリティグループを承認済み送信元とポートに限定してください。対応する認証方式、権限、クライアントとブローカー間およびブローカー間の暗号化を確認してください。
- 新規クラスターの作成時には公開アクセスを有効にできません。既存クラスターの接続設定を更新し、処理完了後に必要なクライアント接続とメッセージ処理を確認してください。
例
既存 MSK Provisioned クラスターの公開設定を比較します。公開アクセスが有効な最初の例は、新規作成用ではありません。名前や他のプロパティを実際の既存リソースに合わせてください。対応する Kafka バージョンとブローカータイプ、同じ VPC の三つのアベイラビリティーゾーンにあるサブネット、セキュリティグループを指定し、対象リージョンがこの構成に対応するか確認してください。公開接続にはインターネットゲートウェイへの経路が必要で、クライアントの IAM 権限は別途付与する必要があります。
変更前
yaml
Parameters:
KafkaVersion:
Type: String
BrokerInstanceType:
Type: String
ClientSubnetIds:
Type: List<AWS::EC2::Subnet::Id>
SecurityGroupIds:
Type: List<AWS::EC2::SecurityGroup::Id>
Resources:
TestCluster:
Type: AWS::MSK::Cluster
Properties:
ClusterName: ClusterWithRequiredProperties
KafkaVersion: !Ref KafkaVersion
NumberOfBrokerNodes: 3
ClientAuthentication:
Sasl:
Iam:
Enabled: true
Unauthenticated:
Enabled: false
EncryptionInfo:
EncryptionInTransit:
ClientBroker: TLS
InCluster: true
BrokerNodeGroupInfo:
InstanceType: !Ref BrokerInstanceType
ClientSubnets: !Ref ClientSubnetIds
SecurityGroups: !Ref SecurityGroupIds
ConnectivityInfo:
PublicAccess:
Type: SERVICE_PROVIDED_EIPS
IAM 認証と TLS を使用し、ブローカーの公開アクセスを有効にする構成です。ネットワークの送信元制限と実際のクライアント権限も確認してください。
変更後
yaml
Parameters:
KafkaVersion:
Type: String
BrokerInstanceType:
Type: String
ClientSubnetIds:
Type: List<AWS::EC2::Subnet::Id>
SecurityGroupIds:
Type: List<AWS::EC2::SecurityGroup::Id>
Resources:
TestCluster:
Type: AWS::MSK::Cluster
Properties:
ClusterName: ClusterWithRequiredProperties
KafkaVersion: !Ref KafkaVersion
NumberOfBrokerNodes: 3
ClientAuthentication:
Sasl:
Iam:
Enabled: true
Unauthenticated:
Enabled: false
EncryptionInfo:
EncryptionInTransit:
ClientBroker: TLS
InCluster: true
BrokerNodeGroupInfo:
InstanceType: !Ref BrokerInstanceType
ClientSubnets: !Ref ClientSubnetIds
SecurityGroups: !Ref SecurityGroupIds
ConnectivityInfo:
PublicAccess:
Type: DISABLED
公開アクセスだけを無効にします。プライベート経路と IAM 権限は引き続き必要です。クライアント設定も確認してください。