MSK 클러스터 암호화 설정 점검

MSK의 기본 저장 암호화를 확인하고 실제 클라이언트·브로커 통신에 TLS를 요구하세요.

설명

Kafka 스트림은 서비스 간 메시지와 이벤트를 운반하므로 저장 데이터뿐 아니라 브로커 간 통신과 클라이언트 연결도 보호해야 합니다. Amazon MSK는 저장 데이터를 항상 암호화하며, 키를 지정하지 않으면 기본 AWS 관리형 KMS 키를 사용합니다. 기본적으로 클라이언트 연결은 TLS만 허용하고 브로커 간 통신도 암호화합니다.

encryption_info를 생략했다고 평문 저장이나 전송을 의미하지는 않습니다. 하지만 PLAINTEXT 또는 TLS_PLAINTEXT를 허용하거나 in_cluster를 끄면 평문 통신이 가능해집니다. TLS와 별도로 클라이언트 인증을 구성하고 토픽 권한과 네트워크 접근도 제한해야 합니다.

잠재적 영향

평문 통신 경로에 접근할 수 있는 공격자는 메시지나 민감정보를 엿보거나 변경할 수 있습니다. KMS 키를 비활성화하거나 필요한 권한을 제거하면 데이터 접근과 서비스 운영에 장애가 생길 수 있습니다.

해결 방법

  • 클라이언트의 TLS 연결을 준비하고 client_broker = "TLS"와 in_cluster = true를 명시하세요. 정상 생산자·소비자의 연결과 권한을 확인하세요.
  • 조직의 키 관리 요구사항에 따라 기본 키 또는 고객 관리형 키를 선택하고 필요한 권한을 유지하세요.
  • 기존 클러스터는 Terraform 계획에서 지원되는 변경과 교체 여부를 확인하세요. 교체가 필요하면 데이터를 보존하면서 클라이언트와 처리 작업의 전환을 준비하세요.

예시

암호화 설정을 비교하는 발췌입니다. 지원되는 Kafka 버전과 필요한 브로커·서브넷·보안 그룹 설정은 별도로 제공하세요. 두 번째 발췌도 나머지 클러스터 설정과 유효한 KMS 키가 필요합니다.

변경 전

hcl
resource "aws_msk_cluster" "msk_cluster" {
  cluster_name           = "example"
  kafka_version          = var.kafka_version
  number_of_broker_nodes = 3

  encryption_info {
    encryption_in_transit {
      client_broker = "PLAINTEXT"
      in_cluster    = false
    }
  }
}

클라이언트 연결에 평문을 사용하고 브로커 간 암호화도 끕니다. 저장 데이터 자체는 MSK의 기본 암호화로 보호됩니다.

변경 후

hcl
resource "aws_msk_cluster" "msk_cluster" {
  encryption_info {
    encryption_at_rest_kms_key_arn = aws_kms_key.kms.arn

    encryption_in_transit {
      client_broker = "TLS"
      in_cluster    = true
    }
  }
}

클라이언트와 브로커 간 통신에 암호화를 사용하고 저장 데이터의 키를 명시합니다. 이 설정이 인증과 권한 검토를 대신하지는 않습니다.

참조