Security 퀴즈
지원 버전: Istio 1.28.0 EKS 버전: 1.34 (Kubernetes 1.28+) 마지막 업데이트: 2026년 2월 23일
이 퀴즈는 Istio의 보안 기능에 대한 이해도를 테스트합니다.
객관식 문제 (1-5번)
문제 1: PeerAuthentication 모드
PeerAuthentication의 mTLS 모드 중 PERMISSIVE의 특징으로 옳은 것은?
A. mTLS와 평문 트래픽을 모두 허용한다 B. mTLS만 허용하고 평문은 거부한다 C. 모든 트래픽을 거부한다 D. mTLS를 비활성화한다
정답 및 해설
정답: A
PERMISSIVE 모드는 mTLS와 평문 트래픽을 모두 허용하여 점진적 마이그레이션을 지원합니다.
해설:
PeerAuthentication의 mTLS 모드:
PERMISSIVE
mTLS + 평문 모두 허용
점진적 마이그레이션, 혼합 환경
STRICT
mTLS만 허용
프로덕션 보안 강화
DISABLE
mTLS 비활성화 (평문만)
디버깅, 레거시 시스템
PERMISSIVE 모드 예제:
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: istio-system
spec:
mtls:
mode: PERMISSIVE # mTLS + 평문 모두 허용동작 방식:
클라이언트 A (Istio Sidecar) → [mTLS] → 서버 (PERMISSIVE) ✅ 허용
클라이언트 B (No Sidecar) → [평문] → 서버 (PERMISSIVE) ✅ 허용STRICT 모드와 비교:
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: strict-mtls
namespace: production
spec:
mtls:
mode: STRICT # mTLS만 허용클라이언트 A (Istio Sidecar) → [mTLS] → 서버 (STRICT) ✅ 허용
클라이언트 B (No Sidecar) → [평문] → 서버 (STRICT) ❌ 거부마이그레이션 전략:
1단계: PERMISSIVE (혼합 트래픽 허용)
↓
2단계: 모든 서비스에 Sidecar 주입
↓
3단계: STRICT (mTLS 강제)참고 자료:
문제 2: AuthorizationPolicy의 action
다음 AuthorizationPolicy 구성의 의미는?
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: deny-all
spec:
{}A. 모든 요청을 허용한다 B. 모든 요청을 거부한다 C. 정책을 적용하지 않는다 D. mTLS만 허용한다
정답 및 해설
정답: B
빈 spec을 가진 AuthorizationPolicy는 모든 요청을 거부합니다 (deny-by-default).
해설:
AuthorizationPolicy의 기본 동작:
정책이 없으면: 모든 요청 허용
빈 spec (예제와 같음): 모든 요청 거부
rules가 있으면: rules에 따라 허용/거부
Deny-by-default 패턴:
AuthorizationPolicy의 action 종류:
DENY
명시적 거부
1 (최우선)
ALLOW
명시적 허용
2
AUDIT
로그만 기록
3
CUSTOM
외부 인증 서비스
4
평가 순서:
실전 예제:
테스트:
참고 자료:
문제 3: JWT 인증
RequestAuthentication에서 JWT 토큰을 검증할 때 사용하는 필드는?
A. issuer와 audiences B. principals와 namespaces C. methods와 paths D. hosts와 ports
정답 및 해설
정답: A
RequestAuthentication은 issuer와 audiences 필드를 사용하여 JWT 토큰을 검증합니다.
해설:
JWT 토큰 구조:
RequestAuthentication 구성:
JWT 검증 프로세스:
OIDC 제공자와 통합:
AuthorizationPolicy와 결합:
테스트:
참고 자료:
문제 4: mTLS 인증서 관리
Istio에서 mTLS 인증서의 기본 유효 기간은?
A. 1시간 B. 24시간 C. 7일 D. 90일
문제 5: Service Account 기반 인증
Istio에서 서비스 간 인증에 사용되는 identity는?
A. Pod 이름 B. Service 이름 C. Service Account D. Namespace 이름
정답 및 해설
정답: C
Istio는 Service Account를 기반으로 서비스 간 identity를 관리합니다.
해설:
Service Account 기반 Identity:
SPIFFE ID 형식:
AuthorizationPolicy에서 Service Account 사용:
Service Account vs Pod/Service 이름:
안정성
✅ 안정적
❌ 동적 변경
✅ 안정적
보안
✅ 인증서 기반
❌ 신뢰 불가
❌ 신뢰 불가
RBAC 통합
✅ Kubernetes RBAC
❌ 불가능
❌ 불가능
mTLS
✅ 인증서에 포함
❌ 포함 안됨
❌ 포함 안됨
실전 예제: 3-Tier 애플리케이션:
Service Account 확인:
Namespace 간 통신:
참고 자료:
주관식 문제 (6-10번)
문제 6: Deny-by-default 보안 정책 구현
Kubernetes 클러스터에서 Istio를 사용하여 deny-by-default 보안 정책을 구현하는 방법을 단계별로 설명하세요. 필수 리소스(PeerAuthentication, AuthorizationPolicy)와 예외 처리 방법을 포함해야 합니다.
예시 답안
답변:
Deny-by-default 보안 정책 구현:
1단계: mTLS STRICT 모드 활성화
모든 서비스 간 통신을 mTLS로 강제합니다:
적용 범위:
istio-systemnamespace에 배포 → 전체 메시에 적용특정 namespace에 배포 → 해당 namespace만 적용
selector 사용 → 특정 workload만 적용
2단계: 모든 트래픽 거부 (Deny-by-default)
이 정책 이후:
❌ 모든 inbound 트래픽 거부
❌ 서비스 간 통신 불가
❌ 외부에서 접근 불가
3단계: 필요한 통신만 선택적 허용
예시 1: Frontend → Backend 통신 허용
예시 2: Backend → Database 통신 허용
4단계: Ingress Gateway 정책
외부 트래픽을 허용하려면 Ingress Gateway에도 정책이 필요합니다:
5단계: Health Check 및 Readiness Probe 예외 처리
Kubernetes health check가 차단되지 않도록 예외 처리:
또는 PeerAuthentication에서 특정 포트 제외:
6단계: 모니터링 및 로깅 예외
Prometheus가 메트릭을 수집할 수 있도록 허용:
완전한 예제: 3-Tier 애플리케이션
테스트 및 검증:
모범 사례:
점진적 적용:
먼저 PERMISSIVE 모드로 mTLS 활성화
모든 서비스에 Sidecar 주입 확인
STRICT 모드로 전환
Deny-by-default 정책 적용
최소 권한 원칙:
필요한 최소한의 통신만 허용
HTTP 메서드 제한 (GET만, POST만 등)
경로 제한 (/api/*만 등)
예외 처리:
Health check는 반드시 예외 처리
모니터링 시스템 접근 허용
Ingress Gateway 정책 설정
테스트:
각 정책 적용 후 테스트
부작용 확인 (로그, 메트릭)
롤백 계획 준비
참고 자료:
문제 7: JWT + mTLS 이중 인증
Istio에서 **최종 사용자 인증(JWT)**과 **서비스 간 인증(mTLS)**을 함께 사용하는 시나리오를 구현하세요. OAuth2/OIDC 제공자(예: Keycloak)와 통합하는 방법을 포함해야 합니다.
예시 답안
답변:
JWT + mTLS 이중 인증 아키텍처:
1단계: Keycloak 설정
2단계: mTLS 활성화 (서비스 간 인증)
3단계: JWT 인증 설정 (최종 사용자 인증)
4단계: AuthorizationPolicy 설정
Ingress Gateway 정책
Backend 정책
5단계: Role 기반 접근 제어
JWT claims 기반으로 세밀한 권한 제어:
6단계: JWT Payload 활용
Backend에서 JWT payload 사용:
7단계: 완전한 예제
Ingress Gateway
Frontend
Backend
테스트:
보안 이점:
이중 인증:
JWT: 최종 사용자 신원 확인
mTLS: 서비스 간 신원 확인
깊은 방어 (Defense in Depth):
Gateway에서 JWT 검증
서비스 간 mTLS로 통신 암호화
AuthorizationPolicy로 세밀한 권한 제어
역할 기반 접근 제어 (RBAC):
JWT claims 기반 권한 관리
동적 권한 업데이트 (Keycloak에서 관리)
참고 자료:
문제 8: 외부 서비스 접근 제어
Istio에서 Egress 트래픽을 제어하여 특정 외부 서비스만 접근을 허용하는 방법을 설명하세요. ServiceEntry, VirtualService, AuthorizationPolicy를 사용한 완전한 예제를 포함해야 합니다.
예시 답안
답변:
Egress 트래픽 제어 전략:
1단계: Egress 트래픽 기본 모드 확인
Istio는 두 가지 egress 모드를 지원합니다:
모드 비교:
ALLOW_ANY
모든 외부 트래픽 허용 (기본값)
⚠️ 낮음
REGISTRY_ONLY
ServiceEntry에 등록된 서비스만 허용
✅ 높음
REGISTRY_ONLY 모드로 변경:
2단계: ServiceEntry로 외부 서비스 등록
예제 1: HTTPS API (GitHub)
예제 2: HTTP API (httpbin)
예제 3: 특정 IP 주소
3단계: VirtualService로 트래픽 제어
타임아웃 및 재시도 설정
헤더 추가 (API Key)
4단계: AuthorizationPolicy로 접근 제어
특정 Service Account만 허용
특정 경로만 허용
5단계: Egress Gateway 사용 (선택사항)
중앙 집중식 egress 제어:
트래픽 흐름:
6단계: 완전한 예제
시나리오: Backend 서비스만 GitHub API에 접근 허용
테스트:
모니터링:
보안 이점:
화이트리스트 방식: ServiceEntry에 등록된 서비스만 접근
Service Account 기반 제어: 특정 서비스만 외부 API 호출 가능
감사 및 로깅: 모든 egress 트래픽 로깅 가능
중앙 집중식 관리: Egress Gateway로 모든 외부 트래픽 모니터링
참고 자료:
문제 9: 보안 감사 및 로깅
Istio에서 보안 관련 이벤트를 **감사(Audit)**하고 로깅하는 방법을 설명하세요. AuthorizationPolicy의 AUDIT action과 Access Log 구성을 포함해야 합니다.
예시 답안
답변:
Istio 보안 감사 및 로깅 전략:
1. AuthorizationPolicy AUDIT Action
AUDIT action은 트래픽을 차단하지 않고 로그만 기록합니다.
기본 AUDIT 정책
특정 조건만 감사
2. Access Log 활성화
전체 메시에 Access Log 활성화
특정 Namespace에만 적용
3. 보안 감사를 위한 커스텀 로그 필터
mTLS 정보 포함
Authorization 정보 포함
4. 외부 로깅 시스템 통합
FluentBit으로 CloudWatch 전송
Elasticsearch 통합
5. 완전한 보안 감사 구성
6. 로그 분석 쿼리
Prometheus 쿼리
CloudWatch Insights 쿼리
7. Grafana 대시보드
8. 알림 설정
모범 사례:
AUDIT 먼저, DENY 나중에:
새 정책은 AUDIT로 시작
로그 분석 후 DENY로 전환
선택적 로깅:
모든 트래픽 로깅은 비용 증가
민감한 작업만 로깅
로그 보존:
보안 감사: 최소 90일
규정 준수: 1년 이상
실시간 알림:
무단 접근 시도 즉시 알림
비정상 패턴 탐지
참고 자료:
문제 10: Zero Trust 네트워크 구현
Istio를 사용하여 Zero Trust 네트워크 원칙을 구현하는 방법을 설명하세요. mTLS STRICT, deny-by-default, least privilege 원칙을 적용한 완전한 예제를 포함해야 합니다.
예시 답안
답변:
Zero Trust 네트워크 원칙:
Never Trust, Always Verify: 모든 통신을 검증
Least Privilege: 최소 권한만 부여
Assume Breach: 침해를 가정하고 설계
Istio Zero Trust 아키텍처:
1단계: mTLS STRICT 모드
모든 서비스 간 통신을 암호화:
검증:
2단계: Deny-by-default 정책
전역 Deny 정책
3단계: Least Privilege (최소 권한)
시나리오: 3-Tier 웹 애플리케이션
Service Account 생성
Ingress Gateway → Frontend
Frontend → Backend
Backend → Database
4단계: 네임스페이스 격리
다른 Namespace에서의 접근 차단:
5단계: 시간 기반 접근 제어
EnvoyFilter로 시간 기반 제어 구현:
6단계: Egress 트래픽 제어
외부 서비스 접근 제한:
7단계: 완전한 Zero Trust 구성
8단계: 검증 및 모니터링
Zero Trust 체크리스트:
✅ mTLS STRICT 모드 (모든 통신 암호화)
✅ Deny-by-default (기본 모든 거부)
✅ Explicit Allow (필요한 것만 허용)
✅ Service Account 기반 identity
✅ 최소 권한 (메서드/경로/포트 제한)
✅ Namespace 격리
✅ Egress 트래픽 제어
✅ Health check 예외 처리
✅ 모니터링 및 감사
✅ 정기적인 정책 검토
참고 자료:
점수 계산
객관식 1-5번: 각 10점 (총 50점)
주관식 6-10번: 각 10점 (총 50점)
총점: 100점
평가 기준:
90-100점: 우수 (Istio 보안 전문가)
80-89점: 양호 (프로덕션 보안 구성 가능)
70-79점: 보통 (추가 학습 권장)
60-69점: 미흡 (기본 개념 복습 필요)
0-59점: 재학습 필요
학습 자료
마지막 업데이트