Configurare gli account di servizio specificati dall'utente

Per seguire il principio del privilegio minimo in Cloud Build, puoi configurare Cloud Build in modo che utilizzi un service account con privilegi sufficienti per eseguire una build. Questa pagina descrive come configurare unaccount di serviziot.

Se non specifichi un account di servizio, Cloud Build potrebbe selezionarne automaticamente uno per eseguire le build per tuo conto. Questo account di servizio potrebbe disporre di autorizzazioni inutilmente ampie per il tuo caso d'uso, ad esempio l'accesso ai tuoi Cloud Source Repositories e a qualsiasi bucket Cloud Storage nel tuo progetto.

Per migliorare il livello di sicurezza dei tuoi progetti e ridurre il potenziale impatto di configurazioni errate o utenti malintenzionati, ti consigliamo di seguire il principio del privilegio minimo. Adottando questo principio, puoi assegnare a ogni account di servizio le autorizzazioni e i ruoli limitati all'attività che svolge. Ad esempio, puoi utilizzare un account di servizio per creare ed eseguire il push delle immagini in Artifact Registry, come mostrato nel Google Cloud blog.

Prima di iniziare

  • Enable the Cloud Build and IAM APIs.

    Enable the APIs

  • Se prevedi di utilizzare questo account per creare e gestire le credenziali, ad esempio per creare credenziali di breve durata, abilita l'API IAM Service Account Credentials.

    Enable the IAM Service Account Credentials API.

    Enable the API

  • Crea un account di servizio, se non l'hai ancora fatto.

Concedi autorizzazioni IAM

Per consentire alla build di accedere ai servizi a cui deve connettersi, devi concedere alcuni ruoli e autorizzazioni:

  1. Apri la pagina Impostazioni di Cloud Build:

    Apri la pagina Impostazioni di Cloud Build

    Vedrai la scheda Autorizzazioni service account:

    Screenshot della pagina Autorizzazioni service account

  2. Dall'elenco a discesa, seleziona il account di servizio di cui vuoi modificare i ruoli.

  3. Imposta lo stato del ruolo che vuoi aggiungere su Attiva.

  4. Se il ruolo necessario per la pipeline di build non è elencato qui, puoi concedere ruoli aggiuntivi nella pagina delle configurazioni IAM.

Puoi trovare ulteriori informazioni sui ruoli comunemente richiesti per una build in Configurazione dell'accesso alle risorse Cloud Build e nell'elenco completo di ruoli e autorizzazioni IAM di Cloud Build.

Configura i log di build

Quando specifichi il tuo account di servizio per le build, devi archiviare i log di build in Cloud Logging o in un bucket Cloud Storage creato dall'utente. Non puoi archiviare i log nel bucket di log predefinito.

Esegui una build utilizzando un file di configurazione

Per eseguire manualmente una build utilizzando un file di configurazione:

  1. Nella directory principale del progetto, crea un file di configurazione di build Cloud Build denominato cloudbuild.yaml o cloudbuild.json.

  2. Aggiungi il campo serviceAccount e la configurazione di logging preferita.

    • Se memorizzi i log di build in Cloud Logging, aggiungi un campo logging e imposta il valore del campo su CLOUD_LOGGING_ONLY.

    • Se archivi i log di build in un bucket Cloud Storage creato dall'utente:

      • Aggiungi un campo logging e imposta il relativo valore su GCS_ONLY.
      • Aggiungi un campo logsBucket e imposta il relativo valore sulla posizione del bucket Cloud Storage.

    L'esempio seguente configura Cloud Build per eseguire le build utilizzando un account di servizio specificato dall'utente e configura i log di build in modo che vengano archiviati in un bucket Cloud Storage creato dall'utente:

    YAML

    steps:
    - name: 'bash'
      args: ['echo', 'Hello world!']
    logsBucket: 'LOGS_BUCKET_LOCATION'
    serviceAccount: 'projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT'
    options:
      logging: GCS_ONLY
    

    JSON

    {
      "steps": [
      {
        "name": "bash",
        "args": [
          "echo",
          "Hello world!"
        ]
      }
      ],
      "logsBucket": "LOGS_BUCKET_LOCATION",
      "serviceAccount": "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT",
      "options": {
        "logging": "GCS_ONLY"
      }
    }
    
    

    Sostituisci i valori segnaposto nel file di configurazione della build con quanto segue:

    • LOGS_BUCKET_LOCATION è il bucket Cloud Storage in cui archiviare i log di build. Ad esempio, gs://mylogsbucket.
    • PROJECT_ID è l'ID del progetto Google Cloud in cui stai eseguendo la build.
    • SERVICE_ACCOUNT è l'indirizzo email o l'ID univoco del account di servizio che vuoi specificare per le build. Ad esempio, un indirizzo email del service account ha il seguente aspetto: service-account-name@project-id.iam.gserviceaccount.com.
  3. Avvia la build utilizzando il file di configurazione della build:

    gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY
    

    Sostituisci i valori segnaposto nei comandi precedenti con quanto segue:

    • CONFIG_FILE_PATH è il percorso del file di configurazione della build.
    • SOURCE_DIRECTORY è il percorso o l'URL del codice sorgente.

    Se non specifichi un CONFIG_FILE_PATH e un SOURCE_DIRECTORY nel comando gcloud builds submit, Cloud Build presuppone che il file di configurazione della build e il codice sorgente si trovino nella directory di lavoro corrente.

Esegui build utilizzando i trigger

Per eseguire una build con i trigger di Cloud Build utilizzando il tuo account di servizio, configura l'opzione di logging preferita e seleziona il account di servizio preferito durante la creazione del trigger.

  1. Nel file di configurazione della build:

    • Se memorizzi i log di build in Cloud Logging, aggiungi un campo logging e imposta il valore del campo su CLOUD_LOGGING_ONLY.

    • Se archivi i log di build in un bucket Cloud Storage creato dall'utente:

      • Aggiungi un campo logging e imposta il relativo valore su GCS_ONLY.
      • Aggiungi un campo logsBucket e imposta il relativo valore sulla posizione del bucket Cloud Storage.

    Il seguente esempio configura l'archiviazione dei log di build in un bucket Cloud Storage creato dall'utente:

    YAML

    steps:
    - name: 'bash'
      args: ['echo', 'Hello world!']
    logsBucket: 'LOGS_BUCKET_LOCATION'
    options:
      logging: GCS_ONLY
    

    JSON

    {
      "steps": [
      {
        "name": "bash",
        "args": [
          "echo",
          "Hello world!"
        ]
      }
      ],
      "logsBucket": "LOGS_BUCKET_LOCATION",
      "options": {
        "logging": "GCS_ONLY"
      }
    }
    

    Sostituisci LOGS_BUCKET_LOCATION con il bucket Cloud Storage in cui archiviare i log di build. Ad esempio, gs://mylogsbucket.

  2. Specifica un account di servizio da utilizzare con il trigger di build:

    Console

    Per eseguire le build utilizzando la pagina Trigger nella console Google Cloud , l'account di servizio specificato dall'utente deve trovarsi nello stesso progetto del trigger di build. Per utilizzare i trigger con i service account tra progetti, crea il trigger di build utilizzando lo strumento gcloud.

    1. Crea o modifica il trigger di build.

    2. Nel campo Service account, specifica il tuo account di servizio. Se non specifichi un account di servizio, Cloud Build utilizza il service account predefinito.

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

    gcloud

    Quando crei un trigger di build, specifica il account di servizio utilizzando il flag --service-account. Nell'esempio seguente, il comando gcloud crea un trigger di build che recupera il codice da un repository Git:

    gcloud builds triggers create github \
       --name=TRIGGER_NAME \
       --repo-name=REPO_NAME \
       --repo-owner=REPO_OWNER \
       --branch-pattern=BRANCH_PATTERN
       --build-config=BUILD_CONFIG_FILE
       --service-account=SERVICE_ACCOUNT
       --project=BUILD_PROJECT
    

    Sostituisci i valori segnaposto nel file di configurazione della build con quanto segue:

    • TRIGGER_NAME è il nome del trigger di build.
    • REPO_NAME è il nome del tuo repository.
    • REPO_OWNER è il nome utente del proprietario del repository.
    • BRANCH_PATTERN è il nome del ramo nel tuo repository su cui richiamare la build.
    • TAG_PATTERN è il nome del tag nel tuo repository per richiamare la build.
    • BUILD_CONFIG_FILE è il percorso del file di configurazione della build.
    • SERVICE_ACCOUNT è il tuo account di servizio nel formato /projects/PROJECT_ID/serviceAccounts/ACCOUNT_ID_OR_EMAIL.
    • BUILD_PROJECT è il progetto in cui stai avviando le build.

Configurazione tra progetti

Se il account di servizio specificato dall'utente si trova in un progetto diverso da quello in cui stai avviando le build, concedi l'accesso necessario:

  • Nel progetto che contiene il account di servizio specificato dall'utente, assicurati che il vincolo del criterio dell'organizzazione iam.disableCrossProjectServiceAccountUsage non venga applicato. Questo vincolo viene applicato per impostazione predefinita. Per disattivare questo vincolo della policy dell'organizzazione, esegui il seguente comando in cui SERVICE_ACCOUNT_PROJECT_ID è il progetto che contiene il account di servizio specificato dall'utente:

    gcloud resource-manager org-policies disable-enforce \
       iam.disableCrossProjectServiceAccountUsage \
       --project=SERVICE_ACCOUNT_PROJECT_ID
    
  • Nel progetto che contiene il account di servizio specificato dall'utente, concedi il ruolo roles/iam.serviceAccountTokenCreator all'agente di servizio Cloud Build del progetto in cui esegui le build:

    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member="serviceAccount:BUILD_SERVICE_AGENT" \
        --role="roles/iam.serviceAccountTokenCreator"
    

    Sostituisci i valori segnaposto nel comando con quanto segue:

    • SERVICE_ACCOUNT_PROJECT_ID: l'ID progetto del progetto che contiene il account di servizio specificato dall'utente.
    • BUILD_SERVICE_AGENT: l'ID email dell'agente di servizio nel formato service-BUILD_PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com, dove BUILD_PROJECT_NUMBER è il numero di progetto del progetto in cui esegui le build. Puoi ottenere il numero di progetto dalla pagina delle impostazioni del progetto.

Limitazioni:

  • Il tuo Google Cloud progetto deve trovarsi in un' Google Cloud organizzazione.

  • Devi avviare le build nella riga di comando utilizzando gcloud builds submit o gcloud builds triggers create. Per utilizzare la pagina Trigger nella console Google Cloud , l'account di servizio specificato dall'utente e il trigger di build devono trovarsi nello stesso progetto.

Passaggi successivi