Istio Hands-on Study [1기]

[5주차] 마이크로서비스 통신 보안 : 애플리케이션-네트워킹 보안의 필요성

구구달스 2025. 4. 22. 10:28

🔍 Istio로 서비스 메시 보안 쉽게 이해하기


🔒 9.1 애플리케이션 네트워킹 보안의 필요성

  • 애플리케이션 보안은 중요한 데이터를 보호하고, 권한 없는 사용자의 접근을 차단하는 모든 활동을 포함합니다. 
    • Authentication(인증): 사용자가 누구인지 확인하는 과정. 예를 들어, 비밀번호, 디바이스 인증서, 또는 지문 같은 고유 특성을 사용합니다.
    • Authorization(인가): 인증된 사용자가 어떤 작업(생성, 읽기, 수정, 삭제 등)을 할 수 있는지 결정하는 과정.
    • Encryption(암호화): 데이터가 네트워크를 통해 전송될 때, 중간에 가로채이지 않도록 보호합니다.
  • 이러한 요소들은 데이터가 클라이언트에게 안전하게 전달되도록 보장합니다.

애플리케이션 보안은
인증, 인가, 암호화를 통해 중요한 데이터를 보호합니다.


🛡️ 9.1.1 서비스 간 인증 (Service-to-Service Authentication)

  • 서비스 간 통신에서도 보안이 중요합니다. 한 서비스는 다른 서비스와 상호작용하기 전에 상대방이 신뢰할 수 있는지 확인해야 합니다. 이를 위해 서비스는 신뢰할 수 있는 제3자가 발급한 신원 문서(Identity Document)를 제시합니다.
  • Istio는 SPIFFE(Secure Production Identity Framework for Everyone) 프레임워크를 사용해 서비스의 신원을 자동으로 발급합니다. 이 신원은 서비스 간 상호 인증(Mutual Authentication)에 사용되어 안전한 통신을 보장합니다.

Istio는 SPIFFE를 통해
서비스 간 신원을 발급하고 상호 인증을 구현합니다.


👤 9.1.2 최종 사용자 인증 (End-User Authentication)

  • 개인 데이터를 다루는 애플리케이션에서는 최종 사용자의 인증이 핵심입니다. 일반적으로 사용자는 인증 서버로 리디렉션되어 로그인합니다. 로그인에 성공하면 HTTP Cookie나 JSON Web Token(JWT) 같은 자격 증명을 받습니다. 이 자격 증명은 사용자의 정보를 포함하며, 서비스는 이를 인증 서버와 검증해 접근을 허용합니다.

최종 사용자 인증은 자격 증명을 통해 개인 데이터를 보호합니다.


🔐 9.1.3 인가 (Authorization)

  • 인가는 인증된 사용자가 어떤 작업을 할 수 있는지 결정하는 과정입니다. 예를 들어, 웹 애플리케이션에서는 사용자가 리소스를 생성, 읽기, 수정, 삭제할 수 있는지 확인합니다. Istio는 서비스 인증과 신원 모델을 기반으로 서비스 간, 또는 사용자와 서비스 간 세밀한 인가 정책을 제공합니다.

인가는 인증된 사용자의 작업 범위를 제어합니다.


🆚 9.1.4 모놀리스와 마이크로서비스 보안 비교

  • 모놀리스와 마이크로서비스 모두 사용자 인증과 서비스 간 인증, 인가를 구현해야 합니다. 하지만 두 아키텍처는 보안 방식에서 차이가 있습니다.
    • 모놀리스: 연결이 적고, 정적인 인프라(가상 또는 물리적 서버)에서 실행됩니다. IP 주소는 신뢰할 수 있는 신원으로 사용되며, 인증서나 방화벽 규칙에 활용됩니다.

  • 마이크로서비스: 수백, 수천 개의 서비스가 동적으로 실행되며, 클라우드나 컨테이너 오케스트레이션 환경에서 운영됩니다. 서비스는 짧은 생명 주기를 가지며, 서로 다른 네트워크나 클라우드 제공자, 심지어 온프레미스 환경에서도 실행될 수 있습니다. 따라서 IP 주소는 신뢰할 수 없는 신원으로, 전통적인 방식은 적합하지 않습니다.

  • 이러한 동적 환경에서의 신원 문제를 해결하기 위해 Istio는 SPIFFE를 사용합니다. SPIFFE는 동적이고 이기종 환경에서 워크로드에 신원을 제공하는 오픈 소스 표준입니다.

모놀리스는 정적 IP를 사용하지만,
마이크로서비스는 동적 환경에서 SPIFFE로 신원을 관리합니다.


🛠️ 9.1.5 Istio가 SPIFFE를 구현하는 방법

  • SPIFFE 신원은 RFC 3986을 따르는 URI 형식으로, spiffe://trust-domain/path로 구성됩니다:
    • trust-domain: 신원을 발급하는 주체(개인, 조직 등)를 나타냅니다.
    • path: 신뢰 도메인 내에서 워크로드를 고유하게 식별합니다.
  • Istio는 워크로드가 실행되는 서비스 계정(Service Account) 을 기반으로 path를 채웁니다.
    이 신원은 X.509 인증서(SPIFFE Verifiable Identity Document, SVID)에 인코딩되며, Istio의 컨트롤 플레인이 이를 발급합니다. 이 인증서는 서비스 간 통신을 보호하기 위해 데이터를 암호화합니다.
spiffe://example.com/service-account-name

Istio는 SPIFFE를 통해
X.509 인증서를 발급해 서비스 신원을 관리하고 데이터를 암호화합니다.


🧠 9.1.6 Istio 보안의 핵심

  • Istio 보안을 이해하려면 서비스 메시 운영자가 프록시를 설정하는 커스텀 리소스를 살펴봐야 합니다:
    • PeerAuthentication: 서비스 간 트래픽을 인증합니다. 인증 성공 시, 피어의 인증서에서 정보를 추출해 인가에 사용합니다.
    • RequestAuthentication: 최종 사용자의 자격 증명(JWT 등)을 발급 서버와 검증합니다. 인증 성공 시, 자격 증명에서 정보를 추출해 인가에 사용합니다.
    • AuthorizationPolicy: 추출된 정보를 기반으로 요청을 허용하거나 거부합니다.
  • 이 리소스들은 요청을 인증하고, 자격 증명(SVID 또는 JWT)에서 데이터를 추출필터 메타데이터(Filter Metadata)로 저장합니다. 이 메타데이터는 연결 신원을 나타내며, AuthorizationPolicy는 이를 기반으로 요청을 처리합니다.

Istio는 PeerAuthentication, RequestAuthentication, AuthorizationPolicy로
보안을 관리합니다.


📌 핵심 요약

  • 애플리케이션 보안은 인증, 인가, 암호화를 통해 데이터를 보호합니다.
  • Istio는 SPIFFE를 사용해 동적 환경에서 서비스 신원을 발급하고 상호 인증을 구현합니다.
  • 최종 사용자 인증은 JWT나 HTTP Cookie를 통해 개인 데이터를 보호합니다.
  • 인가는 인증된 사용자의 작업 범위를 제어합니다.
  • 모놀리스는 정적 IP를 사용하지만, 마이크로서비스는 SPIFFE로 동적 신원을 관리합니다.
  • Istio는 PeerAuthentication, RequestAuthentication, AuthorizationPolicy 리소스로 서비스와 사용자의 요청을 안전하게 처리합니다.