외부에서 접근 가능한 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 권한은 여전히 필요하며 클라이언트 설정도 확인해야 합니다.

참조