Accedi alle API di Google tramite endpoint

Questo documento spiega come utilizzare Private Service Connect endpoint per la connessione alle API di Google. Invece di inviare richieste API al gli 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 in un'altra rete VPC e pubblicare i 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:
Computing Amministratore di rete (roles/compute.networkAdmin),
Servizio Editor directory (roles/servicedirectory.editor) e
Amministratore DNS (roles/dns.admin)
Configurare l'accesso privato Google (facoltativo) Computing Amministratore di rete (roles/compute.networkAdmin)

Prima di iniziare

  • Leggi l'articolo Informazioni sulla connessione alle API di Google tramite endpoint per ulteriori informazioni, tra cui la configurazione DNS e limitazioni.

  • Private Service Connect non abilita automaticamente nessuna API. Devi abilitare separatamente le API di Google. devono utilizzare le API e servizi di la console Google Cloud.

  • Devi abilitare l'API Compute Engine nel tuo progetto.

  • Devi abilitare in Service Directory API nel tuo progetto.

  • Devi attivare il API Cloud DNS nel tuo progetto.

  • Devi scegliere un indirizzo IP da utilizzare per l'endpoint. Per informazioni su quali indirizzi IP puoi utilizzare, Requisiti per gli indirizzi IP.

  • Le regole firewall in uscita devono consentire il traffico endpoint. Il firewall predefinito configurazione per una rete VPC consente questo traffico, contiene una regola implicita di autorizzazione in uscita. Verifica di non aver creato una quota di traffico prioritario in uscita che blocca il traffico.

  • Le istanze di macchine virtuali (VM) senza un indirizzo IP esterno assegnato devono utilizza una subnet con accesso privato Google abilitati 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 anche se L'accesso privato Google è disabilitato per la rispettiva subnet. Connettività rimane all'interno della rete Google.

  • Se la tua rete VPC non contiene endpoint, controlla se è Cloud DNS esiste una zona privata per p.googleapis.com. Se la zona esiste, eliminala prima devi creare l'endpoint. In caso contrario per eliminarlo, è stata creata la zona DNS di Service Directory usata Private Service Connect non riesce. Per ulteriori informazioni, consulta la sezione Risoluzione dei problemi.

  • Gli endpoint non sono accessibili da reti VPC in peering.

Abilita l'accesso privato Google per una subnet

Le VM a cui non è assegnato un indirizzo IP esterno devono essere connesse a una subnet con 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 a quello dell'interfaccia della VM un indirizzo IPv4 interno principale o un indirizzo IPv4 interno da un intervallo IP alias.

Per abilitare l'accesso privato Google su una subnet, segui questi passaggi.

Console

  1. Nella console Google Cloud, vai alla pagina Reti VPC.

    Vai alle reti VPC

  2. Fai clic sul nome della rete che contiene la subnet per la quale per abilitare l'accesso privato Google.

  3. Fai clic sul nome della subnet. Viene visualizzata la pagina Dettagli subnet.

  4. Fai clic su Modifica.

  5. Nella sezione Accesso privato Google, seleziona On.

  6. Fai clic su Salva.

gcloud

  1. Determina il nome e la regione della subnet. Per elencare le subnet per rete specifica, utilizza il comando seguente:

    gcloud compute networks subnets list --filter=NETWORK_NAME
    
  2. Esegui questo comando per abilitare l'accesso privato Google:

    gcloud compute networks subnets update SUBNET_NAME \
    --region=REGION \
    --enable-private-ip-google-access
    
  3. Esegui questo comando per verificare che l'accesso privato Google sia abilitato :

    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 subnet
  • NETWORK_NAME: il nome del VPC che contiene la subnet

Terraform

Puoi utilizzare il comando Terraform risorsa abilitare l'accesso privato Google su una subnet.

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
}

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta: Comandi Terraform di base.

Creazione di un endpoint

Dopo aver scelto un indirizzo IP soddisfi i requisiti, puoi creare un endpoint.

Un endpoint si connette alle API di Google utilizzando una regola di forwarding globale. Ogni regola di forwarding viene conteggiata ai fini del calcolo per quota di rete VPC Private Service Connect.

Non puoi aggiornare un endpoint per le API e i servizi Google dopo la creazione. Se devi aggiornare un endpoint per le API e i servizi Google, elimina endpoint, quindi crearne uno nuovo.

Console

  1. Nella console Google Cloud, vai alla pagina Private Service Connect.

    Vai a Private Service Connect

  2. Fai clic sulla scheda Endpoint connessi.

  3. Fai clic su Connetti endpoint.

  4. In Target, seleziona pacchetto API target che vuoi utilizzare:

    • Tutte le API di Google
    • VPC-SC
  5. In Nome endpoint, inserisci un nome per l'endpoint.

  6. Seleziona una Rete per l'endpoint.

  7. 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:

    1. Fai clic su Crea indirizzo IP.
    2. Inserisci un Nome e una Descrizione per l'indirizzo IP.
    3. Inserisci l'indirizzo IP che vuoi utilizzare e fai clic su Salva .
  8. Se non è già configurata una regione di Service Directory per questa richiesta rete VPC, seleziona la regione che vuoi utilizzare.

    Tutti gli endpoint utilizzati per accedere alle API e ai servizi Google in un determinato La rete VPC utilizza la stessa directory di servizi regione.

  9. Se uno spazio dei nomi Service Directory non è già configurato per questo Rete VPC, configura lo spazio dei nomi che vuoi utilizzare:

    • Per utilizzare uno spazio dei nomi assegnato automaticamente, fai clic sullo 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 su nel menu a discesa Spazio dei nomi e seleziona uno spazio dei nomi dall'elenco. La mostra tutti gli spazi dei nomi del progetto. Devi selezionare uno spazio dei nomi da usare solo per gli endpoint 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 un determinato La rete VPC utilizza la stessa directory di servizi del tuo spazio dei nomi.

  10. Fai clic su Aggiungi endpoint.

gcloud

  1. 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 alla riservato all'indirizzo IP riservato.

    • ENDPOINT_IP: l'indirizzo IP da prenotare per endpoint.

      L'indirizzo IP deve soddisfare questi requisiti.

    • NETWORK_NAME: il nome del VPC rete per l'endpoint.

  2. Crea una regola di forwarding per connettere l'endpoint alle API di Google i servizi di machine learning.

    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, contenenti solo lettere minuscole e numeri. Il nome deve iniziare con una lettera.

    • NETWORK_NAME: il nome del VPC rete per l'endpoint.

    • ADDRESS_NAME: il nome dell'indirizzo riservato su alla rete associata.

    • API_BUNDLE: il bundle di API per disponibili utilizzando l'endpoint. Consulta l'elenco delle per le API.

      • Usa all-apis per concedere l'accesso a tutte le API supportate.

      • Usa vpc-sc per limitare l'accesso alle API di Google che supportano Controlli di servizio VPC.

    • REGION_NAMESPACE_URI: l'URI del Regione o spazio dei nomi di Service Directory che vuoi utilizzare. Questo URI deve fare riferimento allo stesso progetto che utilizzi stanno creando l'endpoint.

      • Puoi definire una regione solo con projects/PROJECT_NAME/locations/REGION.

      • Puoi definire una regione e uno spazio dei nomi 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 è già configurata una regione o uno spazio dei nomi per questo rete VPC, vengono usati questi valori predefiniti.

      • Se non è configurata una regione, è impostata su us-central1. Se uno spazio dei nomi non è configurato, viene generato assegnati.

API

  1. 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 alla riservato all'indirizzo IP riservato.

    • ENDPOINT_IP: l'indirizzo IP da prenotare per endpoint.

      L'indirizzo IP deve soddisfare questi requisiti.

    • NETWORK_URL: la rete VPC per endpoint. Utilizzare network.list o gcloud compute networks list --uri per trovare gli URL delle tue reti.

  2. Crea una regola di forwarding per connettere l'endpoint alle API di Google i servizi di machine learning.

    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 e contenere solo lettere minuscole lettere e numeri. Il nome deve iniziare con una lettera.

    • NETWORK_URL: la rete VPC per endpoint. Utilizzare network.list o gcloud compute networks list --uri per trovare gli URL delle tue reti.

    • ADDRESS_URL: l'URL dell'indirizzo riservato sul rete associata. Utilizza globalAddresses.list metodo di pagamento o gcloud compute addresses list --uri per trovare gli URL dei tuoi indirizzi IP esterni.

    • API_BUNDLE: il bundle di API da rendere disponibile utilizzando l'endpoint. Consulta le elenco delle API supportate.

      • Usa all-apis per concedere l'accesso a tutte le API supportate.

      • Usa vpc-sc per limitare l'accesso alle API di Google che supportano Controlli di servizio VPC.

    • REGION: Service Directory regione che vuoi utilizzare. Ad esempio: us-central1. Se ometti REGION e una regione è già configurata per questa rete VPC, viene usata la regione. Se una regione è non configurato, la regione è impostata su us-central1.

    • NAMESPACE: il nome del Spazio dei nomi Service Directory che vuoi utilizzare. Se ometti NAMESPACE e un valore lo spazio dei nomi è già configurato per questa rete VPC, viene utilizzato uno spazio dei nomi completo. Se uno spazio dei nomi non è configurato, viene generato di Compute Engine.

Terraform

Puoi usare il comando Terraform per creare un endpoint:

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 che l'endpoint funzioni

Crea un'istanza VM nella rete VPC in cui Private Service Connect è configurato. Esegui questo comando sulla VM per verificare che Private Service Connect che l'endpoint stia funzionando. Endpoint e non rispondono alle richieste ping (ICMP).

curl -v ENDPOINT_IP/generate_204

Sostituisci ENDPOINT_IP con l'indirizzo IP del endpoint.

Se l'endpoint funziona, viene visualizzato un codice di risposta HTTP 204.

Elenca endpoint

Puoi elencare tutti gli endpoint configurati.

Console

  1. Nella console Google Cloud, vai alla pagina Private Service Connect.

    Vai a Private Service Connect

  2. 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

Ottenere informazioni su un endpoint

Puoi visualizzare tutti i dettagli di configurazione endpoint.

Console

  1. Nella console Google Cloud, vai alla pagina Private Service Connect.

    Vai a Private Service Connect

  2. Fai clic sulla scheda Endpoint connessi.

    Gli endpoint vengono visualizzati.

  3. Fai clic sull'endpoint di cui vuoi visualizzare i dettagli.

gcloud

gcloud compute forwarding-rules describe \
    ENDPOINT_NAME --global

Etichetta un endpoint

Puoi gestire le etichette per gli endpoint. Consulta delle risorse di etichettatura per ulteriori informazioni.

Eliminazione di un endpoint

Puoi eliminare un endpoint.

Console

  1. Nella console Google Cloud, vai alla pagina Private Service Connect.

    Vai a Private Service Connect

  2. Fai clic sulla scheda Endpoint connessi.

  3. Seleziona l'endpoint a cui vuoi Elimina e fai clic su Elimina.

gcloud

    gcloud compute forwarding-rules delete \
        ENDPOINT_NAME --global

Sostituisci ENDPOINT_NAME con il nome dell'endpoint che vuoi da eliminare.

utilizza un endpoint

Per utilizzare un endpoint, devi inviare richieste a un Nome host DNS che si risolve nell'indirizzo IP dell'endpoint.

  • Puoi utilizzare i nomi DNS p.googleapis.com creati automaticamente se puoi configurare i tuoi client per l'utilizzo di un endpoint personalizzato e se p.googleapis.com I record DNS vengono creati per le API e i servizi che vuoi utilizzare. Per ulteriori informazioni informazioni, vedi Utilizzare i nomi DNS p.googleapis.com.

    Ad esempio, se il nome dell'endpoint è xyz, vengono creati record DNS storage-xyz.p.googleapis.com, compute-xyz.p.googleapis.com e altro di uso comune nel bundle API.

  • Puoi creare record DNS utilizzando i nomi DNS predefiniti se utilizzi una client che non è stato configurato per utilizzare un endpoint personalizzato o se Il record DNS p.googleapis.com non esiste per il servizio che vuoi per gli utilizzi odierni. Per ulteriori informazioni, vedi Crea record DNS utilizzando nomi DNS predefiniti.

    Ad esempio, crea record DNS per storage.googleapis.com e compute.googleapis.com.

Usa nomi DNS p.googleapis.com

Quando crei un endpoint, Service Directory crea record DNS per le API e i servizi più utilizzati disponibili usando l'endpoint. I record DNS vengono creati solo API e servizi che hanno nomi DNS predefiniti che terminano con googleapis.com. e solo per un sottoinsieme di queste API e di questi servizi.

I record DNS vengono creati in una zona privata p.googleapis.com. I record punta all'indirizzo IP dell'endpoint e utilizza questo formato: SERVICE-ENDPOINT.p.googleapis.com

Ad esempio, se il nome dell'endpoint è xyz, vengono creati record DNS storage-xyz.p.googleapis.com, compute-xyz.p.googleapis.com e altro le API supportate.

I client che possono essere configurati per utilizzare un endpoint personalizzato possono utilizzare p.googleapis.com nomi DNS per inviare richieste a un endpoint.

Consulta la documentazione della libreria client o client per informazioni su e la configurazione per usare endpoint personalizzati. Ad esempio:

Crea record DNS utilizzando nomi DNS predefiniti

È necessario creare record DNS per indirizzare i nomi DNS predefiniti per le API e al tuo endpoint in questi circostanze:

  • Impossibile configurare il client o l'applicazione per l'utilizzo di un p.googleapis.com Nome DNS.

  • Devi accedere a un servizio supportato, ma non verrà creato automaticamente p.googleapis.com nome DNS per il servizio.

Per creare record DNS che puntino a Private Service Connect segui queste istruzioni:

  1. Crea una zona DNS per il dominio che vuoi utilizzare (ad esempio, googleapis.com o gcr.io). Valuta la possibilità di creare un ambiente Cloud DNS privato a questo scopo.

  2. In questa zona DNS:

    1. Creare un record A per il nome del dominio (zona). ad esempio googleapis.com o gcr.io. Punta questo record A all'indirizzo IP del endpoint. Se utilizzi Cloud DNS, consulta Aggiunta di un record.

    2. Crea un record CNAME per tutti i possibili host del dominio aggiuntivo i nomi mediante un asterisco e un punto seguito dal nome del dominio (zona); della ad esempio *.googleapis.com o *.gcr.io. Punta questo record CNAME a record A nella stessa zona. Ad esempio, punta *.googleapis.com a googleapis.com o punta *.gcr.io a gcr.io.

Accedi 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 di Google da host on-premise, utilizzando l'indirizzo IP interno del endpoint.

  • La rete on-premise deve essere connessa a una rete VPC utilizzando tunnel Cloud VPN o collegamenti VLAN per e Cloud Interconnect.

  • L'endpoint deve trovarsi nella rete VPC connessa on-premise.

  • La rete on-premise deve avere route appropriate per l'endpoint. Configura una route personalizzata del router Cloud pubblicità annuncia le route per l'endpoint sulla 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) 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 di pacchetti per una connessione TCP stabilita vengono instradati su più possibili, potresti riscontrare reset TCP (RST) intermittenti. Per evitare i ripristini, configura i router peer on-premise in e mantenere destinazioni coerenti per l'hop successivo.
  • Devi configurare i sistemi on-premise in modo che possano eseguire query sul tuo zone DNS private.

    Se hai implementato le zone DNS private utilizzando Cloud DNS, completa i seguenti passaggi:

Risoluzione dei problemi

Le seguenti sezioni contengono informazioni sulla risoluzione dei problemi con Endpoint Private Service Connect utilizzati per accedere a Google su quelle di livello inferiore.

Creazione di una zona DNS privata non riuscita

Quando crei un endpoint, La zona DNS di Service Directory è stata creata. La creazione della zona può non riuscire per questi motivi:

  • Non hai abilitato l'API Cloud DNS nel tuo progetto.

  • Non disponi delle autorizzazioni necessarie per creare un Zona DNS di Service Directory.

  • In questa rete VPC esiste una zona DNS con lo stesso nome.

  • Una zona DNS per p.googleapis.com esiste già in questo VPC in ogni rete.

Potrebbero esistere zone in conflitto a causa di un'eliminazione precedente non riuscito.

Per creare la zona DNS di Service Directory, segui questi passaggi:

  1. Verifica che l'API Cloud DNS sia abilitato nel tuo progetto.

  2. Verifica di disporre delle autorizzazioni necessarie per creare Zona DNS di Service Directory:

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

  4. Crea un DNS di Service Directory zona supportato dallo spazio dei nomi Service Directory associato endpoint.

    Utilizza i seguenti valori quando crei la zona:

    • Nome zona: utilizza lo stesso nome di zona utilizzato dal sistema durante l'errore di un tentativo di creazione. Il messaggio di errore visualizza il nome della zona utilizzato.

    • Nome DNS: p.googleapis.com. (incluso il punto finale).

    • Spazio dei nomi Service Directory: trova Service Directory per Private Service Connect endpoint che hai creato e utilizzare questo spazio dei nomi quando crei Zona DNS di Service Directory.

    Lo spazio dei nomi di Service Directory ha il seguente formato: goog-psc-NETWORK_NAME-NETWORK_ID.

L'eliminazione della zona DNS privata non è riuscita

Quando elimini l'ultimo endpoint in una rete VPC, Service Directory associata inclusa la zona DNS.

Questa eliminazione può non riuscire per i seguenti motivi:

  • Non hai le autorizzazioni necessarie per eliminare la zona DNS.

  • La zona contiene voci DNS definite dall'utente che non sono state create Service Directory.

Per risolvere il problema:

  1. Verifica di avere l'autorizzazione dns.managedZones.delete. Per ulteriori informazioni informazioni, consulta Controllo dell'accesso nella documentazione di Cloud DNS.

  2. Elimina la zona DNS.