Utilizzo dei suggerimenti per Infrastructure as Code


Panoramica

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

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

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

La IaC ti consente di automatizzare la creazione delle risorse Google Cloud.Devi mantenere aggiornato il tuo repository IaC e inoltrarvi le modifiche apportate all'organizzazione Google Cloud. Le strategie IaC nelle organizzazioni generalmente si dimostrano utili quando vengono implementate con rigore e fungono da singola versione attendibile per l'infrastruttura cloud. Mantenere aggiornato il repository IaC è fondamentale per evitare scostamenti tra la versione dell'infrastruttura rappresentata dal repository IaC e quella presente nell'organizzazione.

Suggerimenti IAM

Tra le altre best practice, una comune è il principio di sicurezza del privilegio minimo e un'attenta considerazione di come le modifiche all'organizzazione vengono implementate e sincronizzate con il repository IaC.

Suggerimento per il dimensionamento delle VM

I suggerimenti per il dimensionamento ti aiutano a ridurre i costi fornendo suggerimenti per il ridimensionamento del tipo di macchina delle tue istanze in modo da utilizzare in modo più efficiente le risorse delle istanze.

Questo tutorial descrive come progettare e creare una pipeline di automazione per applicare un consiglio di Policy Intelligence in modo programmatico. Nell'ambito di questa pipeline di automazione, scoprirai come mantenere aggiornato il tuo repository IaC con le modifiche che decidi di apportare alla tua organizzazione Google Cloud, in base alle dimensioni delle VM e ai consigli di associazione dei criteri IAM che Recommender mette a disposizione.

Questo tutorial utilizza Hashicorp Terraform come strumento IaC, tuttavia i pattern e i componenti di architettura utilizzati nella pipeline di automazione descritta possono essere sfruttati anche se utilizzi un altro strumento di gestione IaC come Deployment Manager. Dovrai modificare la base di codice open source resa disponibile con questo tutorial in base alla tua specifica implementazione IaC.

Questa guida è rivolta ad architetti, proprietari di prodotti e sviluppatori che potrebbero essere responsabili dell'amministrazione, della sicurezza e della pianificazione dell'infrastruttura di 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 Recommender Parser. Il servizio chiama l'API Recommender per recuperare i consigli di Recommender per i progetti specificati. Analizza quindi questi consigli per le dimensioni delle VM e per IAM per mapparli alla configurazione presente nei manifest di Terraform. Il servizio aggiorna i manifest IaC in base a questi consigli. Viene generata una richiesta pull con le modifiche in modo da poter esaminare gli aggiornamenti. Dopo aver esaminato e unito la richiesta di pull, un job Cloud Build implementa le modifiche all'infrastruttura della tua organizzazione Google Cloud.

Nella pipeline vengono utilizzati diversi servizi Google Cloud ausiliari per monitorare i consigli elaborati, generare notifiche al completamento della compilazione e archiviare lo stato di Terraform. Scoprirai di più su questi servizi nel corso di questo tutorial.

Il seguente elenco descrive lo scopo del componente e i requisiti di controllo dell'accesso:

Platform Intelligence Recommenders
Finalità: generare consigli per la sicurezza e il dimensionamento delle VM

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

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

Cloud Scheduler

Finalità: Cloud Scheduler attiva il servizio Recommender Parser. Cloud Scheduler ti consente di configurare più job che invocano tutte le istanze del servizio di analisi di cui hai bisogno. Ogni chiamata deve passare i seguenti input

  • Elenco dei progetti per i quali devono essere elaborati i consigli
  • Tipo di consiglio
  • Nome del repository IaC

Controllo dell'accesso: crea o identifica un account di servizio Google Cloud da utilizzare per le chiamate da Cloud Scheduler al servizio Recommender Parser.

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

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

Servizio Cloud Run

Finalità: il servizio di analisi dei consigli è la sede di tutta la logica di elaborazione. Dispone di più percorsi, ognuno con uno scopo specifico:

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

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

Inoltre, assegna il servizio a un account di servizio dedicato. In questo modo, si garantisce che solo il servizio sia in grado di invocare altri servizi come Firestore.

HashiCorp Terraform

Scopo: Terraform 0.12 è lo strumento IaC.

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

Cloud Build

Finalità: Google Cloud Build automatizza il deployment dell'infrastruttura in base alle modifiche apportate ai manifest IaC in base ai consigli dell'analisi di criteri.

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

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

GitHub

Finalità: il repository IaC utilizza GitHub per il controllo del codice sorgente. Il repository IaC su GitHub è integrato con Cloud Build. Quando vengono eseguiti commit nel ramo master, viene attivato un job Cloud Build per eseguire un insieme di attività predefinite.

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

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

Firestore

Firestore è un database di documenti NoSQL scalabile e completamente gestito che viene utilizzato in questa architettura per mantenere le informazioni relative agli ID consiglio analizzati dal servizio Recommender Parser, insieme ai dettagli corrispondenti pertinenti ai commit di Git.

I dettagli mantenuti in Firestore svolgono un ruolo fondamentale nel loop di feedback che fa parte della pipeline end-to-end. Dopo aver recuperato un consiglio generato dall'API Recommender e prima di elaborarlo, il servizio ne contrassegna lo stato come CLAIMED. Dopo aver applicato il consiglio, il servizio esegue query sul database per recuperare gli ID consiglio che sono stati applicati correttamente dal job Cloud Build e modifica lo stato del consiglio in SUCCEEDED. Se il job Cloud Build non va a buon fine, lo stato del consiglio viene modificato in FAILED.

Controllo dell'accesso:per maggiori dettagli, consulta la sezione Ruoli Firestore. Il servizio recommender-parser legge i dati da Firestore e per farlo ha bisogno del ruolo roles/datastore.user.

Pub/Sub

Finalità: Cloud Build pubblica messaggi in un argomento Pub/Sub quando lo stato della compilazione cambia, ad esempio quando viene creata, quando passa a uno stato di funzionamento e quando viene completata.

L'argomento Pub/Sub a cui Cloud Build pubblica i messaggi si chiama cloud-builds e viene creato automaticamente quando attivi l'API Cloud Build nel tuo progetto.

Controllo dell'accesso: le iscrizioni push possono essere configurate per fornire un'intestazione di autenticazione che consenta al servizio di autorizzare la richiesta. Per ulteriori dettagli, consulta la sezione Utilizzare le sottoscrizioni push.

Obiettivi

  • Crea una pipeline di automazione per
    • Monitorare in modo proattivo i consigli di Policy Intelligence della piattaforma
    • Analizza i consigli 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.
  • Scopri le ipotesi e le best practice da tenere presenti per creare questa pipeline
  • Testa la pipeline

Costi

In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:

  • Cloud Run
  • Cloud Build
  • Compute Engine
  • Cloud Storage
  • Firestore
  • Pub/Sub
  • Cloud Scheduler
  • Recommender

Per generare una stima dei costi basata sull'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud potrebbero essere idonei per una prova gratuita.

Prima di iniziare

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

Note di rilascio e ipotesi

Esistono molte variabili nel modo in cui vengono utilizzati gli strumenti e i manifest IaC.

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

  • Questa pipeline utilizza Terraform ver. 0.12. Modifiche significative alla sintassi di configurazione HCL o alla struttura del file di stato Terraform potrebbero causare problemi di interruzione.
  • Questa pipeline presuppone che le strutture di directory IaC non siano nidificate e che un repository IaC gestisca le risorse in uno o più progetti Google Cloud.
  • Le variabili Terraform passate come variabili di ambiente, argomenti della riga di comando non sono supportate. Il prototipo presuppone la configurazione declarative 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 le dimensioni delle VM seguono un modello simile. Ai fini di questo tutorial, sono stati forniti payload di consigli di esempio 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 codice base è open source e si presume che apporterai gli eventuali miglioramenti specifici necessari al flusso di analisi in base alla struttura della directory e all'utilizzo dei moduli.

La versione corrente del servizio di analisi del recommender open source è in linea con le seguenti limitazioni note dei consigli IAM:

Prerequisiti

  1. Seleziona o crea due progetti Google Cloud.

    Vai alla pagina del selettore dei progetti

    • Un progetto di compilazione che ospita ed esegue la pipeline di automazione.
    • Un progetto di test che ospita le risorse Google Cloud impiegate per testare la pipeline di automazione.
  2. Make sure that billing is enabled for your Google Cloud project.

  3. Nel progetto test, abilita le API Recommender e Compute Engine.

    Enable the APIs

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

    Enable the APIs

Al termine di questo tutorial, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori dettagli, consulta la sezione Pulizia.

Configura l'ambiente

  1. Nella console Google Cloud, seleziona il 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 e viene visualizzato un prompt della riga di comando. Cloud Shell è un ambiente shell in cui è già installato Google Cloud CLI e sono già impostati i valori per il progetto corrente. 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 per contenere il numero del progetto per il progetto build utilizzando il comando seguente:

    export BUILD_PROJECT_ID=$DEVSHELL_PROJECT_ID
    
  4. Crea una variabile di ambiente per contenere il numero del progetto test . Copia manualmente l'ID progetto di test e sostituisci PROJECT-ID con questo valore,

    export TEST_PROJECT_ID=PROJECT-ID
  5. Assegna impostazioni predefinite per i valori utilizzati nel tutorial, ad esempio regione e zona. In questo tutorial utilizzi 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 seguente comando:

    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 progetto build come progetto predefinito:

    gcloud config set project $BUILD_PROJECT_ID
    
  8. Crea una variabile di ambiente denominata BUILD_PROJECT_NUMBER per il numero del tuo progettobuild

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

Crea un bucket per lo stato di Terraform

Crea un bucket Cloud Storage nel progetto di compilazione per archiviare il file dello stato Terraform.

gcloud storage buckets create gs://recommender-tf-state-$BUILD_PROJECT_ID \
  --project=${BUILD_PROJECT_ID} --location=us-central1

Creare un repository GitHub

Crea un repository GitHub da utilizzare come 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 passaggi che seguono, spingerai i file nella sottodirectory sample-iac del repository clonato nel 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 e eseguirlo su GitHub.

      cp -r recommender-iac-pipeline-nodejs-tutorial/sample-iac $HOME
      
    2. Vai 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 https://github.com/GITHUB-ACCOUNT/IAC-REPO-NAME
    5. Sostituisci i segnaposto nei file di questo repository con il tuotest ID progetto e il nome del bucket Cloud Storage di Terraform.

      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 su GitHub.

      git add .
      git commit -m "First Commit"
      git push origin master
      
    7. Quando richiesto, accedi al tuo account GitHub.

Generare chiavi SSH per il repository

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

  1. Genera le chiavi SSH per il tuo repository GitHub.

    1. Genera una coppia di chiavi SSH. Sostituisci your_email@example.com con il tuo indirizzo email GitHub. In Cloud Shell:

      ssh-keygen -t rsa -b 4096 -m PEM -C "your_email@example.com"
    2. Quando ti viene chiesto di "inserire un file in cui salvare la chiave", premi Invio. Viene accettata la posizione predefinita del file.

    3. Quando ti viene chiesto 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 posizione è$HOME/.ssh/

  3. Copia la chiave pubblica SSH che hai generato 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 > Chiavi di deployment.

    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 il comando:

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

    gcloud storage buckets create gs://github-keys-$BUILD_PROJECT_ID --project=${BUILD_PROJECT_ID} --location=us-central1
    
    gcloud storage cp SSH-KEYS-DIR/id_rsa* gs://github-keys-$BUILD_PROJECT_ID
    gcloud storage cp SSH-KEYS-DIR/known_hosts gs://github-keys-$BUILD_PROJECT_ID
  7. Genera un token di accesso personale per GitHub. Questo token viene utilizzato per eseguire operazioni Git utilizzando le chiamate API effettuate dal servizio recommender-parser per generare richieste pull e eseguire il check-in dei manifest IaC aggiornati.

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

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

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

    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 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 integrarlo con Cloud Build.

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

      Viene visualizzata la pagina Autorizzazione, in cui ti viene chiesto di autorizzare l'app Google Cloud Build a connettersi a Google Cloud.

    7. Fai clic su Autorizza Google Cloud Build da GoogleCloudBuild. Viene visualizzata la 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 IAC-REPO-NAME repository GitHub

    11. Fai clic su Connetti repository.

    12. Fai clic su Crea un trigger. Viene creata una definizione di trigger.

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

    Per maggiori informazioni, consulta la pagina Eseguire build su GitHub.

  2. La directory che hai copiato contiene un file cloudbuild.yaml. Questo file di configurazione illustra i passaggi eseguiti da 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 all'account di servizio Cloud Build per consentirgli di creare account di servizio, associare ruoli e macchine virtuali (istanze Compute Engine) nel progetto di test

    gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \
      --member serviceAccount:$BUILD_PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
      --role roles/compute.admin \
      --project $TEST_PROJECT_ID
    
    gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \
      --member serviceAccount:$BUILD_PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
      --role roles/iam.serviceAccountAdmin \
      --project $TEST_PROJECT_ID
    
    gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \
    --member serviceAccount:$BUILD_PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
    --role roles/iam.securityAdmin \
    --project $TEST_PROJECT_ID
    
  4. Apri la pagina Trigger di compilazione 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. Per 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 l'attivatore di compilazione, fai clic su Esegui sulla voce dell'attivatore nell'elenco degli attivatori.

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

Esegui il deployment del servizio Cloud Run recommender-parser

  1. In Cloud Shell, cambia directory nella directory creata mediante la clonazione del repository

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

    gcloud config set run/region us-central1
    
  3. La directory parser-service contiene una sottodirectory stub con alcuni payload JSON di esempio per testare il servizio di analisi del recommender. Esegui i seguenti comandi sed per sostituire i segnaposto PROJECT_ID in questi file JSON con l'ID del 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 su Container Registry

    gcloud builds submit --tag $IMAGE .
    
  6. Crea un account di servizio per il servizio di analisi del recommender in modo che possa interagire con altri servizi Google Cloud nella pipeline. È buona prassi concedere autorizzazioni granulari ai servizi Cloud Run. Per ulteriori dettagli, consulta la sezione 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 recommender-parser 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.

    gcloud storage buckets add-iam-policy-binding gs://github-keys-$BUILD_PROJECT_ID \
      --member=serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/storage.objectUser
    
    gcloud storage buckets add-iam-policy-binding gs://recommender-tf-state-$BUILD_PROJECT_ID \
      --member=serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/storage.objectUser
    
  8. Concedi all'account di servizio del servizio di analisi del recommender l'accesso a Firestore, Recommender 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, denominato recommender-parser, eseguendo il comando. Sostituisci GITHUB-ACCOUNT con il nome utente del tuo account GitHub, non con l'indirizzo email. Accetta eventuali richieste del 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

Configurare Firestore

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

Il serviziorecommender-parser scrive documenti in questo database per le seguenti finalità:

  • Per tenere traccia dei consigli recuperati dall'API Recommender
  • Chiama l'API Recommender dopo l'elaborazione dei consigli per actualizare lo stato di ogni consiglio elaborato su SUCCEEDED o FAILED, a seconda dei casi. Si tratta di un passaggio chiave che rende la pipeline idempotente garantendo che i consigli non vengano elaborati in modo incompleto o più volte.

Configurare un job Cloud Scheduler

  1. Crea un account di servizio utilizzato dai job Cloud Scheduler per eseguire il servizio recommender-parser.

    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 al account di servizio il ruolo di esecuzione/richiamatore 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. Ottieni l'URL del servizio di consigli:

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

    Il job Cloud Scheduler invoca il percorso /recommendation/iam del servizio recommender-parser per analizzare i consigli IAM e il percorso /recommender/vm per analizzare i consigli per le dimensioni delle VM.

  4. Crea una variabile per l'endpoint invocato dai job Cloud Scheduler. Sostituisci RECOMMENDER-SERVICE-URL con l'URL del servizio di consulenza 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 avere il seguente aspetto:

    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 strutturarlo come indicato di seguito:

    • repo: il nome del repository GitHubIAC-REPO-NAME che hai creato in Creare un repository GitHub.

    • projects: un elenco / array di ID progetti Google Cloud a cui è mappato questo repository GitHub 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 viene utilizzato da 60 giorni e i suggerimenti per le dimensioni delle VM seguono un modello simile. Ai fini del testing di questa pipeline on demand, stub può essere passato come true in modo che la pipeline venga testata utilizzando i payload di Recommender 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 le informazioni sulle build in un argomento Pub/Sub chiamato cloud-builds creato automaticamente quando hai attivato l'API Cloud Build nel tuo progetto di build.

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

    gcloud pubsub topics describe cloud-builds
    

    Se l'argomento esiste, viene visualizzato il seguente output, dove BUILD-PROJECT-ID è l'ID progetto di compilazione:

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

    Se ricevi un messaggio di errore che ti informa che la risorsa non è stata trovata, segui le istruzioni per abbonarti alle notifiche di compilazione per creare l'argomento manualmente.

  2. Crea un account di servizio utilizzato da Pub/Sub per richiamare l'endpoint del servizio recommender-parser.

    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 poter pubblicare messaggi e invocare il servizio recommender-parser.

    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-sache hai creato al servizio recommender-parser 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-builds.

  7. Fai clic su Crea sottoscrizione.

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

  9. In Tipo di consegna, seleziona Push.

  10. In Endpoint, digita l'URL del servizio di consigli a cui è stato aggiunto /ci.

  11. Seleziona Attiva l'autenticazione.

    1. Seleziona l'account di servizio recommender-ci-subscription-sache hai creato.
    2. Fai clic su Concede in risposta al messaggio di richiesta.
  12. Seleziona Scadenza conferma 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 insieme di autorizzazioni per un ruolo non viene utilizzato per 60 giorni. I suggerimenti per il dimensionamento delle VM seguono un pattern simile. Ai fini del test di questa pipeline on demand, utilizzerai i payload JSON dei consigli di esempio forniti nella sottodirectory stub del repository che hai clonato per questo tutorial. In questo modo puoi testare la pipeline, escludendo le chiamate API che il recommender-parser effettua all'endpoint API Recommender per aggiornare lo stato dei consigli che ha applicato correttamente.

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

  1. Nella console Google Cloud, vai al progetto di test e controlla le risorse create. Devi disporre di 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 di editor per il progetto di test.
  2. Nella pagina della console Cloud Scheduler del progetto build, fai clic su Esegui ora per il job recommender-iam-scheduler.

  3. Fai clic sul job per visualizzare i log. Puoi anche visualizzare i log del servizio recommender-parser per avere una visione dettagliata dei passaggi eseguiti dal servizio.

  4. Al termine dell'esecuzione del servizio, vai al repository GitHubIAC-REPO-NAME. Il servizio recommender-parseravrebbe generato una richiesta pull per te. Esamina i manifest IaC modificati che fanno parte di questa richiesta di pull e fai clic su Unisci richiesta di pull se le modifiche ai manifest IaC ti soddisfano.

  5. Quando unisci la richiesta di pull, viene creato un nuovo commit nel ramo master. Viene attivato 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 controllare il relativo stato nella console Google Cloud.

  6. Al termine del job, vai al progetto di test. I payload di esempio forniti apportano le seguenti modifiche alle risorse del progetto di test.

    • L'account di servizio di test Terraform, che in precedenza aveva il ruolo editor al momento del 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. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Passaggi successivi

  • Esplora architetture di riferimento, diagrammi e best practice su Google Cloud. Consulta il nostro Cloud Architecture Center.
  • Scopri di più su Google Cloud Policy Intelligence nella documentazione.