Cloud Run에 대한 인그레스 제한

이 페이지에서는 인그레스 설정을 사용하여 Cloud Run 서비스에 대해 네트워크 액세스를 제한하는 방법을 설명합니다. 기본적으로 네트워크 수준에서 인터넷의 모든 리소스는 해당 run.app URL 또는 Cloud Run에 설정된 커스텀 도메인에서 Cloud Run 서비스에 연결할 수 있습니다. 이 기본값은 인그레스에 다른 설정을 지정하여 변경할 수 있습니다.

이 기능을 IAM 인증 메서드와 함께 사용하면 서비스에 대한 액세스를 관리할 수 있습니다.

사용 가능한 인그레스 설정

사용 가능한 설정은 다음과 같습니다.

설정 설명
모두 공개 인터넷에서 서비스에 액세스할 수 있습니다. IAM 호출자 권한은 계속 적용됩니다.
내부 서비스를 비공개로 설정하여, 동일한 프로젝트 또는 VPC 서비스 제어 경계 내의 요청만 서비스에 연결되도록 허용합니다. IAM 호출자 권한이 계속 적용됩니다.

내부로 고려되거나 내부 서비스에 액세스할 수 있는 항목에 대한 설명은 내부 서비스 액세스를 참조하세요.

멀티테넌시(즉, 동일한 프로젝트 내 여러 트러스트 도메인)는 지원되지 않습니다.
내부 및 클라우드 부하 분산 서비스가 공개 인터넷에서 액세스할 수 있도록 설정하되 내부 요청 및 HTTP(S) 부하 분산을 통한 요청만 허용합니다. IAM 호출자 권한이 계속 적용됩니다.

IAP(Identity-Aware Proxy), Google Cloud Armor 또는 Cloud CDN을 사용하는 경우, 기본 URL에 액세스하여 이들을 우회하는 것도 방지할 수 있습니다.

내부 서비스 액세스

다음 고려사항이 적용됩니다.

  • 내부 서비스에 액세스할 때 일반적으로 공개 URL(기본 run.app URL 또는 Cloud Run에서 설정된 커스텀 도메인)을 사용할 때처럼 호출합니다.

  • 동일한 프로젝트에 있는 VPC 네트워크 내에서 실행되는 Compute Engine VM 인스턴스 또는 다른 리소스의 요청의 경우 추가 설정이 필요하지 않습니다.

  • 동일한 프로젝트에 있는 다른 Cloud Run 서비스 또는 Cloud Functions의 요청의 경우 VPC 네트워크에 연결에 설명된 대로 서비스 또는 함수를 VPC 네트워크에 연결하고 커넥터를 통해 모든 이그레스를 라우팅합니다. IAM 호출자 권한은 계속 적용됩니다.

  • 동일한 프로젝트의 VPC 네트워크 내 리소스에서 보내는 요청은 공개 IP 주소가 포함된 리소스라고 해도 내부로 분류됩니다.

  • Cloud Run API가 VPC 액세스 가능 서비스로 사용 설정된 경우 트래픽이 VPC 네트워크에서 시작되는 VPC 서비스 제어 경계 내부의 리소스의 요청은 내부 서비스를 호출할 수 있습니다.

  • 공유 VPC 네트워크의 리소스는 공유 VPC 리소스 및 내부 서비스가 동일한 VPC SC 경계에 있고 Cloud Run API가 VPC 액세스 가능 서비스로 사용 설정된 경우에만 내부 서비스를 호출할 수 있습니다.

  • Cloud VPN을 통해 VPC 네트워크에 연결된 온프렘 리소스의 요청은 internal로 간주됩니다.

  • Pub/Sub 및 Eventarc의 요청은 내부 서비스를 호출할 수 있습니다.

  • Pub/Sub 또는 Eventarc를 제외하고 VPC 네트워크에서 시작되지 않는 트래픽 소스에서 내부 서비스를 호출할 수 있는 방법은 없습니다. 즉, Cloud Scheduler, Cloud Tasks, Workflows가 내부 서비스를 호출할 수 없습니다.

  • Pub/Sub에 인그레스를 사용하거나 Pub/Sub 트리거에 Eventarc를 사용하는 경우 다음을 고려해야 합니다.

    • Pub/Sub에서 호출되는 Cloud Run 서비스에서 인그레스 설정을 사용하는 경우 커스텀 도메인이 아니라 해당 서비스에 대한 Cloud Run 기본 app.run URL을 사용해야 합니다.
    • Pub/Sub 구독은 Cloud Run 서비스와 동일한 프로젝트 또는 VPC 서비스 제어 경계에 있어야 합니다.

내부내부 및 클라우드 부하 분산 비교

인그레스가 내부 및 Cloud Load Balancing으로 설정된 서비스는 Cloud Load Balancing을 통해 설정된 부하 분산기를 통해서도 액세스될 수 있습니다. 내부 및 Cloud Load Balancing 설정은 내부의 상위 집합입니다. 즉, 내부로 설정된 서비스에 연결할 수 있는 무엇이든 내부 및 Cloud Load Balancing으로 설정된 서비스에 연결할 수 있습니다.

인그레스 설정

아래 탭에서 지원되는 모든 방법을 사용하여 인그레스를 설정할 수 있습니다.

Console

새 서비스를 배포하는 경우:

  1. Cloud Run으로 이동

  2. 서비스 만들기를 클릭하고 원하는 첫 번째 단계(서비스 설정)를 구성한 후 다음을 클릭합니다.

  3. 원하는 경우 두 번째 단계(서비스의 첫 번째 버전 구성)를 구성하고 다음을 클릭합니다.

  4. 세 번째 단계에서는 이 서비스가 트리거되는 방식을 구성하고 인그레스* 라벨 아래에서 허용할 인그레스 트래픽을 선택합니다.

    이미지

기존 서비스를 구성하는 경우:

  1. 서비스를 클릭합니다.

  2. 트리거 탭을 클릭합니다.

  3. 인그레스 라벨 아래에서 허용하려는 인그레스 트래픽을 선택합니다.

    이미지

  4. 저장을 클릭합니다.

명령줄

  1. 새 서비스를 배포하는 경우 --ingress 플래그를 지정하여 서비스를 배포합니다.

    gcloud run deploy SERVICE --image IMAGE_URL --platform managed --ingress INGRESS

    다음과 같이 바꿉니다.

    • INGRESS: 사용 가능한 인그레스 설정 중 하나
      • all
      • internal
      • internal-and-cloud-load-balancing
    • SERVICE: 서비스 이름
    • IMAGE_URL: 컨테이너 이미지에 대한 참조(예를 들어 gcr.io/myproject/my-image:latest)
  2. 기존 서비스 인그레스를 변경하는 경우 다음 안내를 따르세요.

    gcloud run services update SERVICE --platform managed --ingress INGRESS

    다음과 같이 바꿉니다.

YAML

YAML 형식으로 정리된 결과를 반환하는 gcloud run services describe --format export 명령어를 사용하면 기존 서비스 구성을 다운로드하고 볼 수 있습니다. 그런 다음 아래 설명된 필드를 수정하고 gcloud beta run services replace 명령어를 사용하여 수정된 YAML을 업로드할 수 있습니다. 설명된 대로 필드만 수정해야 합니다.

  1. 구성을 보고 다운로드하려면 다음을 실행합니다.

    gcloud run services describe SERVICE --format export > service.yaml
  2. run.googleapis.com/ingress: 주석을 업데이트합니다.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
        run.googleapis.com/ingress: INGRESS

    다음과 같이 바꿉니다.

  3. 다음 명령어를 사용하여 서비스를 새 구성으로 바꿉니다.

    gcloud beta run services replace service.yaml

다음 단계

서버리스 VPC 액세스를 사용하여 Cloud Run 서비스를 이그레스 설정을 사용하는 VPC 네트워크에 직접 연결할 수 있습니다.

Cloud Run과 함께 HTTP(S) 부하 분산을 사용할 수도 있습니다.