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 | Funciones |
---|---|
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
En la consola de Google Cloud, ve a la página Redes de VPC.
Haz clic en el nombre de la red que contiene la subred en la que necesitas habilitar el Acceso privado a Google.
Haz clic en el nombre de la subred. Se mostrará la página Detalles de la subred.
Haz clic en Editar.
En la sección Acceso privado a Google selecciona Habilitar.
Haz clic en Guardar.
gcloud
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
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
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 subredREGION
: La región de la subredNETWORK_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.
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 APIs y los servicios de Google después de crearlo. Si necesitas actualizar un extremo para los servicios y las APIs de Google, bórralo y, luego, crea uno nuevo.
Console
En la consola de Google Cloud, ve a la página Private Service Connect.
Haz clic en la pestaña Extremos conectados.
Haz clic en Conectar extremo.
En Destino, selecciona el paquete de la API de destino que deseas usar:
- Todas las API de Google
- VPC-SC
En Nombre del extremo, ingresa un nombre para el extremo.
Selecciona una red para el extremo.
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:
- Haz clic en Crear dirección IP.
- Ingresa un nombre y una descripción para la dirección IP.
- Ingresa la dirección IP que quieres usar y haz clic en Guardar.
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.
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.
Haz clic en Agregar extremo.
gcloud
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.
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
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 proyectoADDRESS_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 ogcloud compute networks list --uri
para encontrar las URL de tus redes.
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 proyectoENDPOINT_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 ogcloud 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 ogcloud 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 omitesREGION
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 enus-central1
.NAMESPACE
: el nombre del espacio de nombres del Directorio de servicios que quieres usar. Si omitesNAMESPACE
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:
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
En la consola de Google Cloud, ve a la página Private Service Connect.
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
En la consola de Google Cloud, ve a la página Private Service Connect.
Haz clic en la pestaña Extremos conectados.
Se muestran los extremos.
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
En la consola de Google Cloud, ve a la página Private Service Connect.
Haz clic en la pestaña Extremos conectados.
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 DNSp.googleapis.com
para las APIs y los servicios que quieres usar. Para obtener más información, consulta Usa nombres de DNSp.googleapis.com
.Por ejemplo, si el nombre de tu extremo es
xyz
, los registros DNS se crean parastorage-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
ycompute.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:
Crea una zona DNS para el dominio que necesitas usar (por ejemplo,
googleapis.com
ogcr.io
). Se recomienda crear una zona privada de Cloud DNS para este propósito.En esta zona DNS, haz lo siguiente:
Crea un registro
A
para el nombre de dominio (zona), por ejemplo,googleapis.com
ogcr.io
. Haz que este registroA
apunte a la dirección IP del extremo. Si usas Cloud DNS, consulta cómo agregar un registro.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 registroCNAME
apunte al registroA
en la misma zona. Por ejemplo, apunta*.googleapis.com
agoogleapis.com
o*.gcr.io
agcr.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 APIs 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 para Cloud Interconnect.
El extremo debe estar 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.
- Si tu red local usa enrutamiento de varias rutas de igual costo (ECMP) para distribuir el tráfico a los extremos de Private Service Connect, debes asegurarte de que todos los paquetes para una sola conexión TCP se enruten a través de mismo túnel de Cloud VPN o adjunto de VLAN. Si los paquetes para una conexión TCP establecida se enrutan a través de varias rutas de acceso, es posible que experimentes restablecimientos de TCP (RST) intermitentes. Para evitar restablecimientos, configura tus routers de intercambio de tráfico locales en mantener destinos de próximo salto coherentes.
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:
Crea una política del servidor de entrada en la red de VPC a la que se conecta tu red local.
Identifica los puntos de entrada de reenvío entrantes, en las regiones en las que se encuentran los túneles de Cloud VPN y los adjuntos de VLAN, en la red de VPC a la que tu red local se conecta.
Configura los sistemas locales y los servidores de nombres de DNS locales para reenviar los nombres de DNS de los extremos de Private Service Connect a un punto de entrada de reenvío entrante en la misma región que el túnel de Cloud VPN o el adjunto de VLAN que se conecta a la red de VPC.
Soluciona problemas
Las siguientes secciones contienen información sobre cómo resolver problemas con los extremos de Private Service Connect que se usan para acceder a las APIs de Google.
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:
Verifica que la API de Cloud DNS esté habilitada en tu proyecto.
Verifica que tengas los permisos necesarios para crear la zona DNS del Directorio de servicios:
dns.managedZones.create
servicedirectory.namespaces.associatePrivateZone
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:
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.