Gestire le associazioni di ruoli condizionali

Questo argomento descrive come aggiungere, modificare e rimuovere le associazioni di ruoli condizionali nei criteri di autorizzazione IAM (Identity and Access Management).

Prima di iniziare

Ruoli obbligatori

Per gestire le associazioni di ruolo condizionali nel criterio di autorizzazione di una risorsa, devi disporre delle autorizzazioni per ottenere la risorsa e per ottenere e impostare il criterio di autorizzazione per la risorsa. Queste autorizzazioni hanno il seguente formato, dove SERVICE è il nome del servizio proprietario della risorsa e RESOURCE_TYPE è il nome del tipo di risorsa a cui vuoi gestire l'accesso:

  • SERVICE.RESOURCE_TYPE.get
  • SERVICE.RESOURCE_TYPE.getIamPolicy
  • SERVICE.RESOURCE_TYPE.setIamPolicy

Ad esempio, per gestire i binding dei ruoli condizionali nella policy di autorizzazione di un progetto, devi disporre delle seguenti autorizzazioni:

  • resourcemanager.projects.get
  • resourcemanager.projects.getIamPolicy
  • resourcemanager.projects.setIamPolicy

Per ottenere le autorizzazioni richieste, chiedi all'amministratore di concederti un ruolo predefinito o personalizzato che includa le autorizzazioni. Ad esempio, l'amministratore potrebbe concederti il ruolo diAmministratore sicurezzaa (roles/iam.securityAdmin), che include le autorizzazioni per ottenere quasi tutte le risorseGoogle Cloud e gestire i relativi criteri di autorizzazione.

Aggiungere un'associazione di ruolo condizionale a un criterio

I binding dei ruoli condizionali possono essere aggiunti a criteri di autorizzazione nuovi o esistenti per controllare ulteriormente l'accesso alle risorse. Google Cloud Questa sezione mostra come aggiungere una semplice condizione basata sul tempo a un criterio di autorizzazione esistente utilizzando la console Google Cloud , Google Cloud CLI e l'API REST.

Per aggiungere un'associazione di ruoli condizionale a una norma di autorizzazione esistente:

Console

  1. Nella console Google Cloud vai alla pagina IAM.

    Vai alla pagina IAM

  2. Nell'elenco delle entità, individua l'entità che ti interessa e fai clic sul pulsante .

  3. Nel riquadro Modifica autorizzazioni, individua il ruolo per cui vuoi configurare una condizione. Poi, in Condizione IAM (facoltativo), fai clic su Aggiungi condizione IAM.

  4. Nel riquadro Modifica condizione, inserisci un titolo e una descrizione facoltativa per la condizione.

  5. Puoi aggiungere un'espressione di condizione utilizzando il Generatore di condizioni o l'Editor di condizioni. Il generatore di condizioni fornisce un'interfaccia interattiva per selezionare il tipo di condizione, l'operatore e altri dettagli applicabili relativi all'espressione. L'editor delle condizioni fornisce un'interfaccia basata su testo per inserire manualmente un'espressione utilizzando la sintassi CEL.

    Generatore di condizioni:

    1. Dal menu a discesa Tipo di condizione, seleziona Accesso in scadenza.
    2. Dal menu a discesa Operatore, seleziona by (per).
    3. Nel menu a discesa Ora, fai clic sul pulsante per selezionare un intervallo di date e ore.
    4. Fai clic su Salva per applicare la condizione.
    5. Una volta chiuso il riquadro Modifica condizione, fai di nuovo clic su Salva nel riquadro Modifica autorizzazioni per aggiornare la policy di autorizzazione.

    Editor condizioni:

    1. Fai clic sulla scheda Editor condizioni e inserisci la seguente espressione (sostituendo il timestamp con il tuo):

      request.time < timestamp("2019-12-31T12:00:00.000Z")
    2. Dopo aver inserito l'espressione, puoi scegliere facoltativamente di convalidare la sintassi CEL facendo clic su Esegui Linter sopra la casella di testo in alto a destra.

    3. Fai clic su Salva per applicare la condizione.

    4. Una volta chiuso il riquadro Modifica condizione, fai di nuovo clic su Salva nel riquadro Modifica autorizzazioni per aggiornare la policy di autorizzazione.

gcloud

I criteri di autorizzazione vengono impostati utilizzando il pattern di lettura, modifica e scrittura.

Esegui il comando gcloud projects get-iam-policy per ottenere il criterio di autorizzazione corrente per il progetto. Nell'esempio seguente, la versione JSON del criterio di autorizzazione viene scaricata in un percorso sul disco.

Comando:

gcloud projects get-iam-policy project-id --format json > file-path

Viene scaricato il formato JSON della policy di autorizzazione:

{
  "bindings": [
    {
      "members": [
        "user:my-user@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "group:my-group@example.com"
      ],
      "role": "roles/iam.securityReviewer"
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 1
}

Prendi nota dell'attuale version della policy di autorizzazione, ovvero 1. Per configurare la policy di autorizzazione con accesso scadenza, aggiungi la seguente espressione di condizione evidenziata (sostituendo il timestamp con il tuo). Gcloud CLI aggiorna automaticamente la versione:

{
  "bindings": [
    {
      "members": [
        "user:my-user@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "group:my-group@example.com"
      ],
      "role": "roles/iam.securityReviewer",
      "condition": {
          "title": "Expires_2019",
          "description": "Expires at noon on 2019-12-31",
          "expression":
            "request.time < timestamp('2019-12-31T12:00:00Z')"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

Successivamente, imposta la nuova policy di autorizzazione eseguendo il comando gcloud projects set-iam-policy:

gcloud projects set-iam-policy project-id file-path

Viene applicato il nuovo criterio di autorizzazione e l'associazione del ruolo di travis@example.com scadrà all'ora specificata.

REST

Utilizza il pattern lettura, modifica e scrittura per consentire l'accesso fino a un'ora specifica.

Innanzitutto, leggi le norme di autorizzazione per il progetto:

Il metodo projects.getIamPolicy dell'API Resource Manager recupera la policy di autorizzazione di un progetto.

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • PROJECT_ID: il tuo ID progetto Google Cloud . Gli ID progetto sono stringhe alfanumeriche, come my-project.
  • POLICY_VERSION: La versione della policy da restituire. Le richieste devono specificare la versione più recente delle norme, ovvero la versione 3. Per maggiori dettagli, vedi Specificare una versione delle norme quando si recuperano le norme.

Metodo HTTP e URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy

Corpo JSON della richiesta:

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:my-user@example.com"
      ]
    },
    {
      "role": "roles/iam.securityReviewer",
      "members": [
        "group:my-group@example.com"
      ]
    }
  ]
}

Prendi nota dell'attuale version della policy di autorizzazione, ovvero 1.

Poi, modifica il criterio di autorizzazione in modo che consenta l'accesso fino a un'ora specifica. Assicurati di modificare il campo version con il valore 3:

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:my-user@example.com"
      ]
    },
    {
      "role": "roles/iam.securityReviewer",
      "condition": {
        "title": "Expires_2019",
        "description": "Expires at noon on 2019-12-31",
        "expression": "request.time < timestamp('2019-12-31T12:00:00Z')"
      },
      "members": [
        "group:my-group@example.com"
      ]
    }
  ]
}

Infine, scrivi il criterio di autorizzazione aggiornato:

Il metodo projects.setIamPolicy dell'API Resource Manager imposta la policy di autorizzazione nella richiesta come nuova policy di autorizzazione del progetto.

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • PROJECT_ID: il tuo ID progetto Google Cloud . Gli ID progetto sono stringhe alfanumeriche, come my-project.

Metodo HTTP e URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy

Corpo JSON della richiesta:

{
  "policy": {
    "version": 3,
    "etag": "BwWKmjvelug=",
    "bindings": [
      {
        "role": "roles/owner",
        "members": [
          "user:my-user@example.com"
        ]
      },
      {
        "role": "roles/iam.securityReviewer",
        "members": [
          "group:my-group@example.com"
        ],
        "condition": {
          "title": "Expires_July_1_2020",
          "description": "Expires on July 1, 2020",
          "expression":
            "request.time < timestamp('2020-07-01T00:00:00.000Z')"
        }
      }
    ]
  }
}

Per inviare la richiesta, espandi una di queste opzioni:

La risposta contiene la policy di autorizzazione aggiornata.


Modificare un'associazione di ruoli condizionale esistente

Dopo aver creato un binding del ruolo condizionale, puoi modificare l'espressione della condizione in qualsiasi momento. Questa sezione mostra come aggiornare una condizione basata sul tempo in una policy di autorizzazione esistente utilizzando la consoleGoogle Cloud , Google Cloud CLI e l'API REST.

Per modificare un'associazione di ruolo condizionale in un criterio di autorizzazione esistente:

Console

  1. Nella console Google Cloud vai alla pagina IAM.

    Vai alla pagina IAM

  2. Nell'elenco delle entità, individua l'entità che ti interessa e fai clic sul pulsante .

  3. Nel riquadro Modifica autorizzazioni, individua il ruolo per cui vuoi configurare una condizione. Poi, nella sezione Condizione IAM (facoltativa), fai clic sul nome della condizione esistente per modificarla.

  4. Nel riquadro Modifica condizione, puoi mantenere o aggiornare il titolo e la descrizione esistenti per la condizione.

  5. Puoi modificare l'espressione della condizione esistente o aggiungerne una nuova utilizzando il generatore di condizioni o l'editor di condizioni. Il generatore di condizioni fornisce un'interfaccia interattiva per selezionare il tipo di condizione, l'operatore e altri dettagli applicabili dell'espressione. L'editor delle condizioni fornisce un'interfaccia basata su testo per inserire manualmente un'espressione utilizzando la sintassi CEL.

    Generatore di condizioni:

    1. Aggiungi una nuova espressione di condizione o modifica quella esistente.
    2. Fai clic su Salva per applicare la condizione.
    3. Una volta chiuso il riquadro Modifica condizione, fai di nuovo clic su Salva nel riquadro Modifica autorizzazioni per aggiornare la policy di autorizzazione.

    Editor condizioni:

    1. Fai clic sulla scheda Editor condizioni e aggiungi una nuova espressione di condizione o modifica quella esistente.
    2. Dopo aver inserito l'espressione, puoi scegliere facoltativamente di convalidare la sintassi CEL facendo clic su Esegui Linter sopra la casella di testo in alto a destra.
    3. Fai clic su Salva per applicare la condizione.
    4. Una volta chiuso il riquadro Modifica condizione, fai di nuovo clic su Salva nel riquadro Modifica autorizzazioni per aggiornare la policy di autorizzazione.

gcloud

I criteri di autorizzazione vengono impostati utilizzando il pattern di lettura, modifica e scrittura.

Esegui il comando gcloud projects get-iam-policy per ottenere il criterio di autorizzazione corrente per il progetto. Nell'esempio seguente, la versione JSON del criterio di autorizzazione viene scaricata in un percorso sul disco.

Comando:

gcloud projects get-iam-policy project-id --format json > file-path

Viene scaricato il formato JSON della policy di autorizzazione:

{
  "bindings": [
    {
      "members": [
        "user:my-user@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "group:my-group@example.com"
      ],
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_3_months",
        "description": "Expires in 3 months on 2019-10-12",
        "expression":
          "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

In questo esempio, aggiorneremo i valori title, description e del timestamp nell'espressione per modificare la durata della condizione di accesso pianificato. Aggiorna la seguente parte evidenziata della condizione (sostituendo i valori con i tuoi):

{
  "bindings": [
    {
      "members": [
        "user:my-user@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "group:my-group@example.com"
      ],
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_5_months",
        "description": "Expires in 5 months on 2020-01-12",
        "expression":
          "request.time > timestamp('2019-07-12T07:00:00.000Z') && request.time < timestamp('2020-01-12T07:00:00.000Z')"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

Successivamente, imposta la nuova policy di autorizzazione eseguendo il comando gcloud projects set-iam-policy.

gcloud projects set-iam-policy project-id file-path

Viene applicata la policy di autorizzazione aggiornata e l'associazione di ruolo di fatima@example.com scadrà al nuovo orario.

REST

Utilizza il pattern read-modify-write per modificare l'associazione di ruolo condizionale.

Innanzitutto, leggi le norme di autorizzazione per il progetto:

Il metodo projects.getIamPolicy dell'API Resource Manager recupera la policy di autorizzazione di un progetto.

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • PROJECT_ID: il tuo ID progetto Google Cloud . Gli ID progetto sono stringhe alfanumeriche, come my-project.

Metodo HTTP e URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy

Corpo JSON della richiesta:

{
  "options": {
    "requestedPolicyVersion": 3
  }
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:my-user@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_3_months",
        "description": "Expires in 3 months on 2019-10-12",
        "expression":
          "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")"
      },
      "members": [
        "group:my-group@example.com"
      ]
    }
  ]
}

Successivamente, modifica l'associazione di ruoli condizionale nella policy di autorizzazione. In questo esempio, aggiorneremo i valori del timestamp per modificare la durata della condizione di accesso pianificato. Aggiorna la seguente parte evidenziata dell'espressione della condizione (sostituendo il timestamp con il tuo):

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:my-user@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_5_months",
        "description": "Expires in 5 months on 2020-01-12",
        "expression":
          "request.time > timestamp('2019-07-12T07:00:00.000Z') && request.time < timestamp('2020-01-12T07:00:00.000Z')"
      },
      "members": [
        "group:my-group@example.com"
      ]
    }
  ]
}

Infine, scrivi il criterio di autorizzazione aggiornato:

Il metodo projects.setIamPolicy dell'API Resource Manager imposta la policy di autorizzazione nella richiesta come nuova policy di autorizzazione del progetto.

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • PROJECT_ID: il tuo ID progetto Google Cloud . Gli ID progetto sono stringhe alfanumeriche, come my-project.

Metodo HTTP e URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy

Corpo JSON della richiesta:

{
  "policy": {
    "etag": "BwWKmjvelug=",
    "version": 3,
    "bindings": [
      {
        "role": "roles/owner",
        "members": [
          "user:my-user@example.com"
        ]
      },
      {
        "role": "roles/bigquery.dataViewer",
        "condition": {
          "title": "Duration_5_months",
          "description": "Expires in 5 months on 2020-01-12",
          "expression":
            "request.time > timestamp('2019-07-12T07:00:00.000Z') && request.time < timestamp('2020-01-12T07:00:00.000Z')"
        },
        "members": [
          "group:my-group@example.com"
        ],
      }
    ]
  }
}

Per inviare la richiesta, espandi una di queste opzioni:

La risposta contiene la policy di autorizzazione aggiornata.


Rimuovere una condizione da un'associazione di ruolo

La rimozione di una condizione da un'associazione di ruolo non revoca il ruolo. Consente invece a tutte le entità in questa associazione di ruolo di utilizzare le autorizzazioni nel ruolo senza condizioni.

Questa sezione mostra come rimuovere una condizione basata sul tempo in una policy di autorizzazione utilizzando la consoleGoogle Cloud , Google Cloud CLI e l'API REST.

Per rimuovere una condizione da un'associazione di ruolo in una policy di autorizzazione:

Console

  1. Nella console Google Cloud vai alla pagina IAM.

    Vai alla pagina IAM

  2. Nell'elenco delle entità, individua l'entità che ti interessa e fai clic sul pulsante .

  3. Nel riquadro Modifica autorizzazioni, individua l'associazione di ruolo che ti interessa. Poi, in Condizione IAM (facoltativo), fai clic sul nome di una condizione esistente.

  4. Nel riquadro Modifica condizione, fai clic sul pulsante per rimuovere la condizione. Ti verrà chiesto di confermare l'eliminazione della condizione.

  5. Una volta chiuso il riquadro Modifica condizione, fai di nuovo clic su Salva nel riquadro Modifica autorizzazioni per aggiornare la policy di autorizzazione.

gcloud

I criteri di autorizzazione vengono impostati utilizzando il pattern di lettura, modifica e scrittura.

Esegui il comando gcloud projects get-iam-policy per ottenere il criterio di autorizzazione corrente per il progetto. Nell'esempio seguente, la versione JSON del criterio di autorizzazione viene scaricata in un percorso sul disco.

Comando:

gcloud projects get-iam-policy project-id --format json > file-path

Viene scaricato il formato JSON della policy di autorizzazione:

{
  "bindings": [
    {
      "members": [
        "user:my-user@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "group:my-group@example.com"
      ],
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_3_months",
        "description": "Expires in 3 months on 2019-10-12",
        "expression":
          "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

Per rimuovere l'associazione di ruolo condizionale dalla policy di autorizzazione, rimuovi il blocco condition come mostrato di seguito:

{
  "bindings": [
    {
      "members": [
        "user:my-user@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "group:my-group@example.com"
      ],
      "role": "roles/bigquery.dataViewer",
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

Tieni presente che version è ancora impostato su 3, nonostante il fatto che le associazioni di ruoli incondizionali richiedano solo un criterio di autorizzazione 1. Ti consigliamo di utilizzare sempre il numero di versione più alto quando imposti una policy di autorizzazione, sia per i binding dei ruoli condizionali sia per quelli incondizionali. Per saperne di più, consulta i requisiti di versione. gcloud CLI aggiorna automaticamente il numero di versione per il criterio di autorizzazione.

Successivamente, imposta la policy di autorizzazione aggiornata eseguendo il comando gcloud projects set-iam-policy:

gcloud projects set-iam-policy project-id file-path

Viene applicata la policy di autorizzazione aggiornata, che rimuove l'associazione di ruolo condizionale per fatima@example.com. L'associazione di ruolo non scadrà più.

REST

Utilizza il pattern read-modify-write per rimuovere l'associazione di ruolo condizionale.

Innanzitutto, leggi le norme di autorizzazione per il progetto:

Il metodo projects.getIamPolicy dell'API Resource Manager recupera la policy di autorizzazione di un progetto.

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • PROJECT_ID: il tuo ID progetto Google Cloud . Gli ID progetto sono stringhe alfanumeriche, come my-project.

Metodo HTTP e URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy

Corpo JSON della richiesta:

{
  "options": {
    "requestedPolicyVersion": 3
  }
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:my-user@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_3_months",
        "description": "Expires in 3 months on 2019-10-12",
        "expression":
          "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")"
      },
      "members": [
        "group:my-group@example.com"
      ]
    }
  ]
}

Poi, modifica la policy di autorizzazione rimuovendo l'associazione di ruolo condizionale:

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:my-user@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "members": [
        "group:my-group@example.com"
      ]
    }
  ]
}

Tieni presente che version è ancora impostato su 3, nonostante il fatto che le associazioni di ruoli incondizionali richiedano solo un criterio di autorizzazione 1. Ti consigliamo di utilizzare sempre il numero di versione più alto quando imposti una policy di autorizzazione, sia per i binding dei ruoli condizionali sia per quelli incondizionali. Per saperne di più, consulta i requisiti di versione.

Infine, scrivi il criterio di autorizzazione aggiornato:

Il metodo projects.setIamPolicy dell'API Resource Manager imposta la policy di autorizzazione nella richiesta come nuova policy di autorizzazione del progetto.

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • PROJECT_ID: il tuo ID progetto Google Cloud . Gli ID progetto sono stringhe alfanumeriche, come my-project.

Metodo HTTP e URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy

Corpo JSON della richiesta:

{
  "policy": {
    "etag": "BwWKmjvelug=",
    "version": 3,
    "bindings": [
      {
        "role": "roles/owner",
        "members": [
          "user:my-user@example.com"
        ]
      },
      {
        "role": "roles/bigquery.dataViewer",
        "members": [
          "group:my-group@example.com"
        ]
      }
    ]
  }
}

Per inviare la richiesta, espandi una di queste opzioni:

La risposta contiene la policy di autorizzazione aggiornata.


Passaggi successivi