Acceder a las APIs regionales de Google a través de endpoints

En este documento se explica cómo usar los puntos finales de Private Service Connect para conectarse a los puntos finales regionales de las APIs de Google compatibles.

Para obtener información sobre otras configuraciones de Private Service Connect, consulta Private Service Connect.

Roles

Para obtener los permisos que necesitas para crear un punto final de Private Service Connect regional, pide a tu administrador que te asigne los siguientes roles de gestión de identidades y accesos en tu red de VPC:

Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

Antes de empezar

  1. Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

    $ gcloud init

    Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  2. Enable the Compute Engine, Network Connectivity Center, and Cloud DNS APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  3. Además, habilita la API del servicio de destino al que quieras acceder a través del punto final de Private Service Connect. Por ejemplo, si quieres acceder a spanner.me-central2.rep.googleapis.com, habilita la API Cloud Spanner. Private Service Connect no habilita ninguna API automáticamente.

  4. Asegúrate de que las reglas de cortafuegos de salida permitan el tráfico al endpoint. La configuración predeterminada del cortafuegos de una red de VPC permite este tráfico porque contiene una regla de salida implícita. Comprueba que no hayas creado una regla de salida con mayor prioridad que bloquee el tráfico.

Crear un endpoint de Private Service Connect regional

Puedes crear un endpoint regional de Private Service Connect para enviar solicitudes a un endpoint regional de una API de Google de destino.

Para ver una lista de los endpoints regionales admitidos, consulta Endpoints de servicio regionales.

Consola

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

    Ir a Private Service Connect

  2. Haz clic en Conectar punto final.

  3. En Destino, selecciona API de Google.

  4. En la lista Ámbito, selecciona Regional.

  5. En la lista Región, selecciona la región que quieras usar.

  6. En la lista Servicio de destino, selecciona el servicio al que quieras acceder.

  7. En Nombre del endpoint, escribe un nombre para el endpoint.

  8. En Red, selecciona una red.

  9. En Subred, seleccione una subred.

  10. En Dirección IP, haga una de las siguientes acciones para configurar una dirección IP:

    • Selecciona Asignar automáticamente para asignar y reservar automáticamente una nueva dirección IP.
    • Selecciona una dirección IP reservada de la lista.
    • Haz clic en Crear dirección IP para reservar una nueva dirección IP.
  11. Opcional: Para que el endpoint esté disponible en todas las regiones de la red de VPC, selecciona Habilitar el acceso global.

  12. Haz clic en Añadir endpoint.

gcloud

Usa el comando gcloud network-connectivity regional-endpoints create.

gcloud network-connectivity regional-endpoints create ENDPOINT_NAME \
    --region=REGION \
    --address=ADDRESS \
    --network=projects/PROJECT_ID/global/networks/NETWORK_NAME \
    --subnetwork=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \
    --target-google-api=REP_DNS_NAME

Si quieres que el endpoint esté disponible para los recursos de otras regiones, añade la marca --enable-global-access.

Haz los cambios siguientes:

  • ENDPOINT_NAME: el nombre del endpoint.

  • REGION: la región en la que quieres crear el endpoint.

  • ADDRESS: la dirección IPv4 o IPv6 que quieras usar para el endpoint. Si se omite, se asigna una dirección IPv4 de la subred. Se debe utilizar uno de los formatos indicados a continuación.

    • Dirección IPv4 (por ejemplo, 10.0.0.2).
    • URI de recurso de dirección IPv4 o IPv6. Por ejemplo: projects/PROJECT_ID/regions/REGION/addresses/ADDRESS_NAME.
  • PROJECT_ID: el proyecto en el que vas a crear el endpoint.

  • NETWORK_NAME: nombre de la red de VPC del endpoint.

  • SUBNET_NAME: la subred a la que vas a conectar el endpoint.

  • REP_DNS_NAME: el nombre de host del endpoint del servicio regional al que te estás conectando. Por ejemplo, spanner.me-central2.rep.googleapis.com.

API

Usa el método projects.locations.regionalEndpoints.create.

Método HTTP y URL:

POST https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/regionalEndpoints?regionalEndpointId=ENDPOINT_NAME
{
  "accessType": "REGIONAL",
  "address": "ADDRESS",
  "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
  "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
  "targetGoogleApi": "REP_DNS_NAME"
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID de proyecto del endpoint.
  • REGION: la región en la que quieres crear el endpoint.
  • ENDPOINT_NAME: el nombre del endpoint.
  • ADDRESS: la dirección IPv4 o IPv6 que quieras usar para el endpoint. Si se omite, se asigna una dirección IPv4 de la subred. Usa uno de los siguientes formatos:
    • Dirección IPv4 (por ejemplo, 10.0.0.2).
    • URI de recurso de dirección IPv4 o IPv6. Por ejemplo: projects/PROJECT_ID/regions/REGION/addresses/ADDRESS_NAME.
  • NETWORK_NAME: nombre de la red de VPC del endpoint.
  • SUBNET_NAME: el nombre de la subred a la que quieras conectar el endpoint.
  • REP_DNS_NAME: el nombre de host del endpoint del servicio regional al que quieras conectarte. Por ejemplo, spanner.me-central2.rep.googleapis.com.

Permiso para mostrar puntos finales.

Puedes enumerar todos los endpoints configurados.

Consola

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

    Ir a Private Service Connect

  2. Haz clic en la pestaña Puntos finales conectados.

    Se muestran todos los endpoints, incluidos los que tienen destinos de endpoint regionales.

gcloud

Usa el comando gcloud network-connectivity regional-endpoints list.

gcloud network-connectivity regional-endpoints list \
    --region=REGION

Sustituye REGION por la región de los endpoints que quieras consultar.

API

Usa el método projects.locations.regionalEndpoints.list.

GET https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/regionalEndpoints

Haz los cambios siguientes:

  • PROJECT_ID: el ID de proyecto del endpoint.
  • REGION: la región de los endpoints que quieras listar.

Verificar que el endpoint funciona

Crea una instancia de máquina virtual en la red de VPC y en la región en la que esté configurado el endpoint. Ejecuta el siguiente comando en la VM para verificar que el endpoint de Private Service Connect funciona. Los endpoints no responden a las solicitudes de ping (ICMP).

  • Para verificar un endpoint IPv4, haz lo siguiente:

    curl --connect-to REP_DNS_NAME:443:ADDRESS:443 \
    'https://REP_DNS_NAME/PATH'
    
  • Para verificar un endpoint IPv6, haz lo siguiente:

    curl -6 --connect-to REP_DNS_NAME:443:[ADDRESS]:443 \
    'https://REP_DNS_NAME/PATH'
    

Haz los cambios siguientes:

  • REP_DNS_NAME: el nombre de DNS público del endpoint regional de destino. Por ejemplo, spanner.me-central2.rep.googleapis.com.
  • ADDRESS: la dirección IP del endpoint.
  • PATH: la ruta a un recurso que ofrece este servicio. Por ejemplo, muchos servicios ofrecen un documento de descubrimiento con la ruta $discovery/rest?version=v1.

En el siguiente ejemplo de solicitud se comprueba que un endpoint con la dirección IP 192.168.1.100 puede solicitar el documento de descubrimiento de la API Cloud Spanner desde el endpoint regional de me-central2.

curl --connect-to spanner.me-central2.rep.googleapis.com:443:192.168.1.100:443 \
'https://spanner.me-central2.rep.googleapis.com/$discovery/rest?version=v1'

Crear una entrada DNS privada para el endpoint

Debes crear entradas de DNS privadas para que los clientes puedan dirigir las solicitudes a tu endpoint de Private Service Connect.

Te recomendamos que crees una zona privada que use el mismo nombre de host que el endpoint regional de destino: SERVICE.REGION.rep.DOMAIN y que crees un registro de nivel superior en esa zona.

Por ejemplo, si tu punto final de Private Service Connect tiene el destino spanner.me-central2.rep.googleapis.com, crea una zona privada para spanner.me-central2.rep.googleapis.com que contenga un registro de nivel superior para spanner.me-central2.rep.googleapis.com. Crear registros en el vértice del dominio significa que puedes acceder al nombre de host público de otros endpoints regionales, como logging.me-central2.rep.googleapis.com.

En las siguientes secciones se describe cómo usar Cloud DNS para crear una zona privada y un registro DNS raíz.

Crear una zona privada

Consola

  1. En la consola de Google Cloud, ve a la página Crear una zona DNS. Google Cloud

    Ir a Crear una zona DNS

  2. En Tipo de zona, selecciona Privada.

  3. En Nombre de la zona, escribe un nombre. Por ejemplo, si tu punto final de Private Service Connect apunta a spanner.me-central2.rep.googleapis.com, introduce spanner-me-central2-rep-googleapis-com.

  4. En Nombre de DNS, especifica el nombre de host del endpoint regional de destino seguido de un punto. Por ejemplo, spanner.me-central2.rep.googleapis.com..

  5. Opcional: Añade una descripción.

  6. En Opciones, selecciona Predeterminado (privado).

  7. Selecciona las redes de VPC en las que quieras que se vea la zona privada. Solo las redes VPC que selecciones estarán autorizadas para consultar registros en la zona.

  8. Haz clic en Crear.

gcloud

Ejecuta el comando dns managed-zones create:

gcloud dns managed-zones create ZONE_NAME \
    --dns-name=REP_DNS_NAME. \
    --networks=VPC_NETWORK_LIST \
    --visibility=private \
    --description="Private zone for REP_DNS_NAME"

Haz los cambios siguientes:

  • ZONE_NAME: un nombre para tu zona (por ejemplo, spanner-me-central2-rep-googleapis.com).
  • DESCRIPTION: una descripción de la zona
  • REP_DNS_NAME: el sufijo DNS de tu zona. Usa el nombre de host del endpoint regional de destino. Por ejemplo, spanner.me-central2.rep.googleapis.com.
  • VPC_NETWORK_LIST: lista delimitada por comas de redes de VPC autorizadas para consultar la zona

API

Envía una solicitud POST mediante el método managedZones.create:

Método HTTP y URL:

POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones

Cuerpo JSON de la solicitud:

{
  "name": "ZONE_NAME",
  "dnsName": "REP_DNS_NAME.",
  "description": "DESCRIPTION",
  "visibility": "private",
  "privateVisibilityConfig": {
    "kind": "dns#managedZonePrivateVisibilityConfig",
    "networks": [
      {
        "kind": "dns#managedZonePrivateVisibilityConfigNetwork",
        "networkUrl": "NETWORK_1_URL"
      },
      {
        "kind": "dns#managedZonePrivateVisibilityConfigNetwork",
        "networkUrl": "NETWORK_2_URL"
      }
    ]
  }
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID de proyecto de la zona DNS.
  • ZONE_NAME: el nombre de la zona privada que has creado para este endpoint regional.
  • REP_DNS_NAME: el nombre de dominio completo del registro que vas a crear. Usa el nombre de host del endpoint regional de destino (por ejemplo, spanner.me-central2.rep.googleapis.com).
  • DESCRIPTION: descripción de la zona DNS.
  • NETWORK_1_URL y NETWORK_2_URL: las URLs completas de las redes de VPC autorizadas para consultar la zona. Por ejemplo, https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME.

Añadir un registro DNS a la zona

Consola

  1. En la Google Cloud consola, ve a la página Zonas de Cloud DNS.

    Ir a las zonas de Cloud DNS

  2. Haz clic en el nombre de la zona gestionada a la que quieras añadir el registro.

  3. En la página Detalles de la zona, haga clic en Añadir estándar.

  4. En la página Crear conjunto de registros, deja en blanco el campo Nombre de DNS. Si dejas el campo en blanco, se creará un registro de recursos en el vértice del dominio.

  5. En Tipo de registro del recurso, selecciona A.

  6. En el campo Dirección IPv4, introduce o selecciona la dirección IP del endpoint de Private Service Connect.

  7. Haz clic en Crear.

gcloud

Para añadir un conjunto de registros de recursos, usa el gcloud dns record-sets createcomando:

gcloud dns record-sets create REP_DNS_NAME \
    --rrdatas=ADDRESS \
    --type=RECORD_TYPE \
    --ttl=TTL \
    --zone=ZONE_NAME

Haz los cambios siguientes:

  • REP_DNS_NAME: el nombre de dominio completo del registro que vas a crear. Usa el nombre de host del endpoint regional de destino (por ejemplo, spanner.me-central2.rep.googleapis.com).
  • ADDRESS: la dirección IP del endpoint de Private Service Connect.
  • RECORD_TYPE: el tipo de registro DNS, como A para los registros IPv4 o AAAA para los registros IPv6.
  • TTL: el TTL en segundos que la resolución almacena en caché este conjunto de registros de recursos. Por ejemplo, 300.
  • ZONE_NAME: el nombre de la zona privada que has creado para este endpoint regional.

API

Para añadir un conjunto de registros de recursos, usa el método resourceRecordSets.create:

Método HTTP y URL:

POST https://www.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/ZONE_NAME/rrsets

Cuerpo JSON de la solicitud:

{
  "name": "REP_DNS_NAME.",
  "type": "RECORD_TYPE",
  "ttl": TTL,
  "rrdatas": [ "ADDRESS" ]
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID de proyecto de la zona DNS.
  • ZONE_NAME: el nombre de la zona privada que has creado para este endpoint regional.
  • REP_DNS_NAME: el nombre de dominio completo del registro que vas a crear. Usa el nombre de host del endpoint regional de destino (por ejemplo, spanner.me-central2.rep.googleapis.com).
  • RECORD_TYPE: el tipo de registro DNS, como A para los registros IPv4 o AAAA para los registros IPv6.
  • TTL: el TTL en segundos que la resolución almacena en caché este conjunto de registros de recursos. Por ejemplo, 300.
  • ADDRESS: la dirección IP del endpoint de Private Service Connect.

Configurar los clientes para que usen el nombre del endpoint privado

Debes configurar los clientes para que usen los nombres de DNS privados en lugar de los públicos. Consulta la documentación de tu cliente o biblioteca de cliente para obtener información sobre cómo configurarlo para que use endpoints personalizados. En las páginas siguientes se incluyen los pasos de configuración de algunos clientes habituales:

  • Python: puedes configurar api_endpoint en Client options.

  • Ir: puedes configurar WithEndpoint en ClientOptions.

  • .NET: puedes configurar Endpoint en la clase de compilación del cliente.

  • gcloud puedes configurar api_endpoint_overrides en la CLI de gcloud.

Obtener información detallada sobre un endpoint

Puede ver los detalles de configuración de un endpoint.

gcloud

Usa el comando gcloud network-connectivity regional-endpoints describe.

gcloud network-connectivity regional-endpoints describe \
    ENDPOINT_NAME --region=REGION

Haz los cambios siguientes:

  • ENDPOINT_NAME: el nombre del endpoint.
  • REGION: la región del endpoint.

API

Usa el comando projects.locations.regionalEndpoints.get.

GET https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/regionalEndpoints/ENDPOINT_NAME

Haz los cambios siguientes:

  • PROJECT_ID: el ID de proyecto del endpoint.
  • REGION: la región de los endpoints que quieras listar.
  • ENDPOINT_NAME: el nombre del endpoint.

Actualizar la configuración de acceso global

No puedes actualizar un endpoint de Private Service Connect que tenga un destino de endpoint regional. Si necesitas cambiar el ajuste de acceso global del endpoint, elimina el endpoint y crea otro con el ajuste de acceso global que necesites.

Eliminar un punto final

Puede eliminar un endpoint.

gcloud

Usa el comando gcloud network-connectivity regional-endpoints delete.

gcloud network-connectivity regional-endpoints delete \
    ENDPOINT_NAME --region=REGION

Haz los cambios siguientes:

  • ENDPOINT_NAME: el nombre del endpoint.
  • REGION: la región del endpoint.

API

Usa el comando projects.location.regionalEndpoints.delete.

DELETE https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/regionalEndpoints/ENDPOINT_NAME

Haz los cambios siguientes:

  • PROJECT_ID: el ID de proyecto del endpoint.
  • REGION: la región del endpoint.
  • ENDPOINT_NAME: el nombre del endpoint.

Acceder a endpoints desde redes híbridas

Los clientes de redes conectadas a Google Cloud mediante vinculaciones de VLAN para Cloud Interconnect o túneles de Cloud VPN pueden acceder a los puntos finales de Private Service Connect.

  • La vinculación de VLAN o el túnel de Cloud VPN deben terminar en la misma red de VPC (o red de VPC compartida) que el endpoint. Los clientes de las redes de VPC emparejadas no pueden acceder a los endpoints.

  • El tráfico de clientes de las vinculaciones de VLAN o los túneles de Cloud VPN puede llegar a los endpoints de otra región si se configura el acceso global.

  • Se admiten tanto Dataplane v1 como Dataplane v2 para las vinculaciones de VLAN. Para obtener más información sobre las versiones de Dataplane, consulta Dataplane v2.

Debes configurar los sistemas de la otra red para que puedan hacer consultas a tus zonas DNS privadas.

Si has implementado las zonas DNS privadas con Cloud DNS, sigue estos pasos:

  • Crea una política de servidor entrante en la red VPC a la que se conecta tu otra red.

  • Identifica los puntos de entrada del reenviador entrante en la región en la que se encuentra tu vinculación de VLAN o tu túnel de Cloud VPN, en la red de VPC a la que se conecta tu otra red.

  • Configura los sistemas y los servidores de nombres DNS de la otra red para que reenvíen los nombres de DNS del endpoint a un punto de entrada de reenviador entrante de la misma región que la conexión VLAN o el túnel de Cloud VPN que se conecta a la red de VPC.