Configura conectores en el proyecto host de VPC compartida

Si tu organización usa una VPC compartida, puedes configurar conectores de Acceso a VPC sin servidores en el proyecto de servicio o en el proyecto host. En esta guía, se muestra cómo configurar un conector en el proyecto de servicio.

Si necesitas configurar un conector en un proyecto de servicio, consulta la sección sobre cómo configurar conectores en proyectos de servicio. Para obtener más información sobre las ventajas de cada método, consulta Conéctate a una red de VPC compartida.

Antes de comenzar

  1. Verifica los roles de Identity and Access Management (IAM) para la cuenta que usas. La cuenta activa debe tener los siguientes roles en el proyecto host:

  2. Selecciona el proyecto host en tu entorno preferido.

Para configurar el proyecto predeterminado en gcloud CLI en el proyecto host, ejecuta el siguiente comando en la terminal:

gcloud config set project HOST_PROJECT_ID

Reemplaza lo siguiente:

  • HOST_PROJECT_ID: el ID del proyecto host de la VPC compartida

Creación de un conector de acceso a VPC sin servidores

Para enviar solicitudes a la red de VPC y recibir las respuestas correspondientes, debes crear un conector de acceso a VPC sin servidores. Puedes crear un conector con Google Cloud CLI o Terraform:

gcloud

  1. Actualiza los componentes de gcloud a la versión más reciente:

    gcloud components update
    
  2. Habilita la API de acceso a VPC sin servidores para tu proyecto:

    gcloud services enable vpcaccess.googleapis.com
    
  3. Crea un conector de Acceso a VPC sin servidores:

    gcloud compute networks vpc-access connectors create CONNECTOR_NAME \
    --region=REGION \
    --subnet=SUBNET \
    --subnet-project=HOST_PROJECT_ID \
    # Optional: specify minimum and maximum instance values between 2 and 10, default is 2 min, 10 max.
    --min-instances=MIN \
    --max-instances=MAX \
    # Optional: specify machine type, default is e2-micro
    --machine-type=MACHINE_TYPE

    Reemplaza lo siguiente:

    • CONNECTOR_NAME: un nombre para tu conector El nombre debe seguir la convención de nombres de Compute Engine y tener menos de 21 caracteres. Los guiones (-) cuentan como dos caracteres.
    • REGION: una región para el conector, que debe coincidir con la región del servicio sin servidores. Si tu servicio se encuentra en la región us-central o europe-west, usa us-central1 o europe-west1.
    • SUBNET: Es el nombre de una subred /28 sin usar.
      • El conector debe usar las subredes exclusivamente. No las pueden usar otros recursos, como VM, Private Service Connect o balanceadores de cargas.
      • A fin de confirmar que tu subred no se usa para Private Service Connect o Cloud Load Balancing, verifica que la subred purpose sea PRIVATE mediante la ejecución del siguiente comando en gcloud CLI:
        gcloud compute networks subnets describe SUBNET_NAME
        
        Reemplaza lo siguiente:
        • SUBNET_NAME: El nombre de tu subred
    • HOST_PROJECT_ID: El ID del proyecto host
    • MIN: Es la cantidad mínima de instancias que se usarán para el conector. Usa un número entero que se encuentre entre 2 y 9. El valor predeterminado es 2. Para obtener más información sobre el escalamiento del conector, consulta Capacidad de procesamiento y escalamiento.
    • MAX: Es la cantidad máxima de instancias que se usarán para el conector. Usa un número entero que se encuentre entre 3 y 10. El valor predeterminado es 10. Si el tráfico lo requiere, el conector se escalará horizontalmente hasta el [MAX] de instancias, pero luego no se reducirá la escala. Para obtener más información sobre el escalamiento del conector, consulta Capacidad de procesamiento y escalamiento.
    • MACHINE_TYPE: f1-micro, e2-micro o e2-standard-4. Para obtener información sobre la capacidad de procesamiento del conector, incluidos el tipo de máquina y el escalamiento, consulta Capacidad de procesamiento y escalamiento.

    Para obtener más detalles y ver los argumentos opcionales, consulta la referencia de gcloud.

  4. Verifica que tu conector tenga el estado READY antes de usarlo:

    gcloud compute networks vpc-access connectors describe CONNECTOR_NAME \
    --region=REGION

    Reemplaza lo siguiente:

    • CONNECTOR_NAME: Es el nombre de tu conector. Este es el nombre que especificaste en el paso anterior
    • REGION: Es la región del conector. Esta es la región que especificaste en el paso anterior

    El resultado debe contener la línea state: READY.

Terraform

Puedes usar un recurso de Terraform para habilitar la API de vpcaccess.googleapis.com.

resource "google_project_service" "vpcaccess-api" {
  project = var.project_id # Replace this with your project ID in quotes
  service = "vpcaccess.googleapis.com"
}

Puedes usar módulos de Terraform para crear una red y subred de VPC y, luego, crear el conector.

module "test-vpc-module" {
  source       = "terraform-google-modules/network/google"
  version      = "~> 10.0"
  project_id   = var.project_id # Replace this with your project ID in quotes
  network_name = "my-serverless-network"
  mtu          = 1460

  subnets = [
    {
      subnet_name   = "serverless-subnet"
      subnet_ip     = "10.10.10.0/28"
      subnet_region = "us-central1"
    }
  ]
}

module "serverless-connector" {
  source     = "terraform-google-modules/network/google//modules/vpc-serverless-connector-beta"
  version    = "~> 10.0"
  project_id = var.project_id
  vpc_connectors = [{
    name        = "central-serverless"
    region      = "us-central1"
    subnet_name = module.test-vpc-module.subnets["us-central1/serverless-subnet"].name
    # host_project_id = var.host_project_id # Specify a host_project_id for shared VPC
    machine_type  = "e2-standard-4"
    min_instances = 2
    max_instances = 7
    }
    # Uncomment to specify an ip_cidr_range
    #   , {
    #     name          = "central-serverless2"
    #     region        = "us-central1"
    #     network       = module.test-vpc-module.network_name
    #     ip_cidr_range = "10.10.11.0/28"
    #     subnet_name   = null
    #     machine_type  = "e2-standard-4"
    #     min_instances = 2
    #   max_instances = 7 }
  ]
  depends_on = [
    google_project_service.vpcaccess-api
  ]
}

Habilita Cloud Run Functions para el proyecto de servicio

Habilita la API de Cloud Run Functions para el proyecto de servicio. Esto es necesario para agregar roles de IAM en pasos posteriores y que el proyecto de servicio use Cloud Run Functions.

Ejecuta el siguiente comando en tu terminal:

gcloud services enable cloudfunctions.googleapis.com --project=SERVICE_PROJECT_ID

Reemplaza lo siguiente:

  • SERVICE_PROJECT_ID: el ID del proyecto de servicio

Proporciona acceso al conector

Para proporcionar acceso al conector, otorga el rol de IAM Usuario de Acceso a VPC sin servidores del Agente de servicio de Cloud Run Functions al proyecto de servicio en el proyecto host. También debes otorgar el mismo rol al agente de servicio de Cloud Run.

  1. Ejecuta el siguiente comando en la terminal:

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --member=serviceAccount:service-SERVICE_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com \
    --role=roles/vpcaccess.user
    

    Reemplaza lo siguiente:

    • HOST_PROJECT_ID: el ID del proyecto host de la VPC compartida
    • SERVICE_PROJECT_NUMBER: el número de proyecto asociado con el proyecto de servicio. Es diferente del ID del proyecto. Para encontrar el número de proyecto, ejecuta lo siguiente:

      gcloud projects describe SERVICE_PROJECT_ID
      
  2. También otorga el rol al agente de servicio de Cloud Run mediante la ejecución del siguiente comando:

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --member=serviceAccount:service-SERVICE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com \
    --role=roles/vpcaccess.user
    

Haz que el conector sea detectable

En la política de IAM del proyecto host, debes otorgar las siguientes dos funciones predefinidas a las principales que implementan los servicios de Cloud Run:

Como alternativa, puedes usar funciones personalizadas o algunas funciones predefinidas que incluyan todos los permisos del rol de visualizador de acceso a VPC sin servidores (vpcaccess.viewer).

  1. Ejecuta los siguientes comandos en tu terminal:

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --member=PRINCIPAL \
    --role=roles/vpcaccess.viewer
    
    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --member=PRINCIPAL \
    --role=roles/compute.networkViewer
    

    Reemplaza lo siguiente:

    • HOST_PROJECT_ID: el ID del proyecto host de la VPC compartida
    • PRINCIPAL: El principal que implementa los servicios de Cloud Run. Obtén más información sobre la marca --member.

Configura tu función para usar un conector

Para cada función que requiera acceso a tu VPC compartida, debes especificar el conector de la función. En los siguientes pasos, se muestra cómo configurar la función para usar un conector.

  1. Configura la CLI de gcloud para usar el proyecto que contiene la función:

    gcloud config set project PROJECT_ID
    Reemplaza lo siguiente:

    • PROJECT_ID: el ID del proyecto que contiene la función que requiere acceso a tu VPC compartida. Si la función está en el proyecto host, este es el ID del proyecto host. Si la función está en un proyecto de servicio, este es el ID del proyecto de servicio.
  2. Usa la marca --vpc-connector e implementa tu función:

    gcloud functions deploy FUNCTION_NAME --vpc-connector=CONNECTOR_NAME
    

    Reemplaza lo siguiente:

    • FUNCTION_NAME: El nombre de la función
    • CONNECTOR_NAME: el nombre del conector Usa el nombre completamente calificado cuando realices implementaciones desde un proyecto de servicio de VPC compartida (en lugar del proyecto host), por ejemplo:
      projects/HOST_PROJECT_ID/locations/CONNECTOR_REGION/connectors/CONNECTOR_NAME
      en el que HOST_PROJECT_ID es el ID del proyecto host, CONNECTOR_REGION es la región del conector y CONNECTOR_NAME es el nombre que le asignaste a tu conector.

Para tener más control sobre qué solicitudes se enrutan a través del conector, consulta Configuración de salida.

Próximos pasos