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

Amazon MQ の公開アクセスの必要性を確認し、内部専用ブローカーにはプライベート経路と制限したセキュリティグループを使用してください。

説明

Amazon MQ の PubliclyAccessible: true は、ブローカーが存在する VPC の外から接続できる公開アクセスを有効にします。実際の接続にはセキュリティグループやネットワーク設定も関係します。公開アクセスを有効にしても、認証やメッセージの権限が不要になるわけではありません。

内部システム間のメッセージングだけが必要なら、承認済みのプライベート接続を使用してください。

想定される影響

  • 到達可能なブローカーが、不要なログインや脆弱性を悪用する試行の対象になる可能性があります。
  • 認証・認可の不備が重なると、メッセージの漏えい、変更、サービス中断につながる可能性があります。

対処方法

  • 内部専用ブローカーには PubliclyAccessible: false を指定し、クライアントのプライベート経路と必要なセキュリティグループルールを用意してください。
  • CloudFormation でこのプロパティを変更すると、ブローカーの置き換えが必要です。新しい名前、メッセージ処理の継続、クライアント接続の切り替え、停止時間を計画してください。
  • 公開アクセスが必要な場合も、送信元とサービスポートを最小限にし、認証・メッセージ権限・TLS を確認してください。切り替え後に必要な接続とメッセージ操作をテストしてください。

例

新しい単一インスタンスの ActiveMQ ブローカーの構成案です。対応するインスタンスタイプ、同じ VPC 内のサブネット・セキュリティグループ、ユーザー名を指定してください。Secrets Manager の password キーに有効なブローカーパスワードを保存し、デプロイ主体に読み取り権限を付与してください。エンジンバージョンを省略するとサービスの既定値を使用します。既存ブローカーを無停止で更新できることを保証する例ではありません。

変更前

yaml
Parameters:
  BrokerName:
    Type: String
  HostInstanceType:
    Type: String
  SubnetId:
    Type: AWS::EC2::Subnet::Id
  SecurityGroupId:
    Type: AWS::EC2::SecurityGroup::Id
  BrokerUsername:
    Type: String
  BrokerPasswordSecretArn:
    Type: String
Resources:
  BasicBroker:
    Type: AWS::AmazonMQ::Broker
    Properties:
      BrokerName: !Ref BrokerName
      DeploymentMode: SINGLE_INSTANCE
      EngineType: ACTIVEMQ
      AutoMinorVersionUpgrade: true
      HostInstanceType: !Ref HostInstanceType
      SubnetIds:
        - !Ref SubnetId
      SecurityGroups:
        - !Ref SecurityGroupId
      Users:
        - Username: !Ref BrokerUsername
          Password: !Sub '{{resolve:secretsmanager:${BrokerPasswordSecretArn}:SecretString:password}}'
      PubliclyAccessible: true

公開アクセスを有効にします。実際に許可される接続は、指定したネットワークとセキュリティグループも確認してください。

変更後

yaml
Parameters:
  BrokerName:
    Type: String
  HostInstanceType:
    Type: String
  SubnetId:
    Type: AWS::EC2::Subnet::Id
  SecurityGroupId:
    Type: AWS::EC2::SecurityGroup::Id
  BrokerUsername:
    Type: String
  BrokerPasswordSecretArn:
    Type: String
Resources:
  BasicBroker:
    Type: AWS::AmazonMQ::Broker
    Properties:
      BrokerName: !Ref BrokerName
      DeploymentMode: SINGLE_INSTANCE
      EngineType: ACTIVEMQ
      AutoMinorVersionUpgrade: true
      HostInstanceType: !Ref HostInstanceType
      SubnetIds:
        - !Ref SubnetId
      SecurityGroups:
        - !Ref SecurityGroupId
      Users:
        - Username: !Ref BrokerUsername
          Password: !Sub '{{resolve:secretsmanager:${BrokerPasswordSecretArn}:SecretString:password}}'
      PubliclyAccessible: false

公開アクセスを無効にします。クライアントが新しいブローカーへプライベート経路で接続し、必要なメッセージ操作を実行できることを確認してください。

参考資料