외부에서 접근 가능한 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

공개 접근을 비활성화합니다. 클라이언트가 새 브로커에 사설 경로로 연결하고 필요한 메시지 작업을 수행할 수 있는지 확인하세요.

참조