Accedere alle API di Google tramite endpoint
Questo documento spiega come utilizzare gli endpoint Private Service Connect per connettersi alle API di Google. Anziché inviare richieste API agli indirizzi IP disponibili pubblicamente per gli endpoint di servizio come storage.googleapis.com
, puoi inviare le richieste all'indirizzo IP interno di un endpoint.
Puoi anche utilizzare Private Service Connect per accedere ai servizi in un'altra rete VPC e per pubblicare servizi.
Ruoli
I seguenti ruoli IAM forniscono le autorizzazioni necessarie per eseguire le attività descritte in questa guida.
Attività | Ruoli |
---|---|
Creazione di un endpoint |
Tutti i seguenti ruoli: Compute Network Admin ( roles/compute.networkAdmin ),
Service Directory Editor ( roles/servicedirectory.editor ) e
Amministratore DNS ( roles/dns.admin )
|
Configura l'accesso privato Google (facoltativo) |
Compute
Network Admin (roles/compute.networkAdmin )
|
Prima di iniziare
Per ulteriori informazioni, inclusi configurazione DNS e limitazioni, leggi l'articolo Informazioni sulla connessione alle API di Google tramite endpoint.
Private Service Connect non abilita automaticamente alcuna API. Devi abilitare separatamente le API di Google che devi utilizzare dalla pagina API e servizi nella console Google Cloud .
Devi abilitare l'API Compute Engine nel tuo progetto.
Devi abilitare l'API Service Directory nel tuo progetto.
Devi abilitare l'API Cloud DNS nel tuo progetto.
Devi scegliere un indirizzo IP da utilizzare per l'endpoint. Per informazioni sugli indirizzi IP che puoi utilizzare, consulta Requisiti per gli indirizzi IP.
Le regole firewall in uscita devono consentire il traffico verso l'endpoint. La configurazione firewall predefinita per una rete VPC consente questo traffico, perché contiene una regola di autorizzazione implicita per il traffico in uscita. Verifica di non aver creato una regola di uscita con priorità superiore che blocca il traffico.
Le istanze di macchine virtuali (VM) senza un indirizzo IP esterno assegnato devono utilizzare una subnet con l'accesso privato Google abilitato per accedere alle API e ai servizi Google utilizzando un endpoint.
Una VM con un indirizzo IP esterno può accedere alle API e ai servizi Google utilizzando gli endpoint anche se l'accesso privato Google è disabilitato per la relativa subnet. La connettività all'endpoint rimane all'interno della rete di Google.
Se la tua rete VPC non contiene endpoint, verifica se esiste una zona privata Cloud DNS per
p.googleapis.com
. Se la zona esiste, eliminala prima di creare l'endpoint. Se non lo elimini, la creazione della zona DNS di Service Directory utilizzata per Private Service Connect non va a buon fine. Per ulteriori informazioni, consulta la sezione Risoluzione dei problemi.Gli endpoint non sono accessibili dalle reti VPC in peering.
Abilitare l'accesso privato Google per una subnet
Le VM senza un indirizzo IP esterno assegnato devono essere connesse a una subnet con l'accesso privato Google abilitato per accedere alle API e ai servizi Google utilizzando un endpoint.
Se la VM ha più di un'interfaccia, connetti quella configurata
con una route predefinita (di solito nic0
).
L'indirizzo IP di origine dei pacchetti inviati dalla VM deve corrispondere all'indirizzo IPv4 interno primario dell'interfaccia VM o a un indirizzo IPv4 interno di un intervallo IP alias.
Per abilitare l'accesso privato Google su una subnet:
Console
Nella console Google Cloud , vai alla pagina Reti VPC.
Fai clic sul nome della rete che contiene la subnet per la quale devi attivare l'accesso privato Google.
Fai clic sul nome della subnet. Viene visualizzata la pagina Dettagli subnet.
Fai clic su Modifica.
Nella sezione Accesso privato Google, seleziona On.
Fai clic su Salva.
gcloud
Determina il nome e la regione della subnet. Per elencare le subnet per una rete specifica, utilizza il seguente comando:
gcloud compute networks subnets list --filter=NETWORK_NAME
Esegui questo comando per abilitare l'accesso privato Google:
gcloud compute networks subnets update SUBNET_NAME \ --region=REGION \ --enable-private-ip-google-access
Verifica che l'accesso privato Google sia abilitato eseguendo questo comando:
gcloud compute networks subnets describe SUBNET_NAME \ --region=REGION \ --format="get(privateIpGoogleAccess)"
Sostituisci quanto segue:
SUBNET_NAME
: il nome della subnet.REGION
: la regione della subnetNETWORK_NAME
: il nome della rete VPC che contiene la subnet
Terraform
Puoi utilizzare la risorsa Terraform per abilitare l'accesso privato Google su una subnet.
Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.
Creazione di un endpoint
Dopo aver scelto un indirizzo IP che soddisfa i requisiti, puoi creare un endpoint.
Un endpoint si connette alle API e ai servizi di Google utilizzando una regola di forwarding globale. Ogni regola di forwarding viene conteggiata ai fini della quota per rete VPC per Private Service Connect.
Non puoi aggiornare un endpoint per le API e i servizi Google dopo la sua creazione. Se devi aggiornare un endpoint per le API e i servizi Google, elimina l'endpoint e creane uno nuovo.
Console
Nella console Google Cloud , vai alla pagina Private Service Connect.
Fai clic sulla scheda Endpoint connessi.
Fai clic su Connetti endpoint.
In Destinazione, seleziona il bundle di API di destinazione che vuoi utilizzare:
- Tutte le API di Google
- VPC-SC
In Nome endpoint, inserisci un nome per l'endpoint.
Seleziona una rete per l'endpoint.
Seleziona un indirizzo IP per l'endpoint.
L'indirizzo IP deve soddisfare questi requisiti.
Se hai bisogno di un nuovo indirizzo IP, puoi crearne uno:
- Fai clic su Crea indirizzo IP.
- Inserisci un nome e una descrizione per l'indirizzo IP.
- Inserisci l'indirizzo IP che vuoi utilizzare e fai clic su Salva .
Se una regione Service Directory non è già configurata per questa rete VPC, seleziona la regione che vuoi utilizzare.
Tutti gli endpoint utilizzati per accedere alle API e ai servizi Google in una determinata rete VPC utilizzano la stessa regione di Service Directory.
Se uno spazio dei nomi Service Directory non è già configurato per questa rete VPC, configura lo spazio dei nomi che vuoi utilizzare:
Per utilizzare uno spazio dei nomi assegnato automaticamente, fai clic sul menu a discesa Spazio dei nomi e seleziona lo spazio dei nomi assegnato automaticamente.
Per selezionare uno spazio dei nomi esistente utilizzato in un'altra rete, fai clic sul menu a discesa Spazio dei nomi e seleziona uno spazio dei nomi dall'elenco. L'elenco mostra tutti gli spazi dei nomi nel progetto. Devi selezionare uno spazio dei nomi utilizzato solo per gli endpoint utilizzati per accedere alle API di Google.
Per creare un nuovo spazio dei nomi, fai clic sul menu a discesa Spazio dei nomi e fai clic su Crea spazio dei nomi. Inserisci lo spazio dei nomi e fai clic su Crea.
Tutti gli endpoint che utilizzi per accedere alle API e ai servizi Google in una determinata rete VPC utilizzano lo stesso spazio dei nomi di Service Directory.
Fai clic su Aggiungi endpoint.
gcloud
Prenota un indirizzo IP interno globale da assegnare all'endpoint.
gcloud compute addresses create ADDRESS_NAME \ --global \ --purpose=PRIVATE_SERVICE_CONNECT \ --addresses=ENDPOINT_IP \ --network=NETWORK_NAME
Sostituisci quanto segue:
ADDRESS_NAME
: il nome da assegnare all'indirizzo IP riservato.ENDPOINT_IP
: l'indirizzo IP da prenotare per l'endpoint.L'indirizzo IP deve soddisfare questi requisiti.
NETWORK_NAME
: il nome della rete VPC per l'endpoint.
Crea una regola di forwarding per connettere l'endpoint alle API e ai servizi di 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 ]
Sostituisci quanto segue:
ENDPOINT_NAME
: il nome da assegnare all'endpoint. Il nome deve essere una stringa di 1-20 caratteri, contenente solo lettere minuscole e numeri. Il nome deve iniziare con una lettera.NETWORK_NAME
: il nome della rete VPC per l'endpoint.ADDRESS_NAME
: il nome dell'indirizzo riservato sulla rete associata.API_BUNDLE
: il bundle di API da rendere disponibile utilizzando l'endpoint. Consulta l'elenco delle API supportate.Utilizza
all-apis
per concedere l'accesso a tutte le API supportate.Utilizza
vpc-sc
per limitare l'accesso alle API Google che supportano i Controlli di servizio VPC.
REGION_NAMESPACE_URI
: l'URI della regione o dello spazio dei nomi Service Directory che vuoi utilizzare. Questo URI deve fare riferimento allo stesso progetto in cui stai creando l'endpoint.Puoi definire una regione solo con
projects/PROJECT_NAME/locations/REGION
.Puoi definire una regione e uno spazio dei nomi con
projects/PROJECT_NAME/locations/REGION/namespaces/NAMESPACE
.
Se ometti completamente
--service-directory-registration
o imposti una regione senza uno spazio dei nomi, si verifica quanto segue:Se una regione o uno spazio dei nomi è già configurato per questa rete VPC, vengono utilizzati i valori predefiniti.
Se una regione non è configurata, viene impostata su
us-central1
. Se uno spazio dei nomi non è configurato, viene assegnato uno spazio dei nomi generato dal sistema.
API
Prenota un indirizzo IP interno globale da assegnare all'endpoint.
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 }
Sostituisci quanto segue:
PROJECT_ID
: il tuo ID progetto.ADDRESS_NAME
: il nome da assegnare all'indirizzo IP riservato.ENDPOINT_IP
: l'indirizzo IP da prenotare per l'endpoint.L'indirizzo IP deve soddisfare questi requisiti.
NETWORK_URL
: la rete VPC per l'endpoint. Utilizza il metodo network.list ogcloud compute networks list --uri
per trovare gli URL delle tue emittenti.
Crea una regola di forwarding per connettere l'endpoint alle API e ai servizi di 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" } ], }
Sostituisci quanto segue:
PROJECT_ID
: il tuo ID progetto.ENDPOINT_NAME
: il nome da assegnare all'endpoint. Il nome deve essere una stringa di 1-20 caratteri contenente solo lettere minuscole e numeri. Il nome deve iniziare con una lettera.NETWORK_URL
: la rete VPC per l'endpoint. Utilizza il metodo network.list ogcloud compute networks list --uri
per trovare gli URL delle tue emittenti.ADDRESS_URL
: l'URL dell'indirizzo riservato sulla rete associata. Utilizza il metodo globalAddresses.list ogcloud compute addresses list --uri
per trovare gli URL dei tuoi indirizzi riservati.API_BUNDLE
: il bundle di API da rendere disponibile utilizzando l'endpoint. Consulta l'elenco delle API supportate.Utilizza
all-apis
per concedere l'accesso a tutte le API supportate.Utilizza
vpc-sc
per limitare l'accesso alle API Google che supportano i Controlli di servizio VPC.
REGION
: la regione di Service Directory che vuoi utilizzare. Ad esempio:us-central1
. Se omettiREGION
e una regione è già configurata per questa rete VPC, viene utilizzata quella regione. Se una regione non è configurata, viene impostata suus-central1
.NAMESPACE
: il nome dello spazio dei nomi Service Directory che vuoi utilizzare. Se omettiNAMESPACE
e uno spazio dei nomi è già configurato per questa rete VPC, viene utilizzato quello spazio dei nomi. Se uno spazio dei nomi non è configurato, viene assegnato uno spazio dei nomi generato dal sistema.
Terraform
Puoi utilizzare le seguenti risorse Terraform per creare un endpoint:
Verificare che l'endpoint funzioni
Crea un'istanza VM nella rete VPC in cui è configurato Private Service Connect. Esegui questo comando sulla VM per verificare che l'endpoint Private Service Connect funzioni. Gli endpoint non rispondono alle richieste ping (ICMP).
curl -v ENDPOINT_IP/generate_204
Sostituisci ENDPOINT_IP
con l'indirizzo IP dell'endpoint.
Se l'endpoint funziona, viene visualizzato un codice di risposta HTTP 204
.
Elenca endpoint
Puoi elencare tutti gli endpoint configurati.
Console
Nella console Google Cloud , vai alla pagina Private Service Connect.
Fai clic sulla scheda Endpoint connessi.
Vengono visualizzati gli endpoint.
gcloud
gcloud compute forwarding-rules list \ --filter target="(all-apis OR vpc-sc)" --global
L'output è simile al seguente:
NAME REGION IP_ADDRESS IP_PROTOCOL TARGET RULE IP TCP all-apis
Ricevere informazioni su un endpoint
Puoi visualizzare tutti i dettagli di configurazione di un endpoint.
Console
Nella console Google Cloud , vai alla pagina Private Service Connect.
Fai clic sulla scheda Endpoint connessi.
Vengono visualizzati gli endpoint.
Fai clic sull'endpoint di cui vuoi visualizzare i dettagli.
gcloud
gcloud compute forwarding-rules describe \ ENDPOINT_NAME --global
Etichettare un endpoint
Puoi gestire le etichette per gli endpoint. Per saperne di più, consulta la sezione Etichettatura delle risorse.
Eliminazione di un endpoint
Puoi eliminare un endpoint.
Console
Nella console Google Cloud , vai alla pagina Private Service Connect.
Fai clic sulla scheda Endpoint connessi.
Seleziona l'endpoint che vuoi eliminare e fai clic su Elimina.
gcloud
gcloud compute forwarding-rules delete \ ENDPOINT_NAME --global
Sostituisci ENDPOINT_NAME
con il nome dell'endpoint che vuoi eliminare.
Utilizzare un endpoint
Per utilizzare un endpoint, invia richieste a un nome host DNS che viene risolto nell'indirizzo IP dell'endpoint.
Puoi utilizzare i nomi DNS
p.googleapis.com
creati automaticamente se puoi configurare i client in modo che utilizzino un endpoint personalizzato e se vengono creati record DNSp.googleapis.com
per le API e i servizi che vuoi utilizzare. Per ulteriori informazioni, vedi Utilizzare i nomi DNSp.googleapis.com
.Ad esempio, se il nome dell'endpoint è
xyz
, vengono creati record DNS perstorage-xyz.p.googleapis.com
,compute-xyz.p.googleapis.com
e altre API utilizzate di frequente nel bundle di API.Puoi creare record DNS utilizzando i nomi DNS predefiniti se utilizzi un client che non è stato configurato per utilizzare un endpoint personalizzato o se non esiste un record DNS
p.googleapis.com
per il servizio che vuoi utilizzare. Per ulteriori informazioni, vedi Creare record DNS utilizzando nomi DNS predefiniti.Ad esempio, crea record DNS per
storage.googleapis.com
,compute.googleapis.com
o*.gke.goog
.
Utilizza nomi DNS p.googleapis.com
Quando crei un endpoint,
Service Directory crea record DNS per API e
servizi di uso comune disponibili tramite l'endpoint. I record DNS vengono creati solo per
API e servizi con nomi DNS predefiniti che terminano con googleapis.com
e solo per un sottoinsieme di queste API e servizi.
I record DNS vengono creati in una zona privata p.googleapis.com
. I record
rimandano all'indirizzo IP dell'endpoint e utilizzano questo formato:
SERVICE-ENDPOINT.p.googleapis.com
Ad esempio, se il nome dell'endpoint è xyz
, vengono creati record DNS per
storage-xyz.p.googleapis.com
, compute-xyz.p.googleapis.com
e altre
API supportate.
I client che possono essere configurati per utilizzare un endpoint personalizzato possono utilizzare i nomi DNS p.googleapis.com
per inviare richieste a un endpoint.
Consulta la documentazione del client o della libreria client per informazioni sulla configurazione per l'utilizzo di endpoint personalizzati. Ad esempio:
Python: puoi configurare
api_endpoint
in Opzioni client.Vai: puoi configurare
WithEndpoint
in ClientOptions..NET: puoi configurare
Endpoint
nella classe builder del client.gcloud: puoi configurare
api_endpoint_overrides
nella gcloud CLI.
Crea record DNS utilizzando i nomi DNS predefiniti
Devi creare record DNS per indirizzare i nomi DNS predefiniti per API e servizi al tuo endpoint in queste circostanze:
Il client o l'applicazione non possono essere configurati per utilizzare un nome DNS
p.googleapis.com
.Devi accedere a un servizio supportato, ma non esiste un nome DNS
p.googleapis.com
creato automaticamente per quel servizio.
Per creare record DNS che puntano al tuo endpoint Private Service Connect, segui queste istruzioni:
Crea una zona DNS per il dominio che devi utilizzare (ad esempio,
googleapis.com
ogcr.io
). A questo scopo, valuta la possibilità di creare una zona privata Cloud DNS.In questa zona DNS:
Crea un record
A
per il nome del dominio (zona) stesso, ad esempiogoogleapis.com
ogcr.io
. Punta questo recordA
all'indirizzo IP dell'endpoint. Se utilizzi Cloud DNS, consulta la sezione Aggiunta di un record.Crea un record
CNAME
per tutti i possibili nomi host del dominio aggiuntivo utilizzando un asterisco e un punto seguiti dal nome del dominio (zona); ad esempio,*.googleapis.com
o*.gcr.io
. Punta questo recordCNAME
al recordA
nella stessa zona. Ad esempio, dal punto*.googleapis.com
agoogleapis.com
o dal punto*.gcr.io
agcr.io
.
Accedere all'endpoint da host on-premise
Se la tua rete on-premise è connessa a una rete VPC, puoi utilizzare Private Service Connect per accedere alle API e ai servizi Google da host on-premise utilizzando l'indirizzo IP interno dell'endpoint.
La rete on-premise deve essere connessa a una rete VPC utilizzando tunnel Cloud VPN o collegamenti VLAN per Cloud Interconnect.
L'endpoint deve trovarsi nella rete VPC connessa alla tua rete on-premise.
La rete on-premise deve avere route appropriate per l'endpoint. Configura una pubblicità di route personalizzata del router Cloud per annunciare le route per l'endpoint nella sessione BGP che gestisce le route per il tunnel Cloud VPN o il collegamento VLAN.
- Se la tua rete on-premise utilizza il routing ECMP (equal-cost multi-path) per distribuire il traffico agli endpoint Private Service Connect, devi assicurarti che tutti i pacchetti per una singola connessione TCP vengano instradati attraverso lo stesso tunnel Cloud VPN o collegamento VLAN. Se i pacchetti per una connessione TCP stabilita vengono instradati su più percorsi, potresti riscontrare ripristini TCP intermittenti (RST). Per evitare i ripristini, configura i router peer on-premise in modo che mantengano destinazioni hop successivo coerenti.
Devi configurare i sistemi on-premise in modo che possano eseguire query sulle tue zone DNS private.
Se hai implementato le zone DNS private utilizzando Cloud DNS, completa i seguenti passaggi:
Crea un criterio del server in entrata nella rete VPC a cui si connette la tua rete on-premise.
Identifica i punti di ingresso del forwarder in entrata, nelle regioni in cui si trovano i tunnel Cloud VPN e i collegamenti VLAN, nella rete VPC a cui si connette la tua rete on-premise.
Configura i sistemi on-premise e i server dei nomi DNS on-premise per inoltrare i nomi DNS per gli endpoint Private Service Connect a un punto di ingresso del forwarder in entrata nella stessa regione del tunnel Cloud VPN o del collegamento VLAN che si connette alla rete VPC.
Risoluzione dei problemi
Le sezioni seguenti contengono informazioni sulla risoluzione dei problemi relativi agli endpoint Private Service Connect utilizzati per accedere alle API di Google.
La creazione della zona DNS privata non riesce.
Quando crei un endpoint, viene creata una zona DNS di Service Directory. La creazione della zona può non riuscire per i seguenti motivi:
Non hai abilitato l'API Cloud DNS nel tuo progetto.
Non disponi delle autorizzazioni necessarie per creare una zona DNS di Service Directory.
In questa rete VPC esiste una zona DNS con lo stesso nome.
In questa rete VPC esiste già una zona DNS per
p.googleapis.com
.
Potrebbero esistere zone in conflitto perché un'eliminazione precedente non è andata a buon fine.
Per creare la zona DNS di Service Directory, segui questi passaggi:
Verifica che l'API Cloud DNS sia abilitata nel tuo progetto.
Verifica di disporre delle autorizzazioni necessarie per creare la zona DNS di Service Directory:
dns.managedZones.create
servicedirectory.namespaces.associatePrivateZone
Crea una zona DNS di Service Directory supportata dallo spazio dei nomi Service Directory associato al tuo endpoint.
Utilizza i seguenti valori quando crei la zona:
Nome zona: utilizza lo stesso nome zona utilizzato dal sistema durante il tentativo di creazione non riuscito. Il messaggio di errore mostra il nome della zona utilizzato.
Nome DNS:
p.googleapis.com.
(incluso il punto finale).Spazio dei nomi Service Directory: trova lo spazio dei nomi Service Directory per l'endpoint Private Service Connect che hai creato e utilizzalo quando crei la zona DNS di Service Directory.
Lo spazio dei nomi Service Directory ha il seguente formato:
goog-psc-NETWORK_NAME-NETWORK_ID
.
Eliminazione della zona DNS privata non riuscita
Quando elimini l'ultimo endpoint in una rete VPC, viene eliminata la configurazione di Service Directory associata, inclusa la zona DNS.
L'eliminazione può non andare a buon fine per i seguenti motivi:
Non disponi delle autorizzazioni necessarie per eliminare la zona DNS.
La zona contiene voci DNS definite dall'utente che non sono state create da Service Directory.
Per risolvere il problema, segui questi passaggi:
Verifica di disporre dell'autorizzazione
dns.managedZones.delete
. Per ulteriori informazioni, consulta la sezione Controllo dell'accesso nella documentazione di Cloud DNS.