Inflearn brand logo image

인프런 커뮤니티 질문&답변

foureach2025님의 프로필 이미지
foureach2025

작성한 질문수

6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법

로컬 모니터링 구축에 대해 질문있습니다.

해결된 질문

작성

·

35

0

Actuator, 프로메테우스, Grafana를 통해 운영 서버 모니터링 대시보드를 구축하려고 합니다. (CloudWatch는 일정 용량 이후 비용이 부과되는 문제로 Prometheus를 선택했습니다.)

근데 운영 서버에서 Actuator와 프로메테우스 서버를 띄우면 외부에서도 Actuator 가 제공하는 메트릭 정보뿐만 아니라, 프로메테우스가 수집한 정보를 9090 포트 번호를 통해 접근 가능하다고 생각하였습니다.

처음에는 Actuator의 정보를 ADMIN 권한을 가진 관리자만 접근 가능하도록 설정하였지만, Prometheus 서버에서 접근이 불가능한 문제가 생겼습니다.

Prometheus와 Grafana를 통해 모니터링을 구축할 때, 데이터에 대한 보안을 강화할 수 있는 방법이 뭐가 있는지 궁금합니다.

답변 2

0

딩코딩코님의 프로필 이미지
딩코딩코
지식공유자

foureach님 좋은 질문 해주셔서 감사합니다!!

모니터링 보안은 정말 중요한 이슈입니다! 말씀해주신대로 운영 환경에서 메트릭 데이터가 외부에 노출되면 시스템 아키텍처나 성능 정보가 그대로 드러날 수 있을 것 같습니다

따라서 가장 효과적인 방법은 모니터링 컴포넌트들을 별도 네트워크로 분리하는 겁니다!

# docker-compose.yml
version: '3.8'
services:
  app:
    ports:
      - "8080:8080"
    networks:
      - app-network
      - monitoring-network

  prometheus:
    ports:
      - "127.0.0.1:9090:9090"  # 로컬에서만 접근
    networks:
      - monitoring-network

  grafana:
    ports:
      - "127.0.0.1:3000:3000"  # 로컬에서만 접근
    networks:
      - monitoring-network

networks:
  app-network:
    driver: bridge
  monitoring-network:
    driver: bridge
    internal: true  # 외부 인터넷 접근 차단

Nginx나 Spring Cloud Gateway로 모니터링 엔드포인트를 보호할 수도 있습니다.

# nginx.conf
server {
    listen 80;
    
    # 일반 API는 모든 접근 허용
    location /api/ {
        proxy_pass http://app:8080/api/;
    }
    
    # 모니터링 엔드포인트는 특정 IP만 허용
    location /actuator/ {
        allow 172.16.0.0/16;  # Docker 내부 네트워크
        allow 10.0.0.0/8;     # VPC 내부
        deny all;
        
        proxy_pass http://app:8080/actuator/;
    }
}

운영 환경이라면 VPN이나 Bastion Host를 통해서만 모니터링 대시보드에 접근하도록 구성해보시는 걸 추천드립니다!

이런 경험은 면접에서 "보안을 고려한 인프라 설계 능력"을 어필할 수 있는 좋은 소재가 될 거예요. 단순히 모니터링 툴을 사용했다가 아니라, 보안까지 고려한 설계를 했다는 점이 차별화 포인트가 될 것 같습니다 넘넘 훌륭한 질문 감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다.

foureach2025님, Actuator와 Prometheus, Grafana를 활용한 모니터링 구축 시 데이터 보안을 강화하기 위한 몇 가지 방법을 제안 드리겠습니다.

  1. 네트워크 접근 제어: 운영 서버와 Prometheus 서버 간의 통신을 네트워크 레벨에서 제어하여, 외부에서의 직접적인 접근을 차단할 수 있습니다. 이는 방화벽 설정을 활용하여 특정 IP나 네트워크 대역에서만 접근 가능하도록 설정하는 방법이 있습니다.

  2. TLS/SSL 인증: 통신 데이터의 암호화를 위해 TLS/SSL 인증서를 사용하여 모든 트래픽을 HTTPS로 보호하세요. 그렇게 함으로써 데이터가 전송되는 동안 도청되지 않도록 합니다.

  3. 인증 및 권한 관리: Prometheus와 Actuator의 엔드포인트에 대해 기본 인증(basic authentication)이나 OAuth와 같은 인증 방법을 사용하여 접근을 제한할 수 있습니다. Grafana 경우에도 사용자별로 대시보드와 데이터 소스에 대한 접근 권한을 세부적으로 관리할 수 있습니다.

  4. 보안 토큰: Actuator의 경우 특정 엔드포인트를 비활성화하거나, 보안 토큰을 활용하여 인증된 요청만 허용할 수 있습니다.

  5. IP 화이트리스트 설정: Prometheus 서버의 설정 파일에서 ‘static_configs’ 섹션 내 IP 화이트리스트를 설정해 특정 서버나 네트워크에서만 메트릭을 수집할 수 있도록 하세요.

위의 방법들을 통해 Prometheus와 관련 구성 요소의 접근성을 안전하게 유지하면서 효율적인 모니터링을 할 수 있을 것입니다.

Prometheus 관련 더 자세한 설정 방법은 Spring Boot 공식 문서를 참고하시길 바랍니다.

도움이 되셨길 바랍니다!

foureach2025님의 프로필 이미지
foureach2025

작성한 질문수

질문하기