Utilizzare IAM per limitare l'accesso a Cloud Deploy

Come per tutti i prodotti Google Cloud, Identity and Access Management protegge Cloud Deploy controllando quali utenti autenticati e account di servizio possono eseguire quali azioni.

Questo documento descrive alcune delle funzionalità di IAM e fornisce istruzioni per proteggere le distribuzioni delle applicazioni gestite utilizzando Cloud Deploy. Ecco alcuni modi specifici per limitare l'accesso ad azioni e risorse in Cloud Deploy:

Prima di iniziare

Informazioni sulle funzionalità avanzate di IAM

Oltre a ruoli e autorizzazioni, Cloud Deploy utilizza le seguenti funzionalità di IAM per fornire questi controlli:

Informazioni sui criteri IAM

Un criterio IAM è una raccolta di associazioni e metadati. La associazione dei ruoli assegna un singolo ruolo a uno o più principali (utenti, gruppi o account di servizio), oltre a eventuali condizioni specifiche del contesto che controllano l'applicazione dell'associazione.

Per ulteriori informazioni sui criteri IAM, consulta Informazioni sui criteri.

Informazioni sulle condizioni IAM

Con le condizioni IAM, puoi controllare l'accesso alle risorse e alle azioni di Cloud Deploy in base alle condizioni calcolate in fase di esecuzione. Ad esempio, puoi limitare la promozione a un determinato target in modo che sia consentita solo in un periodo di tempo specificato.

Informazioni sugli attributi dell'API

Quando crei condizioni IAM, puoi fare riferimento agli attributi API per ottenere informazioni di runtime su una richiesta. Ad esempio, puoi utilizzare un attributo API per ottenere il nome della risorsa per cui è stata effettuata la richiesta. Poi puoi confrontarlo con la risorsa o le risorse a cui ha accesso l'entità.

Concedi l'accesso granulare utilizzando le funzionalità IAM avanzate

Queste funzionalità IAM avanzate ti consentono di controllare l'accesso a risorse e tipi di risorse specifici in base a condizioni specifiche.

Le procedure in questa sezione concedono l'accesso a risorse specifiche (target, pipeline di importazione). Puoi anche concedere l'accesso a livello di progetto, il che influisce su tutte le pipeline di importazione o su tutti i target del progetto. Per impostare un criterio IAM per un progetto, utilizza il comando gcloud projects set-iam-policy:

gcloud projects set-iam-policy PROJECT_ID POLICY_FILE

Concedi l'accesso a una pipeline di pubblicazione specifica

Puoi concedere a un'entità le autorizzazioni per creare, modificare ed eliminare tutte le pipeline di importazione semplicemente concedendo un ruolo appropriato. Tuttavia, a volte potresti voler concedere questo accesso a un principale per una o più pipeline specifiche.

A questo scopo, utilizza le associazioni di ruoli per associare il ruolo roles/clouddeploy.developer all'entità, quindi, quando applichi il criterio (con setIamPolicy), specifica la pipeline di importazione per cui viene concesso l'accesso.

Per concedere l'accesso a una pipeline di pubblicazione specifica:

  1. Crea un file di criteri con la seguente associazione:

    bindings:
    - role: roles/clouddeploy.developer
      members:
      - user:fatima@example.com
    

    L'esempio riportato sopra concede il ruolo a un utente, ma puoi anche concederlo a un gruppo o a un account di servizio.

  2. Chiama il seguente comando per applicare il file delle norme a una pipeline di importazione specifica:

    gcloud deploy delivery-pipelines set-iam-policy --delivery-pipeline=PIPELINE_NAME --region=REGION POLICY_FILE
    

Concedi l'accesso per configurare un target specifico

Per concedere a un entità principale l'accesso a un target specifico, puoi utilizzare le associazioni di ruolo. A questo scopo, associa il ruolo roles/clouddeploy.operator all'entità e, quando applichi il criterio (con setIamPolicy), specifica il target per cui viene concesso l'accesso.

L'accesso al target specifico consente all'entità di aggiornarlo e di eliminarlo.

  1. Crea un file di criteri con la seguente associazione:

    bindings:
    - role: roles/clouddeploy.operator
      members:
      - group:cd_operators@example.com
    

    L'esempio riportato sopra concede il ruolo a un gruppo, ma puoi anche concederlo a un utente o a un account di servizio.

  2. Chiama il seguente comando per applicare il file di criteri a un target specifico:

    gcloud deploy targets set-iam-policy TARGET --region=REGION POLICY_FILE
    

Concedi le autorizzazioni per promuovere una release a un target specifico

Questa procedura presuppone che sia già in vigore un criterio che associ il ruolo al principale. Aggiungiamo una condizione che specifica il target:

  1. Crea un file di criteri con la seguente associazione:

    bindings:
    - role: roles/clouddeploy.operator
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: api.getAttribute("clouddeploy.googleapis.com/rolloutTarget", "") == "prod"
        title: Deploy to prod
    

    In questa associazione di ruoli, condition accetta una coppia chiave:valore, dove la chiave è expression e il valore è un'espressione CEL. Questa espressione fa riferimento a un insieme di attributi contestuali relativi alla richiesta e restituisce un valore booleano.

    In questo caso, l'espressione viene valutata quando il principale tenta di promuovere la release per confermare che il target della promozione corrisponda al target nell'espressione.

    L'espressione utilizza l'attributo API clouddeploy.googleapis.com/rolloutTarget, che rappresenta il target a cui il principale sta tentando di promuovere. L'espressione lo confronta con il target a cui viene concesso l'accesso alla promozione per l'entità.

  2. Imposta il vincolo per una pipeline di importazione specifica:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    Se vuoi impostare questa associazione per tutte le pipeline di importazione, puoi farlo a livello di progetto:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

Concedi le autorizzazioni per approvare le implementazioni in un target specifico

L'associazione in questa sezione concede a un'entità l'autorizzazione per approvare le implementazioni per una pipeline e include una condizione che applica l'autorizzazione per la destinazione prod.

  1. Crea un file di criteri con la seguente associazione:

    bindings:
    - role: roles/clouddeploy.approver
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: api.getAttribute("clouddeploy.googleapis.com/rolloutTarget", "") == "prod"
        title: Deploy to prod
    

    In questa associazione di ruoli, condition accetta una coppia chiave:valore, dove la chiave è expression e il valore è un'espressione CEL. L'espressione fa riferimento a un insieme di attributi contestuali relativi alla richiesta e restituisce un valore booleano.

    In questo caso, l'espressione viene valutata quando il principale tenta di approvare il rollout per confermare che il target corrisponda a quello nell'espressione.

    L'espressione utilizza l'attributo API clouddeploy.googleapis.com/rolloutTarget, che è il target dell'implementazione, e lo confronta con il target per cui al principale viene concesso l'accesso di approvazione. L'attributo clouddeploy.googleapis.com/rolloutTarget è l'unico attributo API supportato da Cloud Deploy.

  2. Imposta il vincolo per una pipeline di importazione specifica:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    Se vuoi impostare questa associazione per tutte le pipeline di importazione, puoi farlo a livello di progetto:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

Concedi le autorizzazioni per promuovere una release durante un periodo di tempo specifico

L'associazione in questa sezione concede a un'entità l'autorizzazione per promuovere le release per una pipeline e include una condizione che specifica la finestra temporale durante la quale l'associazione è in vigore.

  1. Crea un file di criteri con la seguente associazione:

    bindings:
    - role: roles/clouddeploy.operator
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: request.time.getDayOfWeek("America/Los_Angeles") > 0 && request.time.getDayOfWeek("America/Los_Angeles") < 6
        title: Promote during safe window
    

    In questa associazione di ruoli, condition accetta una coppia chiave:valore, dove la chiave è expression e il valore è un'espressione CEL. L'espressione fa riferimento a un insieme di attributi contestuali relativi alla richiesta e restituisce un valore booleano. Questa espressione verifica che la data e l'ora della richiesta avvengano dal lunedì al venerdì.

    In questo caso, l'espressione viene valutata quando l'entità principale tenta di promuovere la release per confermare che il target della promozione corrisponda a quello nell'espressione.

  2. Imposta il vincolo per una pipeline di importazione specifica:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    Se vuoi impostare questa associazione per tutte le pipeline di importazione, puoi farlo a livello di progetto:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

Concedi le autorizzazioni per approvare le implementazioni durante un periodo di tempo specifico

L'associazione in questa sezione concede a un'entità l'autorizzazione per approvare gli implementamenti e include una condizione che specifica la finestra temporale durante la quale l'associazione è in vigore

  1. Crea un file di criteri con la seguente associazione:

    bindings:
    - role: roles/clouddeploy.approver
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: request.time.getDayOfWeek("America/Los_Angeles") > 0 && request.time.getDayOfWeek("America/Los_Angeles") < 6
        title: Approve during safe window
    

    In questa associazione di ruoli, condition prende una coppia chiave:valore, dove la chiave èexpression e il valore è un'espressione CEL che fa riferimento a un insieme di attributi contestuali relativi alla richiesta e restituisce un valore booleano. Questa espressione verifica che la data e l'ora della richiesta avvengano dal lunedì al venerdì.

    In questo caso, l'espressione viene valutata quando il principale tenta di approvare l'implementazione per confermare che il target dell'implementazione corrisponda a quello nell'espressione.

  2. Imposta il vincolo per una pipeline di importazione specifica:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    Se vuoi impostare questa associazione per tutte le pipeline di importazione, puoi farlo a livello di progetto:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

Concedi le autorizzazioni per riprovare un job in base al tipo di job

L'associazione in questa sezione concede a un'entità l'autorizzazione a riprovare un job Cloud Deploy, in base al tipo di job

  1. Crea un file di criteri con la seguente associazione:

    bindings:
    - role: roles/clouddeploy.operator
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: api.getAttribute("clouddeploy.googleapis.com/jobType", "") == "deploy"
        title: Retry deploy job
    

    In questa associazione di ruoli, condition accetta una coppia chiave:valore, dove la chiave è expression e il valore è un'espressione CEL. L'espressione fa riferimento a un insieme di attributi contestuali relativi alla richiesta e restituisce un valore booleano.

    In questo caso, l'espressione viene valutata quando il principale tenta di riprovare il job per confermare che i tipi di job corrispondano a quelli nell'espressione.

    L'espressione utilizza l'attributo API clouddeploy.googleapis.com/jobType, che può essere deploy o verify.

  2. Imposta il vincolo per una pipeline di importazione specifica:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    Se vuoi impostare questa associazione per tutte le pipeline di importazione, puoi farlo a livello di progetto:

    gcloud projects set-iam-policy PROJECT POLICY_FILE