회사에서 istio 를 사용하다 보니, 특정 IP에 대해서만 접근할 수 있는 방법들이 필요했습니다.
여기서 ISTIO authorizationpolicy 를 통해서 접근 제어를 하기로 하였으며, 관련 적용을 진행할때에 대해 어려움, 그리고 적용 방법에 대해 말씀드리고자 합니다.
1. AuthroizationPolicy 기본 개념 소개
AuthroizationPolicy란?
Istio에서 제공하는 RBAC(역할 기반 접근 제어) 기능
특정 요청(Source)이 어떤 대상(Destination)으로 어떤 조건(Method, Path, IP 등) 하에 접근 가능한지 정의 가능
예를 들어, 특정 IP 대역에서만 Ingress Gateway에 접근을 허용하고 싶다면 아래와 같이 설정할 수 있습니다.
kind: AuthorizationPolicy
metadata:
name: istio-web-policy
namespace: default
spec:
selector:
matchLabels:
app: istio-ingressgateway
istio: istio-ingressgateway
action: ALLOW
rules:
- from:
- source:
remoteIpBlocks: [
"172.27.0.0/16"
]
2. 적용 시 겪은 문제점
AuthorizationPolicy에서 remoteIpBlocks를 사용할 때 가장 큰 어려움은 실제 클라이언트 IP를 어떻게 판별할 것인가였습니다.
[문제 상황]
클라우드 환경에서는 보통 ALB/NLB → Envoy → Pod 구조를 사용합니다.
이때 클라이언트 IP는 X-Forwarded-For(XFF) 헤더에 여러 단계로 누적되며, Envoy가 어느 위치의 IP를 신뢰할지 결정해야 합니다.
이 동작을 제어하는 값이 바로 xff_num_trusted_hops 입니다.
[해결 방법]
Envoy가 올바른 클라이언트 IP를 인식하도록 하기 위해 다음 설정이 필요했습니다.
- use_remote_address: true
- xff_num_trusted_hops: 2
해당 값은 EnvoyFilter 또는 proxyMetadata / meshConfig를 통해 조정할 수 있습니다.
참고 문서: Istio Network Topologies
3. Debugging 과정
처음에는 Istio Access Log를 켜고 확인하려 했습니다.
하지만 운영 환경에서는 로그가 과도하게 쌓여 부담이 컸기 때문에, 다른 방법을 찾아야 했습니다.
대안: 특정 Pod에서만 Debug 활성화
Istio에서는 특정 Pod에 한해 Debug 로그 레벨을 조정할 수 있습니다.
이를 활용해 AuthorizationPolicy 적용 결과를 확인할 수 있었습니다
istioctl proxy-config log -n default test-api-dffb6d9c9-ltvq9 --level "rbac:debug,filter:debug"
[결과]
어떤 Rule이 매칭되었는지, 차단/허용 여부를 직접 로그에서 확인 가능했습니다.
예시 로그:
2025-08-29T06:35:45.825100Z debug envoy rbac external/envoy/source/extensions/filters/http/rbac/rbac_filter.cc:212 enforced allowed, matched policy ns[default]-policy[istio-web-policy]-rule[0] thread=23
4. 운영 팁 & 마무리
운영 환경에서는 IP 제어 외에도 JWT Claim이나 mTLS 인증서 기반 제어를 함께 고려하는 것이 안전합니다.
AuthorizationPolicy는 잘못 적용하면 전체 서비스 접근이 차단될 수 있으므로,
Staging → Canary → Production 순으로 점진적 배포하는 것을 권장합니다.
이번 경험을 통해, IP 기반 접근 제어 시 Envoy 설정(xff_num_trusted_hops)을 반드시 확인해야 한다는 점을 배웠습니다.
비슷한 고민을 하시는 분들께 도움이 되길 바랍니다.
5. 관련 문서
'Kubernetes' 카테고리의 다른 글
| [Kubernetes] Kubernetes 정의 (0) | 2022.07.17 |
|---|
