taeridad19 님의 블로그 입니다.

  • 2025. 4. 19.

    by. taeridad19

    목차

       

      서버리스 아키텍처의 보안 고려사항

      서버리스 아키텍처(Serverless Architecture)는 인프라 관리의 부담을 줄이고, 빠른 개발과 유연한 확장을 가능하게 하는 혁신적인 방식입니다. 특히 AWS Lambda, Azure Functions, Google Cloud Functions 등 클라우드 서비스가 제공하는 서버리스 컴퓨팅 환경은 개발자에게 높은 생산성과 비용 효율성을 제공합니다. 그러나 이처럼 간편해진 구조만큼이나, 보안에 대한 신중한 접근이 필수적입니다.

      서버리스는 전통적인 서버 기반 보안 모델과는 전혀 다른 위협 모델을 갖고 있으며, 보안 책임의 범위도 사용자에게 더욱 집중됩니다. 이 글에서는 서버리스 아키텍처에서 반드시 고려해야 할 보안 요소와 실질적인 대응 전략을 체계적으로 정리해보겠습니다.


      서버리스 환경의 보안 특징

      서버리스 아키텍처의 보안 고려사항

      서버 관리를 클라우드에 위임하는 구조

      서버리스는 사용자가 직접 서버를 관리하지 않아도 되는 구조로, 서버의 운영체제 패치, 네트워크 구성, 물리적 보안 등은 클라우드 제공업체가 책임집니다. 이는 보안 측면에서도 일정 부분 리스크를 줄이는 요소가 되지만, 동시에 애플리케이션 코드, 이벤트 트리거, IAM 권한 등 애플리케이션 계층의 보안은 전적으로 사용자 책임이 됩니다.

      마이크로 서비스화된 기능 단위 실행

      서버리스는 각 기능(Function)이 개별적으로 실행되는 모델입니다. 이 구조는 공격자가 하나의 함수만 침해했을 경우 전체 시스템에 영향을 미치기 어렵게 만들지만, 동시에 수많은 진입점이 생기는 단점도 있습니다. 따라서 각 기능 단위로 철저한 보안이 필요합니다.


      주요 보안 고려사항과 대응 전략

      1. 최소 권한 원칙(Least Privilege)

      서버리스 함수는 특정 이벤트에 반응해 실행되며, 다양한 리소스에 접근해야 할 수 있습니다. 이때, IAM 정책이나 역할(Role)을 과도하게 부여하면 보안 위협에 취약해집니다.
      해결 전략:

      • 각 함수에 꼭 필요한 최소한의 IAM 권한만 부여합니다.
      • AWS IAM 정책에서 * 대신 구체적인 리소스 명시를 습관화합니다.
      • 정기적으로 권한 사용 내역을 모니터링하고 불필요한 권한을 제거합니다.

      2. 함수 코드 보안

      서버리스 함수는 클라우드에 업로드된 코드로 실행되므로, 코드 자체의 보안이 매우 중요합니다.
      해결 전략:

      • 민감한 정보(예: DB 비밀번호, API 키 등)를 코드에 직접 작성하지 않고, 환경 변수 또는 보안 키 관리 시스템(e.g., AWS Secrets Manager, Azure Key Vault)을 사용합니다.
      • 입력 값 검증(Input Validation)을 철저히 하여 SQL Injection, XSS 등 웹 취약점을 방지합니다.
      • 오픈소스 라이브러리 사용 시 취약점 존재 여부를 주기적으로 점검합니다.

      3. 이벤트 소스와 통신 경로 보호

      서버리스는 API Gateway, 클라우드 스토리지, 메시지 큐, 데이터베이스 등 다양한 이벤트 소스를 통해 실행되므로, 이러한 진입점 보안도 중요합니다.
      해결 전략:

      • API Gateway에 인증(Authentication) 및 권한 부여(Authorization) 체계를 구현합니다. JWT, OAuth, Cognito 등을 활용할 수 있습니다.
      • HTTPS를 사용하여 네트워크 통신을 암호화하고, 필요한 경우 IP 제한 또는 프록시 서버를 추가합니다.
      • 이벤트 소스 필터링 기능을 사용하여 불필요한 이벤트로부터 함수를 보호합니다.

      4. 로깅과 모니터링

      서버리스 함수는 짧게 실행되고 종료되기 때문에, 문제가 발생해도 원인을 추적하기 어려운 경우가 많습니다.
      해결 전략:

      • AWS CloudWatch, Azure Monitor, Google Stackdriver 등을 통해 로그를 수집하고 이상 행동을 탐지합니다.
      • 함수 실행 실패율, 호출 횟수, 지연 시간 등 주요 지표에 대한 경보(Alarm)를 설정하여 이상 징후를 조기에 파악합니다.
      • SIEM 시스템 또는 보안 로그 분석 솔루션과 연동하여 이벤트 통합 관리가 가능하도록 구성합니다.

      서버리스 환경에서 자주 발생하는 보안 위협

      코드 인젝션 공격

      사용자가 입력한 값이 검증 없이 실행될 경우, 외부 명령어가 서버리스 함수 내에서 실행될 수 있습니다. 이는 심각한 보안 사고로 이어질 수 있습니다. 따라서 입력값 검증은 필수이며, 정적 분석 도구와 취약점 탐지 도구를 병행 사용하는 것이 좋습니다.

      권한 상승

      서버리스 함수가 지나치게 많은 권한을 보유한 경우, 공격자가 해당 함수를 침해하면 전체 클라우드 리소스에 접근할 수 있는 위험이 발생합니다. IAM 역할을 정교하게 관리하고, 불필요한 권한을 제거해야 합니다.

      외부 종속성 취약점

      npm, PyPI, Maven 등 외부 패키지 관리자에서 설치한 라이브러리가 최신 보안 업데이트를 적용하지 않은 상태라면, 취약한 코드를 통해 공격이 이루어질 수 있습니다. 사용 중인 패키지의 보안 상태를 자동 점검해주는 도구(Snyk, Dependabot 등)를 사용하는 것이 좋습니다.


      서버리스 보안 강화 도구 추천

      도구 이름 주요 기능 지원 플랫폼

      AWS IAM Access Analyzer 과도한 권한 탐지 및 분석 AWS
      AWS Secrets Manager 암호, 키 등의 안전한 저장 AWS
      Datadog Serverless Monitoring 실시간 함수 성능 및 보안 분석 다수
      Twistlock/Prisma Cloud 함수 코드 및 컨테이너 보안 분석 AWS, Azure, GCP
      Snyk 오픈소스 취약점 점검 모든 플랫폼
      Cloudflare API Shield API 보안, 레이트 리밋, Bot 방지 전체 환경

      결론: 서버리스 보안은 설계 초기부터 시작되어야 한다

      서버리스 아키텍처는 빠르고 효율적인 개발과 운영을 가능하게 하지만, 기존 시스템과는 다른 새로운 보안 과제를 안고 있습니다. 모든 것이 자동화되어 있다고 방심하면, 보안은 쉽게 뚫릴 수 있습니다.

      따라서 DevSecOps 관점에서 설계 초기부터 보안을 고려한 서버리스 애플리케이션 구조를 수립하고, 주기적인 검토와 모니터링을 통해 보안 수준을 유지해야 합니다. 개발자, 운영자, 보안 담당자가 긴밀히 협업하는 조직 문화 역시 서버리스 보안의 성공적인 도입을 위한 핵심 요소입니다.