Impostare il DNS di zona come predefinito per i nuovi progetti


Questo documento spiega come aggiornare la policy DNS interna per utilizzare il DNS di zona per i nuovi progetti. Il DNS a livello di zona migliora l'affidabilità delle applicazioni isolando le interruzioni all'interno delle zone, impedendo interruzioni ai servizi critici come la creazione di istanze e la riparazione automatica.

Prima di iniziare

  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione è il processo mediante il quale la tua identità viene verificata per l'accesso ai Google Cloud servizi e alle API. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine selezionando una delle seguenti opzioni:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

      1. After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      2. Set a default region and zone.
      3. REST

        Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, utilizzi le credenziali che fornisci a gcloud CLI.

          After installing the Google Cloud CLI, initialize it by running the following command:

          gcloud init

          If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

        Per saperne di più, consulta la sezione Autenticarsi per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud .

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per visualizzare l'utilizzo del DNS interno a livello di organizzazione e aggiornare il criterio predefinito, chiedi all'amministratore di concederti i seguenti ruoli IAM:

  • Controlla la policy DNS globale predefinita: Organization Policy Administrator (roles/orgpolicy.policyAdmin) sulla cartella o sull'organizzazione
  • Determina se una cartella è pronta per la migrazione al DNS di zona: Browser (roles/browser) sulla cartella o sull'organizzazione

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Questi ruoli predefiniti contengono le autorizzazioni necessarie per visualizzare l'utilizzo del DNS interno a livello di organizzazione e aggiornare il criterio predefinito. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per visualizzare l'utilizzo del DNS interno a livello di organizzazione e aggiornare la policy predefinita sono necessarie le seguenti autorizzazioni:

  • Imposta un vincolo dei criteri dell'organizzazione: orgpolicy.*
  • Determina se una cartella è pronta per la migrazione al DNS di zona:
    • resourcemanager.folders.get
    • resourcemanager.folders.list
    • resourcemanager.organizations.get
    • resourcemanager.projects.get
    • resourcemanager.projects.list
  • Controlla i nomi DNS globali e i metadati della VM: compute.projects.get

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Panoramica della configurazione

Quando imposti un criterio dell'organizzazione per ignorare il tipo DNS interno predefinito, i nuovi progetti creati utilizzano il DNS di zona per impostazione predefinita. Il criterio dell'organizzazione non influisce sui progetti esistenti in cui l'API Compute Engine è già abilitata. Per passare al DNS di zona per i progetti esistenti, consulta Passare al DNS di zona per i progetti esistenti.

Ti consigliamo di applicare un criterio DNS di zona a livello di organizzazione. Questo approccio garantisce che tutti i nuovi progetti creati all'interno della tua organizzazione utilizzino il DNS di zona, migliorandone l'affidabilità e la resilienza. Tuttavia, potresti dover esentare alcune cartelle da queste norme a livello di organizzazione. L'esenzione delle cartelle è necessaria quando i nuovi progetti all'interno di queste cartelle dipendono da progetti esistenti incompatibili con il DNS di zona.

Il processo di applicazione di una policy DNS zonale a livello di organizzazione include i seguenti passaggi:

  1. Raccogli un elenco di progetti e cartelle: compila un elenco di tutti i progetti e delle relative cartelle all'interno della tua organizzazione.
  2. Identifica le cartelle da esentare: individua le cartelle che contengono i progetti incompatibili identificati nel passaggio 1. Queste cartelle dovranno essere temporaneamente esentate dal criterio DNS di zona.
  3. Imposta la policy dell'organizzazione: applica la policy DNS zonale a livello di organizzazione.
  4. Esenta cartelle specifiche: applica le esenzioni alle cartelle identificate nel passaggio 3. In questo modo, possono continuare a utilizzare il DNS globale mentre risolvi i problemi relativi ai progetti incompatibili.

Questo approccio garantisce che i nuovi progetti utilizzino il DNS di zona per una maggiore affidabilità, tenendo conto anche delle dipendenze esistenti dai progetti precedenti che potrebbero non essere pronti per la migrazione immediata.

Limitazioni

L'attivazione dei nomi DNS di zona in tutta l'organizzazione applica le impostazioni DNS di zona alle istanze in altri servizi, ad esempio:

Verifica se le tue applicazioni utilizzano uno di questi servizi e utilizza l'analisi delle query per identificare problemi di compatibilità con il DNS di zona per le cartelle e i progetti associati a queste applicazioni.

Controlla se la tua organizzazione utilizza Global DNS per impostazione predefinita

L'impostazione DNS predefinita per la tua organizzazione dipende da due fattori:

  • La data di creazione dell'organizzazione:

    • Creati dopo il 6 settembre 2018: la tua organizzazione utilizza il DNS di zona per impostazione predefinita. Non sono necessari ulteriori interventi da parte tua.
    • Creati prima del 6 settembre 2018: la tua organizzazione utilizza il DNS globale per impostazione predefinita. Ti consigliamo di eseguire la migrazione al DNS di zona.
  • L'esistenza e l'applicazione di un vincolo del criterio dell'organizzazione:

    Anche se la tua organizzazione è stata creata prima del 6 settembre 2018, un amministratore potrebbe aver applicato un criterio per utilizzare il DNS di zona per tutti i nuovi progetti creati all'interno dell'organizzazione. Per verificare l'esistenza di una policy di questo tipo, puoi utilizzare la console Google Cloud o Google Cloud CLI.

Console

  1. Vai alla pagina IAM e amministrazione>Identità e organizzazione nella console.

    Vai a Identità e organizzazione

  2. Controlla la data di registrazione dell'organizzazione.

    Uno screenshot della pagina della console Identity & Organization che mostra la data di completamento della registrazione.

  3. Se la tua organizzazione è stata creata prima del 6 settembre 2018, verifica se un vincolo dei criteri dell'organizzazione imposta il tipo DNS predefinito per tutti i nuovi progetti creati sul DNS di zona.

    1. Vai alla pagina IAM e amministrazione>Policy dell'organizzazione nella console Google Cloud .
    2. Nel campo Filtro, inserisci constraints/compute.setNewProjectDefaultToZonalDNSOnly.
    3. Se il vincolo è configurato, fai clic sul nome Configura l'impostazione del DNS interno per i nuovi progetti per utilizzare solo il DNS di zona.
    4. Nella pagina Dettagli norme, controlla lo Stato.
      • Se lo stato è Applicato, il tipo di DNS interno predefinito è il DNS di zona per tutti i nuovi progetti creati nell'organizzazione.
      • In caso contrario, il tipo DNS predefinito per il progetto viene comunque determinato dall'ora di creazione dell'organizzazione.
    5. Se il vincolo non è stato configurato per l'organizzazione, il tipo DNS predefinito per il progetto viene determinato dalla data di creazione dell'organizzazione.

gcloud

Utilizza il comando organizations describe e il comando resource-manager org-policies list per determinare il tipo DNS predefinito per un'organizzazione.

  1. Controlla il valore dei metadati creationTime dell'organizzazione.

    gcloud organizations describe ORGANIZATION_ID
    

    Sostituisci ORGANIZATION_ID con il numero ID organizzazione o il nome di dominio dell'organizzazione.

  2. Se la tua organizzazione è stata creata prima del 6 settembre 2018, determina se un vincolo di policy dell'organizzazione è configurato per impostare il tipo DNS predefinito per tutti i progetti appena creati sul DNS di zona.

    gcloud resource-manager org-policies list --organization=ORGANIZATION_ID \
       --filter="constraints/compute"
    

    Nell'output, cerca constraints/compute.setNewProjectDefaultToZonalDNSOnly.

    1. Se il vincolo è presente e Status è Enforced, tutti i nuovi progetti creati nell'organizzazione utilizzano il DNS di zona per impostazione predefinita.
    2. Se il vincolo non è presente o non viene applicato, il tipo DNS predefinito viene determinato dalla data di creazione dell'organizzazione, come descritto nel primo passaggio.

Determinare quali progetti in una cartella o in un'organizzazione utilizzano il DNS globale

Per determinare quali progetti utilizzano il DNS globale, ti consigliamo di utilizzare BigQuery per creare una tabella che elenchi i progetti relativi alla tua organizzazione e i relativi metadati. Puoi quindi utilizzare questa tabella per eseguire una query

  1. Crea un set di dati BigQuery.
  2. Esporta i metadati delle risorse per la tua organizzazione in una tabella BigQuery.

    1. Assicurati che l'API Cloud Asset Inventory sia abilitata.
    2. Configura le autorizzazioni necessarie per utilizzare l'API Cloud Asset Inventory.
    3. Utilizza il seguente comando gcloud CLI per esportare l'asset compute.googleapis.com/Project:

      gcloud asset export \
         --content-type resource \
         --organization 'ORGANIZATION_ID' \
         --bigquery-table 'projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME' \
         --asset-types='compute.googleapis.com/Project' \
         --output-bigquery-force
      

      Sostituisci quanto segue:

      • ORGANIZATION_ID: il numero ID organizzazione
      • PROJECT_ID: l'ID progetto
      • DATASET_ID: il nome del set di dati BigQuery
      • TABLE_NAME: la tabella in cui esportare i metadati. Se la tabella non esiste, BigQuery la crea.
  3. Vai alla BigQuery nella consoleGoogle Cloud .

  4. Seleziona Crea una nuova query.

  5. Nell'area di testo dell'editor di query, inserisci la seguente query GoogleSQL e poi fai clic su  Esegui.

    SELECT
      JSON_VALUE(SAFE.PARSE_JSON(resource.data).vmDnsSetting) AS vmDnsSetting,
      count(*) as project_count
    FROM PROJECT_ID.DATASET_ID.TABLE_NAME
    GROUP BY 1
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID progetto
    • DATASET_ID: il nome del set di dati BigQuery
    • TABLE_NAME: la tabella contenente i metadati esportati, dal passaggio 2.

    I progetti con il valore ZONAL_ONLY per vmDnsSetting hanno configurato il DNS di zona. In caso contrario, i progetti utilizzano il DNS globale per impostazione predefinita.

  6. (Facoltativo) Per una visualizzazione dettagliata del vmDnsSetting per ogni progetto, inserisci la seguente query GoogleSQL e poi fai clic su  Esegui.

    SELECT
      SUBSTR(name,35) as project_id,
      JSON_VALUE(SAFE.PARSE_JSON(resource.data).vmDnsSetting) AS vmDnsSetting
    FROM PROJECT_ID.DATASET_ID.TABLE_NAME
    

Determinare l'idoneità alla migrazione di una cartella

Questo passaggio utilizza uno script bash e la tabella BigQuery creata nella sezione precedente per determinare la preparazione alla migrazione della cartella.

  • La cartella è pronta se tutti i progetti non hanno eseguito query incompatibili con il DNS a livello di zona negli ultimi 30 giorni.
  • Se una cartella non è pronta per la migrazione, lo script risponde con gli ID progetto nella cartella che impediscono che la cartella sia pronta per la migrazione. I progetti in questo elenco di risultati non sono ancora compatibili con il DNS di zona e richiedono un'azione aggiuntiva.

Completa i seguenti passaggi:

  1. Recupera l'ID cartella. Se non conosci l'ID cartella, procedi nel seguente modo:
    1. Nella console Google Cloud , vai alla pagina Risorse gestite.
    2. Applica il filtro Name:FOLDER_NAME per ottenere l'ID della cartella.
  2. Esegui una query sulla tabella BigQuery con i dati di compute.Project assets esportati.

    Per istruzioni su come creare la tabella BigQuery, consulta Determinare quali progetti in una cartella o un'organizzazione utilizzano il DNS globale.

    Inserisci la seguente query GoogleSQL, quindi fai clic su  Esegui:

    SELECT
      SUBSTR(name,35) AS project_id,
    FROM PROJECT_ID.DATASET_ID.TABLE_NAME
    WHERE CONTAINS_SUBSTR(ancestors, 'FOLDER_NUMBER')
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID progetto
    • DATASET_ID: il nome del set di dati BigQuery
    • TABLE_NAME: la tabella che contiene i metadati esportati
    • FOLDER_NUMBER: il numero ID della cartella
  3. Copia l'elenco degli ID progetto e salvalo in un file.

  4. Esegui lo script bash seguente. Lo script scorre gli ID progetto nel file salvato per determinare se una cartella è pronta per la migrazione.

#!/bin/bash
inaccessible_projects=()
unready_projects=()

for project in $(cat ~/FILENAME | tr '\n' ' '); do
  echo -e "Checking project $project..."
  ERROR=`curl -s --request POST "https://monitoring.googleapis.com/v3/projects/$project/timeSeries:query"   -H "Authorization: Bearer $(gcloud auth print-access-token)"   -H "Accept: application/json"   -H "Content-Type: application/json"   --data '{"query":"fetch compute.googleapis.com/Location | metric '"'"'compute.googleapis.com/global_dns/request_count'"'"' | filter metric.zonal_dns_readiness = '"'"'zonal_dns_risky'"'"' | every 30d | within 30d"}'   --compressed | jq --raw-output '.error'`
  if ! [[ "$ERROR" -eq "null" ]]; then
    inaccessible_projects+=($project)
    continue
  fi
  QUERY_COUNT=`curl -s --request POST "https://monitoring.googleapis.com/v3/projects/$project/timeSeries:query"   -H "Authorization: Bearer $(gcloud auth print-access-token)"   -H "Accept: application/json"   -H "Content-Type: application/json"   --data '{"query":"fetch compute.googleapis.com/Location | metric '"'"'compute.googleapis.com/global_dns/request_count'"'"' | filter metric.zonal_dns_readiness = '"'"'zonal_dns_risky'"'"' | every 30d | within 30d"}'   --compressed | jq --raw-output '.timeSeriesData[0].pointData[0].values[0].int64Value'`
  if [[ "$QUERY_COUNT" -ne "null" ]] && [[ "$QUERY_COUNT" -ne "0" ]]; then
    unready_projects+=($project)
  fi
done

error_len=${#inaccessible_projects[@]}
unready_len=${#unready_projects[@]}

echo -e "$error_len projects were inaccessible"
echo -e "$unready_len projects were not ready for migration"

if [ $error_len -ne 0 ]; then
  echo "Unable to access the following projects:"
  for project in "${inaccessible_projects[@]}"; do
    echo "$project"
  done
fi
if [ $unready_len -ne 0 ]; then
  echo "The following projects are not ready for migration:"
  for project in "${unready_projects[@]}"; do
    echo "$project"
  done
fi

if (( $error_len + $unready_len > 0 )); then
  echo "This folder is NOT ready for gDNS -> zDNS migration."
else
  echo "This folder is ready for gDNS -> zDNS migration."
fi

Sostituisci FILENAME con il nome del file in cui hai salvato l'elenco degli ID progetto.

Comunica i risultati dell'analisi di preparazione alla migrazione con i proprietari del progetto:

Cartelle esenti non pronte per la migrazione al DNS di zona

Per esentare una cartella dal criterio dell'organizzazione, completa i seguenti passaggi per impostare l'opzione di applicazione per il criterio a livello di cartella su Off.

  1. Accedi alla console Google Cloud come super amministratore di Google Workspace o Cloud Identity.
  2. Nella console, vai alla pagina Policy dell'organizzazione.

    Vai a Policy dell'organizzazione

  3. Fai clic su Seleziona e poi seleziona le cartelle che vuoi esentare dal criterio dell'organizzazione.

    La console Google Cloud mostra un elenco dei vincoli delle policy dell'organizzazione per quella cartella su una o più pagine.

  4. Per trovare il vincolo dei criteri dell'organizzazione che applica il DNS di zona:

    1. Fai clic su Filtra.
    2. Seleziona Nome.
    3. Imposta il nome del filtro su Configura l'impostazione del DNS interno per i nuovi progetti per utilizzare solo il DNS di zona.
  5. Fai clic sul nome del vincolo di policy dell'organizzazione per aprire la pagina Dettagli policy.

  6. Fai clic su Modifica.

  7. Nella pagina Modifica, seleziona Personalizza.

  8. Nella sezione Applicazione forzata, seleziona Off per disattivare l'applicazione forzata del vincolo. Ciò significa che il tipo di DNS interno predefinito per tutti i progetti nella cartella è determinato dalla data di creazione dell'organizzazione.

  9. Fai clic su Salva.

Per saperne di più sulla personalizzazione dei vincoli delle policy dell'organizzazione, consulta la pagina Personalizzazione dei criteri per i vincoli booleani nella documentazione di Resource Manager.

Imponi il DNS di zona per impostazione predefinita per i nuovi progetti

Per impostare il criterio dell'organizzazione per una cartella o un'organizzazione:

  1. Accedi alla console Google Cloud come super amministratore di Google Workspace o Cloud Identity.

  2. Nella console, vai alla pagina Policy dell'organizzazione.

    Vai a Policy dell'organizzazione

  3. Seleziona la cartella o l'organizzazione per cui vuoi visualizzare le policy dell'organizzazione. La console Google Cloud mostra un elenco dei vincoli delle policy dell'organizzazione disponibili. L'elenco potrebbe estendersi su più pagine.

  4. Per trovare la policy per applicare il DNS di zona, fai clic su Filtra e seleziona Nome, poi imposta il nome del filtro su Configura l'impostazione del DNS interno per i nuovi progetti per utilizzare solo il DNS di zona.

  5. Fai clic sul nome della norma per visualizzarne i dettagli.

    La pagina dei dettagli della policy fornisce informazioni sul vincolo e su come viene applicato.

    Per impostazione predefinita, l'applicazione non è definita per una cartella o un'organizzazione. Tuttavia, se una cartella principale ha un'applicazione definita, questa viene ereditata dalla cartella principale più vicina che ha un'applicazione definita. Per ulteriori informazioni, consulta la sezione Informazioni sulla valutazione della gerarchia.

  6. Per personalizzare la policy dell'organizzazione, fai clic su Modifica.

  7. Nella pagina di modifica, seleziona Personalizza.

  8. In Applicazione forzata, seleziona On.

    In questo modo, il tipo di DNS interno predefinito per tutti i nuovi progetti dell'organizzazione viene impostato sul DNS di zona.

  9. Fai clic su Salva.

Per convalidare la modifica della policy dell'organizzazione, puoi creare un nuovo progetto nella cartella o nell'organizzazione, quindi creare e avviare un'istanza VM e verificare se la VM è abilitata per il DNS di zona.

Se è necessario il DNS globale per risolvere una query del nome DNS integrata nel tuo carico di lavoro, puoi eseguire il rollback di questa modifica a livello di organizzazione o cartella disattivando l'applicazione.

Ripristinare l'utilizzo del DNS globale per un'organizzazione o una cartella

Per ripristinare l'utilizzo del DNS globale per un'organizzazione o una cartella, interrompi l'applicazione della policy dell'organizzazione per il DNS di zona. Completa i seguenti passaggi.

  1. Disattiva il criterio dell'organizzazione constraints/compute.setNewProjectDefaultToZonalDNSOnly a livello di organizzazione o cartella. Per istruzioni su come modificare questa policy, vedi Imporre il DNS di zona per impostazione predefinita per i nuovi progetti.

    Imposta l'applicazione di Configura l'impostazione del DNS interno per i nuovi progetti per utilizzare solo il DNS di zona su Off.

  2. Se vuoi ripristinare l'utilizzo del DNS globale per l'intera organizzazione, verifica che nessuna delle cartelle dell'organizzazione applichi il criterio dell'organizzazione constraints/compute.setNewProjectDefaultToZonalDNSOnly.

  3. Per verificare che il DNS globale sia configurato per i tuoi progetti e le tue istanze, consulta Determinare quali progetti in una cartella o un'organizzazione utilizzano il DNS globale.

Passaggi successivi