公開アクセスが有効な Amazon MSK ブローカー

Amazon MSK ブローカーへの公開接続の必要性を確認し、内部専用クライアントにはプライベート接続を使用してください。

説明

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 権限は引き続き必要です。クライアント設定も確認してください。

参考資料