Crea e gestisci ruoli personalizzati

Questa pagina descrive come creare e gestire i ruoli personalizzati di Identity and Access Management (IAM). La gestione dei ruoli include la modifica, la disattivazione, l'elenco, l'eliminazione e il ripristino dei ruoli.

Prima di iniziare

  • Enable the IAM API.

    Enable the API

  • Configurare l'autenticazione.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

      In the Google Cloud console, activate Cloud Shell.

      Activate Cloud Shell

      At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

      C#

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

      1. Install the Google Cloud CLI.

      2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      3. To initialize the gcloud CLI, run the following command:

        gcloud init
      4. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

        If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

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

      C++

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

      1. Install the Google Cloud CLI.

      2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      3. To initialize the gcloud CLI, run the following command:

        gcloud init
      4. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

        If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

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

      Vai

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

      1. Install the Google Cloud CLI.

      2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      3. To initialize the gcloud CLI, run the following command:

        gcloud init
      4. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

        If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

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

      Java

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

      1. Install the Google Cloud CLI.

      2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      3. To initialize the gcloud CLI, run the following command:

        gcloud init
      4. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

        If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

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

      Python

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

      1. Install the Google Cloud CLI.

      2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      3. To initialize the gcloud CLI, run the following command:

        gcloud init
      4. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

        If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

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

      REST

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

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      Per saperne di più, consulta la sezione Autenticarsi per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud .

    1. Comprendi la Google Cloud gerarchia delle risorse.

    2. Leggi Informazioni sui ruoli IAM personalizzati.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per creare e gestire ruoli personalizzati, chiedi all'amministratore di concederti i seguenti ruoli IAM:

  • Per gestire i ruoli per un progetto: Amministratore ruoli (roles/iam.roleAdmin) sul progetto per cui vuoi gestire i ruoli
  • Per gestire i ruoli per un'organizzazione: Amministratore ruoli organizzazione (roles/iam.organizationRoleAdmin) nell'organizzazione per cui vuoi gestire i ruoli

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Visualizzare le autorizzazioni disponibili per progetti, cartelle e organizzazioni

Puoi creare ruoli personalizzati per un'intera organizzazione o per un progetto specifico all'interno dell'organizzazione. Le autorizzazioni disponibili per i ruoli personalizzati dipendono da dove crei il ruolo. Ad esempio, se un'autorizzazione può essere utilizzata solo a livello di organizzazione, non puoi includerla in un ruolo personalizzato a livello di progetto.

Per verificare quali autorizzazioni sono disponibili per i ruoli personalizzati a livello di organizzazione e progetto, puoi utilizzare gcloud CLI o l'API Identity and Access Management per elencare le autorizzazioni disponibili in un'organizzazione o un progetto specifico. Ad esempio, puoi ottenere tutte le autorizzazioni disponibili per i ruoli personalizzati creati nel tuo progetto.

Alcune autorizzazioni potrebbero non essere visibili o utilizzabili in un ruolo personalizzato, anche se sono supportate nei ruoli personalizzati. Ad esempio, un'autorizzazione potrebbe non essere disponibile per l'uso nei ruoli personalizzati se non hai abilitato l'API per il servizio.

Per scoprire di più sulle autorizzazioni che puoi aggiungere ai ruoli personalizzati, consulta Autorizzazioni supportate.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Utilizza il comando gcloud iam list-testable-permissions per ottenere un elenco delle autorizzazioni disponibili per i ruoli personalizzati in un progetto o un'organizzazione specifici. La risposta elenca le autorizzazioni che puoi utilizzare nei ruoli personalizzati per quel progetto o organizzazione.

    Per elencare le autorizzazioni disponibili nei ruoli personalizzati per un progetto o un'organizzazione, esegui questo comando:

    gcloud iam list-testable-permissions FULL_RESOURCE_NAME \
        --filter="customRolesSupportLevel!=NOT_SUPPORTED"

    Sostituisci FULL_RESOURCE_NAME con uno dei seguenti valori:

    • Progetto: //cloudresourcemanager.googleapis.com/projects/PROJECT_ID (ad esempio, //cloudresourcemanager.googleapis.com/projects/my-project)

    • Organizzazione: //cloudresourcemanager.googleapis.com/organizations/NUMERIC_ID (ad esempio, //cloudresourcemanager.googleapis.com/organizations/123456789012)

    I risultati indicano se ogni autorizzazione è supportata nei ruoli personalizzati. Le autorizzazioni che non hanno un campo customRolesSupportLevel sono completamente supportate.

    Il comando list-testable-permissions potrebbe restituire centinaia di risultati. Questo esempio parziale mostra il formato di ogni risultato:

    ---
    name: appengine.applications.create
    stage: GA
    ---
    customRolesSupportLevel: TESTING
    name: appengine.applications.disable
    stage: GA
    ---
    name: appengine.applications.get
    stage: GA
    ---
    name: appengine.applications.update
    stage: GA
    ---
    name: appengine.instances.delete
    stage: GA
    ---
    name: appengine.instances.get
    stage: GA
    ---
    

C++

Per scoprire come installare e utilizzare la libreria client per IAM, consulta Librerie client IAM. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API IAM C++.

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& resource) {
  iam::IAMClient client(iam::MakeIAMConnection());
  google::iam::admin::v1::QueryTestablePermissionsRequest request;
  request.set_full_resource_name(resource);
  int count = 0;
  for (auto& permission : client.QueryTestablePermissions(request)) {
    if (!permission) throw std::move(permission).status();
    std::cout << "Permission successfully retrieved: " << permission->name()
              << "\n";
    ++count;
  }
  if (count == 0) {
    std::cout << "No testable permissions found in resource: " << resource
              << "\n";
  }
}

C#

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.


using System;
using System.Collections.Generic;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Iam.v1;
using Google.Apis.Iam.v1.Data;

public partial class CustomRoles
{
    public static IList<Permission> QueryTestablePermissions(
        string fullResourceName)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var request = new QueryTestablePermissionsRequest
        {
            FullResourceName = fullResourceName
        };
        var response = service.Permissions.QueryTestablePermissions(request)
            .Execute();
        foreach (var p in response.Permissions)
        {
            Console.WriteLine(p.Name);
        }
        return response.Permissions;
    }
}

Go

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

import (
	"context"
	"fmt"
	"io"

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

// queryTestablePermissions lists testable permissions on a resource.
func queryTestablePermissions(w io.Writer, fullResourceName string) ([]*iam.Permission, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %w", err)
	}

	request := &iam.QueryTestablePermissionsRequest{
		FullResourceName: fullResourceName,
	}
	response, err := service.Permissions.QueryTestablePermissions(request).Do()
	if err != nil {
		return nil, fmt.Errorf("Permissions.QueryTestablePermissions: %w", err)
	}
	for _, p := range response.Permissions {
		fmt.Fprintf(w, "Found permissions: %v", p.Name)
	}
	return response.Permissions, nil
}

Java

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.cloud.iam.admin.v1.IAMClient.QueryTestablePermissionsPagedResponse;
import com.google.iam.admin.v1.QueryTestablePermissionsRequest;
import java.io.IOException;

/** View available permissions in a project. */
public class QueryTestablePermissions {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variable before running the sample.
    // Full resource names can take one of the following forms:
    // cloudresourcemanager.googleapis.com/projects/PROJECT_ID
    // cloudresourcemanager.googleapis.com/organizations/NUMERIC_ID
    String fullResourceName = "your-full-resource-name";

    queryTestablePermissions(fullResourceName);
  }

  public static void queryTestablePermissions(String fullResourceName) throws IOException {
    QueryTestablePermissionsRequest queryTestablePermissionsRequest =
        QueryTestablePermissionsRequest.newBuilder().setFullResourceName(fullResourceName).build();

    try (IAMClient iamClient = IAMClient.create()) {
      QueryTestablePermissionsPagedResponse queryTestablePermissionsPagedResponse =
          iamClient.queryTestablePermissions(queryTestablePermissionsRequest);
      queryTestablePermissionsPagedResponse
          .iterateAll()
          .forEach(permission -> System.out.println(permission.getName()));
    }
  }
}

Python

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

import os
from typing import List

from google.cloud import resourcemanager_v3
from google.iam.v1 import iam_policy_pb2, policy_pb2


def query_testable_permissions(
    project_id: str, permissions: List[str]
) -> policy_pb2.Policy:
    """Tests IAM permissions of the caller.

    project_id: ID or number of the Google Cloud project you want to use.
    permissions: List of permissions to get.
    """

    client = resourcemanager_v3.ProjectsClient()
    request = iam_policy_pb2.TestIamPermissionsRequest()
    request.resource = f"projects/{project_id}"
    request.permissions.extend(permissions)

    permissions_reponse = client.test_iam_permissions(request)
    print(permissions_reponse)
    return permissions_reponse.permissions

REST

Il metodo permissions.queryTestablePermissions elenca le autorizzazioni disponibili in un'organizzazione o in un progetto.

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

  • FULL_RESOURCE_NAME: un URI composto dal nome del servizio e dal percorso della risorsa. Per esempi, consulta Nomi completi delle risorse.
  • PAGE_SIZE: (Facoltativo). Il numero di autorizzazioni da includere nella risposta. Il valore predefinito è 100 e il valore massimo è 1000. Se il numero di autorizzazioni è maggiore delle dimensioni della pagina, la risposta contiene un token di paginazione che puoi utilizzare per recuperare la pagina successiva dei risultati.
  • NEXT_PAGE_TOKEN: (Facoltativo). Il token di paginazione restituito in una risposta precedente di questo metodo. Se specificato, l'elenco delle autorizzazioni testabili inizierà dal punto in cui è terminata la risposta precedente.

Metodo HTTP e URL:

POST https://iam.googleapis.com/v1/permissions:queryTestablePermissions

Corpo JSON della richiesta:

{
  "fullResourceName": "FULL_RESOURCE_NAME"
  "pageSize": PAGE_SIZE,
  "pageToken": "NEXT_PAGE_TOKEN"
}

Per inviare la richiesta, espandi una di queste opzioni:

La risposta contiene l'elenco delle autorizzazioni.

{
  "permissions": [
    {
      "name": "iam.serviceAccountKeys.create",
      "stage": "GA"
    },
    {
      "name": "iam.serviceAccountKeys.delete",
      "stage": "GA"
    },
    {
      "name": "iam.serviceAccountKeys.get",
      "stage": "GA"
    }
  ],
  "nextPageToken": "CgoHBajEfjUDQyABEPaIv5vIiMDTVhgDIhtpYW0uc2VydmljZUFjY291bnRLZXlzLmxpc3Q"
}

Recupera i metadati del ruolo

Prima di creare un ruolo personalizzato, ti consigliamo di recuperare i metadati per i ruoli predefiniti e personalizzati. I metadati del ruolo includono l'ID ruolo e le autorizzazioni contenute nel ruolo. Puoi visualizzare i metadati utilizzando la consoleGoogle Cloud o l'API IAM.

Per visualizzare i metadati del ruolo, utilizza uno dei metodi riportati di seguito:

Console

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

    Vai alla pagina Ruoli

  2. Seleziona la tua organizzazione o il tuo progetto dall'elenco a discesa nella parte superiore della pagina.

  3. Seleziona la casella di controllo per uno o più ruoli per visualizzare le autorizzazioni del ruolo. Il riquadro a destra mostra le autorizzazioni contenute nei ruoli, se presenti.

Le icone nella colonna Tipo indicano se si tratta di un ruolo personalizzato o di un ruolo predefinito .

Se vuoi trovare tutti i ruoli che includono un'autorizzazione specifica, digita il nome dell'autorizzazione nella casella Filtro in alto nell'elenco Ruoli.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Utilizza il comando gcloud iam roles describe per visualizzare i metadati per i ruoli predefiniti e personalizzati.

    Per visualizzare i metadati di un ruolo predefinito, esegui questo comando:

    gcloud iam roles describe ROLE_ID

    ROLE_ID è l'ID del ruolo. I ruoli predefiniti includono il prefisso role nei relativi ID, ad esempio roles/iam.roleViewer.

    Il seguente esempio mostra l'output del comando describe quando viene eseguito sul ruolo predefinito roles/iam.roleViewer:

    gcloud iam roles describe roles/iam.roleViewer

    description: Read access to all custom roles in the project.
    etag: AA==
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    - resourcemanager.projects.get
    - resourcemanager.projects.getIamPolicy
    name: roles/iam.roleViewer
    stage: GA
    title: Role Viewer

    Per visualizzare i metadati di un ruolo personalizzato, esegui uno dei seguenti comandi:

    • Per visualizzare i metadati di un ruolo personalizzato creato a livello di organizzazione, esegui il comando seguente:

      gcloud iam roles describe --organization=ORGANIZATION_ID ROLE_ID
    • Per visualizzare i metadati di un ruolo personalizzato creato a livello di progetto, esegui il comando seguente:

      gcloud iam roles describe --project=PROJECT_ID ROLE_ID

    Ogni valore segnaposto è descritto di seguito:

    • ORGANIZATION_ID è l'ID numerico dell'organizzazione, ad esempio 123456789012.

    • PROJECT_ID è il nome del progetto, ad esempio my-project.

    • ROLE_ID è l'ID del ruolo, esclusi eventuali prefissi come projects/, organizations/ o roles/. Ad esempio, myCompanyAdmin.

    Per saperne di più, consulta la documentazione di riferimento per gcloud iam roles describe.

C++

Per scoprire come installare e utilizzare la libreria client per IAM, consulta Librerie client IAM. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API IAM C++.

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& name) {
  iam::IAMClient client(iam::MakeIAMConnection());
  google::iam::admin::v1::GetRoleRequest request;
  request.set_name(name);
  auto response = client.GetRole(request);
  if (!response) throw std::move(response).status();
  std::cout << "Role successfully retrieved: " << response->DebugString()
            << "\n";
}

C#

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.


using System;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Iam.v1;
using Google.Apis.Iam.v1.Data;

public partial class CustomRoles
{
    public static Role GetRole(string name)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var role = service.Roles.Get(name).Execute();
        Console.WriteLine(role.Name);
        Console.WriteLine(String.Join(", ", role.IncludedPermissions));
        return role;
    }
}

Go

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

import (
	"context"
	"fmt"
	"io"

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

// getRole gets role metadata.
func getRole(w io.Writer, name string) (*iam.Role, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %w", err)
	}

	role, err := service.Roles.Get(name).Do()
	if err != nil {
		return nil, fmt.Errorf("Roles.Get: %w", err)
	}
	fmt.Fprintf(w, "Got role: %v\n", role.Name)
	for _, permission := range role.IncludedPermissions {
		fmt.Fprintf(w, "Got permission: %v\n", permission)
	}
	return role, nil
}

Java

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.GetRoleRequest;
import com.google.iam.admin.v1.Role;
import java.io.IOException;

/** Get role metadata. Specifically, printing out role permissions. */
public class GetRole {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variable before running the sample.
    String roleId = "a unique identifier (e.g. testViewer)";

    getRole(roleId);
  }

  public static void getRole(String roleId) throws IOException {
    GetRoleRequest getRoleRequest = GetRoleRequest.newBuilder().setName(roleId).build();

    // Initialize client for sending requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      Role role = iamClient.getRole(getRoleRequest);
      role.getIncludedPermissionsList().forEach(permission -> System.out.println(permission));
    }
  }
}

Python

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

from google.api_core.exceptions import NotFound
from google.cloud.iam_admin_v1 import GetRoleRequest, IAMClient, Role


def get_role(project_id: str, role_id: str) -> Role:
    client = IAMClient()
    name = f"projects/{project_id}/roles/{role_id}"
    request = GetRoleRequest(name=name)
    try:
        role = client.get_role(request)
        print(f"Retrieved role: {role_id}: {role}")
        return role
    except NotFound as exc:
        raise NotFound(f"Role with id [{role_id}] not found, take some actions") from exc

REST

Il metodo roles.get recupera la definizione di un ruolo.

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

  • ROLE_NAME: il nome completo del ruolo, inclusi eventuali prefissi organizations/, projects/ o roles/. Ad esempio, organizations/123456789012/roles/myCompanyAdmin.

Metodo HTTP e URL:

GET https://iam.googleapis.com/v1/ROLE_NAME

Per inviare la richiesta, espandi una di queste opzioni:

La risposta contiene la definizione del ruolo.

{
  "name": "projects/my-project/roles/customRole",
  "title": "My Custom Role",
  "description": "My custom role description.",
  "includedPermissions": [
    "storage.buckets.get",
    "storage.buckets.list"
  ],
  "etag": "BwWiPg2fmDE="
}

Creare un ruolo personalizzato

Puoi creare un ruolo personalizzato a livello di progetto o organizzazione.

Un ruolo personalizzato a livello di organizzazione può includere qualsiasi autorizzazione IAM supportata nei ruoli personalizzati. Un ruolo personalizzato a livello di progetto può contenere qualsiasi autorizzazione supportata ad eccezione di quelle che possono essere utilizzate solo a livello di organizzazione o cartella, ad esempio resourcemanager.organizations.get. Se provi ad aggiungere queste autorizzazioni a un ruolo personalizzato a livello di progetto, viene visualizzato un messaggio di errore:

Console

Viene visualizzato il seguente messaggio di avviso: "Non applicabile ai ruoli personalizzati a livello di progetto". L'autorizzazione verrà deselezionata automaticamente dall'elenco delle autorizzazioni incluse e potrai procedere con la creazione del ruolo.

gcloud

Viene restituito il seguente messaggio di errore: INVALID_ARGUMENT: Permission PERMISSION is not valid. Il ruolo personalizzato non verrà creato finché non avrai rimosso l'autorizzazione dalla definizione del ruolo e non avrai riprovato l'operazione.

API REST

Viene restituito il seguente messaggio di errore: Permission PERMISSION is not valid, insieme a un codice di errore HTTP 400 e uno stato INVALID_ARGUMENT. Il ruolo personalizzato non verrà creato finché non rimuoverai l'autorizzazione dalla definizione del ruolo e non riproverai l'operazione.

Ogni ruolo personalizzato può contenere fino a 3000 autorizzazioni. Inoltre, la dimensione totale massima di titolo, descrizione e nomi autorizzazione per un ruolo personalizzato è 64 kB. Se devi creare un ruolo personalizzato più grande, puoi dividere le autorizzazioni in più ruoli personalizzati. Scegli titoli di ruolo che mostrino la relazione tra i ruoli personalizzati, ad esempio Custom Admin (1 of 2) e Custom Admin (2 of 2).

Ogni ruolo personalizzato può avere una fase di lancio. La maggior parte delle fasi di lancio sono informative e ti aiutano a tenere traccia della preparazione di ogni ruolo per l'utilizzo su larga scala. Inoltre, la DISABLED fase di lancio ti consente di disattivare un ruolo personalizzato. Per saperne di più sulle fasi di lancio, consulta Test e deployment.

Console

Alcuni ruoli predefiniti contengono autorizzazioni ritirate o autorizzazioni che non sono altrimenti consentite nei ruoli personalizzati. Se provi a creare un ruolo personalizzato basato su uno di questi ruoli predefiniti, il ruolo personalizzato ometterà le autorizzazioni ritirate e con limitazioni.

Per creare un nuovo ruolo personalizzato da zero:

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

    Vai alla pagina Ruoli

  2. Utilizza l'elenco a discesa nella parte superiore della pagina per selezionare l'organizzazione o il progetto in cui vuoi creare un ruolo.

  3. Fai clic su Crea ruolo.

  4. Inserisci un Titolo, una Descrizione, un ID e una Fase di lancio del ruolo per il ruolo. L'ID ruolo non può essere modificato dopo la creazione del ruolo.

  5. Fai clic su Aggiungi autorizzazioni.

  6. Seleziona le autorizzazioni da includere nel ruolo e fai clic su Aggiungi autorizzazioni. Utilizza gli elenchi a discesa Tutti i servizi e Tutti i tipi per filtrare e selezionare le autorizzazioni per servizi e tipi.

Creazione di un ruolo personalizzato basato su un ruolo predefinito esistente:

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

    Vai alla pagina Ruoli

  2. Seleziona l'organizzazione o il progetto in cui vuoi creare un ruolo.
  3. Seleziona i ruoli su cui vuoi basare il nuovo ruolo personalizzato.
  4. Fai clic su Crea ruolo da selezione.
  5. Inserisci un Titolo, una Descrizione, un ID e una Fase di lancio del ruolo per il ruolo. L'ID ruolo non può essere modificato dopo la creazione del ruolo.
  6. Deseleziona le autorizzazioni che vuoi escludere dal ruolo.
  7. Fai clic su Aggiungi autorizzazioni per includere le autorizzazioni.
  8. Fai clic su Crea.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Utilizza il comando gcloud iam roles create per creare nuovi ruoli personalizzati. Puoi utilizzare questo comando in due modi:

    • Fornendo un file YAML che contiene la definizione del ruolo

    • Utilizzando i flag per specificare la definizione del ruolo

    Quando crei un ruolo personalizzato, devi specificare se si applica a livello di organizzazione o di progetto utilizzando i flag --organization=ORGANIZATION_ID o --project=PROJECT_ID. Ogni esempio riportato di seguito crea un ruolo personalizzato a livello di progetto.

    Un ruolo personalizzato può contenere solo autorizzazioni supportate nei ruoli personalizzati. Se il ruolo personalizzato contiene altre autorizzazioni, il comando non viene eseguito.

    Per creare un ruolo personalizzato utilizzando un file YAML:

    Crea un file YAML che contenga la definizione del tuo ruolo personalizzato. Il file deve essere strutturato nel seguente modo:

    title: ROLE_TITLE
    description: ROLE_DESCRIPTION
    stage: LAUNCH_STAGE
    includedPermissions:
    - PERMISSION_1
    - PERMISSION_2

    Ogni valore segnaposto è descritto di seguito:

    • ROLE_TITLE è un titolo informale per il ruolo, ad esempio "My Company Admin".

    • ROLE_DESCRIPTION è una breve descrizione del ruolo, ad esempio "My custom role description".

    • LAUNCH_STAGE indica la fase di un ruolo nel ciclo di vita del lancio, ad esempio ALPHA, BETA o GA.

    • PERMISSION_1 e PERMISSION_2 sono autorizzazioni da includere nel ruolo personalizzato, ad esempio iam.roles.get. Non puoi utilizzare caratteri jolly (*) nei nomi delle autorizzazioni.

    Salva il file YAML, quindi esegui uno dei seguenti comandi:

    • Per creare un ruolo personalizzato a livello di organizzazione, esegui questo comando:

      gcloud iam roles create ROLE_ID--organization=ORGANIZATION_ID \
          --file=YAML_FILE_PATH
    • Per creare un ruolo personalizzato a livello di progetto, esegui questo comando:

      gcloud iam roles create ROLE_ID --project=PROJECT_ID \
          --file=YAML_FILE_PATH

    Ogni valore segnaposto è descritto di seguito:

    • ROLE_ID è il nome del ruolo, ad esempio myCompanyAdmin.

    • ORGANIZATION_ID è l'ID numerico dell'organizzazione, ad esempio 123456789012.

    • PROJECT_ID è il nome del progetto, ad esempio my-project.

    • YAML_FILE_PATH è il percorso della posizione del file YAML che contiene la definizione del ruolo personalizzato.

    Esempi

    Il seguente file YAML di esempio mostra come creare una definizione di ruolo:

    title: "My Company Admin"
    description: "My custom role description."
    stage: "ALPHA"
    includedPermissions:
    - iam.roles.get
    - iam.roles.list

    Il seguente esempio mostra come creare un ruolo a livello di organizzazione utilizzando il file YAML:

    gcloud iam roles create myCompanyAdmin --organization=123456789012 \
        --file=my-role-definition.yaml

    Se il ruolo è stato creato correttamente, l'output del comando è simile al seguente:

    Created role [myCompanyAdmin].
    description: My custom role description.
    etag: BwVkBX0sQD0=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: organizations/123456789012/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    L'esempio seguente mostra come creare un ruolo a livello di progetto utilizzando il file YAML:

    gcloud iam roles create myCompanyAdmin --project=my-project \
        --file=my-role-definition.yaml

    Se il ruolo è stato creato correttamente, l'output del comando è simile al seguente:

    Created role [myCompanyAdmin].
    description: My custom role description.
    etag: BwVkBX0sQD0=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    Per creare un ruolo personalizzato utilizzando i flag:

    Esegui uno dei seguenti comandi:

    • Per creare un ruolo personalizzato a livello di organizzazione, esegui questo comando:

      gcloud iam roles create ROLE_ID--organization=ORGANIZATION_ID \
          --title=ROLE_TITLE --description=ROLE_DESCRIPTION \
          --permissions="PERMISSIONS_LIST" --stage=LAUNCH_STAGE
    • Per creare un ruolo personalizzato a livello di progetto, esegui questo comando:

      gcloud iam roles create ROLE_ID --project=PROJECT_ID \
          --title=ROLE_TITLE --description=ROLE_DESCRIPTION \
          --permissions="PERMISSIONS_LIST" --stage=LAUNCH_STAGE

    Ogni valore segnaposto è descritto di seguito:

    • ROLE_ID è il nome del ruolo, ad esempio myCompanyAdmin.

    • ORGANIZATION_ID è l'ID numerico dell'organizzazione, ad esempio 123456789012.

    • PROJECT_ID è il nome del progetto, ad esempio my-project.

    • ROLE_TITLE è un titolo informale per il ruolo, ad esempio "My Company Admin".

    • ROLE_DESCRIPTION è una breve descrizione del ruolo, ad esempio "My custom role description.".

    • PERMISSIONS_LIST contiene un elenco separato da virgole di autorizzazioni che vuoi includere nel ruolo personalizzato. Ad esempio: iam.roles.get,iam.roles.list. Non puoi utilizzare caratteri jolly (*) nei nomi delle autorizzazioni.

    • LAUNCH_STAGE indica la fase di un ruolo nel ciclo di vita del lancio, ad esempio ALPHA, BETA o GA.

    Esempi

    Il seguente esempio mostra come creare un ruolo a livello di organizzazione utilizzando i flag:

    gcloud iam roles create myCompanyAdmin --organization=123456789012 \
        --title="My Company Admin" --description="My custom role description." \
        --permissions="iam.roles.get,iam.roles.list" --stage=ALPHA

    Se il ruolo è stato creato correttamente, l'output del comando è simile al seguente:

    Created role [myCompanyAdmin].
    description: My custom role description.
    etag: BwVkBX0sQD0=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: organizations/123456789012/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    Il seguente esempio mostra come creare un ruolo a livello di progetto utilizzando i flag:

    gcloud iam roles create myCompanyAdmin --project=my-project \
        --title="My Company Admin" --description="My custom role description." \
        --permissions="iam.roles.get,iam.roles.list" --stage=ALPHA

    Se il ruolo è stato creato correttamente, l'output del comando è simile al seguente:

    Created role [myCompanyAdmin].
    description: My custom role description.
    etag: BwVkBX0sQD0=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

C++

Per scoprire come installare e utilizzare la libreria client per IAM, consulta Librerie client IAM. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API IAM C++.

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& parent, std::string const& role_id,
   std::vector<std::string> const& included_permissions) {
  iam::IAMClient client(iam::MakeIAMConnection());
  google::iam::admin::v1::CreateRoleRequest request;
  request.set_parent("projects/" + parent);
  request.set_role_id(role_id);
  google::iam::admin::v1::Role role;
  role.set_stage(google::iam::admin::v1::Role::GA);
  for (auto const& permission : included_permissions) {
    *role.add_included_permissions() = permission;
  }
  *request.mutable_role() = role;
  auto response = client.CreateRole(request);
  if (!response) throw std::move(response).status();
  std::cout << "Role successfully created: " << response->DebugString()
            << "\n";
}

C#

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.


using System;
using System.Collections.Generic;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Iam.v1;
using Google.Apis.Iam.v1.Data;

public partial class CustomRoles
{
    public static Role CreateRole(string name, string projectId, string title,
        string description, IList<string> permissions, string stage)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var role = new Role
        {
            Title = title,
            Description = description,
            IncludedPermissions = permissions,
            Stage = stage
        };
        var request = new CreateRoleRequest
        {
            Role = role,
            RoleId = name
        };
        role = service.Projects.Roles.Create(request,
            "projects/" + projectId).Execute();
        Console.WriteLine("Created role: " + role.Name);
        return role;
    }
}

Go

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

import (
	"context"
	"fmt"
	"io"

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

// createRole creates a custom role.
func createRole(w io.Writer, projectID, name, title, description, stage string, permissions []string) (*iam.Role, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %w", err)
	}

	request := &iam.CreateRoleRequest{
		Role: &iam.Role{
			Title:               title,
			Description:         description,
			IncludedPermissions: permissions,
			Stage:               stage,
		},
		RoleId: name,
	}
	role, err := service.Projects.Roles.Create("projects/"+projectID, request).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.Roles.Create: %w", err)
	}
	fmt.Fprintf(w, "Created role: %v", role.Name)
	return role, nil
}

Java

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.CreateRoleRequest;
import com.google.iam.admin.v1.Role;
import com.google.iam.admin.v1.Role.RoleLaunchStage;
import java.io.IOException;
import java.util.Arrays;

/** Create role. */
public class CreateRole {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    String projectId = "your-project-id";
    String roleId = "a unique identifier (e.g. testViewer)";
    String title = "a title for your role (e.g. IAM Role Viewer)";
    String description = "a description of the role";
    Iterable<String> includedPermissions =
        Arrays.asList("roles/iam.roleViewer", "roles/logging.viewer");

    createRole(projectId, title, description, includedPermissions, roleId);
  }

  public static void createRole(
      String projectId,
      String title,
      String description,
      Iterable<String> includedPermissions,
      String roleId)
      throws IOException {
    Role.Builder roleBuilder =
        Role.newBuilder()
            .setTitle(title)
            .setDescription(description)
            .addAllIncludedPermissions(includedPermissions)
            // See launch stage enums at
            // https://cloud.google.com/iam/docs/reference/rpc/google.iam.admin.v1#rolelaunchstage
            .setStage(RoleLaunchStage.BETA);
    CreateRoleRequest createRoleRequest =
        CreateRoleRequest.newBuilder()
            .setParent("projects/" + projectId)
            .setRoleId(roleId)
            .setRole(roleBuilder)
            .build();

    // Initialize client for sending requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      Role result = iamClient.createRole(createRoleRequest);
      System.out.println("Created role: " + result.getName());
    }
  }
}

Python

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

from typing import List, Optional

from google.api_core.exceptions import AlreadyExists, FailedPrecondition
from google.cloud.iam_admin_v1 import CreateRoleRequest, IAMClient, Role


def create_role(
    project_id: str, role_id: str, permissions: List[str], title: Optional[str] = None
) -> Role:
    """Creates iam role with given parameters.

    Args:
        project_id: GCP project id
        role_id: id of GCP iam role
        permissions: list of iam permissions to assign to role. f.e ["iam.roles.get", "iam.roles.list"]
        title: title for iam role. role_id will be used in case of None

    Returns: google.cloud.iam_admin_v1.Role object
    """
    client = IAMClient()

    parent = f"projects/{project_id}"

    request = CreateRoleRequest(
        parent=parent,
        role_id=role_id,
        role=Role(title=title, included_permissions=permissions),
    )
    try:
        role = client.create_role(request)
        print(f"Created iam role: {role_id}: {role}")
        return role
    except AlreadyExists:
        print(f"Role with id [{role_id}] already exists, take some actions")
    except FailedPrecondition:
        print(
            f"Role with id [{role_id}] already exists and in deleted state, take some actions"
        )

REST

Il metodo roles.create crea un ruolo personalizzato in un progetto o un'organizzazione.

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

  • RESOURCE_TYPE: il tipo di risorsa di cui vuoi gestire i ruoli personalizzati. Utilizza il valore projects o organizations.
  • RESOURCE_ID: l'ID progetto o l'ID organizzazione di cui vuoi gestire i ruoli personalizzati. Gli ID progetto sono stringhe alfanumeriche, comemy-project. Gli ID organizzazione sono numerici, ad esempio 123456789012.
  • ROLE_ID: il nome del ruolo, ad esempio myCompanyAdmin.
  • ROLE_TITLE: Il titolo leggibile del ruolo. Ad esempio, My Company Admin.
  • ROLE_DESCRIPTION: una descrizione del ruolo. Ad esempio, "The company admin role allows company admins to access important resources".
  • PERMISSION_1 e PERMISSION_2: le autorizzazioni che vuoi includere nel ruolo. Ad esempio, storage.objects.update. Non puoi utilizzare caratteri jolly (*) nei nomi delle autorizzazioni.

    Un ruolo personalizzato può contenere solo autorizzazioni supportate nei ruoli personalizzati. Se il ruolo personalizzato contiene altre autorizzazioni, la richiesta non va a buon fine.

  • LAUNCH_STAGE: La fase di lancio attuale del ruolo. Questo campo può contenere uno dei seguenti valori: EAP, ALPHA, BETA, GA, DEPRECATED o DISABLED.

Metodo HTTP e URL:

POST https://iam.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/roles

Corpo JSON della richiesta:

{
  "roleId": "ROLE_ID",
  "role": {
    "title": "ROLE_TITLE",
    "description": "ROLE_DESCRIPTION",
    "includedPermissions": [
      "PERMISSION_1",
      "PERMISSION_2"
    ],
    "stage": "LAUNCH_STAGE"
  }
}

Per inviare la richiesta, espandi una di queste opzioni:

La risposta contiene il ruolo che hai creato.

{
  "name": "projects/myProject/roles/myCompanyAdmin",
  "title": "My Company Admin",
  "description": "My custom role description.",
  "includedPermissions": [
    "iam.roles.get",
    "iam.roles.list"
  ],
  "etag": "BwWox/JbaZw="
}

Modificare un ruolo personalizzato esistente

Un pattern comune per aggiornare i metadati di una risorsa, ad esempio un ruolo personalizzato, è il pattern lettura, modifica e scrittura. Con questo pattern, leggi lo stato attuale del ruolo, aggiorni i dati localmente e poi invii i dati modificati per la scrittura.

Il pattern read-modify-write può causare un conflitto se due o più processi indipendenti tentano la sequenza contemporaneamente. Ad esempio, se due proprietari di un progetto tentano di apportare contemporaneamente modifiche in conflitto a un ruolo, alcune modifiche potrebbero non riuscire. IAM risolve questo problema utilizzando una proprietà etag nei ruoli personalizzati. Questa proprietà viene utilizzata per verificare se il ruolo personalizzato è cambiato dall'ultima richiesta. Quando invii una richiesta a IAM con un valore etag, IAM confronta il valore etag nella richiesta con il valore etag esistente associato al ruolo personalizzato. Scrive la modifica solo se i valori ETag corrispondono.

Quando aggiorni un ruolo, recuperalo prima utilizzando roles.get(), aggiornalo e poi scrivi il ruolo aggiornato utilizzando roles.patch(). Utilizza il valore etag quando imposti il ruolo solo se il ruolo corrispondente in roles.get() contiene un valore etag.

Console

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

    Vai alla pagina Ruoli

  2. Utilizza l'elenco a discesa nella parte superiore della pagina per selezionare il progetto o l'organizzazione che contiene il ruolo da modificare.

  3. Fai clic su un ruolo personalizzato.

  4. Fai clic su Modifica ruolo.

  5. Per aggiornare i metadati del ruolo, modifica il Titolo, la Descrizione o la Fase di lancio del ruolo.

  6. Per aggiornare le autorizzazioni del ruolo:

    1. Fai clic su Aggiungi autorizzazioni per aggiungere nuove autorizzazioni al ruolo.
    2. Deseleziona le autorizzazioni per rimuoverle dal ruolo.
  7. Fai clic su Aggiorna per salvare il ruolo modificato.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Utilizza il comando gcloud iam roles update per aggiornare i ruoli personalizzati. Puoi utilizzare questo comando in due modi:

    • Fornendo un file YAML che contiene la definizione del ruolo aggiornata

    • Utilizzando i flag per specificare la definizione del ruolo aggiornata

    Quando aggiorni un ruolo personalizzato, devi specificare se si applica a livello di organizzazione o di progetto utilizzando i flag --organization=ORGANIZATION_ID o --project=PROJECT_ID. Ogni esempio riportato di seguito crea un ruolo personalizzato a livello di progetto.

    Per aggiornare un ruolo personalizzato utilizzando un file YAML:

    Recupera la definizione corrente del ruolo eseguendo uno dei seguenti comandi:

    • Per ottenere la definizione del ruolo di un ruolo personalizzato a livello di organizzazione, esegui il comando seguente:

      gcloud iam roles describe ROLE_ID --organization=ORGANIZATION_ID
    • Per ottenere la definizione del ruolo di un ruolo personalizzato a livello di progetto, esegui questo comando:

      gcloud iam roles describe ROLE_ID --project=PROJECT_ID

    Ogni valore segnaposto è descritto di seguito:

    • ROLE_ID è il nome del ruolo da aggiornare, ad esempio myCompanyAdmin.

    • ORGANIZATION_ID è l'ID numerico dell'organizzazione, ad esempio 123456789012.

    • PROJECT_ID è il nome del progetto, ad esempio my-project.

    Il comando describe restituisce la definizione del ruolo e include un valore etag che identifica in modo univoco la versione corrente del ruolo. Il valore etag deve essere fornito nella definizione del ruolo aggiornata per garantire che le modifiche simultanee ai ruoli non vengano sovrascritte.

    Il comando describe restituisce il seguente output:

    description: ROLE_DESCRIPTION
    etag: ETAG
    includedPermissions:
    - PERMISSION_1
    - PERMISSION_2
    name: ROLE_NAME
    stage: LAUNCH_STAGE
    title: ROLE_TITLE

    Ogni valore segnaposto è descritto di seguito:

    • ROLE_DESCRIPTION è una breve descrizione del ruolo, ad esempio "My custom role description".

    • ETAG è l'identificatore univoco della versione attuale del ruolo, ad esempio BwVkBkbfr70=.

    • PERMISSION_1 e PERMISSION_2 sono autorizzazioni da includere nel ruolo personalizzato, ad esempio iam.roles.get. Non puoi utilizzare caratteri jolly (*) nei nomi delle autorizzazioni.

    • ROLE_NAME è il nome completo del ruolo, inclusi eventuali prefissi organizations/, projects/ o roles/. Ad esempio, organizations/123456789012/roles/myCompanyAdmin.

    • LAUNCH_STAGE indica la fase di un ruolo nel ciclo di vita del lancio, ad esempio ALPHA, BETA o GA.

    • ROLE_TITLE è un titolo informale per il ruolo, ad esempio "My Company Admin".

    Per aggiornare il ruolo, includi la definizione del ruolo generata in un file YAML o aggiorna il file YAML originale con il valore etag generato.

    Considera il seguente file YAML di esempio, che contiene l'output del comando describe per un ruolo a livello di progetto e aggiunge due autorizzazioni Cloud Storage:

    description: My custom role description.
    etag: BwVkBkbfr70=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    - storage.buckets.get
    - storage.buckets.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    Salva il file YAML, quindi esegui uno dei seguenti comandi:

    • Per aggiornare un ruolo a livello di organizzazione, esegui questo comando:

      gcloud iam roles update ROLE_ID--organization=ORGANIZATION_ID \
          --file=YAML_FILE_PATH
    • Per aggiornare un ruolo a livello di progetto, esegui questo comando:

      gcloud iam roles update ROLE_ID --project=PROJECT_ID \
          --file=YAML_FILE_PATH

    Ogni valore segnaposto è descritto di seguito:

    • ROLE_ID è il nome del ruolo da aggiornare, ad esempio myCompanyAdmin.

    • ORGANIZATION_ID è l'ID numerico dell'organizzazione, ad esempio 123456789012.

    • PROJECT_ID è il nome del progetto, ad esempio my-project-id.

    • YAML_FILE_PATH è il percorso della posizione del file YAML che contiene la definizione del ruolo personalizzato aggiornata.

    Esempi

    Il seguente esempio mostra come aggiornare un ruolo a livello di organizzazione utilizzando un file YAML:

    gcloud iam roles update ROLE_ID --organization=ORGANIZATION_ID \
        --file=YAML_FILE_PATH
    • Per aggiornare un ruolo a livello di progetto, esegui questo comando:

      gcloud iam roles update ROLE_ID --project=PROJECT_ID \
          --file=YAML_FILE_PATH

    Ogni valore segnaposto è descritto di seguito:

    • ROLE_ID è il nome del ruolo da aggiornare, ad esempio myCompanyAdmin.

    • ORGANIZATION_ID è l'ID numerico dell'organizzazione, ad esempio 123456789012.

    • PROJECT_ID è il nome del progetto, ad esempio my-project.

    • YAML_FILE_PATH è il percorso della posizione del file YAML che contiene la definizione del ruolo personalizzato aggiornata.

    Esempi

    Il seguente esempio mostra come aggiornare un ruolo a livello di organizzazione utilizzando un file YAML:

    gcloud iam roles update myCompanyAdmin --organization=123456789012 \
        --file=my-role-definition.yaml

    Se il ruolo è stato aggiornato correttamente, l'output del comando è simile al seguente:

    description: My custom role description.
    etag: BwVkBwDN0lg=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    - storage.buckets.get
    - storage.buckets.list
    name: organizations/123456789012/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    L'esempio seguente mostra come aggiornare un ruolo a livello di progetto utilizzando un file YAML:

    gcloud iam roles update myCompanyAdmin --project=my-project \
        --file=my-role-definition.yaml

    Se il ruolo è stato aggiornato correttamente, l'output del comando è simile al seguente:

    description: My custom role description.
    etag: BwVkBwDN0lg=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    - storage.buckets.get
    - storage.buckets.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    Per aggiornare un ruolo personalizzato utilizzando i flag:

    Ogni parte di una definizione di ruolo può essere aggiornata utilizzando un flag corrispondente. Consulta l'argomento gcloud iam roles update per un elenco di tutti i flag possibili.

    Puoi utilizzare i seguenti flag per aggiungere o rimuovere le autorizzazioni:

    • --add-permissions=PERMISSIONS: aggiunge una o più autorizzazioni separate da virgole al ruolo. Non puoi utilizzare caratteri jolly (*) nei nomi delle autorizzazioni.

    • --remove-permissions=PERMISSIONS: rimuove una o più autorizzazioni separate da virgole dal ruolo. Non puoi utilizzare caratteri jolly (*) nei nomi delle autorizzazioni.

    In alternativa, puoi semplicemente specificare le nuove autorizzazioni utilizzando il flag --permissions=PERMISSIONS e fornendo un elenco di autorizzazioni separate da virgole per sostituire l'elenco di autorizzazioni esistente.

    Per aggiornare altre parti della definizione del ruolo, esegui uno dei seguenti comandi:

    • Per aggiornare un ruolo a livello di organizzazione, esegui questo comando:

      gcloud iam roles update ROLE_ID--organization=ORGANIZATION_ID \
          --title=ROLE_TITLE --description=ROLE_DESCRIPTION \
          --stage=LAUNCH_STAGE
    • Per aggiornare un ruolo a livello di progetto, esegui questo comando:

      gcloud iam roles update ROLE_ID --project=PROJECT_ID \
          --title=ROLE_TITLE --description=ROLE_DESCRIPTION \
          --stage=LAUNCH_STAGE

    Ogni valore segnaposto è descritto di seguito:

    • ROLE_ID è il nome del ruolo, ad esempio myCompanyAdmin.

    • ORGANIZATION_ID è l'ID numerico dell'organizzazione, ad esempio 123456789012.

    • PROJECT_ID è il nome del progetto, ad esempio my-project.

    • ROLE_TITLE è un titolo informale per il ruolo, ad esempio "My Company Admin".

    • ROLE_DESCRIPTION è una breve descrizione del ruolo, ad esempio "My custom role description.".

    • LAUNCH_STAGE indica la fase di un ruolo nel ciclo di vita del lancio, ad esempio ALPHA, BETA o GA.

    Esempi

    Il seguente esempio mostra come aggiungere autorizzazioni a un ruolo a livello di organizzazione utilizzando i flag:

    gcloud iam roles update myCompanyAdmin --organization=123456789012 \
        --add-permissions="storage.buckets.get,storage.buckets.list"

    Se il ruolo è stato aggiornato correttamente, l'output del comando è simile al seguente:

    description: My custom role description.
    etag: BwVkBwDN0lg=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    - storage.buckets.get
    - storage.buckets.list
    name: organizations/123456789012/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    L'esempio seguente mostra come aggiungere autorizzazioni a un ruolo a livello di progetto utilizzando i flag:

    gcloud iam roles update myCompanyAdmin --project=my-project \
        --add-permissions="storage.buckets.get,storage.buckets.list"

    Se il ruolo è stato aggiornato correttamente, l'output del comando è simile al seguente:

    description: My custom role description.
    etag: BwVkBwDN0lg=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    - storage.buckets.get
    - storage.buckets.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

C++

Per scoprire come installare e utilizzare la libreria client per IAM, consulta Librerie client IAM. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API IAM C++.

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& name, std::string const& title) {
  iam::IAMClient client(iam::MakeIAMConnection());
  google::iam::admin::v1::UpdateRoleRequest request;
  request.set_name(name);
  google::iam::admin::v1::Role role;
  role.set_title(title);
  google::protobuf::FieldMask update_mask;
  *update_mask.add_paths() = "title";
  *request.mutable_role() = role;
  *request.mutable_update_mask() = update_mask;
  auto response = client.UpdateRole(request);
  if (!response) throw std::move(response).status();
  std::cout << "Role successfully updated: " << response->DebugString()
            << "\n";
}

C#

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.


using System;
using System.Collections.Generic;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Iam.v1;
using Google.Apis.Iam.v1.Data;

public partial class CustomRoles
{
    public static Role EditRole(string name, string projectId, string newTitle,
        string newDescription, IList<string> newPermissions, string newStage)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });
        // First, get a Role using List() or Get().
        string resource = $"projects/{projectId}/roles/{name}";
        var role = service.Projects.Roles.Get(resource).Execute();
        // Then you can update its fields.
        role.Title = newTitle;
        role.Description = newDescription;
        role.IncludedPermissions = newPermissions;
        role.Stage = newStage;
        role = service.Projects.Roles.Patch(role, resource).Execute();
        Console.WriteLine("Updated role: " + role.Name);
        return role;
    }
}

Go

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

import (
	"context"
	"fmt"
	"io"

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

// editRole modifies a custom role.
func editRole(w io.Writer, projectID, name, newTitle, newDescription, newStage string, newPermissions []string) (*iam.Role, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %w", err)
	}

	resource := "projects/" + projectID + "/roles/" + name
	role, err := service.Projects.Roles.Get(resource).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.Roles.Get: %w", err)
	}
	role.Title = newTitle
	role.Description = newDescription
	role.IncludedPermissions = newPermissions
	role.Stage = newStage
	role, err = service.Projects.Roles.Patch(resource, role).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.Roles.Patch: %w", err)
	}
	fmt.Fprintf(w, "Updated role: %v", role.Name)
	return role, nil
}

Java

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.Role;
import com.google.iam.admin.v1.Role.RoleLaunchStage;
import com.google.iam.admin.v1.UpdateRoleRequest;
import com.google.protobuf.FieldMask;
import java.io.IOException;

/** Edit role metadata. Specifically, update description and launch stage. */
public class EditRole {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // Role ID must point to an existing role.
    String projectId = "your-project-id";
    String roleId = "a unique identifier (e.g. testViewer)";
    String description = "a new description of the role";

    editRole(projectId, roleId, description);
  }

  public static void editRole(String projectId, String roleId, String description)
      throws IOException {
    String roleName = "projects/" + projectId + "/roles/" + roleId;
    Role.Builder roleBuilder =
        Role.newBuilder()
            .setName(roleName)
            .setDescription(description)
            // See launch stage enums at
            // https://cloud.google.com/iam/docs/reference/rpc/google.iam.admin.v1#rolelaunchstage
            .setStage(RoleLaunchStage.GA);
    FieldMask fieldMask = FieldMask.newBuilder().addPaths("description").addPaths("stage").build();
    UpdateRoleRequest updateRoleRequest =
        UpdateRoleRequest.newBuilder()
            .setName(roleName)
            .setRole(roleBuilder)
            .setUpdateMask(fieldMask)
            .build();

    // Initialize client for sending requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      Role result = iamClient.updateRole(updateRoleRequest);
      System.out.println("Edited role:\n" + result);
    }
  }
}

Python

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

from google.api_core.exceptions import NotFound
from google.cloud.iam_admin_v1 import IAMClient, Role, UpdateRoleRequest

from snippets.get_role import get_role


def edit_role(role: Role) -> Role:
    """Edits an existing IAM role in a GCP project.

    Args:
        role: google.cloud.iam_admin_v1.Role object to be updated

    Returns: Updated google.cloud.iam_admin_v1.Role object
    """
    client = IAMClient()
    request = UpdateRoleRequest(name=role.name, role=role)
    try:
        role = client.update_role(request)
        print(f"Edited role: {role.name}: {role}")
        return role
    except NotFound:
        print(f"Role [{role.name}] not found, take some actions")

REST

Il metodo roles.patch aggiorna un ruolo personalizzato in un progetto o un'organizzazione.

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

Obbligatorio:

  • RESOURCE_TYPE: il tipo di risorsa di cui vuoi gestire i ruoli personalizzati. Utilizza il valore projects o organizations.
  • RESOURCE_ID: l'ID progetto o l'ID organizzazione di cui vuoi gestire i ruoli personalizzati. Gli ID progetto sono stringhe alfanumeriche, comemy-project. Gli ID organizzazione sono numerici, ad esempio 123456789012.
  • ROLE_NAME: il nome completo del ruolo, inclusi eventuali prefissi organizations/, projects/ o roles/. Ad esempio, organizations/123456789012/roles/myCompanyAdmin.

Consigliato:

  • ETAG: Un identificatore per una versione del ruolo. Includi questo campo per evitare di sovrascrivere altre modifiche ai ruoli.

(Facoltativo) Definisci uno o più dei seguenti valori:

  • ROLE_TITLE: Il titolo leggibile del ruolo. Ad esempio, My Company Admin.
  • ROLE_DESCRIPTION: una descrizione del ruolo. Ad esempio, "The company admin role allows company admins to access important resources".
  • PERMISSION_1 e PERMISSION_2: le autorizzazioni che vuoi includere nel ruolo. Ad esempio, storage.objects.update. Non puoi utilizzare caratteri jolly (*) nei nomi delle autorizzazioni.
  • LAUNCH_STAGE: La fase di lancio attuale del ruolo. Questo campo può contenere uno dei seguenti valori: EAP, ALPHA, BETA, GA, DEPRECATED o DISABLED.

Metodo HTTP e URL:

PATCH https://iam.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/roles

Corpo JSON della richiesta:

{
  "roleId": "ROLE_NAME",
  "title": "ROLE_TITLE",
  "description": "ROLE_DESCRIPTION",
  "includedPermissions": [
    "PERMISSION_1",
    "PERMISSION_2"
  ],
  "stage": "LAUNCH-STAGE",
  "etag": "ETAG"
}

Per inviare la richiesta, espandi una di queste opzioni:

La risposta contiene una definizione del ruolo abbreviata che include il nome del ruolo, i campi che hai aggiornato e un tag ETag che identifica la versione corrente del ruolo.

{
  "name": "projects/test-project-1000092/roles/myCompanyAdmin",
  "title": "My Updated Company Admin",
  "includedPermissions": [
    "storage.buckets.get",
    "storage.buckets.list"
  ],
  "stage": "BETA",
  "etag": "BwWoyDpAxBc="
}

Disabilitare un ruolo personalizzato

Puoi disattivare un ruolo personalizzato modificando la fase di lancio in DISABLED. Quando un ruolo viene disattivato, tutti i binding dei ruoli correlati vengono disattivati, il che significa che la concessione del ruolo a un utente non ha effetto.

Console

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

    Vai alla pagina Ruoli

  2. Fai clic sull'elenco a discesa "Seleziona un progetto" nella parte superiore della pagina.

  3. Seleziona la tua organizzazione o il tuo progetto.

  4. Seleziona un ruolo personalizzato e fai clic su Disattiva.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Utilizza il comando gcloud iam roles update per disattivare un ruolo personalizzato impostando la fase di lancio su DISABLED.

    Come descritto nella scheda gcloud della sezione Modifica di un ruolo personalizzato esistente, puoi aggiornare un ruolo personalizzato esistente nei due modi seguenti:

    • Fornendo un file YAML che contiene la definizione del ruolo aggiornata

    • Utilizzando i flag per specificare la definizione del ruolo aggiornata

    Il modo più semplice per disattivare un ruolo personalizzato esistente è utilizzare il flag --stage e impostarlo su DISABLED. Esegui uno dei seguenti comandi:

    • Per disattivare un ruolo a livello di organizzazione, esegui questo comando:

      gcloud iam roles update ROLE_ID--organization=ORGANIZATION_ID \
          --stage=DISABLED
    • Per disattivare un ruolo a livello di progetto, esegui questo comando:

      gcloud iam roles update ROLE_ID --project=PROJECT_ID \
          --stage=DISABLED

    Ogni valore segnaposto è descritto di seguito:

    • ROLE_ID è il nome del ruolo, ad esempio myCompanyAdmin.

    • ORGANIZATION_ID è l'ID numerico dell'organizzazione, ad esempio 123456789012.

    • PROJECT_ID è il nome del progetto, ad esempio my-project.

    Esempi

    Il seguente esempio mostra come disattivare un ruolo a livello di organizzazione:

    gcloud iam roles update myCompanyAdmin --organization=123456789012 \
        --stage=DISABLED

    Se il ruolo è stato aggiornato correttamente, l'output del comando è simile al seguente:

    description: My custom role description.
    etag: BwVkB5NLIQw=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: organizations/123456789012/roles/myCompanyAdmin
    stage: DISABLED
    title: My Company Admin

    Il seguente esempio mostra come disattivare un ruolo a livello di progetto:

    gcloud iam roles update myCompanyAdmin --project=my-project \
        --stage=DISABLED

    Se il ruolo è stato aggiornato correttamente, l'output del comando è simile al seguente:

    description: My custom role description.
    etag: BwVkB5NLIQw=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: DISABLED
    title: My Company Admin

C++

Aggiorna il campo stage del ruolo a DISABLED.

C#

Aggiorna il campo stage del ruolo a DISABLED.

Go

Aggiorna il campo stage del ruolo a DISABLED.

Java

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.Role;
import com.google.iam.admin.v1.UpdateRoleRequest;
import com.google.protobuf.FieldMask;
import java.io.IOException;

public class DisableRole {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // Role ID must point to an existing role.
    String projectId = "your-project-id";
    String roleId = "testRole";

    Role role = disableRole(projectId, roleId);
    System.out.println("Role name: " + role.getName());
    System.out.println("Role stage: " + role.getStage());
  }

  public static Role disableRole(String projectId, String roleId)
          throws IOException {
    String roleName = "projects/" + projectId + "/roles/" + roleId;
    Role role = Role.newBuilder()
                    .setName(roleName)
                    .setStage(Role.RoleLaunchStage.DISABLED)
                    .build();

    FieldMask fieldMask = FieldMask.newBuilder().addPaths("stage").build();
    UpdateRoleRequest updateRoleRequest =
              UpdateRoleRequest.newBuilder()
                      .setName(roleName)
                      .setRole(role)
                      .setUpdateMask(fieldMask)
                      .build();

    // Initialize client for sending requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      return iamClient.updateRole(updateRoleRequest);
    }
  }
}

Python

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

from google.api_core.exceptions import NotFound
from google.cloud.iam_admin_v1 import GetRoleRequest, IAMClient, Role, UpdateRoleRequest


def disable_role(project_id: str, role_id: str) -> Role:
    """Disables an IAM role in a GCP project.

    Args:
        project_id: GCP project ID
        role_id: ID of GCP IAM role

    Returns: Updated google.cloud.iam_admin_v1.Role object with disabled stage
    """
    client = IAMClient()
    name = f"projects/{project_id}/roles/{role_id}"
    get_request = GetRoleRequest(name=name)
    try:
        role = client.get_role(get_request)
        role.stage = Role.RoleLaunchStage.DISABLED
        update_request = UpdateRoleRequest(name=role.name, role=role)
        client.update_role(update_request)
        print(f"Disabled role: {role_id}: {role}")
        return role
    except NotFound as exc:
        raise NotFound(f'Role with id [{role_id}] not found, take some actions') from exc

REST

Il metodo roles.patch ti consente di modificare la fase di lancio di un ruolo personalizzato in DISABLED, che disattiva il ruolo.

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

  • RESOURCE_TYPE: il tipo di risorsa di cui vuoi gestire i ruoli personalizzati. Utilizza il valore projects o organizations.
  • RESOURCE_ID: l'ID progetto o l'ID organizzazione di cui vuoi gestire i ruoli personalizzati. Gli ID progetto sono stringhe alfanumeriche, comemy-project. Gli ID organizzazione sono numerici, ad esempio 123456789012.
  • ROLE_NAME: il nome completo del ruolo, inclusi eventuali prefissi organizations/, projects/ o roles/. Ad esempio, organizations/123456789012/roles/myCompanyAdmin.
  • ETAG: Un identificatore per una versione del ruolo. Includi questo campo per evitare di sovrascrivere altre modifiche ai ruoli.

Metodo HTTP e URL:

PATCH https://iam.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/roles

Corpo JSON della richiesta:

{
  "roleId": "ROLE_NAME",
  "stage": DISABLED,
  "etag": "ETAG"
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "name": "projects/test-project-1000092/roles/myCompanyAdmin",
  "stage": "DISABLED",
  "etag": "BwWoyDpAxBc="
}

Elenco dei ruoli

Puoi elencare tutti i ruoli personalizzati creati nel tuo progetto o nella tua organizzazione.

Console

Nella console Google Cloud , vai alla pagina Ruoli.

Vai alla pagina Ruoli

Nella pagina sono elencati tutti i ruoli personalizzati per l'organizzazione o il progetto che hai selezionato.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Utilizza il comando gcloud iam roles list per elencare i ruoli personalizzati e predefiniti per un progetto o un'organizzazione:

    • Per elencare i ruoli personalizzati a livello di organizzazione, esegui questo comando:

      gcloud iam roles list --organization=ORGANIZATION_ID
    • Per elencare i ruoli personalizzati a livello di progetto, esegui questo comando:

      gcloud iam roles list --project=PROJECT_ID

    Ogni valore segnaposto è descritto di seguito:

    • ORGANIZATION_ID è l'ID numerico dell'organizzazione, ad esempio 123456789012.

    • PROJECT_ID è il nome del progetto, ad esempio my-project.

    Per elencare i ruoli eliminati, puoi anche specificare il flag --show-deleted.

    Esegui questo comando per elencare i ruoli predefiniti:

    gcloud iam roles list

C++

Per scoprire come installare e utilizzare la libreria client per IAM, consulta Librerie client IAM. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API IAM C++.

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& project) {
  iam::IAMClient client(iam::MakeIAMConnection());
  int count = 0;
  google::iam::admin::v1::ListRolesRequest request;
  request.set_parent(project);
  for (auto& role : client.ListRoles(request)) {
    if (!role) throw std::move(role).status();
    std::cout << "Roles successfully retrieved: " << role->name() << "\n";
    ++count;
  }
  if (count == 0) {
    std::cout << "No roles found in project: " << project << "\n";
  }
}

C#

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.


using System;
using System.Collections.Generic;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Iam.v1;
using Google.Apis.Iam.v1.Data;

public partial class CustomRoles
{
    public static IList<Role> ListRoles(string projectId)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var response = service.Projects.Roles.List("projects/" + projectId)
            .Execute();
        foreach (var role in response.Roles)
        {
            Console.WriteLine(role.Name);
        }
        return response.Roles;
    }
}

Go

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

import (
	"context"
	"fmt"
	"io"

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

// listRoles lists a project's roles.
func listRoles(w io.Writer, projectID string) ([]*iam.Role, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %w", err)
	}

	response, err := service.Projects.Roles.List("projects/" + projectID).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.Roles.List: %w", err)
	}
	for _, role := range response.Roles {
		fmt.Fprintf(w, "Listing role: %v\n", role.Name)
	}
	return response.Roles, nil
}

Java

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.cloud.iam.admin.v1.IAMClient.ListRolesPagedResponse;
import com.google.iam.admin.v1.ListRolesRequest;
import java.io.IOException;

/** List roles in a project. */
public class ListRoles {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variable before running the sample.
    String projectId = "your-project-id";

    listRoles(projectId);
  }

  public static void listRoles(String projectId) throws IOException {
    ListRolesRequest listRolesRequest =
        ListRolesRequest.newBuilder().setParent("projects/" + projectId).build();

    // Initialize client for sending requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      ListRolesPagedResponse listRolesResponse = iamClient.listRoles(listRolesRequest);
      listRolesResponse.iterateAll().forEach(role -> System.out.println(role));
    }
  }
}

Python

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

from google.cloud.iam_admin_v1 import IAMClient, ListRolesRequest, RoleView
from google.cloud.iam_admin_v1.services.iam.pagers import ListRolesPager


def list_roles(
    project_id: str, show_deleted: bool = True, role_view: RoleView = RoleView.BASIC
) -> ListRolesPager:
    """Lists IAM roles in a GCP project.

    Args:
        project_id: GCP project ID
        show_deleted: Whether to include deleted roles in the results
        role_view: Level of detail for the returned roles (e.g., BASIC or FULL)

    Returns: A pager for traversing through the roles
    """

    client = IAMClient()
    parent = f"projects/{project_id}"
    request = ListRolesRequest(parent=parent, show_deleted=show_deleted, view=role_view)
    roles = client.list_roles(request)
    for page in roles.pages:
        for role in page.roles:
            print(role)
    print("Listed all iam roles")
    return roles

REST

Il metodo roles.list elenca tutti i ruoli personalizzati in un progetto o in un'organizzazione.

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

  • RESOURCE_TYPE: il tipo di risorsa di cui vuoi gestire i ruoli personalizzati. Utilizza il valore projects o organizations.
  • RESOURCE_ID: l'ID progetto o l'ID organizzazione di cui vuoi gestire i ruoli personalizzati. Gli ID progetto sono stringhe alfanumeriche, comemy-project. Gli ID organizzazione sono numerici, ad esempio 123456789012.
  • ROLE_VIEW: (Facoltativo). Le informazioni da includere per i ruoli restituiti. Per includere le autorizzazioni dei ruoli, imposta questo campo su FULL. Per escludere le autorizzazioni dei ruoli, imposta questo campo su BASIC. Il valore predefinito è BASIC.
  • PAGE_SIZE: (Facoltativo). Il numero di ruoli da includere nella risposta. Il valore predefinito è 300 e il valore massimo è 1000. Se il numero di ruoli è maggiore della dimensione della pagina, la risposta contiene un token di paginazione che puoi utilizzare per recuperare la pagina successiva dei risultati.
  • NEXT_PAGE_TOKEN: (Facoltativo). Il token di paginazione restituito in una risposta precedente da questo metodo. Se specificato, l'elenco dei ruoli inizierà dal punto in cui è terminata la richiesta precedente.

Metodo HTTP e URL:

GET https://iam.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/roles?view=ROLE_VIEW&pageSize=PAGE_SIZE&pageToken=NEXT_PAGE_TOKEN

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "roles": [
    {
      "name": "projects/my-project/roles/customRole1",
      "title": "First Custom Role",
      "description": "Created on: 2020-06-01",
      "etag": "BwWiPg2fmDE="
    },
    {
      "name": "projects/my-project/roles/customRole2",
      "title": "Second Custom Role",
      "description": "Created on: 2020-06-07",
      "etag": "BwWiuX53Wi0="
    }
  ]
}

Eliminazione di un ruolo personalizzato

Puoi eliminare qualsiasi ruolo personalizzato nel tuo progetto o nella tua organizzazione.

Console

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

    Vai alla pagina Ruoli

  2. Seleziona il ruolo che vuoi eliminare e fai clic su Elimina nella parte superiore della pagina.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Utilizza il comando gcloud iam roles delete per eliminare un ruolo personalizzato:

    • Per eliminare un ruolo personalizzato a livello di organizzazione, esegui questo comando:

      gcloud iam roles delete ROLE_ID --organization=ORGANIZATION_ID
    • Per eliminare un ruolo personalizzato a livello di progetto, esegui questo comando:

      gcloud iam roles delete ROLE_ID --project=PROJECT_ID

    Ogni valore segnaposto è descritto di seguito:

    • ROLE_ID è il nome del ruolo, ad esempio myCompanyAdmin.

    • ORGANIZATION_ID è l'ID numerico dell'organizzazione, ad esempio 123456789012.

    • PROJECT_ID è il nome del progetto, ad esempio my-project.

    Il ruolo non verrà incluso in gcloud iam roles list, a meno che non sia incluso il flag --show-deleted. I ruoli eliminati sono indicati dal blocco deleted: true in una risposta list, ad esempio:

    ---
    deleted: true
    description: My custom role description.
    etag: BwVkB5NLIQw=
    name: projects/my-project/roles/myCompanyAdmin
    title: My Company Admin
    ---
    

C++

Per scoprire come installare e utilizzare la libreria client per IAM, consulta Librerie client IAM. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API IAM C++.

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& name) {
  iam::IAMClient client(iam::MakeIAMConnection());
  google::iam::admin::v1::DeleteRoleRequest request;
  request.set_name(name);
  auto response = client.DeleteRole(request);
  if (!response) throw std::move(response).status();
  std::cout << "Role successfully deleted: " << response->DebugString()
            << "\n";
}

C#

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.


using System;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Iam.v1;
using Google.Apis.Iam.v1.Data;

public partial class CustomRoles
{
    public static void DeleteRole(string name, string projectId)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        service.Projects.Roles.Delete(
            $"projects/{projectId}/roles/{name}").Execute();
        Console.WriteLine("Deleted role: " + name);
    }
}

Go

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

import (
	"context"
	"fmt"
	"io"

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

// deleteRole deletes a custom role.
func deleteRole(w io.Writer, projectID, name string) error {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return fmt.Errorf("iam.NewService: %w", err)
	}

	_, err = service.Projects.Roles.Delete("projects/" + projectID + "/roles/" + name).Do()
	if err != nil {
		return fmt.Errorf("Projects.Roles.Delete: %w", err)
	}
	fmt.Fprintf(w, "Deleted role: %v", name)
	return nil
}

Java

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.DeleteRoleRequest;
import java.io.IOException;

/** Delete role. */
public class DeleteRole {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // Role ID must point to an existing role.
    String projectId = "your-project-id";
    String roleId = "a unique identifier (e.g. testViewer)";

    deleteRole(projectId, roleId);
  }

  public static void deleteRole(String projectId, String roleId) throws IOException {
    String roleName = "projects/" + projectId + "/roles/" + roleId;
    DeleteRoleRequest deleteRoleRequest = DeleteRoleRequest.newBuilder().setName(roleName).build();

    // Initialize client for sending requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      iamClient.deleteRole(deleteRoleRequest);
      System.out.println("Role deleted.");
    }
  }
}

Python

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

from google.api_core.exceptions import FailedPrecondition, NotFound
from google.cloud.iam_admin_v1 import (
    DeleteRoleRequest,
    IAMClient,
    Role,
    UndeleteRoleRequest,
)
def delete_role(project_id: str, role_id: str) -> Role:
    """Deletes iam role in GCP project. Can be undeleted later.
    Args:
        project_id: GCP project id
        role_id: id of GCP iam role

    Returns: google.cloud.iam_admin_v1.Role object
    """
    client = IAMClient()
    name = f"projects/{project_id}/roles/{role_id}"
    request = DeleteRoleRequest(name=name)
    try:
        role = client.delete_role(request)
        print(f"Deleted role: {role_id}: {role}")
        return role
    except NotFound:
        print(f"Role with id [{role_id}] not found, take some actions")
    except FailedPrecondition as err:
        print(f"Role with id [{role_id}] already deleted, take some actions)", err)

REST

Il metodo roles.delete elimina un ruolo personalizzato in un progetto o in un'organizzazione.

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

  • ROLE_NAME: il nome completo del ruolo, inclusi eventuali prefissi organizations/, projects/ o roles/. Ad esempio, organizations/123456789012/roles/myCompanyAdmin.

Metodo HTTP e URL:

DELETE https://iam.googleapis.com/v1/ROLE_NAME

Per inviare la richiesta, espandi una di queste opzioni:

La risposta contiene la definizione del ruolo eliminato.

{
  "name": "projects/my-project/roles/myCompanyAdmin",
  "title": "My Company Admin",
  "description": "My custom role description.",
  "includedPermissions": [
    "iam.roles.get",
    "iam.roles.list"
  ],
  "etag": "BwWiPg2fmDE=",
  "deleted": true
}

Quando un ruolo viene eliminato, tutti i binding dei ruoli che fanno riferimento al ruolo rimangono nelle norme di autorizzazione, ma non hanno alcun effetto. Puoi recuperare un ruolo entro 7 giorni. Durante questo periodo di 7 giorni, la console Google Cloud mostra che il ruolo è stato eliminato. Puoi anche elencare i ruoli eliminati in modo programmatico, ma vengono omessi per impostazione predefinita.

Dopo 7-14 giorni, il ruolo viene pianificato per l'eliminazione definitiva. A questo punto, il ruolo non viene più conteggiato per il raggiungimento del limite di 300 ruoli personalizzati per organizzazione o 300 ruoli personalizzati per progetto.

La procedura di eliminazione definitiva richiede 30 giorni. Durante il periodo di 30 giorni, il ruolo e tutti i binding associati vengono rimossi definitivamente e non puoi creare un nuovo ruolo con lo stesso ID ruolo.

Dopo l'eliminazione definitiva del ruolo, fino a 44 giorni dopo la richiesta di eliminazione iniziale, puoi creare un nuovo ruolo utilizzando lo stesso ID ruolo.

Recuperare un ruolo personalizzato

L'annullamento dell'eliminazione di un ruolo lo riporta allo stato precedente.

I ruoli possono essere ripristinati solo entro 7 giorni. Dopo 7 giorni, il ruolo può essere eliminato definitivamente in qualsiasi momento e tutti i binding dei ruoli che fanno riferimento al ruolo vengono rimossi.

Console

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

    Vai alla pagina Ruoli

  2. Individua il ruolo da ripristinare, fai clic sull'icona Altro alla fine della riga e fai clic su Ripristina.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Utilizza il comando gcloud iam roles undelete per ripristinare un ruolo personalizzato:

    • Per annullare l'eliminazione di un ruolo personalizzato a livello di organizzazione, esegui questo comando:

      gcloud iam roles undelete ROLE_ID --organization=ORGANIZATION_ID
    • Per annullare l'eliminazione di un ruolo personalizzato a livello di progetto, esegui questo comando:

      gcloud iam roles undelete ROLE_ID --project=PROJECT_ID

    Ogni valore segnaposto è descritto di seguito:

    • ROLE_ID è il nome del ruolo, ad esempio myCompanyAdmin.

    • ORGANIZATION_ID è l'ID numerico dell'organizzazione, ad esempio 123456789012.

    • PROJECT_ID è il nome del progetto, ad esempio my-project.

    Esempi

    L'esempio seguente mostra come recuperare un ruolo personalizzato a livello di organizzazione:

    gcloud iam roles undelete myCompanyAdmin --organization=123456789012

    Se il ruolo è stato eliminato correttamente, l'output del comando è simile al seguente:

    description: My custom role description.
    etag: BwVkCAx9W6w=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: organizations/123456789012/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    Il seguente esempio mostra come recuperare un ruolo personalizzato a livello di progetto:

    gcloud iam roles undelete myCompanyAdmin --project=my-project

    Se il ruolo è stato eliminato correttamente, l'output del comando è simile al seguente:

    description: My custom role description.
    etag: BwVkCAx9W6w=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

C++

Per scoprire come installare e utilizzare la libreria client per IAM, consulta Librerie client IAM. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API IAM C++.

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& name) {
  iam::IAMClient client(iam::MakeIAMConnection());
  google::iam::admin::v1::UndeleteRoleRequest request;
  request.set_name(name);
  auto response = client.UndeleteRole(request);
  if (!response) throw std::move(response).status();
  std::cout << "Role successfully undeleted: " << response->DebugString()
            << "\n";
}

C#

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.


using System;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Iam.v1;
using Google.Apis.Iam.v1.Data;

public partial class CustomRoles
{
    public static Role UndeleteRole(string name, string projectId)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        string resource = $"projects/{projectId}/roles/{name}";
        var role = service.Projects.Roles.Undelete(
            new UndeleteRoleRequest(), resource).Execute();
        Console.WriteLine("Undeleted role: " + role.Name);
        return role;
    }
}

Go

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

import (
	"context"
	"fmt"
	"io"

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

// undeleteRole restores a deleted custom role.
func undeleteRole(w io.Writer, projectID, name string) (*iam.Role, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %w", err)
	}

	resource := "projects/" + projectID + "/roles/" + name
	request := &iam.UndeleteRoleRequest{}
	role, err := service.Projects.Roles.Undelete(resource, request).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.Roles.Undelete: %w", err)
	}
	fmt.Fprintf(w, "Undeleted role: %v", role.Name)
	return role, nil
}

Java

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.Role;
import com.google.iam.admin.v1.UndeleteRoleRequest;
import java.io.IOException;

/**
 * Undelete a role to return it to its previous state. Undeleting only works on roles that were
 * deleted in the past 7 days.
 */
public class UndeleteRole {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // Role ID must point to a role that was deleted in the past 7 days.
    String projectId = "your-project-id";
    String roleId = "a unique identifier (e.g. testViewer)";

    undeleteRole(projectId, roleId);
  }

  public static void undeleteRole(String projectId, String roleId) throws IOException {
    String roleName = "projects/" + projectId + "/roles/" + roleId;
    UndeleteRoleRequest undeleteRoleRequest =
        UndeleteRoleRequest.newBuilder().setName(roleName).build();

    // Initialize client for sending requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      Role result = iamClient.undeleteRole(undeleteRoleRequest);
      System.out.println("Undeleted role:\n" + result);
    }
  }
}

Python

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

Per autenticarti in IAM, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

from google.api_core.exceptions import FailedPrecondition, NotFound
from google.cloud.iam_admin_v1 import (
    DeleteRoleRequest,
    IAMClient,
    Role,
    UndeleteRoleRequest,
)
def undelete_role(project_id: str, role_id: str) -> Role:
    """Undeleted deleted iam role in GCP project.

    Args:
        project_id: GCP project id
        role_id: id of GCP iam role
    """
    client = IAMClient()
    name = f"projects/{project_id}/roles/{role_id}"
    request = UndeleteRoleRequest(name=name)
    try:
        role = client.undelete_role(request)
        print(f"Undeleted role: {role_id}: {role}")
        return role
    except NotFound:
        print(f"Role with id [{role_id}] not found, take some actions")
    except FailedPrecondition as err:
        print(f"Role with id [{role_id}] is not deleted, take some actions)", err)

REST

Il metodo roles.undelete annulla l'eliminazione di un ruolo personalizzato in un progetto o in un'organizzazione.

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

  • ROLE_NAME: il nome completo del ruolo, inclusi eventuali prefissi organizations/, projects/ o roles/. Ad esempio, organizations/123456789012/roles/myCompanyAdmin.
  • ETAG: Un identificatore per una versione del ruolo. Includi questo campo per evitare di sovrascrivere altre modifiche ai ruoli.

Metodo HTTP e URL:

POST https://iam.googleapis.com/v1/ROLE_NAME:undelete

Corpo JSON della richiesta:

{
  "etag": "ETAG"
}

Per inviare la richiesta, espandi una di queste opzioni:

La risposta contiene la definizione del ruolo eliminato.

{
  "name": "projects/my-project/roles/myCompanyAdmin",
  "title": "My Company Admin",
  "description": "My custom role description.",
  "includedPermissions": [
    "iam.roles.get",
    "iam.roles.list"
  ],
  "etag": "BwWiPg2fmDE="
}

Passaggi successivi