MSA 트레이닝 센터

Service Mesh 를 통해 보안 접근 제어 달성

Service Mesh가 없으면 악의적인 사람이 Service 간에 자유롭게 이동할 수 있으므로 Kubernetes 앱이 데이터 침해에 더 취약해집니다. Service Mesh를 사용하면 End-to-End 암호화를 통한 Access Control를 통해 제로 트러스트 환경을 구성할 수 있으므로 보다 민감한 서비스를 보호할 수 있습니다. 

이 트레이닝 영상에서 NGINX 엔지니어인 Aidan Carson은 NGINX Service Mesh를 사용하여 앱의 특정 구성 요소에 대한 Traffic Access 정책을 정의하고 Service가 데이터를 교환하는 방법과 위치를 세밀하게 네트워크 및 앱 수준에서 제어(Control)하여 악성 공격으로부터 효과적으로 보호합니다.

Service Mesh 를 통해 보안 접근 제어 달성

Service Mesh는 Kubernetes와 같은 클라우드 네이티브 환경에서 서비스 간 네트워크 트래픽을 제어하고, 보안 및 정책 관리를 단순화하는 강력한 솔루션입니다. 이 가이드는 Service Mesh를 활용하여 특정 애플리케이션 구성 요소에 대한 접근 제어를 구현하고, 세분화된 Traffic Access 정책을 설정하여 서비스 간 데이터를 안전하게 교환하는 방법을 설명합니다.

Service Mesh 란?

Service Mesh의 주요 기능

  • 트래픽 라우팅: 요청을 특정 서비스 또는 구성 요소로 라우팅.
  • 보안: mTLS(Mutual TLS)를 사용한 트래픽 암호화 및 인증.
  • 정책 제어: 네트워크 및 애플리케이션 수준에서 세밀한 접근 제어.
  • 관찰성: 서비스 간 트래픽과 성능 데이터를 실시간으로 모니터링.

Service Mesh 를 통한 보안 접근 제어 구현

Service Mesh 설치

이 가이드에서는 Istio를 예로 들어 설명합니다.

Istio 설치

다음 명령으로 Istio를 설치합니다. demo 프로파일은 mTLS와 기본적인 기능이 활성화된 설정입니다.

				
					curl -L https://istio.io/downloadIstio | sh -
cd istio-<version>
export PATH=$PWD/bin:$PATH
istioctl install --set profile=demo -y

				
			

설치 후, Istio가 정상적으로 작동하는지 확인합니다.

				
					kubectl get pods -n istio-system
				
			

mTLS 활성화

mTLS를 통해 서비스 간 트래픽을 암호화하고, 상호 인증을 적용하여 무단 접근을 방지합니다.

PeerAuthentication 리소스를 사용한 mTLS 구성

Istio의 PeerAuthentication 리소스를 사용해 네임스페이스 내 모든 서비스에 mTLS를 강제합니다.

				
					apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: default
  namespace: default
spec:
  mtls:
    mode: STRICT

				
			

이 설정은 클러스터 내 모든 서비스 간 트래픽을 암호화하고, 인증되지 않은 요청을 차단합니다.

Traffic Access 정책 정의

Traffic Access 정책은 특정 서비스 간 통신을 허용하거나 차단하는 역할을 합니다.

AuthorizationPolicy 리소스를 사용한 접근 제어

Istio의 AuthorizationPolicy 리소스를 활용해 트래픽 접근 정책을 정의합니다.

예제 1: 특정 서비스에만 접근 허용

아래 정책은 frontend 서비스만 backend 서비스에 접근할 수 있도록 허용합니다.

				
					apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: allow-frontend-to-backend
  namespace: default
spec:
  selector:
    matchLabels:
      app: backend
  rules:
  - from:
    - source:
        principals: ["cluster.local/ns/default/sa/frontend"]

				
			
예제 2: 특정 IP 주소에서만 접근 허용

외부 트래픽이 특정 IP에서만 public-service에 접근할 수 있도록 제한합니다.

				
					apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: allow-specific-ip
  namespace: default
spec:
  selector:
    matchLabels:
      app: public-service
  rules:
  - from:
    - source:
        ipBlocks: ["192.168.1.0/24"]

				
			
예제 3: HTTP 메서드 기반 제한

특정 HTTP 메서드만 허용하려면 아래와 같이 설정합니다.

				
					apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: allow-post-method
  namespace: default
spec:
  selector:
    matchLabels:
      app: api-service
  rules:
  - to:
    - operation:
        methods: ["POST"]

				
			

네트워크 정책과 통합

Service Mesh는 Kubernetes 네트워크 정책과 함께 사용하여 더욱 강력한 접근 제어를 구현할 수 있습니다.

네트워크 정책 설정

NetworkPolicy를 사용하여 서비스 간 트래픽을 제한합니다. 아래 예제는 backend 서비스로 들어오는 트래픽을 frontend 서비스에서만 허용합니다.

				
					apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend

				
			

관찰성과 모니터링

Prometheus와 Grafana 통합

Istio는 기본적으로 Prometheus와 Grafana와 통합됩니다. Istio 대시보드를 사용해 서비스 간 트래픽과 보안 상태를 모니터링할 수 있습니다.

				
					istioctl dashboard grafana

				
			
Jaeger를 통한 트래픽 추적

분산 트랜잭션 추적을 위해 Jaeger를 활성화합니다.

				
					istioctl dashboard jaeger

				
			

Jaeger는 서비스 간 호출 데이터를 시각화하여 보안 및 성능 문제를 진단하는 데 유용합니다.

Best Practices

  1. mTLS 기본 활성화: 모든 서비스 간 트래픽에 대해 mTLS를 기본 설정으로 활성화하여 데이터 무결성을 유지하세요.
  2. 최소 권한 접근 원칙: 필요한 트래픽만 허용하고, 불필요한 접근은 차단하는 정책을 구성하세요.
  3. 주기적인 정책 검토: 트래픽 접근 정책과 보안 설정을 정기적으로 점검하여 새로운 위협에 대비하세요.
  4. 모니터링 및 경고 설정: Prometheus와 Grafana를 활용해 이상 트래픽을 조기에 감지하고 대응하세요.
  5. 네트워크 정책과 통합: Service Mesh와 Kubernetes 네트워크 정책을 결합하여 다층 방어를 구현하세요.

결론

Service Mesh를 통한 보안 접근 제어 구현

Service Mesh는 Kubernetes 환경에서 서비스 간 트래픽을 세밀하게 제어하고, 보안을 강화할 수 있는 강력한 도구입니다. mTLS와 AuthorizationPolicy를 통해 세분화된 접근 제어를 구현하고, 네트워크 정책과 통합하여 다층 방어를 구축하세요. 이와 함께 모니터링 도구를 활용해 실시간으로 보안 상태를 확인하고 최적의 보안 환경을 유지하세요. Service Mesh를 활용하면 애플리케이션의 신뢰성과 안정성을 크게 향상시킬 수 있습니다.

Istio Service Mesh 의 더욱 다양한 Best Practice에 대해 알아보려면 NGINX STORE 블로그의 Istio 카테고리를 참고하세요.