Accede a las APIs de Google a través de extremos

En este documento, se explica cómo usar los extremos de Private Service Connect para conectarte a las API de Google. En lugar de enviar solicitudes a la API a las direcciones IP disponibles de forma pública para extremos de servicio como storage.googleapis.com, puedes enviar las solicitudes a la dirección IP interna de un extremo.

También puedes usar Private Service Connect para acceder a los servicios en otra red de VPC y publicar servicios.

Funciones

Las siguientes funciones de IAM proporcionan los permisos necesarios para realizar las tareas de esta guía.

Tarea Roles
Crear un extremo Todas las siguientes funciones:
Administrador de red de Compute (roles/compute.networkAdmin),
Editor del Directorio de servicios (roles/servicedirectory.editor) y
Administrador de DNS (roles/dns.admin)
Configurar Acceso privado a Google (opcional) Administrador de red de Compute (roles/compute.networkAdmin)

Antes de comenzar

  • Lee Acerca de la conexión a las APIs de Google mediante extremos para obtener más información, incluida la configuración y las limitaciones de DNS.

  • Private Service Connect no habilita de forma automática ninguna API. Debes habilitar las API de Google por separado desde la página de API y servicios en la consola de Google Cloud.

  • Debes habilitar la API de Compute Engine en tu proyecto.

  • Debes habilitar la API de Directorio de servicios en tu proyecto.

  • Debes habilitar la API de Cloud DNS en tu proyecto.

  • Debes elegir una dirección IP para usar en el extremo. Para obtener información sobre qué direcciones IP puedes usar, consulta Requisitos de direcciones IP.

  • Las reglas de firewall de salida deben permitir el tráfico al extremo. La configuración predeterminada del firewall para una red de VPC permite este tráfico, porque contiene una regla de permiso de salida implícita. Verifica que no hayas creado una regla de salida de prioridad más alta que bloquee el tráfico.

  • Las instancias de máquina virtual (VMs) sin una dirección IP externa asignada deben usar una subred con Acceso privado a Google habilitado para acceder a las APIs y los servicios de Google mediante un extremo.

    Una VM con una dirección IP externa puede acceder a los servicios y las APIs de Google mediante extremos, incluso si el Acceso privado a Google está inhabilitado para su subred. La conectividad con el extremo permanece dentro de la red de Google.

  • Si tu red de VPC no contiene extremos, verifica si existe una zona privada de Cloud DNS para p.googleapis.com. Si la zona existe, bórrala antes de crear el extremo. Si no la borras, la creación de la zona DNS del Directorio de servicios usada para la Private Service Connect falla. Si deseas obtener más información, consulta Solución de problemas.

  • No se puede acceder a los extremos desde redes de VPC con intercambio de tráfico.

Habilita el Acceso privado a Google para una subred

Las VMs sin una dirección IP externa asignada deben conectarse a una subred con Acceso privado a Google habilitado para acceder a las APIs y los servicios de Google mediante un extremo.

Si la VM tiene más de una interfaz, conecta la interfaz que está configurada con una ruta predeterminada (por lo general, nic0).

La dirección IP de origen de los paquetes que se envían desde la VM debe coincidir con la dirección IPv4 interna principal de la interfaz de VM o con una dirección IPv4 interna de un rango de IP de alias.

Para habilitar Acceso privado a Google en una subred, sigue estos pasos.

Console

  1. En la consola de Google Cloud, ve a la página Redes de VPC.

    Ir a las redes de VPC

  2. Haz clic en el nombre de la red que contiene la subred en la que necesitas habilitar el Acceso privado a Google.

  3. Haz clic en el nombre de la subred. Se mostrará la página Detalles de la subred.

  4. Haz clic en Editar.

  5. En la sección Acceso privado a Google selecciona Habilitar.

  6. Haz clic en Guardar.

gcloud

  1. Determina el nombre y la región de la subred. Para ver una lista de las subredes de una red en particular, usa el siguiente comando:

    gcloud compute networks subnets list --filter=NETWORK_NAME
    
  2. Ejecuta el siguiente comando para habilitar el Acceso privado a Google:

    gcloud compute networks subnets update SUBNET_NAME \
    --region=REGION \
    --enable-private-ip-google-access
    
  3. Verifica que el Acceso privado a Google esté habilitado mediante la ejecución del siguiente comando:

    gcloud compute networks subnets describe SUBNET_NAME \
    --region=REGION \
    --format="get(privateIpGoogleAccess)"
    

Reemplaza lo siguiente:

  • SUBNET_NAME: El nombre de la subred
  • REGION: La región de la subred
  • NETWORK_NAME: El nombre de la red de VPC que contiene la subred

Terraform

Puedes usar el recurso de Terraform para habilitar el Acceso privado a Google en una subred.

resource "google_compute_network" "network" {
  project                 = var.project # Replace this with your project ID in quotes
  name                    = "tf-test"
  auto_create_subnetworks = false
}

resource "google_compute_subnetwork" "vpc_subnetwork" {
  project                  = google_compute_network.network.project
  name                     = "test-subnetwork"
  ip_cidr_range            = "10.2.0.0/16"
  region                   = "us-central1"
  network                  = google_compute_network.network.id
  private_ip_google_access = true
}

Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.

Crear un extremo

Una vez que hayas elegido una dirección IP que cumpla con los requisitos, puedes crear un extremo.

Un extremo se conecta a los servicios y las APIs de Google mediante una regla de reenvío global. Cada regla de reenvío se tiene en cuenta en la cuota por red de VPC para Private Service Connect.

No puedes actualizar un extremo para las API y los servicios de Google después de crearlo. Si necesitas actualizar un extremo para los servicios y las API de Google, borra el extremo y, luego, crea uno nuevo.

Console

  1. En la consola de Google Cloud, ve a la página Private Service Connect.

    Ir a Private Service Connect

  2. Haz clic en la pestaña Extremos conectados.

  3. Haz clic en Conectar extremo.

  4. En Destino, selecciona el paquete de la API de destino que deseas usar:

    • Todas las API de Google
    • VPC‑SC
  5. En Nombre del extremo, ingresa un nombre para el extremo.

  6. Selecciona una red para el extremo.

  7. Selecciona una dirección IP para el extremo.

    La dirección IP debe cumplir con estos requisitos.

    Si necesitas una dirección IP nueva, puedes crear una:

    1. Haz clic en Crear dirección IP.
    2. Ingresa un nombre y una descripción para la dirección IP.
    3. Ingresa la dirección IP que quieres usar y haz clic en Guardar.
  8. Si aún no se configuró una región del directorio de servicios para esta red de VPC, selecciona la región que deseas usar.

    Todos los extremos que se usan para acceder a las API y los servicios de Google en una red de VPC determinada usan la misma región del Directorio de servicios.

  9. Si un espacio de nombres del Directorio de servicios aún no se configuró para esta red de VPC, configura el espacio de nombres que deseas usar:

    • Para usar un espacio de nombres asignado de forma automática, haz clic en el menú desplegable Espacio de nombres y selecciona el espacio de nombres asignado de forma automática.

    • Para seleccionar un espacio de nombres existente que se use en otra red, haz clic en el menú desplegable Espacio de nombres y selecciona un espacio de nombres de la lista. La lista muestra todos los espacios de nombres del proyecto. Debes seleccionar un espacio de nombres que se use solo para los extremos que se usan a fin de acceder a las APIs de Google.

    • Para crear un nuevo espacio de nombres, haz clic en el menú desplegable Espacio de nombres y, luego, en Crear espacio de nombres. Ingresa el espacio de nombres y haz clic en Crear.

    Todos los extremos que usas para acceder a los servicios y las API de Google en una red de VPC determinada usan el mismo espacio de nombres del Directorio de servicios.

  10. Haz clic en Agregar extremo.

gcloud

  1. Reserva una dirección IP interna global para asignar al extremo.

    gcloud compute addresses create ADDRESS_NAME \
      --global \
      --purpose=PRIVATE_SERVICE_CONNECT \
      --addresses=ENDPOINT_IP \
      --network=NETWORK_NAME
    

    Reemplaza lo siguiente:

    • ADDRESS_NAME: nombre que se asignará a la dirección IP reservada.

    • ENDPOINT_IP: dirección IP que se reservará para el extremo.

      La dirección IP debe cumplir con estos requisitos.

    • NETWORK_NAME: nombre de la red de VPC para el extremo.

  2. Crea una regla de reenvío para conectar el extremo a los servicios y las API de Google.

    gcloud compute forwarding-rules create ENDPOINT_NAME \
      --global \
      --network=NETWORK_NAME \
      --address=ADDRESS_NAME \
      --target-google-apis-bundle=API_BUNDLE \
      [ --service-directory-registration=REGION_NAMESPACE_URI ]
    

    Reemplaza lo siguiente:

    • ENDPOINT_NAME: nombre que se asignará al extremo. El nombre debe ser una string de 1 a 20 caracteres y contener solo letras minúsculas y números. El nombre debe empezar con una letra.

    • NETWORK_NAME: nombre de la red de VPC para el extremo.

    • ADDRESS_NAME: nombre de la dirección reservada en la red asociada.

    • API_BUNDLE: paquete de API que estará disponible mediante el extremo. Consulta la lista de API compatibles.

      • Usa all-apis para otorgar acceso a todas las API compatibles.

      • Usa vpc-sc para restringir el acceso a las API de Google que admiten los Controles del servicio de VPC.

    • REGION_NAMESPACE_URI: Es el URI de la región o el espacio de nombres del Directorio de servicios que deseas usar. Este URI debe hacer referencia al mismo proyecto en el que estás creando el extremo.

      • Solo puedes definir una región con projects/PROJECT_NAME/locations/REGION.

      • Puedes definir una región y un espacio de nombres con projects/PROJECT_NAME/locations/REGION/namespaces/NAMESPACE.

      Si omites --service-directory-registration por completo o configuras una región sin un espacio de nombres, ocurre lo siguiente:

      • Si ya se configuró una región o un espacio de nombres para esta red de VPC, se usan esos valores predeterminados.

      • Si no se configura una región, se establece en us-central1. Si un espacio de nombres no está configurado, se asigna un espacio de nombres generado por el sistema.

API

  1. Reserva una dirección IP interna global para asignar al extremo.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses
    
    {
    "name": ADDRESS_NAME,
    "address": ENDPOINT_IP,
    "addressType": "INTERNAL",
    "purpose": PRIVATE_SERVICE_CONNECT,
    "network": NETWORK_URL
    }
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto

    • ADDRESS_NAME: nombre que se asignará a la dirección IP reservada.

    • ENDPOINT_IP: dirección IP que se reservará para el extremo.

      La dirección IP debe cumplir con estos requisitos.

    • NETWORK_URL: red de VPC para el extremo. Usa el método network.list o gcloud compute networks list --uri para encontrar las URL de tus redes.

  2. Crea una regla de reenvío para conectar el extremo a los servicios y las API de Google.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules
    {
     "IPAddress": ADDRESS_URL,
     "network": NETWORK_URL,
     "name": ENDPOINT_NAME,
     "target": API_BUNDLE,
     "serviceDirectoryRegistrations : [
       {
         "service_directory_region": REGION,
         "namespace": "NAMESPACE"
    
       }
     ],
    }
    

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto

    • ENDPOINT_NAME: nombre que se asignará al extremo. El nombre debe ser una string de 1 a 20 caracteres y contener solo letras minúsculas y números. El nombre debe empezar con una letra.

    • NETWORK_URL: red de VPC para el extremo. Usa el método network.list o gcloud compute networks list --uri para encontrar las URL de tus redes.

    • ADDRESS_URL: URL de la dirección reservada en la red asociada. Usa el método globalAddresses.list o gcloud compute addresses list --uri para encontrar las URL de tus direcciones reservadas.

    • API_BUNDLE: paquete de API que estará disponible mediante el extremo. Consulta la lista de APIs compatibles.

      • Usa all-apis para otorgar acceso a todas las API compatibles.

      • Usa vpc-sc para restringir el acceso a las API de Google que admiten los Controles del servicio de VPC.

    • REGION: la región del Directorio de servicios que deseas usar. Por ejemplo, us-central1. Si omites REGION y ya existe una región configurada para esta red de VPC, esa región se usa. Si no se configura una región, se establece en us-central1.

    • NAMESPACE: el nombre del espacio de nombres del Directorio de servicios que quieres usar. Si omites NAMESPACE y ya se configuró un espacio de nombres para esta red de VPC, ese espacio de nombres se usa. Si un espacio de nombres no está configurado, se asigna un espacio de nombres generado por el sistema.

Terraform

Puedes usar los siguientes recursos de Terraform para crear un extremo:

resource "google_compute_global_address" "default" {
  project      = google_compute_network.network.project
  name         = "global-psconnect-ip"
  address_type = "INTERNAL"
  purpose      = "PRIVATE_SERVICE_CONNECT"
  network      = google_compute_network.network.id
  address      = "10.3.0.5"
}
resource "google_compute_global_forwarding_rule" "default" {
  project               = google_compute_network.network.project
  name                  = "globalrule"
  target                = "all-apis"
  network               = google_compute_network.network.id
  ip_address            = google_compute_global_address.default.id
  load_balancing_scheme = ""
}

Verifica que el extremo funcione

Crea una instancia de VM en la red de VPC en la que esté configurado Private Service Connect. Ejecuta el siguiente comando en la VM para verificar que el extremo de Private Service Connect funcione. Los extremos no responden a las solicitudes de ping (ICMP).

curl -v ENDPOINT_IP/generate_204

Reemplaza ENDPOINT_IP por la dirección IP del extremo.

Si el extremo está funcionando, verás un código de respuesta HTTP 204.

Enumerar extremos

Puedes enumerar todos los extremos configurados.

Console

  1. En la consola de Google Cloud, ve a la página Private Service Connect.

    Ir a Private Service Connect

  2. Haz clic en la pestaña Extremos conectados.

    Se muestran los extremos.

gcloud

gcloud compute forwarding-rules list  \
--filter target="(all-apis OR vpc-sc)" --global

El resultado es similar a este:

NAME  REGION  IP_ADDRESS  IP_PROTOCOL  TARGET
RULE          IP          TCP          all-apis

Obtén información sobre un extremo

Puedes ver todos los detalles de configuración de un extremo.

Console

  1. En la consola de Google Cloud, ve a la página Private Service Connect.

    Ir a Private Service Connect

  2. Haz clic en la pestaña Extremos conectados.

    Se muestran los extremos.

  3. Haz clic en el extremo del que deseas ver los detalles.

gcloud

gcloud compute forwarding-rules describe \
    ENDPOINT_NAME --global

Etiqueta un extremo

Puedes administrar etiquetas para los extremos. Consulta cómo etiquetar recursos para obtener más información.

Borra un extremo †

Puedes borrar un extremo.

Console

  1. En la consola de Google Cloud, ve a la página Private Service Connect.

    Ir a Private Service Connect

  2. Haz clic en la pestaña Extremos conectados.

  3. Selecciona el extremo que deseas borrar y haz clic en Borrar.

gcloud

    gcloud compute forwarding-rules delete \
        ENDPOINT_NAME --global

Reemplaza ENDPOINT_NAME por el nombre del disco que deseas borrar.

Usa un extremo

Para usar un extremo, envías solicitudes a un nombre de host DNS que se resuelve a la dirección IP del extremo.

  • Puedes usar los nombres DNS p.googleapis.com creados automáticamente si puedes configurar tus clientes para que usen un extremo personalizado, y si se crean registros DNS p.googleapis.com para las APIs y los servicios que quieres usar. Para obtener más información, consulta Usa nombres de DNS p.googleapis.com.

    Por ejemplo, si el nombre de tu extremo es xyz, los registros DNS se crean para storage-xyz.p.googleapis.com, compute-xyz.p.googleapis.com y otras APIs que se usan con frecuencia en el paquete de APIs.

  • Puedes crear registros DNS con los nombres DNS predeterminados si usas un cliente que no se configuró para usar un extremo personalizado, o si no existe un registro DNS p.googleapis.com en el servicio que quieres usar. Para obtener más información, consulta Crea registros DNS mediante nombres de DNS predeterminados.

    Por ejemplo, crea registros DNS para storage.googleapis.com y compute.googleapis.com.

Usa nombres de DNS p.googleapis.com

Cuando creas un extremo, el Directorio de servicios crea registros DNS para las APIs y los servicios de uso común que están disponibles mediante el extremo. Los registros DNS se crean solo para las API y los servicios que tienen nombres de DNS predeterminados que terminan con googleapis.com y solo para un subconjunto de esas API y servicios.

Los registros DNS se crean en una zona privada p.googleapis.com. Los registros apuntan a la dirección IP del extremo y usan este formato: SERVICE-ENDPOINT.p.googleapis.com

Por ejemplo, si el nombre de tu extremo es xyz, se crean registros DNS para storage-xyz.p.googleapis.com, compute-xyz.p.googleapis.com y otras API compatibles.

Los clientes que se pueden configurar para usar un extremo personalizado pueden usar los nombres de DNS p.googleapis.com a fin de enviar solicitudes a un extremo.

Consulta la documentación de tu cliente o biblioteca cliente para obtener información sobre cómo configurarla con el fin de usar extremos personalizados. Por ejemplo:

  • Python: puedes configurar api_endpoint en Opciones del cliente.

  • Go: puedes configurar WithEndpoint en ClientOptions.

  • .NET: puedes configurar Endpoint en la clase de compilador del cliente.

  • gcloud: Puedes configurar api_endpoint_overrides en la gcloud CLI.

Crea registros DNS con nombres DNS predeterminados

Debes crear registros DNS para dirigir los nombres de DNS predeterminados para las APIs y los servicios al extremo en estas circunstancias:

  • Tu cliente o aplicación no se puede configurar para usar un nombre de DNS p.googleapis.com.

  • Debes acceder a un servicio compatible, pero no hay un nombre de DNS p.googleapis.com creado de forma automática para ese servicio.

Para crear registros DNS que apunten a tu extremo de Private Service Connect, sigue estas instrucciones:

  1. Crea una zona DNS para el dominio que necesitas usar (por ejemplo, googleapis.com o gcr.io). Se recomienda crear una zona privada de Cloud DNS para este propósito.

  2. En esta zona DNS, haz lo siguiente:

    1. Crea un registro A para el nombre de dominio (zona), por ejemplo, googleapis.com o gcr.io. Haz que este registro A apunte a la dirección IP del extremo. Si usas Cloud DNS, consulta cómo agregar un registro.

    2. Crea un registro CNAME para todos los nombres de host posibles del dominio adicional. Para ello, usa un asterisco y un punto seguidos del nombre de dominio (zona). Por ejemplo, *.googleapis.com o *.gcr.io. Haz que este registro CNAME apunte al registro A en la misma zona. Por ejemplo, apunta *.googleapis.com a googleapis.com o *.gcr.io a gcr.io.

Accede al extremo desde hosts locales

Si tu red local está conectada a una red de VPC, puedes usar Private Service Connect para acceder a las API y los servicios de Google desde hosts locales con la dirección IP interna del extremo.

  • Tu red local debe estar conectada a una red de VPC mediante túneles de Cloud VPN o adjuntos de VLAN.

  • El extremo está en la red de VPC que está conectada a tu red local.

  • La red local debe tener rutas adecuadas para el extremo. Configura un anuncio de ruta personalizado de Cloud Router a fin de anunciar rutas para el extremo en la sesión de BGP que administra las rutas del túnel de Cloud VPN o el adjunto de VLAN.

  • Debes configurar los sistemas locales para que puedan realizar consultas a tus zonas de DNS privadas.

    Si implementaste las zonas de DNS privadas con Cloud DNS, completa los siguientes pasos:

Soluciona problemas

No se puede crear una zona DNS privada

Cuando creas un extremo, se crea una zona DNS del Directorio de servicios. La creación de zonas puede fallar por los siguientes motivos:

  • No habilitaste la API de Cloud DNS en tu proyecto.

  • No tienes los permisos necesarios para crear una zona DNS del Directorio de servicios.

  • Existe una zona DNS con el mismo nombre en esta red de VPC.

  • Ya existe una zona de DNS para p.googleapis.com en esta red de VPC.

Pueden existir zonas en conflicto por una falla de eliminación anterior.

Para crear la zona DNS del Directorio de servicios, haz lo siguiente:

  1. Verifica que la API de Cloud DNS esté habilitada en tu proyecto.

  2. Verifica que tengas los permisos necesarios para crear la zona DNS del Directorio de servicios:

    • dns.managedZones.create
    • servicedirectory.namespaces.associatePrivateZone
  3. Borra la zona DNS.

  4. Crea una zona DNS de Directorio del servicio respaldada por el espacio de nombres del Directorio de servicios asociado con tu extremo.

    Usa los siguientes valores cuando crees la zona:

    • Nombre de zona: Usa el mismo nombre de zona que usó el sistema durante el intento de creación fallido. El mensaje de error muestra qué nombre de zona se usó.

    • Nombre DNS: p.googleapis.com. (incluye el punto final).

    • Espacio de nombres del Directorio de servicios: Encuentra el espacio de nombres del directorio de servicios para el extremo de Private Service Connect que creaste y usa este espacio de nombres cuando crees la zona DNS del Directorio de servicio.

    El espacio de nombres del Directorio de servicios tiene el siguiente formato: goog-psc-NETWORK_NAME-NETWORK_ID.

No se puede borrar la zona de DNS privada

Cuando borras el último extremo de una red de VPC, se borra la configuración asociada del Directorio de servicios, incluida la zona DNS.

Esta eliminación puede fallar por los siguientes motivos:

  • No tienes los permisos necesarios para borrar la zona DNS.

  • La zona contiene entradas DNS definidas por el usuario que el Directorio de servicios no creó.

Para solucionar este problema, haz lo siguiente:

  1. Verifica que tengas el permiso dns.managedZones.delete. Para obtener más información, consulta Control de acceso en la documentación de Cloud DNS.

  2. Borra la zona DNS.