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