Esegui build con un account di servizio gestito dall'utente

Questo documento descrive come configurare le build per utilizzare un service account gestito dall'utente.

Se non specifichi un account di servizio gestito dall'utente per le tue build, Cloud Build utilizza automaticamente il service account Cloud Build predefinito. Questo account di servizio predefinito potrebbe avere autorizzazioni inutilmente ampie, ad esempio l'accesso ai tuoi Cloud Source Repositories e a qualsiasi bucket Cloud Storage nel tuo progetto.

Ti consigliamo di seguire il principio del privilegio minimo assegnando autorizzazioni e ruoli agli account di servizio con ambito limitato all'attività che svolgono. Ad esempio, puoi utilizzare un account di servizio per creare e inviare immagini ad Artifact Registry, come mostrato nel Google Cloud blog.

Prima di iniziare

  • Abilita le API Cloud Build e IAM, se non sono già abilitate.

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

    Abilita le API

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

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

    Abilitare l'API

  • Se non l'hai ancora fatto, crea un account di servizio.

Configurare il service account

Concedi i ruoli IAM al account di servizio gestito dall'utente in modo che disponga delle autorizzazioni necessarie per eseguire le build. Puoi anche configurare Cloud Build in modo che scelga automaticamente questoaccount di serviziot per i nuovi trigger.

  1. Nella console Google Cloud , vai alla pagina Cloud Build Autorizzazioni:

    Vai ad Autorizzazioni

  2. Vai al menu Service account e seleziona il tuo account di servizio. Per scegliere unaccount di serviziot in un altro progetto, fai clic su Cambia progetto.

  3. Per utilizzare il account di servizio selezionato come account di servizio per i nuovi trigger, attiva l'opzione Imposta come preselezionato per i nuovi trigger.

  4. Nell'elenco dei servizi Google Cloud , abilita i ruoli IAM che vuoi concedere al tuo account di servizio.

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

  6. Se hai selezionato un account di servizio in un altro progetto, completa i passaggi descritti in Configurazione tra progetti.

Per saperne di più sui ruoli IAM comunemente richiesti per una build, consulta le seguenti informazioni:

Configura i log di build

Quando specifichi il tuo account di servizio per le build, devi archiviare i log delle build in uno dei seguenti tipi di bucket:

Se crei un bucket di log, assicurati che non abbia un criterio di conservazione, in quanto potrebbe impedire a Cloud Build di scrivere i log di build nel bucket.

Non puoi archiviare i log in un bucket di log di proprietà di Google Cloud.

Per ulteriori informazioni su dove archiviare i log di build, consulta Opzioni di archiviazione dei log di build.

Esegui una build utilizzando un file di configurazione

Per eseguire manualmente una build utilizzando un file di configurazione:

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

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

    • Se archivi 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 unaccount di serviziot gestito 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 le variabili 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 esegui 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 le variabili nei comandi con i seguenti valori:

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

Eseguire build utilizzando i trigger

Per eseguire una build con i trigger Cloud Build utilizzando il tuo account di servizio, configura l'opzione di logging che preferisci e seleziona il account di servizio che preferisci quando crei il trigger.

Se vuoi utilizzare lo stesso account di servizio per tutti i nuovi trigger, puoi configurare Cloud Build in modo che selezioni automaticamente il service account.

  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.

    L'esempio seguente 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

    1. Crea o modifica il trigger di build.

    2. Nel campo Service account, specifica il tuo account di servizio. Per scegliere unaccount di serviziot in un altro progetto, fai clic su Cambia progetto.

      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 le variabili nel file di configurazione della build con i seguenti valori:

    • TRIGGER_NAME è il nome del trigger di build.
    • REPO_NAME è il nome del 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

Puoi utilizzare un account di servizio gestito dall'utente per eseguire build in un progetto diverso da quello in cui hai creato il account di servizio solo se il vincolo dei criteri dell'organizzazione iam.disableCrossProjectServiceAccountUsage non è applicato. Questo vincolo viene applicato per impostazione predefinita. Scopri di più.

  • Il comando seguente disabilita l'applicazione del vincolo e concede l'accesso necessario. Prima di impostare il vincolo nella policy dell'organizzazione, la tua organizzazione deve essere consapevole dei compromessi di sicurezza coinvolti:

    gcloud resource-manager org-policies disable-enforce \
       iam.disableCrossProjectServiceAccountUsage \
       --project=SERVICE_ACCOUNT_PROJECT_ID
    

    In questo comando, SERVICE_ACCOUNT_PROJECT_ID è il progetto che contiene il account di servizio gestito dall'utente.

  • Nel progetto che contiene il account di servizio gestito dall'utente, concedi il ruolo roles/iam.serviceAccountTokenCreator per il service agent 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 le variabili nel comando con quanto segue:

    • SERVICE_ACCOUNT_PROJECT_ID: l'ID progetto del progetto che contiene l'account di servizio gestito 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 progetto.

Limitazioni:

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

  • Devi avviare le build nella riga di comando utilizzando gcloud builds submit o gcloud builds triggers create.

Passaggi successivi