비공개 네트워킹 및 Cloud Run

이 페이지에서는 Cloud Run 서비스를 비공개 네트워크에 포함할 수 있는 구성 옵션을 설명합니다.

이 콘텐츠를 최대한 활용하려면 다음 개념을 숙지해야 합니다.

많은 조직에서 서비스와 애플리케이션의 네트워크 트래픽을 보호하기 위해 경계 제어와 함께 Google Cloud의 비공개 네트워크를 사용하여 데이터 무단 반출을 방지합니다. 비공개 네트워크에는 다음과 같은 속성이 있을 수 있습니다.

  • VPC 네트워크 하나 이상에 있는 VM과 같은 리소스가 여러 개 있을 수 있습니다.
  • 이러한 VM은 여러 프로젝트에 속할 수 있으며 공유 VPC에 연결될 수 있습니다.
  • Cloud VPN 또는 Cloud Interconnect를 사용하여 온프레미스 워크로드나 이 환경에 연결된 다른 클라우드에 워크로드를 만들 수 있습니다.
  • 데이터 무단 반출 위험이 줄어들도록 VPC 서비스 제어 경계를 사용 설정했을 수 있습니다.
  • 이러한 비공개 네트워크는 프로덕션에 하나, 스테이징에 하나, 개발에 하나와 같이 다양한 환경 각각에 하나씩 여러 개 있을 수 있습니다.

VM과 달리 Cloud Run 서비스는 기본적으로 특정 VPC 네트워크와 연결되지 않습니다. 이 페이지에서는 Cloud Run 서비스를 비공개 네트워크에 통합하는 방법을 설명합니다.

서버리스 네트워킹 설명

공개 및 비공개 네트워킹을 위한 다양한 일반적인 엔터프라이즈 구성을 살펴보려면 서버리스 네트워킹 설명을 참조하세요.

이 시작 문서에서는 다음과 같은 기본-고급 Cloud Run 시나리오를 소개합니다.

  • 커스텀 도메인을 사용하는 'Hello, World!' 앱을 안전하게 배포
  • 엔터프라이즈 애플리케이션 및 마이크로서비스 개발
  • 데이터베이스 및 파일 시스템에 공개 또는 비공개 액세스
  • SaaS 제공업체와 연결
  • 보안 제어 적용

해당 Terraform 모듈 목록을 참조하세요.

비공개 네트워크에서 요청 수신

비공개 네트워크에서 요청을 수신하려면 다음 조건을 기반으로 구성해야 합니다.

  • 요청 출처
  • Cloud Run 서비스가 비공개 네트워크의 요청만 허용하는지 여부입니다.

예를 들어 VPC 네트워크에서 요청을 수신하려면 온프레미스 리소스와 기타 클라우드의 요청 수신과 다른 구성이 필요할 수 있습니다.

다른 Cloud Run 서비스, App Engine, Cloud Functions에서 요청 수신

대상 Cloud Run 서비스가 다른 Cloud Run 서비스, App Engine 또는 Cloud Functions에서 트래픽을 수신하고 '내부' 또는 '내부 및 부하 분산' 인그레스 설정을 사용하는 경우 그런 다음 트래픽은 내부 네트워크로 간주되도록 VPC 네트워크를 사용해야 합니다.

다른 Cloud Run 서비스, App Engine 또는 Cloud Functions의 요청을 받으려면 다음 단계를 수행하세요.

  1. 직접 VPC 이그레스 또는 커넥터를 사용하도록 소스 서비스를 구성합니다.

  2. 다음 옵션 중 하나를 사용하여 Cloud Run에 대한 트래픽이 VPC 네트워크를 통해 라우팅되는지 확인합니다.

    • VPC 네트워크를 통해 모든 트래픽을 전송하도록 소스 서비스를 구성하고 직접 VPC 이그레스 또는 커넥터와 연결된 서브넷에서 비공개 Google 액세스를 사용 설정합니다.
    • 대상 Cloud Run 서비스를 사용하도록 Private Service Connect 또는 내부 애플리케이션 부하 분산기를 설정합니다. 이 구성을 사용하면 내부 IP 주소를 사용하여 Cloud Run에 액세스하므로 요청이 VPC 네트워크를 통해 라우팅됩니다.
    • 소스 서비스와 연결된 서브넷에서 비공개 Google 액세스를 사용 설정하고 DNS를 구성하여 run.app URL을 private.googleapis.com(199.36.153.8/30) 또는 restricted.googleapis.com(199.36.153.4/30) 범위로 확인합니다. 이러한 범위에 대한 요청은 VPC 네트워크를 통해 라우팅됩니다.

VPC 네트워크에서 요청 수신

기본적으로 공개 IP 주소가 있거나 Cloud NAT를 사용하는 VPC 리소스만 Pub/Sub 및 Cloud Run과 같은 Google Cloud 서비스와 인터넷에 직접 액세스할 수 있습니다. 다른 VPC 리소스의 경우 Cloud Run에 대한 트래픽 경로를 사용 설정할 수 있는 몇 가지 옵션이 있습니다.

  1. 가장 직접적인 경로는 VPC 리소스를 호스팅하는 서브넷에서 비공개 Google 액세스를 사용 설정하는 것입니다. 사용 설정하면 서브넷의 리소스가 기본 run.app URL에서 Cloud Run 서비스에 액세스할 수 있습니다. VPC에서 Cloud Run으로 이동하는 트래픽은 Google 네트워크에 남아 있습니다. 이 경우, Cloud Run 서비스로 전송된 요청의 IP 범위는 0.0.0.0/32입니다. 즉, 요청 로그 항목에서 HttpRequestremoteIp 속성은 0.0.0.0이 됩니다.
  2. Cloud Run 서비스를 다른 Google API와 함께 VPC 네트워크에서 내부 IP 주소로 노출해야 하는 경우 Private Service Connect를 사용하는 것이 좋습니다. 사용 설정하면 VPC 리소스가 내부 IP 주소를 사용하여 기본 run.app URL에서 Cloud Run 서비스에 액세스할 수 있습니다.
  3. 부하 분산 기능과 제어가 필요하면 내부 애플리케이션 부하 분산기를 사용하는 것이 좋습니다. 이 방식을 사용하면 VPC 리소스가 내부 애플리케이션 부하 분산기와 연결된 URL을 사용하여 Cloud Run 서비스에 액세스합니다.
  4. 서비스를 관리형 서비스로 내부 클라이언트에 노출하고 프로젝트에서 액세스할 수 있도록 제어하려면 내부 애플리케이션 부하 분산기를 사용하여 호스팅하고 Private Service Connect를 사용하여 게시하면 됩니다. 서비스를 사용해야 하는 프로젝트도 Private Service Connect를 사용하여 액세스할 수 있습니다.

응답은 요청이 전송된 경로와 동일한 경로로 반환됩니다.

공유 VPC에 대한 특별 고려사항

Cloud Run 인그레스 제어를 사용하여 모든 트래픽이 비공개 네트워크에서 들어와야 하도록 하는 경우(internal 설정 사용) 공유 VPC 트래픽은 다음 상황에서 '내부'로만 인식됩니다.

  • Cloud Run 서비스가 공유 VPC 호스트 프로젝트에서 실행되고 있습니다.

  • 공유 VPC 인그레스: Cloud Run 서비스가 공유 VPC 네트워크에 연결됩니다. 이 시나리오에서는 다음 고려사항을 참조하세요.

    • 직접 VPC 이그레스를 구성했거나 공유 VPC 네트워크로 트래픽을 전송하도록 서버리스 VPC 액세스 커넥터를 구성한 서비스 버전만 동일한 공유 VPC 네트워크에서 들어오는 트래픽도 허용합니다.

    • 요청은 트래픽 방향에 따라 다른 경로를 사용합니다. Cloud Run에서 공유 VPC 네트워크로 전송된 요청은 직접 VPC 이그레스 또는 커넥터를 통해 라우팅됩니다. 하지만 공유 VPC 네트워크에서 Cloud Run으로 전송된 요청은 표준 인그레스 경로를 사용합니다.

    • 공유 VPC 네트워크에서 Cloud Run 서비스를 분리하려면 VPC 네트워크 액세스 없이 또는 다른 VPC 네트워크로 트래픽을 전송하도록 구성된 서비스를 사용하여 다시 배포합니다.

  • 내부 애플리케이션 부하 분산기를 사용하여 트래픽을 프록시하고 있습니다.

  • 공유 VPC 호스트와 모든 서비스 프로젝트를 같은 VPC 서비스 제어 경계 내에 배치했습니다. VPC 서비스 제어를 설정하려면 VPC 서비스 제어(VPC SC) 사용을 참조하세요.

프로젝트 외부의 다른 VPC에 대한 특별 고려사항

Cloud Run 인그레스 제어를 사용하여 모든 트래픽이 비공개 네트워크에서 들어와야 하도록 하는 경우(internal 설정 사용) 프로젝트 외부에 있는 다른 VPC에서의 트래픽은 다음 상황을 제외하고 '내부'로 인식되지 않습니다.

  • VPC 서비스 제어가 run.googleapis.com을 제한된 서비스로 사용하여 트래픽을 허용하도록 구성되어 있으며 소스 서브넷에 비공개 Google 액세스가 사용 설정되어 있습니다.
  • Cloud Run 서비스가 Private Service Connect를 사용하여 관리형 서비스로 게시되고(내부 애플리케이션 부하 분산기 필요) 다른 VPC 네트워크에서 액세스됩니다.

프로젝트 외부에 있는 VPC를 피어링하면 트래픽이 '내부'로 인식되지 않습니다.

다른 Google Cloud 서비스에서 요청 수신

Pub/Sub와 같은 Google Cloud 서비스에서 Cloud Run에 대한 요청은 Google 네트워크 내에 남아 있습니다.

'내부' 트래픽만 허용하도록 Cloud Run 인그레스 제어를 구성한 경우 몇 가지 특수 고려사항이 있습니다.

  • 같은 프로젝트나 VPC 서비스 제어 경계에 있는 Cloud Scheduler, Cloud Tasks, Eventarc, Pub/Sub, Workflows의 요청은 '내부'로 인식됩니다.
  • 동일 프로젝트 또는 VPC 서비스 제어 경계 내부에서 전송되는 Cloud Run, App Engine, Cloud Functions의 요청은 '내부'로 인식되기 전에 모두 추가 구성이 필요합니다. 자세한 내용은 다른 Cloud Run 서비스, App Engine, Cloud Functions에서 요청 수신 섹션을 참조하세요.
  • 선택한 Google Cloud 서비스가 인그레스가 internal로 설정된 Cloud Run 서비스에 액세스할 수 없는 경우에는 많은 지원에서 Pub/Sub(internal 및 인증 모두 지원), API 게이트웨이, Dialogflow CX와 같은 Cloud Run 인증이 지원됩니다. 보안 요구사항에 따라 대상 Cloud Run 서비스에 '내부' 인그레스 대신 인증을 요구하는 것으로 충분할 수 있습니다.
  • 위에 언급되지 않은 Google Cloud 서비스의 요청은 내부로 인식되지 않으며 인그레스가 internal 또는 internal-and-cloud-load-balancing으로 설정된 Cloud Run 서비스에서 이 요청을 수신할 수 없습니다.

온프렘 또는 다른 클라우드에서 요청 수신

온프레미스 리소스나 다른 클라우드에서 요청을 비공개로 수신하는 방법에는 여러 방법이 있습니다.

  1. 기본 구성: 온프레미스 리소스와 기타 클라우드의 요청이 비공개 네트워크를 통과하게 하려면 온프레미스 호스트의 비공개 Google 액세스를 구성합니다.
  2. 내부 IP 주소를 사용하여 Cloud Run 서비스 노출: 내부 IP 주소를 사용하여 Cloud Run 서비스를 호출하려면 온프레미스 호스트의 Private Service Connect를 구성합니다. 온프레미스 호스트에 Private Service Connect를 추가하면 Cloud Run 서비스를 내부 IP 주소로 VPC 네트워크에 노출할 수 있습니다. Private Service Connect에서 비용이 발생합니다.
  3. 부하 분산 기능 사용: 부하 분산 기능과 제어가 필요하면 내부 애플리케이션 부하 분산기를 사용합니다.
  4. 관리 경계 간: 서비스를 관리형 서비스로 내부 클라이언트에 노출하고 프로젝트에서 액세스할 수 있도록 제어하려면 Private Service Connect를 사용하여 게시하면 됩니다. 이를 사용하려면 온프레미스 호스트에서 Private Service Connect 사용을 참조하세요(내부 애플리케이션 부하 분산기 필요).

비공개 네트워크에서 들어오는 요청 필요

외부 소스로부터 트래픽이 들어오지(인그레스) 않게 하려면 제한적인 인그레스 설정을 지정하면 됩니다. 가장 엄격한 인그레스 설정은 internal입니다. 인그레스를 internal로 설정하면 서비스는 프로젝트, 프로젝트가 연결된 공유 VPC 네트워크, VPC 서비스 제어 경계의 요청만 허용합니다. 요청 출처에 따라 이 설정에 몇 가지 제한사항이 있습니다. 이러한 제한사항과 탐색 방법은 비공개 네트워크에서 요청 수신 섹션을 참조하세요.

Cloud Run 서비스마다 인그레스 설정을 지정하거나 조직의 모든 Cloud Run 서비스에 기본 인그레스 설정 사용을 적용할 수 있습니다.

  • 서비스마다 인그레스 설정을 지정하려면 인그레스 설정을 참조하세요.
  • 프로젝트, 폴더 또는 조직의 모든 Cloud Run 서비스에 특정 인그레스 설정을 적용하려면 run.allowedIngress 조직 정책 제약조건을 구성합니다. 방법은 목록 제약조건에 대한 정책 맞춤설정을 참조하세요.

비공개 네트워크에 요청 전송

Cloud Run 서비스가 비공개 네트워크에 있는 리소스에 액세스해야 하는 경우 네트워크에 대한 비공개 요청 경로를 구성할 수 있습니다. 구성은 최종 요청 대상에 따라 다릅니다.

VPC 네트워크에 요청 전송

VPC 네트워크로 요청을 전송하려면 직접 VPC 이그레스 또는 서버리스 VPC 액세스 커넥터를 구성해야 합니다. 직접 VPC 이그레스와 VPC 커넥터 비교합니다. 비용을 알아보려면 가격 책정을 검토합니다.

직접 VPC 이그레스 또는 서버리스 VPC 액세스 커넥터가 구성되면 기본적으로 다음 고려사항이 적용됩니다.

  • 모든 DNS 쿼리는 VPC 네트워크 이그레스 설정과 연결된 VPC 네트워크에 구성된 DNS 서버로 전송됩니다.

  • 내부 IP 주소에 대한 요청은 직접 VPC 이그레스 또는 커넥터를 사용하여 VPC 네트워크로 라우팅됩니다. 이그레스 설정이 달리 구성되지 않는 한 공개 대상에 대한 요청은 인터넷으로 직접 라우팅됩니다.

직접 VPC 이그레스 또는 서버리스 VPC 액세스 커넥터를 사용하여 요청을 라우팅하면 응답은 요청이 통과한 경로를 통해 반환됩니다. VPC 에서 Cloud Run으로 전달되는 요청은 다른 기술을 통해 사용 설정되고 서버리스 VPC 액세스 또는 직접 VPC 이그레스를 통해 라우팅되지 않으며 이러한 요청에 대한 응답은 같은 경로를 통해 반환됩니다. VPC에서 Cloud Run으로 요청을 보내는 방법에 대한 자세한 내용은 VPC 네트워크에서 요청 수신 섹션을 참조하세요.

프로젝트 외부의 VPC 네트워크에 요청 전송

프로젝트 외부에 있는 VPC 네트워크로 요청을 전송하려면 다음 안내를 따르세요.

  1. 공유 VPC 사용자의 경우 공유 VPC 네트워크에 연결을 참조하세요.
  2. 다른 VPC의 경우 프로젝트의 VPC에 연결하도록 직접 VPC 이그레스 또는 서버리스 VPC 액세스 커넥터를 구성합니다.
    • 피어링된 VPC: VPC 네트워크 이그레스를 사용하는 VPC에 피어링된 VPC로 전송하려는 경우 추가 구성이 필요하지 않습니다. 하지만 VPC 네트워크 이그레스를 호스팅하는 서브넷에 있는 VM은 대상 VPC 네트워크에 도달할 수 있어야 합니다.
    • 기타 VPC: 동일한 공유 VPC 환경에 속하지 않거나 프로젝트 VPC에 피어링된 프로젝트의 외부에 있는 VPC 네트워크의 경우 VPC 네트워크 이그레스를 설정한 후 Private Service Connect를 구성합니다.

다른 Cloud Run 서비스 및 Google Cloud 서비스에 요청 전송

한 Cloud Run 서비스에서 다른 Google Cloud 서비스로 보내는 요청은 Google 내부 네트워크에 있으며 VPC 서비스 제어가 적용됩니다.

인그레스 설정이 제한적인 Cloud Run 서비스에 대한 요청의 경우 추가 구성이 필요합니다. 다른 Cloud Run 서비스, App Engine, Cloud Functions에서 요청 수신을 참조하세요.

온프레미스 리소스와 기타 클라우드로 요청 전송

비공개 네트워크를 통해 온프레미스 리소스와 기타 Cloud로 요청을 전송하려면 다음을 수행해야 합니다.

  1. VPC 네트워크가 VPN 터널 등을 통해 트래픽을 대상으로 비공개 라우팅하도록 구성되어 있는지 확인합니다.
  2. VPC 네트워크에 요청을 전송하도록 서비스를 구성합니다.
  3. 그런 다음 VPC 네트워크로 이동하는 모든 요청이 필요합니다.

모든 요청이 VPC 네트워크로 이동하도록 요청

Cloud Run 서비스의 모든 요청이 VPC 네트워크로 이동하게 하려면 '모든 트래픽' 서버리스 VPC 네트워크 이그레스 설정을 지정합니다. VPC 네트워크 이그레스를 사용하는 Cloud Run 서비스마다 이그레스 설정을 지정하거나 프로젝트, 폴더 또는 조직에 있는 모든 Cloud Run 서비스에 기본 이그레스 설정 사용을 적용할 수 있습니다.

이 기능은 다음과 같은 상황에서 유용합니다.

  1. Cloud Run 서비스의 고정 아웃바운드 IP 주소를 설정하려는 경우
  2. Cloud Run 서비스의 모든 이그레스에 방화벽 규칙을 적용하려는 경우
  3. 비공개 네트워크를 통해 온프레미스 리소스와 기타 클라우드에 요청을 전송하려는 경우

Cloud Run 서비스가 VPC 네트워크 외부에 있는 최종 대상에 요청을 수행하는 경우 모든 요청을 VPC 네트워크로 이동해야 하면 서버리스 VPC 액세스 커넥터가 구성된 경우 대역폭 사용량이 증가하고 그에 따라 비용이 증가할 수 있습니다. 서버리스 VPC 액세스 커넥터는 트래픽이 증가하면 자동으로 수평 확장되지만 트래픽이 감소하면 수평 축소되지 않습니다. 비용을 알아보려면 가격 책정을 검토합니다.

추가 컨트롤

  • 경계 제어: 리소스 그룹의 데이터 무단 반출 위험을 줄이려면 VPC 서비스 제어를 사용하여 리소스를 컨텍스트 인식 경계 내에 배치합니다.
  • 세밀한 제어: 특정 Cloud Run 서비스 또는 Compute Engine 가상 머신과 같은 비공개 네트워크에 있는 특정 리소스의 트래픽에 대한 액세스를 제어하려면 서비스 계정을 사용하여 권한과 인증을 제어합니다.

다음 단계

Terraform을 사용하는 경우 비공개 네트워크에서 Cloud Run 서비스를 설정하는 데 Terraform 샘플 코드를 사용할 수 있습니다.