공유 VPC 서비스 프로젝트에서 커넥터 구성

조직에서 공유 VPC를 사용하는 경우 서비스 프로젝트 또는 호스트 프로젝트에서 서버리스 VPC 액세스 커넥터를 설정할 수 있습니다. 이 가이드에서는 서비스 프로젝트에서 커넥터를 설정하는 방법을 보여줍니다.

호스트 프로젝트에서 커넥터를 설정해야 하는 경우 호스트 프로젝트에서 커넥터 구성을 참조하세요. 각 방법의 장점에 대한 자세한 내용은 공유 VPC 네트워크에 연결을 참조하세요.

대략적으로 다음 단계를 수행해야 합니다.

  1. 필요한 IP 범위를 허용하는 방화벽 규칙 추가
  2. 권한 부여
  3. 서브넷 만들기
  4. 서버리스 VPC 액세스 구성 페이지에서 다음 섹션의 단계를 완료합니다.

시작하기 전에

서버리스 VPC 액세스는 URL Fetch 서비스와 호환되지 않습니다. 시작하기 전에 소켓을 사용하여 URL Fetch 기본값을 사용 중지하고 urlfetch 패키지의 명시적 사용을 중지합니다.

IP 범위를 허용하는 방화벽 규칙 추가

이 단계를 수행하려면 호스트 프로젝트에 대한 다음 역할 중 하나가 있어야 합니다.

다음 IP 범위의 요청이 커넥터에 도달하고 커넥터가 이를 허용하도록 방화벽 규칙을 만들어야 합니다.

  • NAT 범위
    • 107.178.230.64/26
    • 35.199.224.0/19
  • 상태 확인 범위
    • 130.211.0.0/22
    • 35.191.0.0/16
    • 108.170.220.0/23

이러한 범위는 Cloud Run, Cloud Run 함수, App Engine 표준 환경의 Google 인프라에서 사용됩니다. 이러한 IP의 모든 요청은 Google 인프라에서 시작되도록 보장되며, 각 Cloud Run, Cloud Run 함수, App Engine 서비스/함수/앱은 연결된 VPC 커넥터와만 통신합니다.

간단한 구성에서는 공유 VPC 네트워크에 연결된 모든 서비스 프로젝트의 서버리스 서비스가 네트워크의 모든 리소스에 요청을 보낼 수 있도록 규칙을 적용합니다.

규칙을 적용하려면 다음 안내를 따르세요.

  1. 다음 3개의 명령어를 실행하여 서버리스 환경의 요청이 네트워크의 모든 VPC 커넥터에 도달할 수 있도록 규칙을 설정합니다.

    gcloud compute firewall-rules create serverless-to-vpc-connector \
    --allow tcp:667,udp:665-666,icmp \
    --source-ranges 107.178.230.64/26,35.199.224.0/19 \
    --direction=INGRESS \
    --target-tags vpc-connector \
    --network=VPC_NETWORK
    gcloud compute firewall-rules create vpc-connector-to-serverless \
    --allow tcp:667,udp:665-666,icmp \
    --destination-ranges 107.178.230.64/26,35.199.224.0/19 \
    --direction=EGRESS \
    --target-tags vpc-connector \
    --network=VPC_NETWORK
    gcloud compute firewall-rules create vpc-connector-health-checks \
    --allow tcp:667 \
    --source-ranges 130.211.0.0/22,35.191.0.0/16,108.170.220.0/23 \
    --direction=INGRESS \
    --target-tags vpc-connector \
    --network=VPC_NETWORK

    여기서 VPC_NETWORK는 커넥터를 연결할 VPC 네트워크입니다.

  2. VPC 네트워크에 커넥터의 요청을 허용하는 인그레스 규칙을 만듭니다.

    gcloud compute firewall-rules create vpc-connector-requests \
    --allow tcp,udp,icmp \
    --direction=INGRESS \
    --source-tags vpc-connector \
    --network=VPC_NETWORK

    이 규칙으로 VPC 커넥터에서 네트워크의 모든 리소스에 액세스할 수 있습니다. 서버리스 VPC 액세스를 사용하여 서버리스 환경에서 도달할 수 있는 리소스를 제한하려면 이러한 방화벽 규칙의 대상을 지정합니다.

특정 커넥터의 방화벽 규칙 만들기

IP 범위를 허용하는 방화벽 규칙 추가 절차를 따르면 현재의 커넥터와 향후 생성되는 커넥터까지 모든 커넥터에 적용되는 방화벽 규칙이 생성됩니다. 이를 원하지 않고 대신에 특정 커넥터에만 적용되는 규칙을 만들고 싶다면 해당 커넥터에만 적용되도록 규칙의 범위를 좁혀서 지정할 수 있습니다.

규칙의 범위를 특정 커넥터로 제한하려면 다음 메커니즘 중 하나를 사용하면 됩니다.

  • 네트워크 태그. 모든 커넥터에는 2개의 네트워크 태그인 vpc-connectorvpc-connector-REGION-CONNECTOR_NAME이 있습니다. 후자 형식을 사용하여 방화벽 규칙의 범위를 특정 커넥터로 제한합니다.
  • IP 범위. 이 옵션은 인그레스에서 작동하지 않으므로 이그레스 규칙에만 사용합니다. 커넥터 서브넷의 IP 범위를 사용하여 방화벽 규칙의 범위를 단일 VPC 커넥터로 제한할 수 있습니다.

서비스 프로젝트의 서비스 계정에 권한 부여

VPC 커넥터를 사용할 각 서비스 프로젝트의 경우, 공유 VPC 관리자는 호스트 프로젝트의 Compute Network 사용자 역할(compute.networkUser)을 서비스 프로젝트 cloudservicesvpcaccess 서비스 계정에 부여해야 합니다.

역할 부여 방법:

  1. 다음 명령어를 사용합니다.

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --role "roles/compute.networkUser" \
    --member "serviceAccount:service-SERVICE_PROJECT_NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.com"
    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --role "roles/compute.networkUser" \
    --member "serviceAccount:SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com"
  2. @gcp-sa-vpcaccess 서비스 계정이 없는 경우 서비스 프로젝트에서 서버리스 VPC 액세스 API를 켜고 다시 시도해 보세요.

    gcloud services enable vpcaccess.googleapis.com

이들 서비스 계정에 전체 공유 VPC 네트워크에 대한 액세스 권한을 부여하는 대신에 특정 서브넷에 대한 액세스 권한만 부여하려는 경우 특정 서브넷의 서비스 계정에만 이러한 역할을 부여할 수 있습니다.

서브넷 만들기

공유 VPC를 사용하는 경우 공유 VPC 관리자는 각 커넥터의 서브넷을 만들어야 합니다. 서브넷 추가 문서에 따라 /28 서브넷을 공유 VPC 네트워크에 추가합니다. 이 서브넷은 커넥터를 사용할 서버리스 서비스와 동일한 리전에 있어야 합니다.

다음 단계