보안 설계 개요

Cloud Run이 보안 권장사항을 구현하여 데이터를 보호하는 방법과 이러한 기능을 사용하여 보안 요구사항을 충족하는 방법을 알아보세요.

아키텍처

Cloud Run은 Google이 일주일 동안 수십억 개의 컨테이너를 배포하고 Gmail 및 YouTube를 비롯한 세계 최대의 사이트를 호스팅하는 동일한 환경의 Borg에서 실행됩니다. Cloud Run 구성요소는 동일한 인프라를 공유하므로 다른 Google 서비스와 동일한 보안 표준에 따라 빌드됩니다.

Google의 보안 접근 방식에 대해 자세히 알아보려면 Google 보안 개요 백서를 읽어보세요.

Cloud Run 아키텍처에는 다양한 인프라 구성요소가 포함되어 있습니다. 다음 다이어그램은 이러한 구성요소가 서비스에 대한 요청Cloud Run Admin API 호출에 응답하는 방법을 보여줍니다.

Cloud Run 인프라 구성요소 다이어그램
그림 1. Cloud Run 인프라 구성요소의 다이어그램

서비스 요청

커스텀 도메인을 통해 또는 run.app URL로 직접 Cloud Run 서비스에 대한 요청을 실행하면 다음 구성요소에서 요청을 처리합니다.

  • Google 프런트엔드(GFE): run.app URL에 요청할 때 TLS 연결을 종료하고 DoS 공격에 대한 보호를 적용하는 Google 글로벌 인프라 서비스입니다. Cloud Run은 리전 서비스이므로 run.app URL을 통해 요청에 액세스하면 GFE는 적절한 리전의 Cloud Run으로 요청을 전달합니다.
  • Google Cloud 부하 분산기: 커스텀 도메인을 처리하도록 Cloud Load Balancing을 설정하면 앞에서 언급한 GFE 기능이 포함됩니다. 또한 트래픽 관리 및 액세스 제어와 같은 추가 기능을 수행하도록 Google Cloud 부하 분산기를 구성할 수 있습니다.
  • HTTP 프록시: 수신되는 HTTP 요청을 샌드박스 처리된 애플리케이션의 인스턴스로 부하 분산하는 영역 구성요소입니다.
  • 스케줄러: 샌드박스 처리된 애플리케이션의 인스턴스를 호스팅할 앱 서버를 선택합니다.
  • 앱 서버: 각 애플리케이션 컨테이너의 인스턴스를 실행하는 샌드박스를 만들고 관리하는 영역 및 멀티 테넌트 컴퓨팅 노드입니다.
  • 샌드박스: 사용자 코드를 시스템 및 다른 고객으로부터 격리합니다. 자세한 내용은 다음 Compute 보안 섹션을 참조하세요.
  • 스토리지: 지원되는 Container Registry에서 가져온 컨테이너 이미지에 대한 파일 서버 인터페이스를 노출합니다.
  • 메타데이터 서버: 샌드박스 전용 사용자 인증 정보 및 메타데이터를 제공합니다.
  • 아웃바운드 네트워킹: 샌드박스에서 시작한 아웃바운드 트래픽을 관리합니다.

Cloud Run Admin API 호출

Cloud Run Admin API에 대한 요청을 실행하면 다음 구성요소에서 요청을 처리합니다.

  • Google 프런트엔드(GFE): DoS 공격에 대한 보호 조치를 적용하고 TLS 연결을 종료하는 Google 글로벌 인프라 서비스입니다.
  • 제어 영역: 애플리케이션 구성을 검증하고 스토리지에 씁니다.
  • 구성 스토리지: 앱 서버, 스케줄러, 네트워킹 요소와 같은 다른 구성요소에서 액세스할 수 있도록 애플리케이션 구성을 SpannerBigtable에 저장합니다.

컴퓨팅 보안

Cloud Run 구성요소는 Google의 컨테이너 관리 시스템인 Borg에서 실행됩니다. 컨테이너의 경우 Cloud Run은 두 가지 실행 환경을 제공합니다.

  • 1세대: gVisor 컨테이너 보안 플랫폼을 기반으로 하는 이 옵션에는 더 작은 공격 표면을 제공하는 작은 코드베이스가 있습니다. 모든 변경사항은 보안 검토되며 대부분의 변경사항은 메모리 안전 방식으로 작성됩니다. 보안 컴퓨팅 모드(seccomp) 시스템 호출 필터링을 사용하여 더욱 강화됩니다.

  • 2세대: Linux microVM을 기반으로 이 옵션은 커스텀 워크로드에 대한 더 높은 호환성 및 성능을 제공합니다. seccomp 시스템 호출 필터링 및 Sandbox2 Linux 네임스페이스를 사용하면 보안이 강화됩니다.

이러한 실행 환경은 다음 다이어그램과 같이 개별 VM에 해당하는 하드웨어 지원 레이어(x86 가상화) 및 소프트웨어 커널 레이어로 구성된 2개의 샌드박스 레이어를 사용합니다.

두 실행 환경 모두에서 사용자 컨테이너는 샌드박스 레이어 두 개를 통해 다른 워크로드와 격리됩니다.
그림 2. 두 실행 환경 모두에서 사용자 컨테이너는 샌드박스 레이어 두 개를 통해 다른 워크로드와 격리됩니다.

서비스가 컨테이너 보안을 위해 제3자 인프라를 사용하는 경우 2세대 실행 환경을 사용합니다.

데이터 암호화 및 스토리지

Cloud Run 인스턴스는 스테이트리스(Stateless)입니다. 인스턴스를 종료하면 상태가 삭제됩니다. 따라서 모든 새 인스턴스가 깔끔한 슬레이트에서 시작됩니다.

스테이트풀(Stateful) 데이터가 있는 경우 다음과 같은 방법으로 데이터를 관리할 수 있습니다.

그 외에도 Cloud Run이 다른 여러 Google Cloud 시스템과 통합되어 다음과 같은 방법으로 데이터를 관리하고 액세스합니다.

Google Cloud의 모든 데이터에는 저장 데이터 암호화가 적용됩니다.

Cloud Run은 액세스 투명성데이터 상주를 포함하여 Google Cloud 전반의 데이터 보호 및 투명성 이니셔티브를 준수합니다.

네트워크 보안

Cloud Run 및 기타 모든 Google Cloud 서비스는 전송 중인 모든 트래픽을 암호화합니다. 이그레스 및 인그레스 제어 모두 Cloud Run 서비스 또는 작업에 통합하여 추가 제한 레이어를 추가할 수 있습니다. 조직 관리자는 조직 정책을 설정하여 이그레스 및 인그레스를 적용할 수도 있습니다.

이그레스(아웃바운드) 트래픽

Cloud Run에서 나가는 이그레스 트래픽은 전송 계층 4(TCP 및 UDP)로 처리됩니다.

기본적으로 이그레스 트래픽은 Cloud Run을 종료할 때 다음 경로 중 하나를 사용합니다.

  • 대상 타겟이 VPC 네트워크에 있음: 트래픽이 직접 VPC 이그레스 또는 서버리스 VPC 액세스 커넥터를 사용하여 프로젝트의 VPC 네트워크 또는 공유 VPC 네트워크로 이동합니다 커넥터는 VPC 네트워크에 직접 위치한 리전별 리소스입니다.
  • 대상 타겟이 VPC 네트워크에 없음: 트래픽이 Google 네트워크 또는 공개 인터넷 내의 대상 타겟으로 직접 라우팅됩니다.
Cloud Run 인프라 구성요소 다이어그램
그림 3. 이그레스 트래픽은 커넥터를 통해 VPC 네트워크로 프록시 처리될 수 있습니다. 또한 VPC 또는 VPC 이외의 네트워크(미리보기)로 직접 이동할 수도 있습니다.

이그레스 제어

이그레스 트래픽을 더 세부적으로 제어하려면 VPC 이그레스 설정을 사용하여 직접 VPC 이그레스 또는 커넥터를 통해 VPC 네트워크로 모든 트래픽을 라우팅합니다.

VPC 네트워크에 있으면 VPC 도구를 사용하여 트래픽을 관리할 수 있습니다. 예를 들면 다음과 같습니다.

조직 관리자는 허용된 VPC 이그레스 설정(Cloud Run) 목록 제약조건을 설정하여 이그레스를 적용할 수도 있습니다.

인그레스(인바운드) 트래픽

이그레스와 달리 Cloud Run의 인그레스 트래픽은 애플리케이션 레이어 7(HTTP)에 있습니다.

Cloud Run은 다음 소스에서 들어오는 인그레스 트래픽을 허용합니다.

  • 공개 인터넷: 요청이 외부 HTTP(S) 부하 분산기를 통해 트래픽을 라우팅하는 옵션과 함께 공개 소스에서 Cloud Run 서비스로 직접 라우팅됩니다.

  • VPC 네트워크: 비공개 Google 액세스, Private Service Connect 또는 내부 애플리케이션 부하 분산기를 사용하여 VPC 네트워크에서 Cloud Run 서비스로 트래픽을 라우팅할 수 있습니다. 이 유형의 트래픽은 항상 Google 네트워크 내에 유지됩니다.

  • Google Cloud 서비스: 트래픽이 BigQuery 또는 Cloud Run 자체와 같은 다른 Google Cloud 서비스에서 Cloud Run으로 직접 이동합니다. 경우에 따라 VPC 네트워크를 통해 라우팅하도록 이러한 서비스를 구성할 수도 있습니다. 이 유형의 트래픽은 항상 Google 네트워크 내에 유지됩니다.

Cloud Run 인프라 구성요소 다이어그램
그림 4. Cloud Run에 대한 레이어 7 HTTP 네트워크 인그레스(인바운드) 트래픽입니다.

Cloud Run의 네트워크 보안 모델에는 다음과 같은 인그레스 트래픽 속성이 포함됩니다.

  • run.app URL에 대한 직접 트래픽: 트래픽이 Cloud Run에 들어가려면 run.app URL에 항상 HTTPS가 필요합니다. Google의 프런트엔드 제공 인프라는 TLS를 종료한 후 암호화된 채널을 통해 트래픽을 Cloud Run 및 컨테이너로 전달합니다.
  • Google Cloud 부하 분산기와 연결된 커스텀 도메인에 대한 트래픽: HTTPS 트래픽의 경우 Google Cloud 내부 및 외부 부하 분산기가 TLS를 종료하고 트래픽을 암호화된 채널을 통해 Cloud Run 및 컨테이너로 전달합니다. Google Cloud 부하 분산기를 사용하면 IAP, Google Cloud Armor, SSL 정책과 같은 추가 보안 기능을 적용할 수도 있습니다.

Cloud Run에 대한 VPC 네트워크 트래픽 구성에 대한 자세한 내용은 VPC 네트워크에서 요청 수신을 참조하세요.

인그레스 제어

Cloud Run 인그레스 제어는 트래픽이 신뢰할 수 있는 소스에서만 들어오도록 Cloud Run에 들어오는 트래픽을 관리합니다.

내부 클라이언트만 제공하는 Cloud Run 서비스의 경우 다음 내부 소스의 트래픽만 Cloud Run에 들어갈 수 있도록 '내부' 설정을 구성할 수 있습니다.

  • VPC 네트워크를 통해 모든 트래픽을 라우팅하는 Cloud Run 서비스를 포함한 프로젝트 또는 VPC 서비스 제어 경계의 VPC 네트워크
  • Cloud Run 서비스가 연결된 공유 VPC 네트워크
  • 프로젝트 또는 VPC 서비스 제어 경계에 있는 일부 Google Cloud 서비스(예: BigQuery)
  • VPC 네트워크를 통과하여 Cloud Run에 도달하는 온프레미스 클라이언트의 트래픽

조직 관리자는 조직 정책을 설정하여 인그레스를 적용할 수도 있습니다.

인그레스 제어에 대한 자세한 내용은 Cloud Run에 대한 인그레스 제한을 참조하세요.

액세스 제어

액세스 제어는 Cloud Run 서비스 및 작업에 액세스할 수 있는 사용자를 제한하는 데 사용됩니다.

서비스 또는 작업을 관리할 수 있는 사용자

Cloud Run 서비스 또는 작업을 관리하는 사용자를 제어하기 위해 Cloud Run은 IAM을 사용하여 사용자 및 서비스 계정을 승인합니다.

서비스 또는 작업이 액세스할 수 있는 항목

Cloud Run 워크로드가 네트워크를 통해 연결할 수 있는 대상을 제어하려면 앞에서 네트워크 보안 섹션에 설명된 대로 VPC 네트워크를 통해 모든 트래픽을 강제 적용하고 VPC 방화벽 규칙을 적용하면 됩니다.

직접 VPC 이그레스를 사용하는 경우 네트워크 태그를 Cloud Run 리소스에 연결하고 방화벽 규칙의 네트워크 태그를 참조할 수 있습니다. 서버리스 VPC 액세스를 사용하는 경우 커넥터 인스턴스에 방화벽 규칙을 적용할 수 있습니다.

IAM을 사용하여 Cloud Run 서비스 또는 작업에서 액세스할 수 있는 리소스를 제어합니다. 서비스 및 작업에는 기본적으로 Compute Engine 기본 서비스 계정이 사용됩니다. 민감한 워크로드의 경우 워크로드가 작업을 수행하는 데 필요한 권한만 부여할 수 있도록 전용 서비스 계정을 사용합니다. 서비스별 ID를 사용하여 전용 서비스 계정을 관리하는 방법을 자세히 알아보세요. Cloud Run이 전용 서비스 계정을 만들도록 사용자를 안내하는 방법은 추천자를 사용하여 Cloud Run 서비스 보호를 참조하세요.

서비스를 호출하거나 작업을 실행할 수 있는 사용자

Cloud Run은 서비스를 호출하거나 작업을 실행하는 사용자를 제어하는 여러 옵션을 제공합니다.

인그레스 제어

네트워킹 수준에서 Cloud Run 서비스의 인그레스를 관리하려면 이전 섹션의 인그레스 제어를 참조하세요.

Cloud Run 작업은 요청을 처리하지 않으므로 작업 실행 시 인그레스 제어를 사용하지 않습니다.

IAM 서비스

Cloud Run은 모든 요청에 대해 IAM 검사를 수행합니다.

run.routes.invoke 권한을 사용하여 다음과 같은 방법으로 Cloud Run 서비스에 액세스할 수 있는 사용자를 구성합니다.

  • 서비스 액세스를 허용할 서비스 계정 또는 그룹을 선택할 수 있는 권한을 부여합니다. 모든 요청에는 승인된 서비스 계정 중 하나에 대해 Google에서 서명한 OpenID Connect ID 토큰이 포함된 HTTP 승인 헤더가 있어야 합니다.

  • 인증되지 않은 액세스를 허용하려면 모든 사용자에게 권한을 부여합니다.

조직의 구성원만 Cloud Run 서비스를 호출할 수 있도록 하려면 조직 관리자가 도메인 제한 공유 조직 정책을 설정하면 됩니다. 조직 관리자는 특정 Cloud Run 서비스를 선택 해제할 수도 있습니다. 도메인 제한 공유가 적용될 때 공개 Cloud Run 서비스를 만드는 방법을 알아보세요.

인증의 일반적인 사용 사례와 Cloud Run에서 IAM으로 액세스 제어를 사용하는 방법을 자세히 알아보세요.

서비스에 대한 부하 분산기 보안 기능

Cloud Run 서비스를 Google Cloud 부하 분산기의 백엔드로 구성한 경우 다음 방법을 사용하여 이 경로를 보호합니다.

IAM 작업

run.jobs.run 권한을 사용하여 다음과 같은 방법으로 Cloud Run 작업을 실행할 수 있는 사용자를 구성합니다.

  • 작업에 대한 액세스를 허용할 서비스 계정 또는 그룹을 선택할 수 있는 권한을 부여합니다. Cloud Scheduler와 같은 다른 서비스에 의해 작업이 트리거되는 경우 사용되는 서비스 계정에는 작업에 대한 run.jobs.run 권한이 있어야 합니다.

  • 로그인한 사용자에게 Google Cloud 콘솔에서 작업을 실행할 수 있는 권한을 부여합니다. Cloud Scheduler와 같은 다른 서비스에 의해 작업이 트리거되는 경우 사용되는 서비스 계정 또는 그룹에 작업에 대한 run.jobs.run 권한이 있어야 합니다.

조직의 구성원만 Cloud Run 작업을 실행할 수 있도록 하려면 조직 관리자가 도메인 제한 공유 제약조건을 설정하면 됩니다. 조직 관리자는 특정 Cloud Run 작업을 선택 해제할 수도 있습니다.

VPC 서비스 제어

Cloud Run 서비스는 VPC 서비스 제어 경계의 일부가 될 수 있으므로 VPC 서비스 제어를 활용하여 액세스를 통제하고 유출 위험을 완화할 수 있습니다. VPC 서비스 제어 사용에 대해 자세히 알아보세요.

공급망 보안

Google Cloud 빌드팩 관리형 기본 이미지

Google Cloud 빌드팩을 사용하여 소스 코드에서 배포된 서비스는 Google에서 제공하는 기본 이미지를 사용하여 빌드됩니다. Google은 이러한 기본 이미지를 유지하고 매주 정기적으로 패치를 제공합니다. 심각한 보안 취약점과 관련된 응급 상황 시 몇 시간 내에 패치를 제공할 수 있습니다.

Cloud Run 내부 공급망 보안

Borg에서 실행되기 때문에 Cloud Run은 Gmail 및 YouTube와 같은 모든 Google 서비스에서 표준인 동일한 공급망 보안을 모두 구현합니다. BeyondProdBorg용 Binary Authorization 백서에서 Google 내부 공급망 관행에 대해 자세히 알아보세요.

Binary Authorization

Cloud Run에는 Cloud Run에 신뢰할 수 있는 컨테이너 이미지만 배포되도록 Binary Authorization이 기본적으로 지원됩니다. 자세한 내용은 Cloud Run 설정 개요를 참조하세요.

Software Delivery Shield

Software Delivery Shield를 사용하면 Cloud 관리자는 Google Cloud 콘솔의 패널에서 배포된 컨테이너의 공급망에 대한 보안 정보를 볼 수 있습니다. 자세한 내용은 Software Delivery Shield 세부정보 보기를 참조하세요.

다음 단계

네트워킹 설정 방법에 대한 엔드 투 엔드 연습은 Cloud Run 서버리스 네트워킹 가이드를 참조하세요.