Data Engineering/s3 minio

📘 [MinIO & Cilium 기반 오브젝트 스토리지 연동 시리즈 #14] MinIO 삭제 요청 차단/제한 정책 구성 실습

ygtoken 2025. 3. 26. 20:30
728x90

목표: Cilium의 L7 네트워크 정책을 활용하여,
HTTP DELETE 요청을 차단하거나 특정 파드에서만 허용하는 보안 정책을 구성하고 실습합니다.


🔎 이번 글에서 수행할 작업 요약

  1. MinIO 객체 삭제 요청의 위험성과 차단 필요성 이해
  2. Cilium L7 HTTP 정책을 활용한 DELETE 차단 구성
  3. 허용된 파드와 차단된 파드 비교 테스트
  4. Hubble을 통해 정책 효과 시각화

⚠️ 1단계: MinIO 객체 삭제 요청의 위험성

이 단계의 목적: API 요청 중 DELETE 메서드가 미치는 영향과
실무 환경에서 어떻게 잘못 사용될 수 있는지를 이해합니다.

  • DELETE 요청은 버킷 또는 객체를 영구 삭제함
  • 버전 관리가 비활성화된 버킷은 복구 불가능
  • 잘못된 설정 시 누구나 curl로 DELETE 가능

☑️ 이 때문에 네트워크 레벨에서 DELETE 요청 차단은 매우 효과적인 보안 전략입니다.


🛡️ 2단계: Cilium L7 정책으로 DELETE 차단 구성

이 단계의 목적: etl 네임스페이스의 모든 파드에서 MinIO로 향하는 DELETE 요청을 차단하는
L7 기반 네트워크 정책을 정의합니다.

# deny-delete-policy.yaml
apiVersion: "cilium.io/v2"                                # Cilium 정책 API 버전
kind: CiliumNetworkPolicy                                 # 정책 리소스 종류
metadata:
  name: deny-delete-method                                # 정책 이름
  namespace: etl                                          # 정책 적용 대상 네임스페이스
spec:
  endpointSelector: {}                                    # etl 네임스페이스의 모든 파드
  egress:
  - toEndpoints:
    - matchLabels:
        app.kubernetes.io/name: minio                     # 목적지가 MinIO인 경우
    toPorts:
    - ports:
      - port: "9000"                                      # MinIO 포트
        protocol: TCP
      rules:
        http:
        - method: "DELETE"                                # 🔒 DELETE 메서드만 차단
          deny: true                                      # ✅ deny 플래그를 true로 설정
kubectl apply -f deny-delete-policy.yaml

✅ Cilium에서는 deny: true 설정을 통해 특정 요청만 선택적으로 차단할 수 있습니다.


🧪 3단계: DELETE 요청 허용/차단 비교 테스트

이 단계의 목적: DELETE 요청이 정책에 의해 차단되고,
다른 HTTP 메서드는 여전히 허용되는지를 확인합니다.

# 테스트 파드 생성 및 접근
kubectl exec -it test-client -n etl -- sh
# ❌ DELETE 요청 시도 (정책에 의해 차단 예상)
curl -X DELETE http://minio.minio.svc.cluster.local:9000/my-bucket/test.txt

# ✅ GET 요청 (허용되어야 함)
curl -I http://minio.minio.svc.cluster.local:9000

☑️ DELETE 요청은 DROP 처리되고, GET/PUT 요청은 통과된다면 정책이 정상 작동 중입니다.


🔍 4단계: Hubble UI/CLI로 흐름 확인

이 단계의 목적: 시각적 도구(Hubble)를 통해 DROP 처리된 DELETE 요청을 확인하고
정책 효과를 검증합니다.

# CLI로 삭제 요청 DROP 로그 확인
hubble observe --namespace etl --verdict DROP --protocol http
# UI 접속 후 Flow 탭에서 DELETE 요청 흐름 확인
http://<HUBBLE-UI-EXTERNAL-IP>

Hubble에서는 Source, Destination, Method, Verdict(DROP) 정보를 한눈에 확인할 수 있습니다.


📎 요약 및 핵심 정리

  • MinIO 객체 삭제는 되돌릴 수 없는 작업이므로, 네트워크 정책으로 DELETE 요청을 차단하는 것이 매우 효과적임
  • Cilium L7 정책의 deny: true 옵션을 활용하면 특정 HTTP 메서드만 선택적으로 제어 가능
  • 정책 적용 후 GET, PUT은 허용되면서 DELETE만 DROP되는 흐름을 통해 정책의 세밀함을 검증함
  • 보안 강화를 위해 **"쓰기/읽기/삭제 권한을 메서드 수준으로 분리"**하는 전략을 적용할 수 있음
728x90