Fall in IT.

Istio AuthorizationPolicy로 특정 도메인에 대한 IP 접근 제어 설정하기 본문

시스템구축

Istio AuthorizationPolicy로 특정 도메인에 대한 IP 접근 제어 설정하기

D.Y 2025. 5. 8. 15:58
반응형

이 글에서는 온프레미스 환경에서 클라우드의 Elasticsearch에 보안적으로 안전하게 접근하기 위해 Istio의 AuthorizationPolicy를 활용하여 특정 도메인만 특정 IP에서 접근 가능하도록 설정한 방법을 공유한다.

참고로, 필자가 다니는 회사에서는 클라우드와 온프레미스 환경을 둘다 사용하여 서비스를 운영하고 있다.


상황 요약

  • AI 추론 및 학습 서버는 온프레미스에 구축되어 있고,
  • 그 외의 서비스의 클라우드 인프라는 AWS EKS에서 운영되고 있다.
  • 각 서비스에서 발생하는 로그는 클라우드 Kubernetes에 설치형으로 운영 중인 Elasticsearch에 저장된다.
  • Elasticsearch는 보안상 외부에 노출되지 않고, VPC 내부에서만 접근 가능하도록 설정되어 있다.
  • 온프레미스에서 동작하는 서비스에서 발생하는 로그도 Elasticsearch에 기록하고 싶다.

접근 제어가 필요한 이유

가장 간단한 방법은 Elasticsearch의 엔드포인트를 외부에 노출시키는 것이다.

하지만, 이는 보안상 매우 위험한 방법이다.


대안으로 고려한 방법

  1. Elasticsearch 외부 노출
  2. → 간단하지만 보안상 부적합 ❌
  3. Site-to-Site VPN 구성→ 운영 비용 부담으로 보류
  4. → 보안은 뛰어나지만, 매월 $36 이상 요금 발생이 예상 됨
  5. Istio AuthorizationPolicy 사용 ✅→ 쿠버네티스 기반 서비스 구조와도 자연스럽게 통합
  6. → Istio Ingress Gateway에서 도메인 + IP 조합으로 접근을 제어

적용 구조

서비스 메시는 Istio로 구성되어 있으며, 트래픽 흐름은 다음과 같다.

외부 → Istio Ingress Gateway → Gateway → VirtualService → Elasticsearch Service

이 중 Istio Ingress Gateway 단에서 접근 제어 정책을 적용한다.


AuthorizationPolicy 설정

특정 도메인(elasticsearch.domain.com)에 대해서는 온프레미스 IP만 허용

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: allow-only-onprem-ip
  namespace: istio-system
spec:
  selector:
    matchLabels:
      app: istio-ingressgateway
  action: ALLOW
  rules:
    - from:
        - source:
            ipBlocks:
              - "221.111.4.12/32"  # 온프레미스 고정 IP (각자 변경 필요)
      when:
        - key: request.headers[:authority]
          values: ["elasticsearch.domain.com"]

그 외의 도메인들은 모두 허용 (기존 접근은 유지하기 위함)

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: allow-other-domains
  namespace: istio-system
spec:
  selector:
    matchLabels:
      app: istio-ingressgateway
  action: ALLOW
  rules:
    - when:
        - key: request.headers[:authority]
          notValues: ["elasticsearch.domain.com"]

정상 동작 확인

온프레미스와 외부 환경에서 각각 curl 명령어를 통해 접근 테스트를 진행한다.

$ curl -I <https://elasticsearch.domain.com>
  • 온프레미스 고정 IP에서는 200 OK
  • 기타 외부 IP에서는 403 Forbidden

정리

접근 주체 도메인 결과

온프레미스 (221.111.4.12) elasticsearch.domain.com ✅ 허용
기타 외부 IP elasticsearch.domain.com ❌ 차단
모든 IP 다른 도메인 (예: kibana.domain.com) ✅ 허용

결론

Istio의 AuthorizationPolicy는 별도의 VPN 비용 없이도 도메인 기반 + IP 제어를 손쉽게 구현할 수 있었다.

반응형
Comments