Gestire l'accesso a progetti, cartelle e organizzazioni

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

In questa pagina viene descritto come concedere, modificare e revocare l'accesso a progetti, cartelle e organizzazioni. Per scoprire come gestire l'accesso alle altre risorse, consulta le seguenti guide:

In Identity and Access Management (IAM), l'accesso viene concesso tramite i criteri di autorizzazione, noti anche come criteri IAM. Un criterio di autorizzazione è associato a una risorsa Google Cloud. Ogni criterio di autorizzazione contiene una raccolta di associazioni di ruoli che associano una o più entità, ad esempio 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 in tutti i discendenti della risorsa. Per ulteriori informazioni sui criteri di autorizzazione, consulta la pagina 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

Ruoli obbligatori

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 per la risorsa per cui vuoi gestire l'accesso (progetto, cartella o organizzazione):

  • Per gestire l'accesso a un progetto: Amministratore IAM progetto (roles/resourcemanager.projectIamAdmin)
  • Per gestire l'accesso a una cartella: Amministratore cartelle (roles/resourcemanager.folderAdmin)
  • Per gestire l'accesso a progetti, cartelle e organizzazioni: Amministratore organizzazione (roles/resourcemanager.organizationAdmin)
  • Per gestire l'accesso alla maggior parte delle risorse di Google Cloud: Amministratore sicurezza (roles/iam.securityAdmin)

Per ulteriori informazioni sulla concessione dei ruoli, consulta Gestire l'accesso.

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 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 ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Visualizza accesso attuale

Puoi visualizzare chi ha accesso al tuo progetto, alla tua cartella o organizzazione utilizzando la console Google Cloud, l'interfaccia a riga di comando gcloud, 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 nel tuo progetto, nella tua cartella o nella tua organizzazione. Questo elenco include i entità che hanno ereditato i ruoli sulla risorsa dalle risorse padre. Per ulteriori informazioni sull'ereditarietà dei criteri, vedi Ereditarietà 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 CLI

Per vedere chi ha accesso al tuo progetto, alla tua cartella o alla tua organizzazione, ottieni il criterio di autorizzazione per la risorsa. Per scoprire 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 la quale vuoi visualizzare l'accesso. Utilizza uno di questi valori: projects, resource-manager folders o organizations.
  • RESOURCE_ID: il tuo progetto, cartella o ID organizzazione Google Cloud. Gli ID progetto sono alfanumerici, come my-project. Gli ID cartella e organizzazione sono numerici, come 123456789012.
  • FORMAT: il formato auspicato per il criterio. Utilizza json o yaml.
  • PATH: il percorso di un nuovo file di output per il criterio.

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

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

REST

Per vedere chi ha accesso al tuo progetto, alla tua cartella o alla tua organizzazione, ottieni il criterio di autorizzazione per la risorsa. Per scoprire come interpretare i criteri di autorizzazione, consulta Comprendere i criteri di autorizzazione.

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

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

  • API_VERSION: la versione dell'API da utilizzare. Per progetti e 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 della tua organizzazione, del tuo progetto o della tua cartella Google Cloud. Gli ID progetto sono stringhe alfanumeriche come my-project. Gli ID delle cartelle e delle organizzazioni sono numerici, come 123456789012.
  • POLICY_VERSION: la versione del criterio da ripristinare. Le richieste devono specificare la versione più recente del criterio, che è la versione 3. Per i dettagli, consulta la sezione Specificare la versione di un criterio quando si riceve un criterio.

Metodo e URL HTTP:

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

Testo JSON richiesta:

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

Per inviare la richiesta, espandi una delle seguenti 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"
      ]
    }
  ]
}

C#


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

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
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(),
                JacksonFactory.getDefaultInstance(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

def get_policy(project_id, version=1):
    """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

Concedere o revocare un singolo ruolo

Puoi utilizzare la console Google Cloud e l'interfaccia a riga di comando gcloud 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 i Concetti relativi all'identità.

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

Concedere un ruolo singolo

Per concedere un singolo ruolo a un'entità, segui questi passaggi:

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 fai clic 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 ruolo fornite da Google per visualizzare il relativo indirizzo email.

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

  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.

  5. (Facoltativo) Aggiungi una condizione al ruolo.

  6. Fai clic su Salva. All'entità viene concesso il ruolo della 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 informazioni non è visibile, fai clic su Mostra riquadro informazioni. 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 fai clic su Aggiungi un altro ruolo.

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

  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 su ciascuna delle risorse selezionate.

gcloud CLI

Per concedere rapidamente un ruolo a un'entità, esegui il comando add-iam-policy-binding:

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

Fornisci i seguenti valori:

  • RESOURCE_TYPE: il tipo di risorsa di cui vuoi gestire l'accesso. Utilizza projects, resource-manager folders o organizations.
  • RESOURCE_ID: il tuo progetto, cartella o ID organizzazione Google Cloud. Gli ID progetto sono alfanumerici, come my-project. Gli ID delle cartelle e delle organizzazioni sono numerici, come 123456789012.
  • PRINCIPAL: un identificatore per l'entità o il membro, che di solito 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 scoprire come configurare un dominio Cloud Identity, consulta la panoramica di Cloud Identity.

  • ROLE_ID: il nome del ruolo che vuoi concedere. Ad esempio, roles/resourcemanager.projectCreator. Per un elenco dei ruoli, consulta Informazioni sui ruoli.

  • CONDITION: facoltativo. La condizione da aggiungere all'associazione di ruolo. Per ulteriori informazioni sulle condizioni, consulta la panoramica delle condizioni.

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

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

Revocare un singolo ruolo

Per revocare un singolo ruolo di un'entità, segui questi passaggi:

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.

  4. Fai clic sul pulsante Elimina per ogni ruolo da revocare e poi su Salva.

gcloud CLI

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

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

Fornisci i seguenti valori:

  • RESOURCE_TYPE: il tipo di risorsa di cui vuoi gestire l'accesso. Utilizza projects, resource-manager folders o organizations.
  • RESOURCE_ID: il tuo progetto, cartella o ID organizzazione Google Cloud. Gli ID progetto sono alfanumerici, come my-project. Gli ID delle cartelle e delle organizzazioni sono numerici, come 123456789012.
  • PRINCIPAL: un identificatore per l'entità o il membro, che di solito 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 scoprire come configurare un dominio Cloud Identity, consulta la panoramica di Cloud Identity.

  • ROLE_ID: il nome del ruolo da revocare. Ad esempio, roles/resourcemanager.projectCreator. Per un elenco dei ruoli, consulta Informazioni sui ruoli.

Ad esempio, per revocare il ruolo di Autore progetto dell'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

Concedere o revocare più ruoli

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

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

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

Scarica l'attuale criterio di autorizzazione

gcloud CLI

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: il tuo progetto, cartella o ID organizzazione Google Cloud. Gli ID progetto sono alfanumerici, come my-project. Gli ID cartella e organizzazione sono numerici, come 123456789012.
  • FORMAT: il formato desiderato per il criterio di autorizzazione. Utilizza json o yaml.
  • PATH: il percorso di un nuovo file di output per il criterio di autorizzazione.

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

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

REST

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

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

  • API_VERSION: la versione dell'API da utilizzare. Per progetti e 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 della tua organizzazione, del tuo progetto o della tua cartella Google Cloud. Gli ID progetto sono stringhe alfanumeriche come my-project. Gli ID delle cartelle e delle organizzazioni sono numerici, come 123456789012.
  • POLICY_VERSION: la versione del criterio da ripristinare. Le richieste devono specificare la versione più recente del criterio, che è la versione 3. Per i dettagli, consulta la sezione Specificare la versione di un criterio quando si riceve un criterio.

Metodo e URL HTTP:

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

Testo JSON richiesta:

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

Per inviare la richiesta, espandi una delle seguenti 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).

C#


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

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
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(),
                JacksonFactory.getDefaultInstance(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

def get_policy(project_id, version=1):
    """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

Modifica il criterio di autorizzazione

In modo programmatico o mediante un editor di testo, modifica la copia locale del criterio di autorizzazione della risorsa per riflettere 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.

Concedi un ruolo

Per concedere ruoli alle entità, modifica le associazioni di ruoli nel criterio di autorizzazione. Per sapere quali ruoli puoi concedere, consulta Comprendere i ruoli o visualizzare 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 condizioni 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 ruolo esistente:

gcloud CLI

Modifica il criterio di autorizzazione restituito aggiungendo l'entità a un collegamento di ruolo esistente. Tieni presente che questa modifica non diventerà effettiva finché non imposti il criterio di autorizzazione aggiornato.

Ad esempio, immagina che il criterio di autorizzazione contenga la seguente associazione di ruoli, che concede il ruolo di revisore di 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 dei ruoli esistente:

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

REST

Modifica il criterio di autorizzazione restituito aggiungendo l'entità a un collegamento di ruolo esistente. Tieni presente che questa modifica non diventerà effettiva finché non imposti il criterio di autorizzazione aggiornato.

Ad esempio, immagina che il criterio di autorizzazione contenga la seguente associazione di ruoli, che concede il ruolo di revisore di 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 dei ruoli esistente:

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

C#

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;
    }
}

Java

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 scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.

def modify_policy_add_member(policy, role, member):
    """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

Per concedere un ruolo non ancora incluso nel criterio di autorizzazione, aggiungi un nuovo ruolo vincolante:

gcloud CLI

Modifica il criterio di autorizzazione aggiungendo una nuova associazione di ruolo che conceda il ruolo al ruolo principale. Questa modifica non diventerà effettiva finché non imposti il criterio di autorizzazione aggiornato.

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

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

REST

Modifica il criterio di autorizzazione aggiungendo una nuova associazione di ruolo che conceda il ruolo al ruolo principale. Questa modifica non diventerà effettiva finché non imposti il criterio di autorizzazione aggiornato.

Ad esempio, per concedere il ruolo Amministratore Compute Storage (roles/compute.storageAdmin) a raha@example.com, aggiungi il seguente ruolo vincolando 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 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 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<String>();
    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 Resource Manager, consulta Librerie client di Resource Manager.

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

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

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

Quando concedi le autorizzazioni per i progetti esistono alcuni vincoli univoci, soprattutto quando assegni il ruolo di 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 dei ruoli. Se non ci sono altre entità nell'associazione dei ruoli, rimuovi l'intera associazione dei ruoli.

gcloud CLI

Revoca un ruolo modificando il criterio di autorizzazione JSON o YAML restituito dal comando get-iam-policy. Questa modifica non diventerà effettiva finché non imposti 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.

REST

Revoca un ruolo modificando il criterio di autorizzazione JSON o YAML restituito dal comando get-iam-policy. Questa modifica non diventerà effettiva finché non imposti 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 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;
        }
    }
}

Java

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.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 Resource Manager, consulta Librerie client di Resource Manager.

def modify_policy_remove_member(policy, role, member):
    """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

Imposta il criterio di autorizzazione

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

gcloud CLI

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: il tuo progetto, cartella o ID organizzazione Google Cloud. Gli ID progetto sono alfanumerici, come my-project. Gli ID cartella e organizzazione sono numerici, come 123456789012.
  • PATH: il percorso di un file che contiene il nuovo criterio di autorizzazione.

La risposta contiene il criterio di autorizzazione aggiornato.

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

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

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, apporta le seguenti sostituzioni:

  • API_VERSION: la versione dell'API da utilizzare. Per progetti e 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 della tua organizzazione, del tuo progetto o della tua cartella Google Cloud. Gli ID progetto sono stringhe alfanumeriche come my-project. Gli ID delle cartelle e delle organizzazioni sono numerici, come 123456789012.
  • POLICY: una rappresentazione JSON del criterio che vuoi impostare. Per ulteriori informazioni sul formato di un criterio, consulta il riferimento alle norme.

    Ad esempio, per impostare il criterio di autorizzazione mostrato nel passaggio precedente, sostituisci POLICY con quanto segue:

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

Metodo e URL HTTP:

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

Testo JSON richiesta:

{
  "policy": POLICY
}

Per inviare la richiesta, espandi una delle seguenti opzioni:

La risposta contiene il criterio di autorizzazione aggiornato.

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

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
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(),
                JacksonFactory.getDefaultInstance(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

def set_policy(project_id, policy):
    """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

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