Utilizzo dei suggerimenti per Infrastructure as Code


Panoramica

Google Cloud Policy Intelligence aiuta le aziende a comprendere e gestire i propri criteri per ridurre i rischi. Fornendo più visibilità e automazione, i clienti possono aumentare la sicurezza senza aumentare il carico di lavoro.

Il motore per suggerimenti consente di recuperare i suggerimenti per le risorse Google Cloud, aiutandoti a migliorare la sicurezza del cloud, risparmiare sui costi e altro ancora. Per un elenco dei suggerimenti supportati, consulta la documentazione del motore per suggerimenti. Questo tutorial descrive l'utilizzo dei suggerimenti per il dimensionamento delle istanze VM e dei suggerimenti per Identity and Access Management (IAM). Il motore per suggerimenti utilizza il machine learning per fornire agli amministratori suggerimenti per rimuovere gli accessi non necessari alle risorse Google Cloud e ridimensionare le istanze di Compute Engine per un utilizzo più efficiente delle risorse.

Ogni consiglio include un'azione suggerita e il relativo impatto. Dopo aver esaminato i suggerimenti per gli impatti identificati e altre considerazioni specifiche per il tuo ambiente, puoi selezionare i suggerimenti da applicare. Puoi applicare i suggerimenti manualmente dalla console Google Cloud oppure applicarli in modo programmatico integrandoli nella pipeline Infrastructure as Code (IaC).

IaC consente di automatizzare la creazione delle risorse Google Cloud.Devi mantenere aggiornato il repository IaC e instradare le modifiche apportate all'organizzazione Google Cloud tramite questo repository. Le strategie IaC nelle organizzazioni in genere si dimostrano vantaggiose se implementate con rigore e fungono da unica versione attendibile per la tua infrastruttura cloud. Mantenere aggiornato il repository IaC è fondamentale per evitare deviazioni tra la versione dell'infrastruttura riflessa nel repository IaC e quella che hai nella tua organizzazione.

Suggerimenti IAM

Tra le altre pratiche leader, uno comune è il principio di sicurezza del privilegio minimo e un'attenta valutazione di come le modifiche alla tua organizzazione vengono implementate e sincronizzate con il repository IaC.

Suggerimenti per il dimensionamento delle VM

I suggerimenti sul dimensionamento consentono di ridurre i costi tramite suggerimenti per ridimensionare il tipo di macchina delle istanze e utilizzare in modo più efficiente le risorse delle istanze

Questo tutorial descrive come progettare e creare una pipeline di automazione per applicare un suggerimento di Policy Intelligence in modo programmatico. Nell'ambito di questa pipeline di automazione, imparerai a tenere aggiornato il tuo repository IaC con le modifiche che decidi di apportare alla tua organizzazione Google Cloud in base al suggerimento relativo al dimensionamento delle VM e alle associazioni di criteri IAM reso disponibile dal motore per suggerimenti.

Questo tutorial utilizza Hashicorp Terraform come strumento IaC, tuttavia i componenti e i pattern architetturali utilizzati nella pipeline di automazione descritta possono essere utilizzati anche se utilizzi uno strumento di gestione IaC diverso come Deployment Manager. Dovrai modificare il codebase open source reso disponibile con questo tutorial per adattarlo alla tua implementazione IaC specifica.

Questa guida è rivolta ad architect, proprietari di prodotti e sviluppatori che potrebbero essere responsabile dell'amministrazione, della sicurezza e della pianificazione dell'infrastruttura dei loro Google Cloud.

Architettura della pipeline di Automation

Il seguente diagramma mostra i componenti utilizzati in questa pipeline di automazione.

componenti della pipeline di automazione

Un job Cloud Scheduler pianificato esegue il servizio di analisi del motore per suggerimenti. Il servizio chiama l'API Recommender per recuperare i suggerimenti del motore per suggerimenti per i progetti specificati. Poi analizza questi suggerimenti IAM e per il dimensionamento delle VM per mapparli alla configurazione presente nei file manifest Terraform. Il servizio aggiorna i file manifest IaC per riflettere questi suggerimenti. Genera una richiesta di pull con le modifiche per consentirti di esaminare gli aggiornamenti. Una volta esaminata e unita la richiesta di pull, un job Cloud Build implementa le modifiche alla tua infrastruttura nella tua organizzazione Google Cloud.

Nella pipeline vengono utilizzati diversi servizi accessori di Google Cloud allo scopo di monitorare i suggerimenti elaborati, generare notifiche al completamento della build e archiviare lo stato di Terraform. Imparerai di più su questi servizi nel corso di questo tutorial.

Nell'elenco seguente vengono descritti lo scopo del componente e i requisiti controllo dell'accesso:

Motori per suggerimenti di Platform Intelligence
Scopo: generare suggerimenti per la sicurezza e il dimensionamento delle VM

Controllo dell'accesso: l'account di servizio Google Cloud deve disporre delle autorizzazioni IAM necessarie per recuperare i suggerimenti utilizzando l'API Recommender.

Esamina i ruoli e le autorizzazioni del motore per suggerimenti per selezionare il ruolo più appropriato applicabile all'account di servizio che utilizzi per eseguire il servizio del motore per suggerimenti.

Cloud Scheduler

Scopo: Cloud Scheduler attiva il servizio parser del motore per suggerimenti. Cloud Scheduler consente di configurare più job richiamando tutte le istanze del servizio parser necessarie. Ogni chiamata deve passare i seguenti input

  • Elenco di progetti per i quali devono essere elaborati i suggerimenti
  • Tipo di consiglio
  • Nome repository IaC

Controllo dell'accesso: crea o identifica un account di servizio Google Cloud da utilizzare per le chiamate da Cloud Scheduler al servizio di analisi del motore per suggerimenti.

Concedi all'account di servizio il ruolo Agente di servizio Cloud Scheduler in modo che possa eseguire job Cloud Scheduler. Inoltre, concedi all'account di servizio il ruolo Invoker di Cloud Run poiché tale account richiama un servizio Cloud Run

Per i dettagli, consulta la documentazione sulla configurazione dell'accesso autenticato per i job di scheduler.

Servizio Cloud Run

Finalità: il servizio di analisi per suggerimenti è il luogo in cui risiede tutta la logica di elaborazione. Prevede più percorsi, ognuno dei quali ha uno scopo specifico:

  • Analisi dei suggerimenti per ogni tipo di consiglio.
  • Aggiornamento dello stato dei consigli in fase di elaborazione

Controllo dell'accesso: utilizza IAM per gestire l'accesso a questo servizio

Inoltre, puoi assegnare il servizio a un account di servizio dedicato. Ciò garantisce che solo il servizio sia in grado di richiamare altri servizi come Firestore.

Terraform hashicorp

Scopo: Terraform 0.12 è lo strumento IaC.

Un builder di Cloud Build per Terraform viene utilizzato per richiamare i comandi Terraform e l'account di servizio Cloud Build viene utilizzato per questo scopo.

Cloud Build

Scopo: Google Cloud Build automatizza il deployment dell'infrastruttura in base alle modifiche apportate ai manifest IaC in base ai suggerimenti di Policy Intelligence.

Controllo dell'accesso: l'account di servizio Cloud Build deve disporre del corretto set di autorizzazioni per interagire con le risorse nel tuo progetto di test.

Consulta la documentazione per la configurazione di un account di servizio Cloud Build.

GitHub

Scopo: il repository IaC utilizza GitHub per il controllo del codice sorgente. Il repository IaC in GitHub è integrato con Cloud Build. Quando vengono effettuati commit al ramo master, viene attivato un job Cloud Build per eseguire un insieme di attività preconfigurate.

Controllo dell'accesso: dovrai generare chiavi SSH per abilitare l'accesso al repository IaC.

Inoltre, devi generare un token di accesso personale per eseguire il push dei commit in GitHub.

Firestore

Firestore è un database di documenti NoSQL scalabile e completamente gestito che viene utilizzato in questa architettura per rendere persistenti le informazioni relative agli ID suggerimento analizzati dal servizio parser del motore per suggerimenti, insieme ai dettagli corrispondenti pertinenti ai commit Git.

I dettagli salvati in Firestore svolgono un ruolo fondamentale nel ciclo di feedback che fa parte della pipeline end-to-end. Dopo aver scelto un suggerimento generato dall'API Recommender e prima di elaborare il suggerimento, il servizio contrassegna lo stato del suggerimento su CLAIMED. Una volta applicato correttamente il suggerimento, il servizio esegue una query sul database per recuperare gli ID suggerimento che sono stati applicati correttamente dal job di Cloud Build e modifica lo stato del suggerimento in SUCCEEDED. In caso di errore del job Cloud Build, lo stato del suggerimento viene modificato in FAILED.

Controllo dell'accesso: per i dettagli, consulta Ruoli di Firestore. Il servizio di analisi per suggerimenti legge i dati da Firestore e richiede il ruolo roles/datastore.user per farlo.

Pub/Sub

Scopo: Cloud Build pubblica messaggi su un argomento Pub/Sub quando lo stato della build cambia, ad esempio quando viene creata, quando la build passa a uno stato funzionante e quando la build viene completata.

L'argomento Pub/Sub in cui Cloud Build pubblica messaggi è denominato cloud-build e viene creato automaticamente quando abiliti l'API Cloud Build nel tuo progetto.

Controllo dell'accesso: le sottoscrizioni push possono essere configurate in modo da fornire un'intestazione di autenticazione per consentire al servizio di autorizzare la richiesta. Per ulteriori dettagli, consulta la pagina relativa all'utilizzo delle sottoscrizioni push.

Obiettivi

  • Crea una pipeline di automazione per
    • Monitorare in modo proattivo i suggerimenti di Policy Intelligence della piattaforma
    • Analizza i suggerimenti e applica gli aggiornamenti a un repository IaC esistente
  • Scopri come utilizzare una suite di servizi Google Cloud, Hashicorp Terraform e GitHub, per creare questa pipeline.
  • Comprendi le ipotesi e le best practice da tenere presenti per creare questa pipeline
  • Testa la pipeline

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

  • Cloud Run
  • Cloud Build
  • Compute Engine
  • Cloud Storage
  • Firestore
  • Pub/Sub
  • Cloud Scheduler
  • Motore per suggerimenti

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono essere idonei a una prova senza costi aggiuntivi.

Prima di iniziare

Questo tutorial presuppone che tu abbia un account GitHub e conosci Git, Node.js, Terraform e Docker.

Note di rilascio e presupposti

Il modo in cui vengono utilizzati gli strumenti e i manifest IaC è molto variabile.

Esamina le seguenti informazioni per determinare in che modo questo tutorial può essere adatto alla tua pipeline IaC e quali tipi di modifiche potrebbero essere necessarie.

  • Questa pipeline utilizza Terraform ver. 0.12. Eventuali modifiche significative della sintassi di configurazione HCL o modifiche alla struttura del file di stato Terraform potrebbero comportare problemi di interruzione.
  • Questa pipeline presuppone che le strutture delle directory IaC non siano nidificate e che un repository IaC gestisca le risorse in uno o più progetti Google Cloud.
  • Le variabili Terraform trasferite come variabili di ambiente, gli argomenti della riga di comando non sono supportati. Il prototipo presuppone la configurazione dichiarativa delle variabili Terraform in un file tfvars.
  • Il motore per suggerimenti genera suggerimenti IAM quando un sottoinsieme di autorizzazioni per un ruolo non viene utilizzato per 60 giorni e i suggerimenti per il dimensionamento delle VM seguono un pattern simile. Ai fini di questo tutorial, sono stati forniti payload di esempio per suggerimenti che possono essere utilizzati per testare la pipeline.
  • I loop all'interno di Terraform non sono supportati in questa release
  • I moduli Terraform non sono supportati. Il codebase è open source e si presume che apporterai eventuali miglioramenti specifici necessari al flusso di analisi per adattarlo alla struttura della directory e all'utilizzo dei moduli.

La versione attuale del servizio di analisi per suggerimenti open source è in linea con le seguenti limitazioni note dei suggerimenti IAM:

Prerequisiti

  1. Seleziona o crea due progetti Google Cloud.

    Vai alla pagina del selettore progetti

    • Un progetto build che ospita ed esegue la pipeline di automazione.
    • Un progetto di test che ospita le risorse Google Cloud utilizzate per testare la pipeline di automazione.
  2. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  3. Nel progetto test, abilita il motore per suggerimenti e l'API Compute Engine.

    Abilita le API

  4. Nel progetto build, abilita le API Cloud Run, Firestore, Pub/Sub e Cloud Scheduler, IAM e CloudResourceManager.

    Abilita le API

Al termine di questo tutorial, puoi evitare di continuare la fatturazione eliminando le risorse che hai creato. Consulta Pulizia per ulteriori dettagli.

Configura l'ambiente

  1. Nella console Google Cloud, seleziona il tuo progetto build.
  2. Nella console Google Cloud, vai a Cloud Shell.

    Vai a Cloud Shell

    Nella parte inferiore della console Google Cloud, si apre una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell in cui Google Cloud CLI è già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

    Utilizza Cloud Shell per tutti i comandi del terminale in questo tutorial.

  3. Crea una variabile di ambiente in cui inserire il numero del progetto build utilizzando il comando seguente:

    export BUILD_PROJECT_ID=$DEVSHELL_PROJECT_ID
    
  4. Crea una variabile di ambiente in cui inserire il numero del progetto test . Copia manualmente l'ID progetto di test e sostituisci PROJECT-ID con quest'ultimo,

    export TEST_PROJECT_ID=PROJECT-ID
    
  5. Puoi assegnare impostazioni predefinite ai valori utilizzati nel tutorial, ad esempio regione e zona. In questo tutorial, utilizzerai us-central1 come regione predefinita e us-central1-b come zona predefinita.

  6. Imposta la regione e la zona predefinite per questo tutorial eseguendo il comando seguente:

    gcloud config set compute/zone us-central1-b --project $BUILD_PROJECT_ID
    gcloud config set compute/zone us-central1-b --project $TEST_PROJECT_ID
    
  7. Imposta il tuo progetto build come progetto predefinito:

    gcloud config set project $BUILD_PROJECT_ID
    
  8. Crea una variabile di ambiente denominata BUILD_PROJECT_NUMBER per ilbuildnumero di progetto

    export BUILD_PROJECT_NUMBER=$(gcloud projects describe $DEVSHELL_PROJECT_ID --format='value(projectNumber)')
    
  9. Clona il repository GitHub per questo tutorial:

Crea bucket per lo stato di Terraform

Creare un bucket Cloud Storage nel progetto di build per archiviare il file di stato Terraform.

gsutil mb -p ${BUILD_PROJECT_ID} -l us-central1 \
 gs://recommender-tf-state-$BUILD_PROJECT_ID

Crea un repository GitHub

Crea un repository GitHub che funga da repository IaC di esempio

  1. Crea un nuovo repository GitHub privato. Questo repository IAC-REPO-NAME funge da repository IaC ai fini di questo tutorial

  2. Nei setps seguenti, eseguirai il push dei file nella sottodirectory sample-iac del repository clonato sul tuo account GitHub.

    1. In Cloud Shell, copia la directory sample-iac nella tua home directory. Utilizzerai questa directory per creare un nuovo repository locale ed eseguirne il push su GitHub.

      cp -r recommender-iac-pipeline-nodejs-tutorial/sample-iac $HOME
      
    2. Passa alla nuova directory

      cd $HOME/sample-iac
      
    3. Inizializza il repository nella tua macchina locale.

      git init
      
    4. Aggiungi IAC-REPO-NAME come repository remoto, sostituisci IAC-REPO-NAME e GITHUB-ACCOUNT con i valori appropriati

      git remote add origin http://github.com/GITHUB-ACCOUNT/IAC-REPO-NAME
      
    5. Sostituisci i segnaposto nei file di questo repository con l'ID progettoteste il nome del bucket Terraform Cloud Storage.

      sed -i "s|__PROJECT_ID__|${TEST_PROJECT_ID}|g" ./terraform.tfvars
      
      sed -i "s|__STATE_BUCKET_NAME__|recommender-tf-state-$BUILD_PROJECT_ID|g" ./backend.tf
      
    6. Aggiungi, esegui il commit e il push a GitHub.

      git add .
      git commit -m "First Commit"
      git push origin master
      
    7. Accedi al tuo account GitHub quando richiesto.

Genera chiavi SSH per il repository

Configura l'autenticazione con chiave SSH con il tuo repository IaC in GitHub e carica le chiavi in Cloud Storage.

  1. Genera chiavi SSH per il repository GitHub.

    1. Generare una coppia di chiavi SSH. Sostituisci [email protected] con il tuo indirizzo email GitHub. In Cloud Shell:

      ssh-keygen -t rsa -b 4096 -m PEM -C "[email protected]"
      
    2. Quando ti viene chiesto di inserire un file in cui salvare la chiave, premi Invio. Questa operazione accetta la posizione predefinita dei file.

    3. Quando ti viene richiesto di inserire una passphrase, premi Invio.

  2. Prendi nota della directory SSH-KEYS-DIR in cui salvi le chiavi SSH scaricate. Per impostazione predefinita, la località è $HOME/.ssh/

  3. Copia la chiave pubblica SSH generata nel tuo repository GitHub come chiave di deployment.

    1. Copia la chiave pubblica SSH generata in Cloud Shell. Sostituisci SSH-KEYS-DIR con il percorso della directory.

      cat SSH-KEYS-DIR/id_rsa.pub
      
    2. Nel tuo account GitHub, vai al repository IAC-REPO-NAME

    3. Fai clic su Impostazioni > Esegui il deployment delle chiavi.

    4. Fai clic su Aggiungi chiave di deployment e incolla la chiave pubblica SSH che hai copiato. Scegli un Titolo per la chiave.

    5. Seleziona la casella di controllo "Consenti accesso in scrittura".

    6. Fai clic su Salva.

  4. Torna alla sessione di Cloud Shell

  5. Crea il file known_hosts per GitHub. Nella sessione di Cloud Shell, esegui questo comando:

    ssh-keyscan github.com >> ~/.ssh/known_hosts
    
  6. Crea un bucket Cloud Storage nel progetto build e carica le chiavi SSH e il file known_hosts al suo interno. Sostituisci SSH-KEYS-DIR con il percorso della directory in cui hai generato le chiavi SSH.

    gsutil mb -p ${BUILD_PROJECT_ID} -l us-central1 gs://github-keys-$BUILD_PROJECT_ID
    
    gsutil cp SSH-KEYS-DIR/id_rsa* gs://github-keys-$BUILD_PROJECT_ID
    gsutil cp SSH-KEYS-DIR/known_hosts gs://github-keys-$BUILD_PROJECT_ID
    
  7. Genera un Personal Access Token per GitHub. Questo token viene utilizzato quando si eseguono operazioni Git mediante chiamate API effettuate dal servizio del motore per suggerimenti e analisi per generare richieste di pull e manifest IaC aggiornati.

    1. Nel tuo account GitHub, nell'angolo in alto a destra di qualsiasi pagina, fai clic sulla foto del profilo, quindi su Impostazioni.

    2. Nella barra laterale sinistra, fai clic su Impostazioni sviluppatore.

    3. Nella barra laterale sinistra, fai clic su Token di accesso personali.

    4. Fai clic su Genera nuovo token.

    5. Assegna un nome descrittivo al token.

    6. Seleziona gli ambiti come repo.

    7. Fai clic su Genera token.

    8. Copia il token negli appunti.

    9. Nella sessione di Cloud Shell, crea una variabile di ambiente.

      export GITHUB_PAT=personal-access-token-you-copied
      

Configura Cloud Build

  1. Connetti il tuo repository Git IAC-REPO-NAME per l'integrazione con Cloud Build.

    1. Vai alla pagina dell'app Cloud Build in GitHub Marketplace.
    2. Scorri verso il basso e fai clic su Configurazione con Google Cloud Build in fondo alla pagina.
    3. Se richiesto, accedi a GitHub.
    4. Seleziona Seleziona solo i repository. Utilizza l'elenco a discesa Seleziona repository per abilitare l'accesso a IAC-REPO-NAME solo nell'app Cloud Build.
    5. Fai clic su Installa.
    6. Accedi a Google Cloud.

      La pagina Autorizzazione viene visualizzata dove ti viene chiesto di autorizzare l'app Google Cloud Build a connettersi a Google Cloud.

    7. Fai clic su Autorizza Google Cloud Build by GoogleCloud Build. Il sistema ti reindirizzerà alla console Google Cloud.

    8. Selezionare il tuo progetto Google Cloud.

    9. Attiva la casella di controllo per il consenso e fai clic su Avanti.

    10. Nella pagina Seleziona repository visualizzata, seleziona il repository GitHub IAC-REPO-NAME

    11. Fai clic su Connetti repository.

    12. Fai clic su Crea un attivatore. In questo modo crei una definizione dell'attivatore per te.

    13. Fai clic su Crea per salvare il trigger di build.

    Per maggiori informazioni, consulta la pagina relativa all'esecuzione delle build su GitHub.

  2. La directory copiata contiene un file cloudbuild.yaml. Questo file di configurazione descrive i passaggi dell'esecuzione di un job Cloud Build quando viene attivato.

    steps:
    - name: hashicorp/terraform:0.12.0
      args: ['init']
    - name: hashicorp/terraform:0.12.0
      args: ['apply', '-auto-approve']
    
  3. Aggiungi autorizzazioni al tuo account di servizio Cloud Build per consentirgli di creare account di servizio, associare ruoli e macchine virtuali (istanze di Compute Engine) nel progetto di test

    gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \
      --member serviceAccount:[email protected] \
      --role roles/compute.admin \
      --project $TEST_PROJECT_ID
    
    gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \
      --member serviceAccount:[email protected] \
      --role roles/iam.serviceAccountAdmin \
      --project $TEST_PROJECT_ID
    
    gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \
    --member serviceAccount:[email protected] \
    --role roles/iam.securityAdmin \
    --project $TEST_PROJECT_ID
    
  4. Apri la pagina Trigger di build nella console Google Cloud.

  5. Seleziona il progetto build e fai clic su Apri.

  6. Aggiorna la definizione dell'attivatore:

    1. Fai clic sul menu e poi su Modifica.
    2. In Configurazione, seleziona l'opzione File di configurazione di Cloud Build (yaml o json) e digita cloudbuild.yaml nel campo di testo.
    3. Fai clic su Salva.
  7. Per testare manualmente il trigger di build, fai clic su Esegui nella voce del trigger nell'elenco dei trigger.

  8. Verifica che nel progetto di test siano stati creati un'istanza Compute Engine denominata tf-compute-1 e un account di servizio Terraform Recommender Test dal job di Cloud Build che hai eseguito nel passaggio precedente

Esegui il deployment del servizio Cloud Run del motore per suggerimenti

  1. In Cloud Shell, cambia le directory nella directory creata clonando il repository

    cd $HOME/recommender-iac-pipeline-nodejs-tutorial/parser-service
    
  2. Configura Google Cloud in modo che utilizzi una regione predefinita per i servizi Cloud Run. In questo tutorial utilizzerai la regione us-central1, ma se preferisci puoi sceglierne un'altra supportata.

    gcloud config set run/region us-central1
    
  3. La directory parser-service ha una sottodirectory stub che contiene alcuni payload JSON di esempio con cui testare il servizio di analisi per suggerimenti. Esegui i comandi sed seguenti per sostituire i segnaposto PROJECT_ID in questi JSON con il tuo ID progetto di test.

    sed -i "s|__PROJECT_ID__|${TEST_PROJECT_ID}|g" ./stub/iam.json
    sed -i "s|__PROJECT_ID__|${TEST_PROJECT_ID}|g" ./stub/vm.json
    
  4. Esegui questo comando per creare una variabile di ambiente per l'immagine Docker.

    export IMAGE=gcr.io/$BUILD_PROJECT_ID/recommender-parser:1.0
    
  5. Crea l'immagine e caricala in Container Registry

    gcloud builds submit --tag $IMAGE .
    
  6. Crea un account di servizio per il servizio del motore per suggerimenti e analisi in modo che interagisca con altri servizi Google Cloud nella pipeline. È buona norma concedere autorizzazioni granulari ai servizi Cloud Run. Per ulteriori dettagli, consulta Identità del servizio Cloud Run.

    gcloud beta iam service-accounts create recommender-parser-sa \
      --description "Service account that the recommender-parser service uses to invoke other Google Cloud services" \
      --display-name "recommender-parser-sa" \
      --project $BUILD_PROJECT_ID
    
  7. Il servizio di analisi per suggerimenti deve accedere alle chiavi SSH di GitHub e allo stato Terraform che hai caricato nei bucket Cloud Storage creati in precedenza. Aggiungi l'account di servizio come membro al bucket Cloud Storage.

    gsutil iam ch serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com:objectCreator,objectViewer \
    gs://github-keys-$BUILD_PROJECT_ID
    
    gsutil iam ch serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com:objectCreator,objectViewer \
    gs://recommender-tf-state-$BUILD_PROJECT_ID
    
  8. Concede all'account di servizio del servizio del motore per suggerimenti l'accesso a Firestore, al motore per suggerimenti e all'API Service Usage.

    gcloud projects add-iam-policy-binding $BUILD_PROJECT_ID \
      --member serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
      --role roles/datastore.user
    
    gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \
      --member serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
      --role roles/recommender.iamAdmin
    
    gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \
      --member serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
      --role roles/recommender.iamViewer
    
    gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \
      --member serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
      --role roles/recommender.computeAdmin
    
    gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \
      --member serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
      --role roles/serviceusage.serviceUsageConsumer
    
  9. Esegui il deployment del servizio Cloud Run, chiamato recommender-parser, eseguendo il comando. Sostituisci GITHUB-ACCOUNT con il nome utente del tuo account GitHub, non con l'indirizzo email. Accetta le richieste di sistema.

    gcloud run deploy \
     --image=${IMAGE} \
     --no-allow-unauthenticated \
     --region us-central1 \
     --platform managed \
     --service-account recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
     --set-env-vars="GITHUB_ACCOUNT=github.com:GITHUB-ACCOUNT,GITHUB_PAT=${GITHUB_PAT},SSH_KEYS_BUCKET=github-keys-${BUILD_PROJECT_ID},TERRAFORM_STATE_BUCKET=recommender-tf-state-$BUILD_PROJECT_ID" \
     --project $BUILD_PROJECT_ID \
     recommender-parser
    

Configura Firestore

  1. Nella console Google Cloud, nel progetto build, vai alla pagina di Firestore.
  2. Quando ti viene chiesto di selezionare la modalità, fai clic su Seleziona modalità nativa.
  3. Seleziona us-east1 come località predefinita.
  4. Fai clic su Crea database.

Il servizio recommender-parser scrive documenti in questo database per i seguenti scopi:

  • Per tenere traccia dei suggerimenti recuperati dall'API Recommender
  • Chiama l'API Recommender dopo l'elaborazione dei suggerimenti per aggiornare lo stato di ogni suggerimento elaborato a SUCCEEDED o FAILED, a seconda dei casi. Questo è un passaggio fondamentale che rende la pipeline idempotente, garantendo che i suggerimenti non vengano elaborati in modo incompleto o più volte.

Configura un job Cloud Scheduler

  1. Crea un account di servizio utilizzato dai job Cloud Scheduler per eseguire il servizio del motore per suggerimenti.

    gcloud beta iam service-accounts create recommender-scheduler-sa \
      --description "Service Account used by Cloud Scheduler to invoke the recommender-parser service" \
      --display-name "recommender-scheduler-sa" \
      --project $BUILD_PROJECT_ID
    
  2. Assegna all'account di servizio il ruolo di esecuzione/invoker per poter richiamare il servizio Cloud Run.

    gcloud beta run services add-iam-policy-binding recommender-parser \
    --member=serviceAccount:recommender-scheduler-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
    --role=roles/run.invoker \
    --region=us-central1
    
  3. Recupera l'URL del servizio per suggerimenti:

    gcloud beta run services list --platform managed --project $BUILD_PROJECT_ID
    

    Il job Cloud Scheduler richiama la route /recommendation/iam del servizio trusteder-parser per analizzare i suggerimenti IAM e la route /Recommender/vm per analizzare i suggerimenti sul dimensionamento delle VM.

  4. Crea una variabile per l'endpoint richiamato dai job Cloud Scheduler. Sostituisci RECOMMENDER-SERVICE-URL con l'URL del servizio per suggerimenti che hai copiato nel passaggio precedente.

    export RECOMMENDER_ROUTE_TO_INVOKE_IAM=RECOMMENDER-SERVICE-URL/recommendation/iam
    

    Dopo aver aggiunto le informazioni sul percorso, l'URL dovrebbe essere simile al seguente URL di esempio:

    RECOMMENDER-SERVICE-URL/recommendation/iam
    
  5. Crea un job Cloud Scheduler denominato recommender-iam-scheduler.

    • Modifica il fuso orario selezionato in base alla tua posizione.
    • Sostituisci IAC-REPO-NAME con il nome del repository GitHub che hai creato.

    Il corpo del messaggio accetta tre input e devi crearlo come descritto di seguito:

    • repo: questo è il nome del tuo repository GitHub IAC-REPO-NAME che hai creato in Crea un repository GitHub.

    • projects: un elenco / array di ID progetti Google Cloud a cui è mappato questo repository GitHub di IaC. In questo tutorial, si tratta del tuo progetto test.

    • stub: il motore per suggerimenti genera suggerimenti IAM quando un sottoinsieme di autorizzazioni per un ruolo non è stato utilizzato per 60 giorni e i suggerimenti per il dimensionamento delle VM seguono un pattern simile. Ai fini del test di questa pipeline on demand, stub può essere trasmesso come true, in modo che la pipeline venga testata utilizzando i payload del motore per suggerimenti di esempio forniti nel repository che hai clonato per questo tutorial.

    gcloud beta scheduler jobs create http recommender-iam-scheduler \
      --project $BUILD_PROJECT_ID \
      --time-zone "America/Los_Angeles" \
      --schedule="0 */3 * * *" \
      --uri=$RECOMMENDER_ROUTE_TO_INVOKE_IAM \
      --description="Scheduler job to invoke recommendation pipeline" \
      --oidc-service-account-email="recommender-scheduler-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com" \
      --headers="Content-Type=application/json" \
      --http-method="POST" \
      --message-body="{ \"repo\": \"IAC-REPO-NAME\", \"projects\": [\"$TEST_PROJECT_ID\"], \"location\": \"global\", \"stub\": true }"
    

Passaggi aggiuntivi

Cloud Build pubblica informazioni sulla build in un argomento Pub/Sub chiamato cloud-build che è stato creato automaticamente quando hai abilitato l'API Cloud Build nel tuo progetto di build.

  1. Esegui questo comando per verificare che l'argomento cloud-builds esista nel progetto build:

    gcloud pubsub topics describe cloud-builds
    

    Se l'argomento esiste, verrà visualizzato il seguente output, dove BUILD-PROJECT-ID è l'ID progetto di build:

    name: projects/BUILD-PROJECT-ID/topics/cloud-builds
    

    Se viene visualizzato un messaggio di errore che indica che la risorsa non è stata trovata, segui le istruzioni per iscriverti alle notifiche di build per creare l'argomento manualmente.

  2. Crea un account di servizio che Pub/Sub utilizza per richiamare l'endpoint di servizio del motore per suggerimenti e analisi.

    gcloud beta iam service-accounts create recommender-ci-subscription-sa \
      --description "Service Account used by Cloud Pub/Sub to push Cloud Build events to the recommender-parser service" \
      --display-name "recommender-ci-subscription-sa" \
      --project $BUILD_PROJECT_ID
    
  3. L'account di servizio Pub/Sub deve essere associato ai ruoli necessari per pubblicare messaggi e richiamare il servizio di analisi dei suggerimenti.

    gcloud projects add-iam-policy-binding $BUILD_PROJECT_ID \
      --member serviceAccount:recommender-ci-subscription-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
      --role roles/pubsub.publisher \
      --project $BUILD_PROJECT_ID
    
    gcloud projects add-iam-policy-binding $BUILD_PROJECT_ID \
      --member serviceAccount:recommender-ci-subscription-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
      --role roles/pubsub.subscriber \
      --project $BUILD_PROJECT_ID
    
    gcloud projects add-iam-policy-binding $BUILD_PROJECT_ID \
      --member serviceAccount:recommender-ci-subscription-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
      --role roles/run.invoker \
      --project $BUILD_PROJECT_ID
    
  4. Aggiungi l'account di servizio recommender-ci-subscription-sa che hai creato al servizio analizzatore per suggerimenti come membro con il ruolo invoker

    gcloud beta run services add-iam-policy-binding recommender-parser \
      --member=serviceAccount:recommender-ci-subscription-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/run.invoker --region=us-central1
    
  5. Vai a Pub/Sub nella console Google Cloud.

  6. Fai clic sull'argomento Cloud Build.

  7. Fai clic su Crea sottoscrizione.

  8. Per ID abbonamento, digita recommender-service-build-events.

  9. In Tipo di pubblicazione, seleziona Push.

  10. Per Endpoint, digita l'URL del servizio per suggerimenti aggiunto da /ci.

  11. Seleziona Attiva autenticazione.

    1. Seleziona l'account di servizio recommender-ci-subscription-sache hai creato.
    2. Fai clic su Concedi in risposta al messaggio.
  12. Seleziona Scadenza dell'accettazione come 60 secondi.

  13. Mantieni le altre impostazioni predefinite.

  14. Fai clic su Crea.

Testa la pipeline

Il motore per suggerimenti genera suggerimenti IAM quando un sottoinsieme di autorizzazioni per un ruolo non viene utilizzato per 60 giorni. I suggerimenti per il dimensionamento delle VM seguono uno schema simile. Ai fini del test di questa pipeline on demand, utilizzerai i payload JSON di esempio consigliati nella sottodirectory stub fornita nel repository che hai clonato per questo tutorial. Ciò ti consente di testare la pipeline, escluse le chiamate API effettuate dal parser del motore per suggerimenti all'endpoint API del motore per suggerimenti per aggiornare lo stato dei suggerimenti che ha applicato correttamente.

In alternativa, se hai suggerimenti attivi nei tuoi progetti Google Cloud, puoi testare la pipeline end-to-end senza dover utilizzare stub. Il risultato descritto di seguito è pertinente al momento in cui utilizzi i payload di esempio per testare la pipeline. Tuttavia, i passaggi per testare questa pipeline senza campioni rimangono gli stessi.

  1. Nella console Google Cloud, vai al progetto di test ed esamina la risorsa creata. Dovresti avere quanto segue:

    1. Un'istanza Compute Engine denominata tf-compute-1 con tipo di macchina g1-small.
    2. Un account di servizio denominato Terraform Recommender Test con il ruolo editor per il progetto di test.
  2. Nella pagina della console Cloud Scheduler nel progetto build, fai clic su Esegui ora per il job Recommender-iam-scheduler.

  3. Fai clic sul job per visualizzare i log. Puoi inoltre visualizzare i log di servizio del motore per suggerimenti e analisi per avere una visualizzazione dettagliata dei passaggi eseguiti dal servizio.

  4. Una volta completata l'esecuzione del servizio, vai al tuo repository GitHub IAC-REPO-NAME. Il servizio recommender-parser avrebbe generato una richiesta di pull per te. Esamina i manifest IaC modificati che comprendono questa richiesta di pull e fai clic su Unisci richiesta di pull se sei soddisfatto delle modifiche ai file manifest IaC.

  5. Quando unisci la richiesta di pull, viene creato un nuovo commit nel ramo master. Questo attiva un job Cloud Build che implementa le modifiche alle risorse Google Cloud nel progetto test. Attendi qualche istante per il completamento del job Cloud Build; puoi esaminarne lo stato nella console Google Cloud

  6. Una volta completato il job, vai al progetto di test. I payload di esempio forniti apportano le seguenti modifiche alle risorse nel tuo progetto di test.

    • L'account di servizio Terraform Test, che in precedenza aveva il ruolo editor durante il deployment, viene modificato in viewer.

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina entrambi i progetti che hai creato.

Il modo più semplice per eliminare la fatturazione è eliminare il progetto che hai creato per il tutorial.

Per eliminare il progetto:

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Passaggi successivi

  • Esplora le architetture di riferimento, i diagrammi e le best practice su Google Cloud. Dai un'occhiata al nostro Cloud Architecture Center.
  • Scopri di più su Google Cloud Policy Intelligence nella documentazione.