Cloud Run을 사용하여 보안 서버리스 아키텍처 배포

Last reviewed 2023-03-10 UTC

이 콘텐츠는 2023년 3월에 마지막으로 업데이트되었으며 작성된 당시의 상황을 나타냅니다. Google의 보안 정책 및 시스템은 고객 보호를 지속적으로 개선함에 따라 앞으로도 계속 변경될 수 있습니다.

서버리스 아키텍처를 사용하면 서버를 프로비저닝하거나 유지관리하지 않고도 소프트웨어와 서비스를 개발할 수 있습니다. 서버리스 아키텍처를 사용하여 다양한 서비스를 위한 애플리케이션을 빌드할 수 있습니다.

이 문서에서는 DevOps 엔지니어, 보안 설계자, 애플리케이션 개발자에게 Cloud Run을 사용하는 서버리스 애플리케이션을 보호하는 방법을 전문가의 의견과 함께 안내합니다. 이 문서는 다음으로 구성된 보안 청사진의 일부입니다.

  • Terraform 구성 및 스크립트 집합이 포함된 GitHub 저장소
  • 청사진(이 문서)으로 구현하는 아키텍처, 디자인, 보안 제어에 대한 가이드

먼저 Google Cloud 엔터프라이즈 기반 청사진을 배포하지 않고 이 청사진을 배포할 수 있지만 이 문서에서는 Google Cloud 엔터프라이즈 기반 청사진에 설명된 대로 기본적인 보안 제어 세트를 이미 구성했다고 가정합니다. 이 문서에 설명된 아키텍처는 기반에 추가 제어를 계층화하여 서버리스 애플리케이션을 보호하는 데 유용합니다.

Cloud Security Alliance(CSA)는 서버리스 애플리케이션과 관련된 주요 보안 제어를 정의하는 데 도움이 되도록 서버리스 애플리케이션에 대한 12가지 주요 위험을 게시했습니다. 이 청사진에 사용된 보안 제어는 이 문서에 설명된 다양한 사용 사례와 관련된 위험을 해결하기 위해 설계되었습니다.

서버리스 사용 사례

이 청사진은 다음 사용 사례를 지원합니다.

Cloud Run 함수와 Cloud Run의 차이점은 다음과 같습니다.

  • Cloud Run 함수는 데이터베이스의 데이터 변경 또는 Pub/Sub와 같은 메시지 시스템에서 메시지 수신과 같은 이벤트에 의해 트리거됩니다. Cloud Run은 HTTP 요청과 같은 요청에 의해 트리거됩니다.
  • Cloud Run 함수는 지원되는 런타임 집합으로 제한됩니다. Cloud Run은 모든 프로그래밍 언어와 함께 사용할 수 있습니다.
  • Cloud Run 함수는 컨테이너와 웹 서버 또는 언어 런타임을 제어하는 인프라를 관리하여 사용자가 코드에 집중할 수 있도록 합니다. Cloud Run은 이러한 서비스를 직접 실행할 수 있는 유연성을 제공하므로 컨테이너 구성을 제어할 수 있습니다.

Cloud Run과 Cloud Run 함수 간 차이점에 대한 자세한 내용은 Google Cloud 컴퓨팅 옵션 선택을 참조하세요.

아키텍처

이 청사진을 사용하면 공유 VPC로 Cloud Run에서 서버리스 애플리케이션을 실행할 수 있습니다. 모든 네트워킹 리소스에 대해 네트워크 정책 및 제어를 중앙 집중화하기 때문에 공유 VPC를 사용하는 것이 좋습니다. 또한 공유 VPC는 엔터프라이즈 기반 청사진에 배포됩니다.

다음 이미지는 공유 VPC 네트워크에서 서버리스 애플리케이션을 실행하는 방법을 보여줍니다.

서버리스 청사진의 아키텍처

이전 다이어그램에 표시된 아키텍처에는 다음 Google Cloud 서비스 및 기능 조합이 사용됩니다.

  • 외부 애플리케이션 부하 분산기는 서버리스 애플리케이션이 인터넷에서 필요로 하는 데이터를 수신하여 Cloud Run으로 전달합니다. 외부 애플리케이션 부하 분산기는 레이어 7 부하 분산기입니다.
  • Google Cloud Armor는 서비스 거부(DoS) 및 웹 공격으로부터 서버리스 애플리케이션을 보호하는 데 도움이 되는 웹 애플리케이션 방화벽 역할을 합니다.
  • Cloud Run을 사용하면 컨테이너에서 애플리케이션 코드를 실행하고 인프라를 대신 관리할 수 있습니다. 이 청사진에서 내부 및 Cloud Load Balancing 인그레스 설정은 Cloud Run이 외부 애플리케이션 부하 분산기의 요청만 수락하도록 Cloud Run에 대한 액세스를 제한합니다.
  • 서버리스 VPC 액세스 커넥터는 서버리스 VPC 액세스를 사용하여 서버리스 애플리케이션을 VPC 네트워크에 연결합니다. 서버리스 VPC 액세스는 서버리스 애플리케이션에서 VPC 네트워크로의 요청이 인터넷에 노출되지 않도록 보장하는 데 도움이 됩니다. 서버리스 VPC 액세스를 사용하면 Cloud Run이 VPC 서비스 제어를 지원하는 다른 서비스, 스토리지 시스템, 리소스와 통신할 수 있습니다.

    기본적으로 서비스 프로젝트에 서버리스 VPC 액세스 커넥터를 만듭니다. Secure Cloud Run Network 모듈을 실행할 때 connector_on_host_project 입력 변수에 true를 지정하여 호스트 프로젝트에 서버리스 VPC 액세스 커넥터를 만들 수 있습니다. 자세한 내용은 구성 방법 비교를 참조하세요.

  • 가상 프라이빗 클라우드(VPC) 방화벽 규칙은 Compute Engine에서 호스팅된 회사 서버 또는 Cloud Storage에 저장된 회사 데이터와 같이 리소스를 호스팅하는 서브넷으로 데이터 흐름을 제어합니다.

  • VPC 서비스 제어는 승인, 액세스 제어 및 보안 데이터 교환을 설정하여 Cloud Run 서비스와 리소스를 격리하는 보안 경계를 만듭니다. 이 경계는 들어오는 콘텐츠를 보호하고, 추가 액세스 제어 및 모니터링을 설정하여 애플리케이션을 격리하며, 애플리케이션에서 Google Cloud의 거버넌스를 분리하도록 설계되었습니다. 거버넌스에는 키 관리 및 로깅이 포함됩니다.

  • 공유 VPC를 사용하면 서비스 프로젝트에서 서버리스 VPC 액세스 커넥터를 호스트 프로젝트에 연결할 수 있습니다.

  • Cloud Key Management Service(Cloud KMS)는 이 청사진에 서버리스 애플리케이션, Artifact Registry 및 Cloud Run을 포함하여 서비스에서 사용하는 CMEK(고객 관리 암호화 키)를 저장합니다.

  • Identity and Access Management(IAM)Resource Manager는 액세스를 제한하고 리소스를 격리하는 데 도움이 됩니다. 액세스 제어 및 리소스 계층 구조는 최소 권한의 원칙을 따릅니다.

대체 아키텍처: Cloud Run(공유 VPC 네트워크 사용 안 함)

공유 VPC 네트워크를 사용하지 않는 경우에는 공유 VPC 네트워크 없이 VPC 서비스 제어 경계에서 Cloud Run 및 서버리스 애플리케이션을 배포할 수 있습니다. 허브 및 스포크 토폴로지를 사용하는 경우 이 대안 아키텍처를 구현할 수 있습니다.

다음 이미지는 공유 VPC 없이 서버리스 애플리케이션을 배포할 수 있는 방법을 보여줍니다.

서버리스 청사진의 대체 아키텍처입니다.

앞의 다이어그램에 표시된 아키텍처는 이전 섹션인 권장 아키텍처: Cloud Run(공유 VPC 사용)에 대해 설명한 것과 유사한 Google Cloud 서비스 및 기능의 조합을 사용합니다.

조직 구조

리소스를 그룹화하여 리소스를 관리하고 개발 및 테스트 환경을 프로덕션 환경에서 분리할 수 있습니다. Resource Manager를 사용하면 프로젝트, 폴더, 조직별로 리소스를 논리적으로 그룹화할 수 있습니다.

다음 다이어그램은 부트스트랩, 공통, 프로덕션, 비프로덕션(또는 테스트), 개발 등의 여러 다른 환경을 나타내는 폴더로 나눠진 리소스 계층 구조를 보여줍니다. 이 계층 구조는 엔터프라이즈 기반 청사진에 설명된 계층 구조를 기반으로 합니다. 청사진이 지정하는 프로젝트를 Common, Production, Non-production, Dev 폴더에 배포합니다.

서버리스 청사진의 조직 구조입니다.

다음 섹션에서는 이 다이어그램에 대해 더 자세히 설명합니다.

폴더

폴더를 사용하여 프로덕션 환경 및 거버넌스 서비스를 비프로덕션 및 테스트 환경에서 격리합니다. 다음 표에서는 이 청사진에 사용되는 엔터프라이즈 기반 청사진의 폴더에 대해 설명합니다.

폴더 설명
Bootstrap 엔터프라이즈 기반 청사진을 배포하는 데 필요한 리소스를 포함합니다.
Common 보안 프로젝트와 같은 조직의 중앙 집중화된 서비스를 포함합니다.
Production 테스트를 거쳐 고객이 사용할 준비가 된 클라우드 리소스가 있는 프로젝트를 포함합니다. 이 청사진의 Production 폴더에는 서비스 프로젝트 및 호스트 프로젝트가 포함되어 있습니다.
Non-production 현재 출시용으로 테스트 및 스테이징된 클라우드 리소스가 있는 프로젝트가 포함됩니다. 이 청사진의 Non-production 폴더에는 서비스 프로젝트 및 호스트 프로젝트가 포함되어 있습니다.
Dev 현재 개발 중인 클라우드 리소스가 있는 프로젝트를 포함합니다. 이 청사진의 Dev 폴더에는 서비스 프로젝트 및 호스트 프로젝트가 포함되어 있습니다.

조직의 폴더 구조에 맞게 이러한 폴더 이름을 변경할 수 있지만 폴더 구조를 비슷하게 유지하는 것이 좋습니다. 자세한 내용은 조직 구조를 참조하세요. 다른 폴더 구조는 Google Cloud 랜딩 영역의 리소스 계층 구조 결정을 참조하세요.

프로젝트

프로젝트를 사용하여 환경의 리소스를 격리합니다. 다음 표에서는 조직 내에 필요한 프로젝트에 대해 설명합니다. 이러한 프로젝트 이름을 변경할 수 있지만 프로젝트 구조를 비슷하게 유지하는 것이 좋습니다.

프로젝트 설명
호스트 프로젝트 이 프로젝트에는 방화벽 인그레스 규칙과 내부 IP 주소가 있는 리소스가 포함됩니다(VPC 네트워크에 연결에 설명된 대로). 공유 VPC를 사용할 때는 프로젝트 하나를 호스트 프로젝트로 지정하고 여기에 하나 이상의 다른 서비스 프로젝트를 연결합니다.

Terraform 코드를 적용할 때 이 프로젝트의 이름을 지정하면 청사진이 서비스를 배포합니다.
서비스 프로젝트 이 프로젝트에는 서버리스 애플리케이션, Cloud Run, 서버리스 VPC 액세스 커넥터가 포함됩니다. 서비스 프로젝트가 공유 VPC 네트워크에 참여할 수 있도록 서비스 프로젝트를 호스트 프로젝트에 연결합니다.

Terraform 코드를 적용할 때 이 프로젝트의 이름을 지정합니다. 청사진은 Cloud Run, Google Cloud Armor, 서버리스 VPC 액세스 커넥터 및 부하 분산기를 배포합니다.
보안 프로젝트 이 프로젝트에는 Cloud KMS 및 Secret Manager와 같은 보안 관련 서비스가 포함됩니다.

Terraform 코드를 적용할 때 이 프로젝트의 이름을 지정하면 청사진이 Cloud KMS를 배포합니다. 보안 Cloud Run 활용 모듈을 사용하면 Artifact Registry도 배포됩니다.

보안 기반 청사진을 배포한 후 이 청사진을 배포하는 경우 이 프로젝트는 엔터프라이즈 기반 청사진에서 생성되는 보안 비밀 프로젝트입니다. 엔터프라이즈 기반 청사진 프로젝트에 대한 자세한 내용은 프로젝트를 참조하세요.

엔터프라이즈 기반 청사진 없이 이 청사진의 여러 인스턴스를 배포하는 경우 각 인스턴스에는 자체 보안 프로젝트가 있습니다.

프로젝트에 역할 및 그룹 매핑

조직 내 다른 사용자 그룹에 서버리스 아키텍처를 구성하는 프로젝트에 대한 액세스 권한을 부여해야 합니다. 다음 표에서는 생성된 프로젝트에서 사용자 그룹 및 역할 할당을 위한 청사진 권장사항에 대해 설명합니다. 조직의 기존 구조에 맞게 그룹을 맞춤설정할 수 있지만 책임 구분 및 역할 할당을 비슷하게 유지하는 것이 좋습니다.

그룹 프로젝트 역할
서버리스 관리자

grp-gcp-serverless-admin@example.com
서비스 프로젝트
서버리스 보안 관리자

grp-gcp-serverless-security-admin@example.com
보안 프로젝트
Cloud Run 개발자

grp-gcp-secure-cloud-run-developer@example.com
보안 프로젝트
Cloud Run 사용자

grp-gcp-secure-cloud-run-user@example.com
서비스 프로젝트

보안 제어

이 섹션에서는 서버리스 아키텍처의 보안을 유지하는 데 사용하는 Google Cloud의 보안 제어에 대해 설명합니다. 고려해야 할 중요한 보안 원칙은 다음과 같습니다.

  • 최소 권한의 원칙에 따라 액세스를 보호하여 개체에 작업을 수행하는 데 필요한 권한만 부여합니다.
  • 세분화 설계, 조직 정책, 방화벽 정책을 통해 네트워크 연결을 보호합니다.
  • 각 서비스에 대한 구성을 보호합니다.
  • 서버리스 워크로드를 호스팅하는 환경의 위험 수준 및 보안 요구사항을 이해합니다.
  • 감지, 조사, 대응을 허용하도록 충분한 모니터링 및 로깅을 구성합니다.

서버리스 애플리케이션의 보안 제어

네트워크에서 트래픽을 보호하고, 액세스를 제어하고, 데이터를 암호화하는 제어 기능을 사용해서 서버리스 애플리케이션을 보호할 수 있습니다.

시스템 제어 빌드

서버리스 애플리케이션을 배포할 때 Artifact Registry를 사용하여 컨테이너 이미지 및 바이너리를 저장합니다. Artifact Registry는 CMEK를 지원하므로 자체 암호화 키를 사용해서 저장소를 암호화할 수 있습니다.

SSL 트래픽

서버리스 애플리케이션에 대한 HTTPS 트래픽을 지원하려면 외부 애플리케이션 부하 분산기에 대한 SSL 인증서를 구성합니다. 기본적으로 자체 서명 인증서를 사용합니다. 이 인증서는 Terraform 코드를 적용한 후 관리형 인증서로 변경할 수 있습니다. 관리형 인증서 설치 및 사용에 대한 자세한 내용은 Google 관리 SSL 인증서 사용을 참조하세요.

네트워크 및 방화벽 규칙

가상 프라이빗 클라우드(VPC) 방화벽 규칙은 경계로의 데이터 흐름을 제어합니다. restricted.googleapis.com 특수 도메인 이름에서의 특정 TCP 포트 443 연결을 제외하고 모든 이그레스를 거부하는 방화벽 규칙을 만듭니다. restricted.googleapis.com 도메인을 사용하면 다음과 같은 이점이 있습니다.

  • 워크로드가 Google API 및 서비스와 통신할 때 비공개 Google 액세스를 사용해서 네트워크 공격 표면을 줄이는 데 도움이 됩니다.
  • VPC 서비스 제어를 지원하는 서비스만 사용됩니다.

자세한 내용은 비공개 Google 액세스 구성을 참조하세요.

경계 제어

권장 아키텍처 다이어그램에 표시된 대로 서버리스 애플리케이션의 리소스를 개별 경계에 배치합니다. 이 경계는 의도치 않은 액세스 및 데이터 무단 반출로부터 서버리스 애플리케이션을 보호하는 데 도움이 됩니다.

액세스 정책

특정 ID(사용자 또는 서비스)만 리소스 및 데이터에 액세스할 수 있도록 IAM 그룹 및 역할을 사용 설정합니다.

특정 리소스만 프로젝트에 액세스하도록 하려면 Google 조직에 대해 액세스 정책을 사용 설정합니다. 자세한 내용은 액세스 수준 속성을 참조하세요.

Identity and Access Proxy

환경에 이미 IAP(Identity and Access Proxy)가 포함된 경우 IAP를 사용하여 서버리스 애플리케이션의 트래픽을 승인하도록 외부 애플리케이션 부하 분산기를 구성할 수 있습니다. IAP를 사용하면 서버리스 애플리케이션에 대한 중앙 승인 레이어를 설정하여 네트워크 수준의 방화벽을 사용하는 대신 애플리케이션 수준 액세스 제어를 사용할 수 있습니다.

애플리케이션에 IAP를 사용 설정하려면 loadbalancer.tf 파일에서 iap_config.enabletrue로 설정합니다.

IAP에 대한 자세한 내용은 IAP(Identity-Aware Proxy) 개요를 참조하세요.

서비스 계정 및 액세스 제어

서비스 계정은 사용자 대신 API 요청을 실행하기 위해 Google Cloud에서 사용할 수 있는 ID입니다. 책임 분리를 구현하려면 특정 목적에 따라 서로 다른 역할을 갖는 서비스 계정을 만듭니다. 서비스 계정은 다음과 같습니다.

  • 다음 역할이 있는 Cloud Run 서비스 계정(cloud_run_sa):

    • roles/run.invoker
    • roles/secretmanager.secretAccessor

    자세한 내용은 Cloud Run에서 보안 비밀에 액세스하도록 허용을 참조하세요.

  • roles/compute.networkUser 역할이 있는 서버리스 VPC 액세스 커넥터 계정(gcp_sa_vpcaccess)입니다.

  • roles/compute.networkUser 역할이 있는 두 번째 서버리스 VPC 액세스 커넥터 계정(cloud_services)입니다.

    서버리스 VPC 액세스 커넥터에 대한 이러한 서비스 계정은 커넥터가 호스트 프로젝트에 방화벽 인그레스 및 이그레스 규칙을 생성할 수 있도록 하기 위해 필요합니다. 자세한 내용은 서비스 프로젝트의 서비스 계정에 권한 부여를 참조하세요.

  • roles/vpcaccess.user 역할이 있는 Cloud Run(run_identity_services)을 실행하는 서비스 ID입니다.

  • roles/editor 역할이 있는 Google API용 서비스 에이전트(cloud_services_sa)입니다. 이 서비스 계정을 사용하면 Cloud Run이 서버리스 VPC 액세스 커넥터와 통신할 수 있습니다.

  • roles/artifactregistry.reader 역할이 있는 Cloud Run(serverless_sa)의 서비스 ID입니다. 이 서비스 계정은 Artifact Registry 및 CMEK 암호화 및 복호화 키에 대한 액세스 권한을 제공합니다.

키 관리

Artifact Registry 및 Cloud Run에서 데이터를 보호하는 데 도움이 되도록 CMEK 키를 사용합니다. 다음 암호화 키를 사용합니다.

  • 서버리스 애플리케이션의 코드를 증명하는 Artifact Registry용 소프트웨어 키
  • Cloud Run이 배포하는 컨테이너 이미지를 암호화하는 암호화 키

Terraform 구성을 적용할 때 키가 저장되는 지리적 위치를 결정하는 CMEK 위치를 지정합니다. CMEK 키가 리소스와 동일한 리전에 있어야 합니다. 기본적으로 CMEK 키는 30일마다 순환됩니다.

보안 비밀 관리

Cloud Run은 서버리스 애플리케이션에 필요할 수 있는 보안 비밀을 저장하기 위해 Secret Manager를 지원합니다. 이러한 보안 비밀에는 API 키 및 데이터베이스 사용자 이름과 비밀번호가 포함될 수 있습니다. 보안 비밀을 마운트된 볼륨으로 노출하기 위해서는 기본 모듈volume_mountsvolumes 변수를 사용합니다.

엔터프라이즈 기반 청사진으로 이 청사진을 배포할 때는 Terraform 코드를 적용하기 전에 보안 비밀 프로젝트에 보안 비밀을 추가해야 합니다. 청사진은 Cloud Run 서비스 계정에 Secret Manager 보안 비밀 접근자 역할을 부여합니다. 자세한 내용은 보안 비밀 사용을 참조하세요.

조직 정책

이 청사진은 조직 정책 제약조건에 제약조건을 추가합니다. 엔터프라이즈 기반 청사진에 사용되는 제약조건에 대한 자세한 내용은 조직 정책 제약조건을 참조하세요.

다음 표에서는 이 청사진의 Secure Cloud Run Security 모듈에 정의된 추가 조직 정책 제약조건을 설명합니다.

정책 제약조건 설명 권장 값
constraints/run.allowedIngress 내부 서비스 또는 외부 애플리케이션 부하 분산기에서만 인그레스 트래픽을 허용합니다. internal-and-cloud-load-balancing
constraints/run.allowedVPCEgress 서버리스 VPC 액세스 커넥터를 사용하려면 Cloud Run 서비스의 버전이 필요하며, 버전의 VPC 이그레스 설정이 비공개 범위만 허용하도록 설정되어 있는지 확인하세요. private-ranges-only

운영 제어

Security Health Analytics 및 위협 감지와 같은 로깅 및 Security Command Center 프리미엄 등급 기능을 사용 설정할 수 있습니다. 이러한 제어는 다음을 수행하는 데 도움이 됩니다.

  • 데이터에 액세스할 수 있는 사용자를 모니터링합니다.
  • 적절한 감사가 설정되어 있는지 확인합니다.
  • 이슈 관리 및 운영팀의 발생 가능한 이슈 대응 능력을 지원합니다.

로깅

감사 요구사항을 충족시키고 프로젝트에 대한 인사이트 얻기 위해 추적하려는 서비스에 대한 데이터 로그를 사용해서 Google Cloud Observability를 구성합니다. Terraform 코드를 적용하기 전에 프로젝트에 Cloud Logging을 배포하여 청사진이 방화벽, 부하 분산기, VPC 네트워크에 대한 로깅을 구성할 수 있는지 확인합니다.

청사진을 배포한 후에는 다음을 구성하는 것이 좋습니다.

프로젝트 내의 모든 서비스에 대해 로그에 데이터 읽기 및 쓰기에 대한 정보가 포함되어 있고 관리자가 액세스하는 대상에 대한 정보가 포함되어 있는지 확인합니다. 로깅 권장사항에 대한 자세한 내용은 감지 제어를 참조하세요.

모니터링 및 알림

청사진을 배포한 후에는 보안 이슈가 발생할 수 있음을 보안 운영 센터(SOC)에 알릴 수 있도록 알림을 설정할 수 있습니다. 예를 들어 알림을 사용하여 IAM 역할에서 변경되었을 때 이를 보안 분석가에게 알릴 수 있습니다. Security Command Center 알림 구성에 대한 자세한 내용은 발견 항목 알림 설정을 참조하세요.

샘플 대시보드 라이브러리의 일부인 Cloud Run 모니터링 대시보드는 다음 정보를 제공합니다.

  • 요청 수
  • 요청 지연 시간
  • 청구 가능한 인스턴스 시간:
  • 컨테이너 CPU 할당
  • 컨테이너 메모리 할당
  • 컨테이너 CPU 사용률
  • 컨테이너 메모리 사용률

대시보드를 가져오는 방법은 샘플 대시보드 설치를 참조하세요. 알림을 내보내려면 다음 문서를 참조하세요.

디버깅 및 문제 해결

연결 테스트를 실행하여 Cloud Run과 서브넷 내 리소스 간의 네트워크 구성 문제를 디버그할 수 있습니다. 연결 테스트는 패킷의 예상 경로를 시뮬레이션하고 리소스 간 연결 분석을 비롯한 연결에 관한 세부정보를 제공합니다.

연결 테스트는 Terraform 코드에서 사용 설정되지 않았으므로 별도로 설정해야 합니다. 자세한 내용은 연결 테스트 만들기 및 실행을 참조하세요.

감지 제어

이 섹션에서는 청사진에 포함된 감지 제어를 설명합니다.

Google Cloud Armor 및 WAF

외부 애플리케이션 부하 분산기와 Google Cloud Armor를 사용하여 서버리스 애플리케이션에 DDoS 보호를 제공합니다. Google Cloud Armor는 Google Cloud에 포함된 웹 애플리케이션 방화벽(WAF)입니다.

다음 표에 설명된 Google Cloud Armor 규칙을 구성하여 서버리스 애플리케이션을 보호합니다. 이 규칙은 OWASP 상위 10개 위험을 완화하는 데 도움이 되도록 설계되었습니다.

Google Cloud Armor 규칙 이름 ModSecurity 규칙 이름
원격 코드 실행 rce-v33-stable
로컬 파일 포함 lfi-v33-stable
프로토콜 공격 protocolattack-v33-stable
원격 파일 포함 rfi-v33-stable
스캐너 감지 scannerdetection-v33-stable
세션 고정 공격 sessionfixation-v33-stable
SQL 삽입 sqli-v33-stable
교차 사이트 스크립팅 xss-v33-stable

이러한 규칙이 사용 설정되면 Google Cloud Armor는 규칙과 일치하는 모든 트래픽을 자동으로 거부합니다.

이러한 규칙에 대한 자세한 내용은 Google Cloud Armor의 사전 구성된 WAF 규칙 조정을 참조하세요.

Cloud Run에서 보안 문제 감지

추천자를 사용하여 Cloud Run에서 잠재적인 보안 문제를 감지할 수 있습니다. 추천자에서 다음과 같은 보안 문제를 감지할 수 있습니다.

  • Secret Manager 대신 환경 변수에 저장된 API 키 또는 비밀번호
  • 서비스 ID를 사용하는 대신 하드 코딩된 사용자 인증 정보가 포함된 컨테이너

Cloud Run을 배포한 후 약 1일 후에 추천자는 발견 항목 및 권장사항을 제공하기 시작합니다. 추천자는 Cloud Run 서비스 목록 또는 권장사항 허브에 발견 항목과 권장 수정 조치를 표시합니다.

Terraform 배포 모드

다음 표에서는 이 청사진을 배포하는 방법과 각 배포 모드에 적용되는 Terraform 모듈을 설명합니다.

배포 모드 Terraform 모듈
엔터프라이즈 기반 청사진을 배포한 후 이 청사진을 배포합니다(권장).

이 옵션은 엔터프라이즈 기반 청사진에 사용되는 것과 동일한 VPC 서비스 제어 경계에 이 청사진의 리소스를 배포합니다. 자세한 내용은 보안 서버리스 배포를 위해 Foundation v2.3.1을 맞춤설정하는 방법을 참조하세요.

이 옵션도 엔터프라이즈 기반 청사진을 배포할 때 만든 보안 비밀 프로젝트를 사용합니다.
다음 Terraform 모듈을 사용합니다.
엔터프라이즈 기반 청사진을 설치하지 않고 이 청사진을 설치합니다.

이 옵션을 사용하려면 VPC 서비스 제어 경계를 만들어야 합니다.
다음 Terraform 모듈을 사용합니다.

총정리

이 문서에 설명된 아키텍처를 구현하려면 다음을 수행합니다.

  1. 청사진의 리드미를 검토하고 모든 기본 요건을 충족해야 합니다.
  2. 외부 애플리케이션 부하 분산기에 사용할 SSL 인증서를 만듭니다.
    이 단계를 완료하지 않으면 청사진이 자체 서명된 인증서를 사용하여 부하 분산기를 배포하며 서버리스 애플리케이션에 액세스하려고 할 때 브라우저에 안전하지 않은 연결에 대한 주의가 표시됩니다.
  3. 테스트 환경에서 보안 Cloud Run 예시를 배포하여 청사진이 작동하는지 확인합니다. 테스트 프로세스 중 다음을 고려합니다.
    1. Security Command Center를 사용하여 일반적인 규정 준수 요구사항에 따라 프로젝트를 스캔합니다.
    2. 샘플 애플리케이션을 실제 애플리케이션으로 바꾸고 일반적인 배포 시나리오를 통해 실행합니다.
    3. 엔터프라이즈의 애플리케이션 엔지니어링 및 운영팀과 협력하여 프로젝트에 대한 액세스를 테스트하고, 그들이 예상한 방식으로 솔루션과 상호 작용할 수 있는지 확인합니다.
  4. 환경에 청사진을 배포합니다.

규정 준수 매핑

Cloud Security Alliance(CSA)는 서버리스 애플리케이션과 관련된 주요 보안 제어를 정의하는 데 도움이 되도록 서버리스 애플리케이션에 대한 12가지 주요 위험을 게시했습니다. 이 청사진에 사용된 보안 제어는 다음 표의 설명대로 대부분의 위험을 해결하는 데 도움이 됩니다.

위험 청사진 완화 귀하의 책임
1. 함수 이벤트-데이터 삽입 Google Cloud Armor 및 외부 애플리케이션 부하 분산기는 Google Cloud의 OWASP 상위 10개 2021 완화 옵션에 설명된 대로 OWASP 상위 10개 항목으로부터 보호합니다. OWASP 보안 코딩 방법Software Artifacts(SLSA) 공급망 수준에 설명된 예외 처리와 같은 안전한 코딩 방법입니다.
2. 손상된 인증 없음 서비스에 대한 사용자를 인증하기 위한 IAP 및 Identity Platform
3. 안전하지 않은 서버리스 배포 구성 Cloud KMS로 CMEK
고유한 암호화 키 관리
4. 권한이 과도하게 부여된 함수 권한 및 역할
  • 서비스 인증을 위한 커스텀 서비스 계정(기본 Compute Engine 서비스 계정 아님)
  • Cloud Run 서비스 계정에서 범위가 제한된 IAM 역할
  • Google Cloud API 액세스의 범위를 제한하는 VPC 서비스 제어(Google Cloud 엔터프라이즈 기반 청사진을 사용하여 제공)
없음
5. 부적절한 함수 모니터링 및 로깅 Cloud Logging Cloud Monitoring 대시보드 및 알림 구조
6. 안전하지 않은 서드 파티 종속 항목 없음 코드 스캔 및 배포 전 분석을 사용하여 CI/CD 파이프라인 보호
7. 안전하지 않은 애플리케이션 보안 비밀 스토리지 Secret Manager 애플리케이션 코드에서 보안 비밀 관리
8. 서비스 거부 및 재무 리소스 소진
  • Google Cloud Armor
  • Cloud Run 서비스 제한 시간(기본값은 120초)
없음
9. 서버리스 비즈니스 로직 조작 Google Cloud API 액세스 범위를 제한하는 VPC 서비스 제어(엔터프라이즈 기반 청사진을 사용하여 제공) 없음
10. 부적절한 예외 처리 및 상세 오류 메시지 없음 안전한 프로그래밍 권장사항
11. 사용되지 않는 함수, 클라우드 리소스 및 이벤트 트리거 버전을 사용하여 공격에 노출되는 영역을 최소화합니다. 버전을 사용하면 실수로 사용되지 않은 이전 서비스 반복을 사용 설정할 가능성을 줄일 수 있습니다. 또한 버전은 모니터링 및 로깅 도구와 함께 A/B 테스트를 사용하여 새 버전의 보안 상황을 테스트하는 데 도움이 됩니다.
  • 클라우드 리소스를 관리하기 위한 코드형 인프라(IaC)
  • Security Command Center를 사용한 Cloud 리소스 모니터링
  • Cloud Billing 모니터링
  • 사용하지 않는 클라우드 리소스를 정리하여 공격 표면 최소화
12. 교차 실행 데이터 지속성 없음 없음

다음 단계