매일 업데이트
2022-11-25 12:03 12 min

마이크로서비스 보안을 위한 13가지 모범 사례

마이크로서비스 아키텍처의 보안 강화 전략

마이크로서비스 아키텍처는 소프트웨어 애플리케이션을 독립적인 구성 요소로 분할하여 유연성, 확장성 및 기능성을 향상시키는 혁신적인 접근 방식입니다. 이를 통해 애플리케이션의 다른 부분에 영향을 주지 않고 특정 구성 요소를 수정, 추가 또는 제거할 수 있습니다.

이러한 아키텍처는 짧은 개발 주기, 소규모 팀 운영, 다양한 프로그래밍 언어 선택의 자유를 제공하며, 특정 기능이나 서비스에 대한 확장 및 문제 해결을 다른 요소에 지장 없이 수행할 수 있게 합니다.

일반적으로 마이크로서비스는 거대한 모놀리식 애플리케이션을 독립적으로 배포 가능한 소규모 서비스로 분할합니다. 하지만 이러한 독립적인 서비스들은 구성 요소의 수를 늘려 보안을 더욱 복잡하고 어렵게 만듭니다.

모놀리식 아키텍처와 마이크로서비스 아키텍처 비교 이미지 레드햇

일반적인 마이크로서비스 배포에는 하드웨어, 서비스 또는 애플리케이션, 통신, 클라우드, 가상화 및 오케스트레이션 계층이 포함됩니다. 각 계층은 고유한 보안 요구사항, 제어 및 문제점을 안고 있습니다.

마이크로서비스 보안의 주요 과제

마이크로서비스는 본질적으로 복잡한 접근 규칙, 모니터링해야 할 많은 트래픽, 더 넓은 공격 표면을 가진 분산 시스템입니다. 클라우드 환경에서 실행되는 경우가 많으며, 다양한 보안 구성 및 제어 기능을 갖추고 있습니다.

수많은 API, 포트, 노출된 구성 요소로 인해 전통적인 방화벽은 효과적인 보안을 제공하기 어려울 수 있습니다. 이러한 요소들은 마이크로서비스 배포를 중간자 공격, 삽입 공격, 교차 사이트 스크립팅, DDoS 공격 등 다양한 사이버 위협에 더욱 취약하게 만듭니다.

네트워크 보안은 또 다른 주요 과제이며, 특히 ID 및 접근 제어는 복잡성이 더욱 증가합니다. 또한 안전하지 않은 코드와 서비스 검색 시스템의 결함도 취약점으로 작용할 수 있습니다.

마이크로서비스 보안은 모놀리식 애플리케이션보다 어렵지만, 적절한 전략과 모범 사례를 적용하면 충분히 효과적으로 보호할 수 있습니다.

이상적인 아키텍처는 모든 구성 요소를 포괄하는 분산 접근 방식을 필요로 합니다.

주요 보안 영역은 다음과 같습니다:

  • 애플리케이션, 마이크로서비스, 사용자 보호
  • 보안 ID 및 접근 관리
  • 데이터 보호
  • 서비스 간 통신 보안 강화
  • 마이크로서비스 및 보안 시스템 모니터링

마이크로서비스 보안 모범 사례

가장 효과적인 전략 중 하나는 모범 사례, 도구 및 제어 기능을 종합적으로 사용하여 전체 생태계를 보호하는 것입니다. 실제 접근 방식은 서비스 유형, 애플리케이션, 사용자, 환경 및 기타 요인에 따라 달라질 수 있습니다.

마이크로서비스를 도입하기로 결정했다면 서비스, 연결 및 데이터에 대한 모든 보안 요구 사항을 충족하는지 확인해야 합니다.

이제 몇 가지 효과적인 마이크로서비스 보안 실천 방법을 살펴보겠습니다.

#1. 설계 단계부터 보안을 고려

보안을 개발 주기의 필수 요소로 통합하십시오. 초기 단계부터 마이크로서비스 개발 및 배포에 보안을 통합하는 것이 이상적입니다. 이는 소프트웨어 개발이 완료된 후 보안을 추가하는 것보다 훨씬 더 쉽고 효과적이며 비용 효율적인 접근 방식입니다.

#2. 심층 방어 메커니즘 활용

심층 방어(Defense in Depth, DiP)는 여러 보안 계층을 서비스와 데이터에 적용하는 기술입니다. 이 방법은 공격자가 여러 계층을 뚫는 것을 어렵게 만들어 서비스와 데이터에 대한 강력한 보안을 제공합니다.

방화벽과 같은 경계 보안 솔루션과는 달리 심층 방어는 바이러스 백신, 방화벽, 패치 관리, 스팸 방지 소프트웨어 등 여러 보안 도구를 결합하여 시스템 전체에 분산된 다양한 보안 계층을 구축합니다.

심층 방어 다계층 보안 이미지: 임페르바

이 접근 방식에서는 먼저 민감한 서비스를 식별한 다음, 주변에 적절한 보안 계층을 적용해야 합니다.

#3. 컨테이너 수준 보안 적용

마이크로서비스는 컨테이너 기술에 크게 의존합니다. 따라서 내부 및 외부에서 컨테이너를 보호하는 것은 공격 표면과 위험을 줄이는 효과적인 방법입니다. 최소 권한 원칙을 준수하고 다음을 포함한 전략들을 종합적으로 적용해야 합니다.

  • 필요한 최소한의 권한만 부여
  • sudo 또는 권한 있는 계정을 사용하여 서비스 등을 실행하지 않기
  • 사용 가능한 리소스의 접근 및 사용을 제한 또는 제어. 예를 들어, 컨테이너의 운영 체제 리소스 접근을 제한하여 데이터 도난이나 손상 방지
  • 컨테이너 디스크에 비밀 정보 저장 금지
  • 적절한 규칙을 사용하여 리소스 접근을 격리

컨테이너 이미지에 취약점이나 보안 문제가 없는지 정기적으로 확인하는 것도 중요합니다. 컨테이너의 보안 및 취약성 스캔을 통해 위험 요소를 식별할 수 있습니다. 일반적인 이미지 스캐닝 도구로는 클레어, 앵커 등이 있습니다.

#4. 다단계 인증 도입

다단계 인증을 활성화하여 프런트엔드의 보안을 강화합니다.

접근하는 사용자는 사용자 이름과 암호 외에도 휴대폰으로 전송된 코드 또는 지정된 이메일 주소와 같은 추가 인증 방법을 제공해야 합니다. 이 기술은 도난당하거나 해킹된 자격 증명을 사용할 수 있는 공격자가 마이크로서비스에 접근하는 것을 어렵게 만듭니다.

#5. 사용자 ID 및 접근 토큰 활용

마이크로서비스 배포 시 여러 애플리케이션과 서비스는 보안 인증 및 접근 제어가 필요합니다. OAuth 2.0 및 OpenID와 같은 인증 프레임워크를 사용하면 토큰을 안전하게 처리하여 마이크로서비스를 보호할 수 있으며, 타사 애플리케이션이 사용자의 다른 서비스나 데이터에 접근할 수 있게 됩니다.

일반적인 배포 환경에서 기본 애플리케이션은 사용자에게 타사 서비스를 인증하라는 메시지를 표시합니다. 사용자가 이를 수락하면 애플리케이션은 세션에 대한 접근 토큰을 생성합니다.

특히 OAuth는 사용자 ID 및 접근 제어에 가장 효과적인 전략 중 하나입니다. 여러 다른 인증 프로토콜이 있으며 직접 구축할 수도 있지만, OAuth를 사용하는 것이 더욱 표준적이고 안정적이며 널리 인정받고 있습니다.

#6. API 게이트웨이 구축

마이크로서비스는 서로 다른 네트워크에 분산되어 있으며 다양한 시스템과 클라이언트에서 접근할 수 있는 여러 구성 요소로 구성되어 있습니다. 이러한 노출은 취약점과 보안 위험을 증가시킵니다. 이를 보호하는 한 가지 방법은 외부 시스템 및 클라이언트의 모든 접근을 중앙 집중화하는 데 도움이 되는 단일 보안 진입점을 만드는 것입니다.

이를 위해 모든 수신 요청을 API 게이트웨이를 통해 검사하여 보안 문제를 확인하고, 적절한 마이크로서비스로 라우팅해야 합니다. API 게이트웨이는 클라이언트 애플리케이션과 마이크로서비스 사이에 위치하며, 인증, SSL 종료, 프로토콜 변환, 모니터링, 요청 라우팅, 캐싱 등 추가적인 요청 관리 기능을 제공합니다.

이 접근 방식을 통해 API 게이트웨이는 모든 외부 서비스를 마이크로서비스로 라우팅하면서 심층 방어 보안 원칙을 강화합니다.

마이크로서비스 API 게이트웨이 이미지 라이브북

일반적인 API 게이트웨이로는 NGINX, , 타이크, 앰버서더, AWS API 게이트웨이 등이 있습니다.

API 보안에 대한 추가 정보는 API 엔드포인트 보호 가이드를 참조하십시오.

#7. 배포 영역 기반 프로필 API

사용자가 필요한 API 및 서비스에만 접근할 수 있도록 역할 기반 제한을 구현합니다. 대부분의 악성 소프트웨어가 여러 서비스에 노출되는 것을 노리기 때문에, 인증된 사용자만 접근을 허용하면 위험을 줄일 수 있습니다. API 접근을 필요한 사용자 기준으로 제한하는 방법 중 하나는 API에 라벨을 지정하는 것입니다. API는 일반적으로 다음과 같이 분류할 수 있습니다.

  • 이더넷 API - 데이터 센터 외부, 즉 외부 세계에 노출되는 서비스용
  • 기업 영역 API - 내부 개인 트래픽용
  • DMZ API - 인터넷에서 발생하는 트래픽 처리용
  • 하이브리드 영역 API - 데이터 센터 배포용

#8. 서비스 간 통신 보안

효과적인 관행은 두 마이크로서비스가 통신할 때 요청을 인증하고 권한을 부여하는 것입니다.

일반적으로 서비스 간 통신을 보호하는 데 사용되는 세 가지 주요 기술은 네트워크 신뢰, JWT(JSON Web Token) 및 mTLS(상호 TLS)입니다.

JWT 이미지로 서비스 간 통신 보안 라이브북

세 가지 중 가장 많이 사용되는 것은 mTLS입니다. 이 접근 방식에서 각 마이크로서비스는 공개/개인 키 쌍을 가져야 합니다. 그런 다음, 클라이언트 마이크로서비스는 키 쌍을 사용하여 mTLS를 통해 수신 마이크로서비스에 자신을 인증합니다.

인증 과정에서 각 마이크로서비스는 인증서를 생성하고, 다른 마이크로서비스의 인증서를 사용하여 자신을 인증합니다.

TLS는 전송 중인 데이터의 무결성과 기밀성을 보장하며, 클라이언트가 마이크로서비스를 식별할 수 있게 해줍니다. 클라이언트 마이크로서비스는 일반적으로 다른 마이크로서비스를 알고 있습니다. 하지만 TLS는 단방향이기 때문에 수신 마이크로서비스가 클라이언트 마이크로서비스를 확인할 수 없다는 취약점을 공격자가 이용할 수 있습니다. 반면에 mTLS는 각 마이크로서비스가 서로를 식별할 수 있는 방법을 제공합니다.

#9. 클라이언트 트래픽 속도 제한

외부 트래픽을 제한하면 서비스 거부(DoS) 공격과 같은 문제 및 일부 클라이언트가 대부분의 애플리케이션 대역폭을 소비하는 상황을 방지할 수 있습니다. 클라이언트로부터 보내거나 받는 트래픽 비율을 IP, 시간 등을 기준으로 모니터링하고 제어하는 다양한 규칙을 적용할 수 있습니다.

API에 대한 로그인 시도 실패 또는 기타 의심스러운 활동이 여러 번 감지되면 서비스가 속도 제한되도록 구성해야 합니다.

느려진 시스템은 공격자의 의욕을 꺾고 서비스 접근 시도를 포기하도록 유도할 수 있습니다. 코드 또는 기타 기술을 통해 API 게이트웨이를 사용하여 속도 제한을 구현할 수 있습니다. 일반적으로 대부분의 SaaS 환경에는 공격 및 사용자 남용을 최소화하기 위한 API 속도 제한이 있습니다.

#10. 오케스트레이션 관리자 활용

오케스트레이션 관리자를 사용하면 보안을 강화하는 동시에 구성, 조정 및 기타 마이크로서비스 관리 작업을 자동화할 수 있습니다. 일반적으로 이러한 도구를 사용하면 여러 컨테이너를 관리하고, 메타데이터 접근을 제한하고, 워크로드를 분리하고, 로그를 수집하는 등의 작업을 수행할 수 있습니다.

일부 오케스트레이션 도구는 개발자가 SSL 인증서, 암호화 키, 암호 및 ID 토큰과 같은 중요한 정보를 저장하고 공유할 수 있는 추가 기능도 제공합니다.

효과적인 마이크로서비스 오케스트레이션을 위한 두 가지 일반적인 방법은 다음과 같습니다.

  • 마이크로서비스 내에서 오케스트레이션 코딩
  • API 게이트웨이를 사용하여 오케스트레이션 계층 제공

API 게이트웨이를 통한 오케스트레이션은 서비스 확장이 필요한 경우 문제가 될 수 있으므로 권장되지 않습니다.

마이크로서비스 오케스트레이션 계층 – 이미지 글로벌로직

일반적인 오케스트레이션 관리 도구로는 쿠버네티스, 이스티오, AKS(Azure Kubernetes 서비스) 등이 있습니다.

자세한 내용은 DevOps용 컨테이너 오케스트레이션에 대해 살펴보십시오.

#11. 모든 시스템 및 서비스 모니터링

마이크로서비스는 분산 시스템에 의존하므로 모든 개별 구성 요소에 대한 안정적이고 효과적인 모니터링 전략이 필요합니다.

지속적인 모니터링을 통해 보안 위험을 적시에 감지하고 해결할 수 있습니다. 이를 위해 프로메테우스, 스탯츠디, 인플럭스DB, 로그스태시 등 다양한 마이크로서비스 모니터링 솔루션을 활용할 수 있습니다.

마이크로서비스 아키텍처 내부 모니터링

적절한 도구를 사용하여 내부 시스템 및 서비스를 모니터링합니다. 몇 가지 모범 사례는 다음과 같습니다.

  • 애플리케이션 수준에서 로깅을 활성화합니다. 애플리케이션, 컨테이너, 네트워크 및 인프라 수준에서 로그를 수집하기 위해 스플렁크, 그라파나, ELK 스택 등의 도구를 사용할 수 있습니다.
  • 사용량 메트릭을 모니터링
  • CPU, 메모리, 응답 시간, 오류, 알림 등의 메트릭 추세를 사용하여 기존 또는 잠재적인 공격을 나타내는 비정상적인 활동 감지
  • 들어오는 클라이언트 요청, 데이터베이스 레코드, 컨테이너 등의 로그를 감사하여 불일치 또는 비정상적인 활동 식별

#12. 보안 활동 자동화

업데이트 배포, 취약성 검색, 모니터링, 정책 적용 등 보안 프로세스를 자동화합니다. 또한 업데이트가 안전하고 새로운 취약점이 발생하지 않도록 확인해야 합니다. 업데이트 후에는 보안 소프트웨어가 모든 컨테이너 및 마이크로서비스에서 테스트를 실행하여 이전에 발생한 취약점이나 보안 문제가 없는지 확인해야 합니다.

#13. 항상 데이터 보호

전송 중인 데이터와 저장된 데이터를 모두 보호해야 합니다. 이상적으로는 모든 통신에 HTTPS를 사용하여 전송 중인 데이터를 보호하고, 저장된 모든 민감한 데이터에 암호화를 적용해야 합니다. 코드 외부에 일반 텍스트 암호, 키, 자격 증명 및 민감한 데이터를 전송하거나 저장하지 마십시오.

가장 좋은 전략은 표준 기술을 사용하여 민감한 데이터를 최대한 빨리 암호화하고, 가능한 한 늦게 데이터를 해독하여 노출을 줄이는 것입니다.

결론

마이크로서비스는 분산된 구성 요소를 사용하여 유연성 및 배포 옵션과 같은 이점을 제공하지만, 조직은 마이크로서비스를 사용할 때 내부 보안 정책과 전략을 클라우드 네이티브 및 분산 접근 방식에 맞춰 조정해야 합니다.

이상적으로는 공격 표면을 줄이고 마이크로서비스 환경, API, 애플리케이션 및 데이터를 안전하게 보호하는 것을 목표로 해야 합니다.

저자
Korea

기술 트렌드와 실용적인 팁을 전하는 लेखक입니다.