Gestire l'accesso a progetti, cartelle e organizzazioni

Questa pagina descrive come concedere, modificare e revocare l'accesso a progetti, cartelle e organizzazioni. Per scoprire come gestire l'accesso ad altre risorse, consulta le seguenti guide:

In Identity and Access Management (IAM), l'accesso è concesso mediante i criteri di autorizzazione, noti anche come criteri IAM. Un criterio di autorizzazione è collegato a una risorsa Google Cloud. Ogni criterio di autorizzazione contiene una raccolta di associazioni di ruoli che associano una o più entità, come utenti o account di servizio, a un ruolo IAM. Queste associazioni di ruoli concedono i ruoli specificati alle entità, sia nella risorsa a cui è associato il criterio di autorizzazione sia su tutti i discendenti di quella risorsa. Per ulteriori informazioni sui criteri di autorizzazione, consulta Informazioni sui criteri di autorizzazione.

Puoi gestire l'accesso a progetti, cartelle e organizzazioni con la console Google Cloud, Google Cloud CLI, l'API REST o le librerie client di Resource Manager.

Prima di iniziare

  • Attiva Resource Manager API.

    Abilita l'API

  • Configurare l'autenticazione.

    Seleziona la scheda relativa a come prevedi di utilizzare gli esempi in questa pagina:

    Console

    Quando utilizzi la console Google Cloud per accedere ai servizi e alle API di Google Cloud, non devi configurare l'autenticazione.

    gcloud

    In questa pagina puoi utilizzare gli esempi di gcloud CLI da uno dei seguenti ambienti di sviluppo:

    • Cloud Shell: per utilizzare un terminale online con gcloud CLI già configurato, attiva Cloud Shell.

      In fondo a questa pagina viene avviata una sessione di Cloud Shell e viene visualizzato un prompt della riga di comando. L'inizializzazione della sessione può richiedere alcuni secondi.

    • shell locale: per utilizzare gcloud CLI in un ambiente di sviluppo locale, installa e initialize gcloud CLI.

    C#

    Per utilizzare gli esempi .NET in questa pagina da un ambiente di sviluppo locale, installa e inizializza gcloud CLI, quindi configura Credenziali predefinite dell'applicazione con le tue credenziali utente.

    1. Installa Google Cloud CLI.
    2. Per initialize gcloud CLI, esegui questo comando:

      gcloud init
    3. Crea credenziali di autenticazione locali per il tuo Account Google:

      gcloud auth application-default login

    Per saperne di più, consulta Configurare l'autenticazione per un ambiente di sviluppo locale nella documentazione sull'autenticazione di Google Cloud.

    Java

    Per utilizzare gli esempi Java in questa pagina da un ambiente di sviluppo locale, installa e inizializza gcloud CLI, quindi configura Credenziali predefinite dell'applicazione con le tue credenziali utente.

    1. Installa Google Cloud CLI.
    2. Per initialize gcloud CLI, esegui questo comando:

      gcloud init
    3. Crea credenziali di autenticazione locali per il tuo Account Google:

      gcloud auth application-default login

    Per saperne di più, consulta Configurare l'autenticazione per un ambiente di sviluppo locale nella documentazione sull'autenticazione di Google Cloud.

    Python

    Per utilizzare gli esempi Python in questa pagina da un ambiente di sviluppo locale, installa e inizializza gcloud CLI, quindi configura Credenziali predefinite dell'applicazione con le tue credenziali utente.

    1. Installa Google Cloud CLI.
    2. Per initialize gcloud CLI, esegui questo comando:

      gcloud init
    3. Crea credenziali di autenticazione locali per il tuo Account Google:

      gcloud auth application-default login

    Per saperne di più, consulta Configurare l'autenticazione per un ambiente di sviluppo locale nella documentazione sull'autenticazione di Google Cloud.

    REST

    Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, devi utilizzare le credenziali che fornisci a gcloud CLI.

      Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

      gcloud init

Ruoli obbligatori

Quando crei un progetto, una cartella o un'organizzazione, ti viene assegnato automaticamente un ruolo che ti consente di gestire l'accesso per quella risorsa. Per ulteriori informazioni, consulta le norme predefinite.

Se non hai creato il progetto, la cartella o l'organizzazione, assicurati di disporre dei ruoli necessari per gestire l'accesso a quella risorsa.

Per ottenere le autorizzazioni necessarie per gestire l'accesso a un progetto, una cartella o un'organizzazione, chiedi all'amministratore di concederti i seguenti ruoli IAM sulla risorsa per cui vuoi gestire l'accesso (progetto, cartella o organizzazione):

Questi ruoli predefiniti contengono le autorizzazioni necessarie per gestire l'accesso a un progetto, una cartella o un'organizzazione. Per visualizzare le autorizzazioni esatte necessarie, espandi la sezione Autorizzazioni richieste:

Autorizzazioni obbligatorie

Per gestire l'accesso a un progetto, una cartella o un'organizzazione sono necessarie le seguenti autorizzazioni:

  • Per gestire l'accesso ai progetti:
    • resourcemanager.projects.getIamPolicy
    • resourcemanager.projects.setIamPolicy
  • Per gestire l'accesso alle cartelle:
    • resourcemanager.folders.getIamPolicy
    • resourcemanager.folders.setIamPolicy
  • Per gestire l'accesso alle organizzazioni:
    • resourcemanager.organizations.getIamPolicy
    • resourcemanager.organizations.setIamPolicy

Potresti anche essere in grado di ottenere queste autorizzazioni con i ruoli personalizzati o altri ruoli predefiniti.

Visualizza accesso attuale

Puoi visualizzare chi ha accesso al progetto, alla cartella o all'organizzazione utilizzando la console Google Cloud, gcloud CLI, l'API REST o le librerie client di Resource Manager.

Console

  1. Nella console Google Cloud, vai alla pagina IAM.

    Vai a IAM

  2. Seleziona un progetto, una cartella o un'organizzazione.

    Nella console Google Cloud sono elencate tutte le entità a cui sono stati concessi i ruoli per il progetto, la cartella o l'organizzazione. Questo elenco include le entità che hanno ereditato i ruoli nella risorsa dalle risorse padre. Per maggiori informazioni sull'ereditarietà dei criteri, vedi Eredità dei criteri e gerarchia delle risorse.

  3. (Facoltativo) Per visualizzare le concessioni di ruoli per gli account di servizio gestiti da Google, seleziona la casella di controllo Includi concessioni di ruoli fornite da Google.

gcloud

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. Per vedere chi ha accesso al progetto, alla cartella o all'organizzazione, ottieni il criterio di autorizzazione per la risorsa. Per informazioni su come interpretare i criteri di autorizzazione, consulta Comprendere i criteri di autorizzazione.

    Per ottenere il criterio di autorizzazione per la risorsa, esegui il comando get-iam-policy per la risorsa:

    gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH

    Fornisci i seguenti valori:

    • RESOURCE_TYPE: il tipo di risorsa per cui vuoi visualizzare l'accesso. Utilizza uno di questi valori: projects, resource-manager folders o organizations.

    • RESOURCE_ID: l'ID del progetto, della cartella o dell'organizzazione di Google Cloud. Gli ID progetto sono alfanumerici, ad esempio my-project. Gli ID cartella e organizzazione sono numerici, ad esempio 123456789012.

    • FORMAT: il formato desiderato per il criterio. Usa json o yaml.

    • PATH: il percorso di un nuovo file di output per il criterio.

    Ad esempio, il comando seguente recupera il criterio per il progetto my-project e lo salva nella home directory in formato JSON:

    gcloud projects get-iam-policy my-project --format=json > ~/policy.json

C#

Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.

Per vedere chi ha accesso al progetto, alla cartella o all'organizzazione, ottieni il criterio di autorizzazione per la risorsa. Per informazioni su come interpretare i criteri di autorizzazione, consulta Comprendere i criteri di autorizzazione.

L'esempio seguente mostra come ottenere il criterio di autorizzazione per un progetto. Per scoprire come ottenere il criterio di autorizzazione per una cartella o un'organizzazione, consulta la documentazione relativa alla libreria client di Resource Manager per il tuo linguaggio di programmazione.


using Google.Apis.Auth.OAuth2;
using Google.Apis.CloudResourceManager.v1;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy GetPolicy(string projectId)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
        var service = new CloudResourceManagerService(
            new CloudResourceManagerService.Initializer
            {
                HttpClientInitializer = credential
            });

        var policy = service.Projects.GetIamPolicy(new GetIamPolicyRequest(),
            projectId).Execute();
        return policy;
    }
}

Java

Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.

Per vedere chi ha accesso al progetto, alla cartella o all'organizzazione, ottieni il criterio di autorizzazione per la risorsa. Per informazioni su come interpretare i criteri di autorizzazione, consulta Comprendere i criteri di autorizzazione.

L'esempio seguente mostra come ottenere il criterio di autorizzazione per un progetto. Per scoprire come ottenere il criterio di autorizzazione per una cartella o un'organizzazione, consulta la documentazione relativa alla libreria client di Resource Manager per il tuo linguaggio di programmazione.

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.cloudresourcemanager.v3.CloudResourceManager;
import com.google.api.services.cloudresourcemanager.v3.model.GetIamPolicyRequest;
import com.google.api.services.cloudresourcemanager.v3.model.Policy;
import com.google.api.services.iam.v1.IamScopes;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Collections;

public class GetPolicy {

  // Gets a project's policy.
  public static Policy getPolicy(String projectId) {
    // projectId = "my-project-id"

    Policy policy = null;

    CloudResourceManager service = null;
    try {
      service = createCloudResourceManagerService();
    } catch (IOException | GeneralSecurityException e) {
      System.out.println("Unable to initialize service: \n" + e.toString());
      return policy;
    }

    try {
      GetIamPolicyRequest request = new GetIamPolicyRequest();
      policy = service.projects().getIamPolicy(projectId, request).execute();
      System.out.println("Policy retrieved: " + policy.toString());
      return policy;
    } catch (IOException e) {
      System.out.println("Unable to get policy: \n" + e.toString());
      return policy;
    }
  }

  public static CloudResourceManager createCloudResourceManagerService()
      throws IOException, GeneralSecurityException {
    // Use the Application Default Credentials strategy for authentication. For more info, see:
    // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));

    CloudResourceManager service =
        new CloudResourceManager.Builder(
                GoogleNetHttpTransport.newTrustedTransport(),
                GsonFactory.getDefaultInstance(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.

Per vedere chi ha accesso al progetto, alla cartella o all'organizzazione, ottieni il criterio di autorizzazione per la risorsa. Per informazioni su come interpretare i criteri di autorizzazione, consulta Comprendere i criteri di autorizzazione.

L'esempio seguente mostra come ottenere il criterio di autorizzazione per un progetto. Per scoprire come ottenere il criterio di autorizzazione per una cartella o un'organizzazione, consulta la documentazione relativa alla libreria client di Resource Manager per il tuo linguaggio di programmazione.

def get_policy(project_id: str, version: int = 1) -> dict:
    """Gets IAM policy for a project."""

    credentials = service_account.Credentials.from_service_account_file(
        filename=os.environ["GOOGLE_APPLICATION_CREDENTIALS"],
        scopes=["https://www.googleapis.com/auth/cloud-platform"],
    )
    service = googleapiclient.discovery.build(
        "cloudresourcemanager", "v1", credentials=credentials
    )
    policy = (
        service.projects()
        .getIamPolicy(
            resource=project_id,
            body={"options": {"requestedPolicyVersion": version}},
        )
        .execute()
    )
    print(policy)
    return policy

REST

Per vedere chi ha accesso al progetto, alla cartella o all'organizzazione, ottieni il criterio di autorizzazione per la risorsa. Per informazioni su come interpretare i criteri di autorizzazione, consulta Comprendere i criteri di autorizzazione.

Il metodo getIamPolicy dell'API Resource Manager ottiene il criterio di autorizzazione di un progetto, di una cartella o di un'organizzazione.

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

  • API_VERSION: la versione dell'API da utilizzare. Per i progetti e le organizzazioni, utilizza v1. Per le cartelle, utilizza v2.
  • RESOURCE_TYPE: il tipo di risorsa di cui vuoi gestire il criterio. Utilizza il valore projects, folders o organizations.
  • RESOURCE_ID: l'ID progetto, organizzazione o cartella Google Cloud. Gli ID progetto sono stringhe alfanumeriche, come my-project. Gli ID cartella e organizzazione sono numerici, ad esempio 123456789012.
  • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione del criterio più recente, ovvero la versione 3. Per maggiori dettagli, consulta Specifica della versione di un criterio durante il recupero di un criterio.

Metodo HTTP e URL:

POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:getIamPolicy

Corpo JSON della richiesta:

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

Per inviare la richiesta, espandi una di queste opzioni:

La risposta contiene il criterio di autorizzazione della risorsa. Ad esempio:

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

Concedere o revocare un singolo ruolo

Puoi utilizzare la console Google Cloud e gcloud CLI per concedere o revocare rapidamente un singolo ruolo per una singola entità, senza modificare direttamente il criterio di autorizzazione della risorsa. I tipi comuni di entità includono Account Google, account di servizio, gruppi Google e domini. Per un elenco di tutti i tipi di entità, consulta Concetti relativi all'identità.

Se hai bisogno di aiuto per identificare il ruolo predefinito più appropriato, consulta Scegliere i ruoli predefiniti.

Concedi un singolo ruolo

Per concedere un singolo ruolo a un'entità:

Console

  1. Nella console Google Cloud, vai alla pagina IAM.

    Vai a IAM

  2. Seleziona un progetto, una cartella o un'organizzazione.

  3. Seleziona un'entità a cui concedere un ruolo:

    • Per concedere un ruolo a un'entità che ha già altri ruoli nella risorsa, trova una riga contenente l'entità, fai clic su Modifica entità in quella riga e poi su Aggiungi un altro ruolo.

      Per concedere un ruolo a un account di servizio gestito da Google, seleziona la casella di controllo Includi concessioni di ruoli fornite da Google per visualizzare il relativo indirizzo email.

    • Per concedere un ruolo a un'entità che non ha ruoli esistenti nella risorsa, fai clic su Concedi accesso, quindi inserisci l'indirizzo email o un altro identificatore dell'entità.

  4. Seleziona un ruolo da concedere dall'elenco a discesa. Per le best practice di sicurezza, scegli un ruolo che includa solo le autorizzazioni necessarie all'entità.

  5. (Facoltativo) Aggiungi una condizione al ruolo.

  6. Fai clic su Salva. All'entità viene concesso il ruolo nella risorsa.

Per concedere un ruolo a un'entità per più progetti, cartelle o organizzazioni:

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Seleziona tutte le risorse per le quali vuoi concedere le autorizzazioni.

  3. Se il riquadro delle informazioni non è visibile, fai clic su Mostra riquadro informazioni. Quindi, fai clic su Autorizzazioni.

  4. Seleziona un'entità a cui concedere un ruolo:

    • Per concedere un ruolo a un'entità che ha già altri ruoli, trova una riga contenente l'entità, fai clic su Modifica entità in quella riga e poi su Aggiungi un altro ruolo.

    • Per concedere un ruolo a un'entità che non dispone già di altri ruoli, fai clic su Aggiungi entità, quindi inserisci l'indirizzo email o un altro identificatore dell'entità.

  5. Seleziona un ruolo da concedere dall'elenco a discesa.

  6. (Facoltativo) Aggiungi una condizione al ruolo.

  7. Fai clic su Salva. All'entità viene concesso il ruolo selezionato per ciascuna delle risorse selezionate.

gcloud

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. Il comando add-iam-policy-binding consente di concedere rapidamente un ruolo a un'entità.

    Prima di utilizzare uno qualsiasi dei dati di comando riportati di seguito, effettua le seguenti sostituzioni:

    • RESOURCE_TYPE: il tipo di risorsa per cui vuoi gestire l'accesso. Utilizza projects, resource-manager folders o organizations.

    • RESOURCE_ID: l'ID del progetto, della cartella o dell'organizzazione di Google Cloud. Gli ID progetto sono alfanumerici, ad esempio my-project. Gli ID cartella e organizzazione sono numerici, ad esempio 123456789012.

    • PRINCIPAL: un identificatore dell'entità o del membro, che in genere ha il seguente formato: PRINCIPAL_TYPE:ID. Ad esempio, user:my-user@example.com. Per un elenco completo dei valori che PRINCIPAL può avere, consulta il riferimento sull'associazione dei criteri.

      Per il tipo di entità user, il nome di dominio nell'identificatore deve essere un dominio Google Workspace o un dominio Cloud Identity. Per informazioni su come configurare un dominio Cloud Identity, consulta la panoramica di Cloud Identity.

    • ROLE_NAME: il nome del ruolo che vuoi revocare. Utilizza uno dei seguenti formati:

      • Ruoli predefiniti: roles/SERVICE.IDENTIFIER
      • Ruoli personalizzati a livello di progetto: projects/PROJECT_ID/roles/IDENTIFIER
      • Ruoli personalizzati a livello di organizzazione: organizations/ORG_ID/roles/IDENTIFIER

      Per un elenco dei ruoli predefiniti, consulta Informazioni sui ruoli.

    • CONDITION: la condizione da aggiungere all'associazione dei ruoli. Se non vuoi aggiungere una condizione, utilizza il valore None. Per maggiori informazioni sulle condizioni, consulta la relativa panoramica.

    Esegui questo comando:

    Linux, macOS o Cloud Shell

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \
        --member=PRINCIPAL --role=ROLE_NAME \
        --condition=CONDITION
    

    Windows (PowerShell)

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID `
        --member=PRINCIPAL --role=ROLE_NAME `
        --condition=CONDITION
    

    Windows (cmd.exe)

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID ^
        --member=PRINCIPAL --role=ROLE_NAME ^
        --condition=CONDITION
    

    La risposta contiene il criterio IAM aggiornato.

Revocare un singolo ruolo

Per revocare un singolo ruolo da un'entità:

Console

  1. Nella console Google Cloud, vai alla pagina IAM.

    Vai a IAM

  2. Seleziona un progetto, una cartella o un'organizzazione.

  3. Trova la riga contenente l'entità di cui vuoi revocare l'accesso. Fai clic su Modifica entità nella riga corrispondente.

  4. Fai clic sul pulsante Elimina per il ruolo che vuoi revocare, quindi fai clic su Salva.

gcloud

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. Per revocare rapidamente un ruolo a un utente, esegui il comando remove-iam-policy-binding:

    gcloud RESOURCE_TYPE remove-iam-policy-binding RESOURCE_ID \
        --member=PRINCIPAL --role=ROLE_NAME

    Fornisci i seguenti valori:

    • RESOURCE_TYPE: il tipo di risorsa per cui vuoi gestire l'accesso. Utilizza projects, resource-manager folders o organizations.

    • RESOURCE_ID: l'ID del progetto, della cartella o dell'organizzazione di Google Cloud. Gli ID progetto sono alfanumerici, ad esempio my-project. Gli ID cartella e organizzazione sono numerici, ad esempio 123456789012.

    • PRINCIPAL: un identificatore dell'entità o del membro, che in genere ha il seguente formato: PRINCIPAL_TYPE:ID. Ad esempio, user:my-user@example.com. Per un elenco completo dei valori che PRINCIPAL può avere, consulta il riferimento sull'associazione dei criteri.

      Per il tipo di entità user, il nome di dominio nell'identificatore deve essere un dominio Google Workspace o un dominio Cloud Identity. Per informazioni su come configurare un dominio Cloud Identity, consulta la panoramica di Cloud Identity.

    • ROLE_NAME: il nome del ruolo che vuoi revocare. Utilizza uno dei seguenti formati:

      • Ruoli predefiniti: roles/SERVICE.IDENTIFIER
      • Ruoli personalizzati a livello di progetto: projects/PROJECT_ID/roles/IDENTIFIER
      • Ruoli personalizzati a livello di organizzazione: organizations/ORG_ID/roles/IDENTIFIER

      Per un elenco dei ruoli predefiniti, consulta Informazioni sui ruoli.

    Ad esempio, per revocare il ruolo Autore progetto all'utente my-user@example.com per il progetto my-project:

    gcloud projects remove-iam-policy-binding my-project \
        --member=user:my-user@example.com --role=roles/resourcemanager.projectCreator

Per assicurarti di non revocare i ruoli necessari, puoi abilitare i suggerimenti per i rischi di cambiamento. I suggerimenti di modifica sui rischi generano avvisi quando tenti di revocare i ruoli a livello di progetto che Google Cloud ha identificato come importanti.

Concedere o revocare più ruoli utilizzando la console Google Cloud

Puoi utilizzare la console Google Cloud per concedere e revocare più ruoli per una singola entità:

  1. Nella console Google Cloud, vai alla pagina IAM.

    Vai a IAM

  2. Seleziona un progetto, una cartella o un'organizzazione.

  3. Seleziona l'entità di cui vuoi modificare i ruoli:

    • Per modificare i ruoli di un'entità che ha già ruoli nella risorsa, trova una riga contenente l'entità, fai clic su Modifica entità in quella riga e poi su Aggiungi un altro ruolo.

      Per modificare i ruoli per un account di servizio gestito da Google, seleziona la casella di controllo Includi concessioni di ruoli fornite da Google per visualizzare il relativo indirizzo email.

    • Per concedere i ruoli a un'entità che non ha ruoli nella risorsa, fai clic su Concedi accesso, quindi inserisci l'indirizzo email o un altro identificatore dell'entità.

  4. Modifica i ruoli dell'entità:

    • Per concedere un ruolo a un'entità che non dispone di ruoli esistenti nella risorsa, fai clic su Seleziona un ruolo, quindi seleziona un ruolo da concedere dall'elenco a discesa.
    • Per concedere un ruolo aggiuntivo all'entità, fai clic su Aggiungi un altro ruolo e seleziona un ruolo da concedere dall'elenco a discesa.
    • Per sostituire uno dei ruoli dell'entità con un ruolo diverso, fai clic sul ruolo esistente, poi scegli un altro ruolo da concedere dall'elenco a discesa.
    • Per revocare uno dei ruoli dell'entità, fai clic sul pulsante Elimina per ogni ruolo che vuoi revocare.

    Puoi anche aggiungere una condizione a un ruolo, modificare la condizione di un ruolo o rimuovere la condizione di un ruolo.

  5. Fai clic su Salva.

Concedi o revoca più ruoli in modo programmatico

Per apportare modifiche all'accesso su larga scala che prevedono la concessione e la revoca di più ruoli per più entità, utilizza il pattern read-modify-write per aggiornare il criterio di autorizzazione della risorsa:

  1. Per leggere l'attuale criterio di autorizzazione, chiama getIamPolicy().
  2. Modifica il criterio di autorizzazione utilizzando un editor di testo o in modo programmatico per aggiungere o rimuovere entità o associazioni di ruoli.
  3. Scrivi il criterio di autorizzazione aggiornato chiamando setIamPolicy().

Puoi utilizzare gcloud CLI, l'API REST o le librerie client di Resource Manager per aggiornare il criterio di autorizzazione.

Recupera il criterio di autorizzazione attuale

gcloud

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. Per ottenere il criterio di autorizzazione per la risorsa, esegui il comando get-iam-policy per la risorsa:

    gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH

    Fornisci i seguenti valori:

    • RESOURCE_TYPE: il tipo di risorsa per cui vuoi ottenere il criterio di autorizzazione. Utilizza uno dei seguenti valori: projects, resource-manager folders o organizations.

    • RESOURCE_ID: l'ID del progetto, della cartella o dell'organizzazione di Google Cloud. Gli ID progetto sono alfanumerici, ad esempio my-project. Gli ID cartella e organizzazione sono numerici, ad esempio 123456789012.

    • FORMAT: il formato desiderato per il criterio di autorizzazione. Usa json o yaml.

    • PATH: il percorso di un nuovo file di output per il criterio di autorizzazione.

    Ad esempio, il comando seguente recupera il criterio di autorizzazione per il progetto my-project e lo salva nella home directory in formato JSON:

    gcloud projects get-iam-policy my-project --format json > ~/policy.json

C#

Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.

L'esempio seguente mostra come ottenere il criterio di autorizzazione per un progetto. Per scoprire come ottenere il criterio di autorizzazione di una cartella o un'organizzazione, consulta la documentazione relativa alla libreria client di Resource Manager per il tuo linguaggio di programmazione.


using Google.Apis.Auth.OAuth2;
using Google.Apis.CloudResourceManager.v1;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy GetPolicy(string projectId)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
        var service = new CloudResourceManagerService(
            new CloudResourceManagerService.Initializer
            {
                HttpClientInitializer = credential
            });

        var policy = service.Projects.GetIamPolicy(new GetIamPolicyRequest(),
            projectId).Execute();
        return policy;
    }
}

Java

Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.

L'esempio seguente mostra come ottenere il criterio di autorizzazione per un progetto. Per scoprire come ottenere il criterio di autorizzazione di una cartella o un'organizzazione, consulta la documentazione relativa alla libreria client di Resource Manager per il tuo linguaggio di programmazione.

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.cloudresourcemanager.v3.CloudResourceManager;
import com.google.api.services.cloudresourcemanager.v3.model.GetIamPolicyRequest;
import com.google.api.services.cloudresourcemanager.v3.model.Policy;
import com.google.api.services.iam.v1.IamScopes;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Collections;

public class GetPolicy {

  // Gets a project's policy.
  public static Policy getPolicy(String projectId) {
    // projectId = "my-project-id"

    Policy policy = null;

    CloudResourceManager service = null;
    try {
      service = createCloudResourceManagerService();
    } catch (IOException | GeneralSecurityException e) {
      System.out.println("Unable to initialize service: \n" + e.toString());
      return policy;
    }

    try {
      GetIamPolicyRequest request = new GetIamPolicyRequest();
      policy = service.projects().getIamPolicy(projectId, request).execute();
      System.out.println("Policy retrieved: " + policy.toString());
      return policy;
    } catch (IOException e) {
      System.out.println("Unable to get policy: \n" + e.toString());
      return policy;
    }
  }

  public static CloudResourceManager createCloudResourceManagerService()
      throws IOException, GeneralSecurityException {
    // Use the Application Default Credentials strategy for authentication. For more info, see:
    // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));

    CloudResourceManager service =
        new CloudResourceManager.Builder(
                GoogleNetHttpTransport.newTrustedTransport(),
                GsonFactory.getDefaultInstance(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.

L'esempio seguente mostra come ottenere il criterio di autorizzazione per un progetto. Per scoprire come ottenere il criterio di autorizzazione di una cartella o un'organizzazione, consulta la documentazione relativa alla libreria client di Resource Manager per il tuo linguaggio di programmazione.

def get_policy(project_id: str, version: int = 1) -> dict:
    """Gets IAM policy for a project."""

    credentials = service_account.Credentials.from_service_account_file(
        filename=os.environ["GOOGLE_APPLICATION_CREDENTIALS"],
        scopes=["https://www.googleapis.com/auth/cloud-platform"],
    )
    service = googleapiclient.discovery.build(
        "cloudresourcemanager", "v1", credentials=credentials
    )
    policy = (
        service.projects()
        .getIamPolicy(
            resource=project_id,
            body={"options": {"requestedPolicyVersion": version}},
        )
        .execute()
    )
    print(policy)
    return policy

REST

Il metodo getIamPolicy dell'API Resource Manager ottiene il criterio di autorizzazione di un progetto, di una cartella o di un'organizzazione.

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

  • API_VERSION: la versione dell'API da utilizzare. Per i progetti e le organizzazioni, utilizza v1. Per le cartelle, utilizza v2.
  • RESOURCE_TYPE: il tipo di risorsa di cui vuoi gestire il criterio. Utilizza il valore projects, folders o organizations.
  • RESOURCE_ID: l'ID progetto, organizzazione o cartella Google Cloud. Gli ID progetto sono stringhe alfanumeriche, come my-project. Gli ID cartella e organizzazione sono numerici, ad esempio 123456789012.
  • POLICY_VERSION: la versione del criterio da restituire. Le richieste devono specificare la versione del criterio più recente, ovvero la versione 3. Per maggiori dettagli, consulta Specifica della versione di un criterio durante il recupero di un criterio.

Metodo HTTP e URL:

POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:getIamPolicy

Corpo JSON della richiesta:

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

Per inviare la richiesta, espandi una di queste opzioni:

La risposta contiene il criterio di autorizzazione della risorsa. Ad esempio:

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

Salva la risposta in un file del tipo appropriato (json o yaml).

Modifica il criterio di autorizzazione

Modifica la copia locale del criterio di autorizzazione della risorsa in modo programmatico o utilizzando un editor di testo in modo che rifletta i ruoli che vuoi concedere o revocare.

Per assicurarti di non sovrascrivere altre modifiche, non modificare o rimuovere il campo etag del criterio di autorizzazione. Il campo etag identifica lo stato attuale del criterio di autorizzazione. Quando imposti il criterio di autorizzazione aggiornato, IAM confronta il valore etag nella richiesta con il valore etag esistente e scrive il criterio di autorizzazione solo se i valori corrispondono.

Per modificare i ruoli concessi da un criterio di autorizzazione, devi modificare le associazioni di ruoli nel criterio di autorizzazione. Le associazioni di ruoli hanno il seguente formato:

{
  "role": "ROLE_NAME",
  "members": [
    "PRINCIPAL_1",
    "PRINCIPAL_2",
    ...
    "PRINCIPAL_N"
  ],
  "conditions:" {
    CONDITIONS
  }
}

I segnaposto hanno i seguenti valori:

  • ROLE_NAME: il nome del ruolo che vuoi concedere. Utilizza uno dei seguenti formati:

    • Ruoli predefiniti: roles/SERVICE.IDENTIFIER
    • Ruoli personalizzati a livello di progetto: projects/PROJECT_ID/roles/IDENTIFIER
    • Ruoli personalizzati a livello di organizzazione: organizations/ORG_ID/roles/IDENTIFIER

    Per un elenco dei ruoli predefiniti, consulta Informazioni sui ruoli.

  • PRINCIPAL_1, PRINCIPAL_2, ...PRINCIPAL_N: identificatori delle entità a cui vuoi concedere il ruolo.

    Gli identificatori principali di solito hanno il seguente formato: PRINCIPAL-TYPE:ID. Ad esempio, user:my-user@example.com. Per un elenco completo dei valori che PRINCIPAL può avere, consulta il riferimento sull'associazione dei criteri.

    Per il tipo di entità user, il nome di dominio nell'identificatore deve essere un dominio Google Workspace o un dominio Cloud Identity. Per informazioni su come configurare un dominio Cloud Identity, consulta la panoramica di Cloud Identity.

  • CONDITIONS: facoltativo. Qualsiasi conditions che specifichi quando verrà concesso l'accesso.

Concedi un ruolo

Per concedere i ruoli alle entità, modifica le associazioni di ruoli nel criterio di autorizzazione. Per sapere quali ruoli puoi concedere, consulta Informazioni sui ruoli o visualizza i ruoli assegnabili per la risorsa. Se hai bisogno di aiuto per identificare i ruoli predefiniti più appropriati, consulta Scegliere i ruoli predefiniti.

Facoltativamente, puoi utilizzare le conditions per concedere i ruoli solo quando sono soddisfatti determinati requisiti.

Per concedere un ruolo già incluso nel criterio di autorizzazione, aggiungi l'entità a un'associazione di ruoli esistente:

gcloud

Modifica il criterio di autorizzazione restituito aggiungendo l'entità a un'associazione di ruoli esistente. Tieni presente che questa modifica avrà effetto solo dopo aver impostato il criterio di autorizzazione aggiornato.

Ad esempio, immagina che il criterio di autorizzazione contenga la seguente associazione di ruoli, che concede il ruolo Revisore della sicurezza (roles/iam.securityReviewer) a kai@example.com:

{
  "role": "roles/iam.securityReviewer",
  "members": [
    "user:kai@example.com"
  ]
}

Per concedere lo stesso ruolo a raha@example.com, aggiungi raha@example.com all'associazione di ruoli esistente:

{
  "role": "roles/iam.securityReviewer",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

C#

Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.


using System.Linq;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy AddMember(Policy policy, string role, string member)
    {
        var binding = policy.Bindings.First(x => x.Role == role);
        binding.Members.Add(member);
        return policy;
    }
}

Go

Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.

import (
	"fmt"
	"io"

	"google.golang.org/api/iam/v1"
)

// addMember adds a member to a role binding.
func addMember(w io.Writer, policy *iam.Policy, role, member string) {
	for _, binding := range policy.Bindings {
		if binding.Role != role {
			continue
		}
		for _, m := range binding.Members {
			if m != member {
				continue
			}
			fmt.Fprintf(w, "Role %q found. Member already exists.\n", role)
			return
		}
		binding.Members = append(binding.Members, member)
		fmt.Fprintf(w, "Role %q found. Member added.\n", role)
		return
	}
	fmt.Fprintf(w, "Role %q not found. Member not added.\n", role)
}

Java

Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.

import com.google.api.services.cloudresourcemanager.v3.model.Binding;
import com.google.api.services.cloudresourcemanager.v3.model.Policy;
import java.util.List;

public class AddMember {

  // Adds a member to a preexisting role.
  public static void addMember(Policy policy) {
    // policy = service.Projects.GetIAmPolicy(new GetIamPolicyRequest(), your-project-id).Execute();

    String role = "roles/existing-role";
    String member = "user:member-to-add@example.com";

    List<Binding> bindings = policy.getBindings();

    for (Binding b : bindings) {
      if (b.getRole().equals(role)) {
        b.getMembers().add(member);
        System.out.println("Member " + member + " added to role " + role);
        return;
      }
    }

    System.out.println("Role not found in policy; member not added");
  }
}

Python

Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.

def modify_policy_add_member(policy: dict, role: str, member: str) -> dict:
    """Adds a new member to a role binding."""

    binding = next(b for b in policy["bindings"] if b["role"] == role)
    binding["members"].append(member)
    print(binding)
    return policy

REST

Modifica il criterio di autorizzazione restituito aggiungendo l'entità a un'associazione di ruoli esistente. Tieni presente che questa modifica avrà effetto solo dopo aver impostato il criterio di autorizzazione aggiornato.

Ad esempio, immagina che il criterio di autorizzazione contenga la seguente associazione di ruoli, che concede il ruolo Revisore della sicurezza (roles/iam.securityReviewer) a kai@example.com:

{
  "role": "roles/iam.securityReviewer",
  "members": [
    "user:kai@example.com"
  ]
}

Per concedere lo stesso ruolo a raha@example.com, aggiungi raha@example.com all'associazione di ruoli esistente:

{
  "role": "roles/iam.securityReviewer",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

Per concedere un ruolo non ancora incluso nel criterio di autorizzazione, aggiungi una nuova associazione di ruoli:

gcloud

Modifica il criterio di autorizzazione aggiungendo una nuova associazione di ruolo che conceda il ruolo all'entità. Questa modifica avrà effetto solo dopo aver impostato il criterio di autorizzazione aggiornato.

Ad esempio, per concedere il ruolo Amministratore Compute Storage (roles/compute.storageAdmin) a raha@example.com, aggiungi la seguente associazione del ruolo all'array bindings per il criterio di autorizzazione:

{
  "role": "roles/compute.storageAdmin",
  "members": [
    "user:raha@example.com"
  ]
}

C#

Per scoprire come installare e utilizzare la libreria client per IAM, vedi librerie client IAM. Per maggiori informazioni, consulta la documentazione di riferimento dell'API IAM C#.

Per eseguire l'autenticazione in IAM, configura Credenziali predefinite dell'applicazione. Per saperne di più, consulta Prima di iniziare.

Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.


using System.Collections.Generic;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy AddBinding(Policy policy, string role, string member)
    {
        var binding = new Binding
        {
            Role = role,
            Members = new List<string> { member }
        };
        policy.Bindings.Add(binding);
        return policy;
    }
}

Java

Per scoprire come installare e utilizzare la libreria client per IAM, vedi librerie client IAM. Per maggiori informazioni, consulta la documentazione di riferimento dell'API IAM Java.

Per eseguire l'autenticazione in IAM, configura Credenziali predefinite dell'applicazione. Per saperne di più, consulta Prima di iniziare.

Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.

import com.google.api.services.cloudresourcemanager.v3.model.Binding;
import com.google.api.services.cloudresourcemanager.v3.model.Policy;
import java.util.ArrayList;
import java.util.List;

public class AddBinding {

  // Adds a member to a role with no previous members.
  public static void addBinding(Policy policy) {
    // policy = service.Projects.GetIAmPolicy(new GetIamPolicyRequest(), your-project-id).Execute();

    String role = "roles/role-to-add";
    List<String> members = new ArrayList<>();
    members.add("user:member-to-add@example.com");

    Binding binding = new Binding();
    binding.setRole(role);
    binding.setMembers(members);

    policy.getBindings().add(binding);
    System.out.println("Added binding: " + binding.toString());
  }
}

Python

Per scoprire come installare e utilizzare la libreria client per IAM, vedi librerie client IAM. Per maggiori informazioni, consulta la documentazione di riferimento dell'API IAM Python.

Per eseguire l'autenticazione in IAM, configura Credenziali predefinite dell'applicazione. Per saperne di più, consulta Prima di iniziare.

Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.

def modify_policy_add_role(policy: dict, role: str, member: str) -> dict:
    """Adds a new role binding to a policy."""

    binding = {"role": role, "members": [member]}
    policy["bindings"].append(binding)
    print(policy)
    return policy

REST

Modifica il criterio di autorizzazione aggiungendo una nuova associazione di ruolo che conceda il ruolo all'entità. Questa modifica avrà effetto solo dopo aver impostato il criterio di autorizzazione aggiornato.

Ad esempio, per concedere il ruolo Amministratore Compute Storage (roles/compute.storageAdmin) a raha@example.com, aggiungi la seguente associazione del ruolo all'array bindings per il criterio di autorizzazione:

{
  "role": "roles/compute.storageAdmin",
  "members": [
    "user:raha@example.com"
  ]
}

Puoi concedere solo i ruoli relativi ai servizi API attivati. Se un servizio, come Compute Engine, non è attivo, non puoi concedere ruoli esclusivamente relativi a Compute Engine. Per maggiori informazioni, consulta Abilitare e disabilitare le API.

Esistono alcuni vincoli univoci quando si assegnano autorizzazioni sui progetti, soprattutto quando si assegna il ruolo Proprietario (roles/owner). Per ulteriori informazioni, consulta la projects.setIamPolicy()documentazione di riferimento.

Revocare un ruolo

Per revocare un ruolo, rimuovi l'entità dall'associazione del ruolo. Se non ci sono altre entità nell'associazione del ruolo, rimuovi l'intera associazione del ruolo.

gcloud

Revoca un ruolo modificando il criterio di autorizzazione JSON o YAML restituito dal comando get-iam-policy. Questa modifica avrà effetto solo dopo aver impostato il criterio di autorizzazione aggiornato.

Per revocare un ruolo da un'entità, elimina le entità o le associazioni desiderate dall'array bindings per il criterio di autorizzazione.

C#

Per scoprire come installare e utilizzare la libreria client per IAM, vedi librerie client IAM. Per maggiori informazioni, consulta la documentazione di riferimento dell'API IAM C#.

Per eseguire l'autenticazione in IAM, configura Credenziali predefinite dell'applicazione. Per saperne di più, consulta Prima di iniziare.

Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.


using System.Linq;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy RemoveMember(Policy policy, string role, string member)
    {
        try
        {
            var binding = policy.Bindings.First(x => x.Role == role);
            if (binding.Members.Count != 0 && binding.Members.Contains(member))
            {
                binding.Members.Remove(member);
            }
            if (binding.Members.Count == 0)
            {
                policy.Bindings.Remove(binding);
            }
            return policy;
        }
        catch (System.InvalidOperationException e)
        {
            System.Diagnostics.Debug.WriteLine("Role does not exist in policy: \n" + e.ToString());
            return policy;
        }
    }
}

Go

Per scoprire come installare e utilizzare la libreria client per IAM, vedi librerie client IAM. Per maggiori informazioni, consulta la documentazione di riferimento dell'API IAM Go.

Per eseguire l'autenticazione in IAM, configura Credenziali predefinite dell'applicazione. Per saperne di più, consulta Prima di iniziare.

Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.

import (
	"fmt"
	"io"

	"google.golang.org/api/iam/v1"
)

// removeMember removes a member from a role binding.
func removeMember(w io.Writer, policy *iam.Policy, role, member string) {
	bindings := policy.Bindings
	bindingIndex, memberIndex := -1, -1
	for bIdx := range bindings {
		if bindings[bIdx].Role != role {
			continue
		}
		bindingIndex = bIdx
		for mIdx := range bindings[bindingIndex].Members {
			if bindings[bindingIndex].Members[mIdx] != member {
				continue
			}
			memberIndex = mIdx
			break
		}
	}
	if bindingIndex == -1 {
		fmt.Fprintf(w, "Role %q not found. Member not removed.\n", role)
		return
	}
	if memberIndex == -1 {
		fmt.Fprintf(w, "Role %q found. Member not found.\n", role)
		return
	}

	members := removeIdx(bindings[bindingIndex].Members, memberIndex)
	bindings[bindingIndex].Members = members
	if len(members) == 0 {
		bindings = removeIdx(bindings, bindingIndex)
		policy.Bindings = bindings
	}
	fmt.Fprintf(w, "Role %q found. Member removed.\n", role)
}

// removeIdx removes arr[idx] from arr.
func removeIdx[T any](arr []T, idx int) []T {
	return append(arr[:idx], arr[idx+1:]...)
}

Java

Per scoprire come installare e utilizzare la libreria client per IAM, vedi librerie client IAM. Per maggiori informazioni, consulta la documentazione di riferimento dell'API IAM Java.

Per eseguire l'autenticazione in IAM, configura Credenziali predefinite dell'applicazione. Per saperne di più, consulta Prima di iniziare.

Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.

import com.google.api.services.cloudresourcemanager.v3.model.Binding;
import com.google.api.services.cloudresourcemanager.v3.model.Policy;
import java.util.List;

public class RemoveMember {

  // Removes member from a role; removes binding if binding contains 0 members.
  public static void removeMember(Policy policy) {
    // policy = service.Projects.GetIAmPolicy(new GetIamPolicyRequest(), your-project-id).Execute();

    String role = "roles/existing-role";
    String member = "user:member-to-remove@example.com";

    List<Binding> bindings = policy.getBindings();
    Binding binding = null;
    for (Binding b : bindings) {
      if (b.getRole().equals(role)) {
        binding = b;
      }
    }
    if (binding != null && binding.getMembers().contains(member)) {
      binding.getMembers().remove(member);
      System.out.println("Member " + member + " removed from " + role);
      if (binding.getMembers().isEmpty()) {
        policy.getBindings().remove(binding);
      }
      return;
    }

    System.out.println("Role not found in policy; member not removed");
    return;
  }
}

Python

Per scoprire come installare e utilizzare la libreria client per IAM, vedi librerie client IAM. Per maggiori informazioni, consulta la documentazione di riferimento dell'API IAM Python.

Per eseguire l'autenticazione in IAM, configura Credenziali predefinite dell'applicazione. Per saperne di più, consulta Prima di iniziare.

Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.

def modify_policy_remove_member(policy: dict, role: str, member: str) -> dict:
    """Removes a  member from a role binding."""
    binding = next(b for b in policy["bindings"] if b["role"] == role)
    if "members" in binding and member in binding["members"]:
        binding["members"].remove(member)
    print(binding)
    return policy

REST

Revoca un ruolo modificando il criterio di autorizzazione JSON o YAML restituito dal comando get-iam-policy. Questa modifica avrà effetto solo dopo aver impostato il criterio di autorizzazione aggiornato.

Per revocare un ruolo da un'entità, elimina le entità o le associazioni desiderate dall'array bindings per il criterio di autorizzazione.

Imposta il criterio di autorizzazione

Dopo aver modificato il criterio di autorizzazione per concedere e revocare i ruoli desiderati, chiama setIamPolicy() per apportare gli aggiornamenti.

gcloud

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. Per impostare il criterio di autorizzazione per la risorsa, esegui il comando set-iam-policy per la risorsa:

    gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

    Fornisci i seguenti valori:

    • RESOURCE_TYPE: il tipo di risorsa per cui vuoi impostare il criterio di autorizzazione. Utilizza uno dei seguenti valori: projects, resource-manager folders o organizations.

    • RESOURCE_ID: l'ID del progetto, della cartella o dell'organizzazione di Google Cloud. Gli ID progetto sono alfanumerici, ad esempio my-project. Gli ID cartella e organizzazione sono numerici, ad esempio 123456789012.

    • PATH: il percorso di un file contenente il nuovo criterio di autorizzazione.

    La risposta contiene il criterio di autorizzazione aggiornato.

    Ad esempio, il comando seguente imposta il criterio di autorizzazione archiviato in policy.json come criterio di autorizzazione per il progetto my-project:

    gcloud projects set-iam-policy my-project ~/policy.json

C#


using Google.Apis.Auth.OAuth2;
using Google.Apis.CloudResourceManager.v1;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy SetPolicy(string projectId, Policy policy)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
        var service = new CloudResourceManagerService(
            new CloudResourceManagerService.Initializer
            {
                HttpClientInitializer = credential
            });

        return service.Projects.SetIamPolicy(new SetIamPolicyRequest
        {
            Policy = policy
        }, projectId).Execute();
    }
}

Java

Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.

L'esempio seguente mostra come impostare il criterio di autorizzazione per un progetto. Per scoprire come impostare il criterio di autorizzazione di una cartella o un'organizzazione, consulta la documentazione relativa alla libreria client di Resource Manager per il tuo linguaggio di programmazione.

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.cloudresourcemanager.v3.CloudResourceManager;
import com.google.api.services.cloudresourcemanager.v3.model.Policy;
import com.google.api.services.cloudresourcemanager.v3.model.SetIamPolicyRequest;
import com.google.api.services.iam.v1.IamScopes;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Collections;

public class SetPolicy {

  // Sets a project's policy.
  public static void setPolicy(Policy policy, String projectId) {
    // policy = service.Projects.GetIAmPolicy(new GetIamPolicyRequest(), your-project-id).Execute();
    // projectId = "my-project-id"

    CloudResourceManager service = null;
    try {
      service = createCloudResourceManagerService();
    } catch (IOException | GeneralSecurityException e) {
      System.out.println("Unable to initialize service: \n" + e.toString());
      return;
    }

    try {
      SetIamPolicyRequest request = new SetIamPolicyRequest();
      request.setPolicy(policy);
      Policy response = service.projects().setIamPolicy(projectId, request).execute();
      System.out.println("Policy set: " + response.toString());
    } catch (IOException e) {
      System.out.println("Unable to set policy: \n" + e.toString());
    }
  }

  public static CloudResourceManager createCloudResourceManagerService()
      throws IOException, GeneralSecurityException {
    // Use the Application Default Credentials strategy for authentication. For more info, see:
    // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));

    CloudResourceManager service =
        new CloudResourceManager.Builder(
                GoogleNetHttpTransport.newTrustedTransport(),
                GsonFactory.getDefaultInstance(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.

L'esempio seguente mostra come impostare il criterio di autorizzazione per un progetto. Per scoprire come impostare il criterio di autorizzazione di una cartella o un'organizzazione, consulta la documentazione relativa alla libreria client di Resource Manager per il tuo linguaggio di programmazione.

def set_policy(project_id: str, policy: dict) -> dict:
    """Sets IAM policy for a project."""

    credentials = service_account.Credentials.from_service_account_file(
        filename=os.environ["GOOGLE_APPLICATION_CREDENTIALS"],
        scopes=["https://www.googleapis.com/auth/cloud-platform"],
    )
    service = googleapiclient.discovery.build(
        "cloudresourcemanager", "v1", credentials=credentials
    )

    policy = (
        service.projects()
        .setIamPolicy(resource=project_id, body={"policy": policy})
        .execute()
    )
    print(policy)
    return policy

REST

Il metodo setIamPolicy dell'API Resource Manager imposta il criterio nella richiesta come nuovo criterio di autorizzazione per il progetto, la cartella o l'organizzazione.

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

  • API_VERSION: la versione dell'API da utilizzare. Per i progetti e le organizzazioni, utilizza v1. Per le cartelle, utilizza v2.
  • RESOURCE_TYPE: il tipo di risorsa di cui vuoi gestire il criterio. Utilizza il valore projects, folders o organizations.
  • RESOURCE_ID: l'ID progetto, organizzazione o cartella Google Cloud. Gli ID progetto sono stringhe alfanumeriche, come my-project. Gli ID cartella e organizzazione sono numerici, ad esempio 123456789012.
  • POLICY: una rappresentazione JSON del criterio che vuoi impostare. Per ulteriori informazioni sul formato di un criterio, consulta la documentazione di riferimento alle norme.

Metodo HTTP e URL:

POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:setIamPolicy

Corpo JSON della richiesta:

{
  "policy": POLICY
}

Per inviare la richiesta, espandi una di queste opzioni:

La risposta contiene il criterio di autorizzazione aggiornato.

Passaggi successivi

Provalo

Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $ di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.

Inizia gratuitamente