Crea y administra roles personalizados

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

En esta página, se describe cómo crear y administrar roles personalizados de la administración de identidades y accesos (IAM). La administración de roles incluye la modificación, la inhabilitación, la enumeración, la eliminación y la recuperación de roles.

Antes de comenzar

Roles requeridos

A fin de obtener los permisos que necesitas para crear y administrar roles personalizados, pídele a tu administrador que te otorgue los siguientes roles de IAM:

  • Para administrar roles en un proyecto: administrador de roles (roles/iam.roleAdmin) en el proyecto en el que deseas administrar roles
  • Para administrar roles de una organización: administrador de roles de la organización (roles/iam.organizationRoleAdmin) en la organización en la que deseas administrar roles

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.

Visualiza los permisos disponibles para los proyectos, las carpetas y las organizaciones

Puedes crear roles personalizados para una organización completa o para un proyecto específico de esa organización. Los permisos que están disponibles para los roles personalizados dependen de dónde crees el rol. Por ejemplo, si un permiso solo se puede usar a nivel de la organización, no puedes incluir ese permiso en un rol personalizado a nivel del proyecto.

A fin de verificar qué permisos están disponibles para los roles personalizados a nivel de proyecto y de la organización, puedes usar la CLI de gcloud o la API de Identity and Access Management a fin de obtener una lista de los permisos que están disponibles en una organización o un proyecto específicos. Por ejemplo, puedes obtener todos los permisos disponibles para los roles personalizados que se crean en el proyecto.

Es posible que algunos permisos no sean visibles para ti o no se puedan usar en un rol personalizado, incluso si son compatibles con roles personalizados. Por ejemplo, puede que el uso de un permiso no esté habilitado en roles personalizados si no habilitaste la API para el servicio.

Para obtener más información sobre los permisos que puedes agregar a los roles personalizados, consulta Permisos admitidos.

gcloud CLI

Usa el comando gcloud iam list-testable-permissions a fin de obtener una lista de permisos disponibles para roles personalizados en una organización o proyecto específico. En la respuesta, se enumeran los permisos que puedes usar en los roles personalizados de esa organización o proyecto.

A fin de enumerar los permisos que están disponibles en roles personalizados para una organización o un proyecto, ejecuta este comando:

gcloud iam list-testable-permissions full-resource-name \
    --filter="customRolesSupportLevel!=NOT_SUPPORTED"

Reemplaza full-resource-name por uno de los siguientes valores:

  • Proyecto: //cloudresourcemanager.googleapis.com/projects/project-id (por ejemplo, //cloudresourcemanager.googleapis.com/projects/my-project-id)
  • Organización: //cloudresourcemanager.googleapis.com/organizations/numeric-id (por ejemplo, //cloudresourcemanager.googleapis.com/organizations/123456789012)

Los resultados indican si cada permiso es compatible con roles personalizados. Los permisos que no tienen un campo customRolesSupportLevel son totalmente compatibles.

El comando list-testable-permissions puede mostrar cientos de resultados. En este ejemplo parcial, se muestra el formato de cada resultado:

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

REST

El método permissions.queryTestablePermissions permite enumerar los permisos disponibles en una organización o proyecto.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • full-resource-name: Un URI que consiste en el nombre del servicio y la ruta al recurso. Para ver ejemplos, consulta Nombres completos de recursos.
  • page-size: Opcional. Es la cantidad de permisos que se incluirán en la respuesta. El valor predeterminado es 100 y el valor máximo es 1,000. Si la cantidad de permisos es mayor que el tamaño de la página, la respuesta contiene un token de paginación que puedes usar para consultar la siguiente página de resultados.
  • next-page-token: Opcional. Es el token de paginación que se mostró en una respuesta anterior de este método. Si se especifica, la lista de permisos que se pueden probar comenzará desde el punto en que finalizó la solicitud anterior.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
  "fullResourceName": "full-resource-name"
  "pageSize": page-size,
  "pageToken": "next-page-token"
}

Para enviar tu solicitud, expande una de estas opciones:

La respuesta contiene la lista de permisos.

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

C++

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM C++.

namespace iam = ::google::cloud::iam;
[](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#

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM C#.


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

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM Go.

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: %v", err)
	}

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

Python

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM Python.

def query_testable_permissions(resource):
    """Lists valid permissions for a resource."""

    # pylint: disable=no-member
    permissions = service.permissions().queryTestablePermissions(body={
        'fullResourceName': resource
    }).execute()['permissions']
    for p in permissions:
        print(p['name'])

Obtén los metadatos del rol

Antes de crear un rol personalizado, es posible que desees obtener los metadatos para los roles predefinidos y personalizados. Los metadatos de rol incluyen el ID de rol y los permisos contenidos en el rol. Puedes ver los metadatos con la consola de Google Cloud o la API de IAM.

Para ver los metadatos de rol, usa uno de los siguientes métodos:

Console

  1. En la consola de Google Cloud, ve a la página Roles.

    Ir a la página Roles

  2. Selecciona tu organización o proyecto de la lista desplegable en la parte superior de la página.

  3. Selecciona la casilla de verificación de uno o más roles para ver los permisos de rol. El panel lateral derecho muestra los permisos contenidos en los roles, si los hay.

Los íconos de la columna Tipo (Type) indican si es un rol personalizado o un rol predefinido

Si deseas buscar todas las funciones que incluyen un permiso específico, escribe el nombre del permiso en el cuadro Filtro en la parte superior de la lista de funciones.

gcloud CLI

Usa el comando gcloud iam roles describe para ver los metadatos de las funciones predefinidas y personalizadas.

Para ver los metadatos de un rol predefinido, ejecuta el siguiente comando de :

gcloud iam roles describe role-id

role-id es el ID del rol. Los roles predefinidos incluyen el prefijo role en sus ID, por ejemplo, roles/iam.roleViewer.

En el siguiente ejemplo, se demuestra la salida del comando describe cuando se ejecuta en el rol predefinido 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

Para ver los metadatos de un rol personalizado, ejecuta uno de los siguientes comandos :

  • Para ver los metadatos de un rol personalizado creada a nivel de la organización, ejecuta el siguiente comando:

    gcloud iam roles describe --organization=organization-id role-id
    
  • Para ver los metadatos de un rol personalizado creado a nivel de proyecto, ejecuta el siguiente comando:

    gcloud iam roles describe --project=project-id role-id
    

Cada valor de marcador de posición se describe a continuación:

  • organization-id es el ID numérico de la organización, como 123456789012.
  • project-id es el nombre del proyecto, como my-project-id.
  • role-id es el ID del rol, sin incluir los prefijos como projects/, organizations/ o roles/. Por ejemplo, myCompanyAdmin.

Para obtener más información, consulta la documentación de referencia de gcloud iam roles describe.

REST

El método roles.get permite obtener la definición de una función.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • role-name: Es el nombre completo del rol, incluidos los prefijos organizations/, projects/ o roles/. Por ejemplo: organizations/123456789012/roles/myCompanyAdmin

Método HTTP y URL:

GET https://iam.googleapis.com/v1/full-role-id

Para enviar tu solicitud, expande una de estas opciones:

La respuesta contiene la definición de la función.

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

C++

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM C++.

namespace iam = ::google::cloud::iam;
[](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#

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM C#.


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

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM Go.

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: %v", err)
	}

	role, err := service.Roles.Get(name).Do()
	if err != nil {
		return nil, fmt.Errorf("Roles.Get: %v", 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
}

Python

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM Python.

def get_role(name):
    """Gets a role."""

    # pylint: disable=no-member
    role = service.roles().get(name=name).execute()
    print(role['name'])
    for permission in role['includedPermissions']:
        print(permission)

Crea un rol personalizado

Puedes crear un rol personalizado a nivel del proyecto o de la organización.

Un rol personalizado a nivel de la organización puede incluir cualquiera de los permisos de IAM compatibles con los roles personalizados. Un rol personalizado a nivel del proyecto puede contener cualquier permiso admitido, excepto los permisos que solo se pueden usar a nivel de la organización o carpeta, como resourcemanager.organizations.get. Si intentas agregar estos permisos a un rol personalizada a nivel de proyecto, verás un mensaje de error:

Consola

Se muestra un mensaje que advierte que no es aplicable para roles personalizados a nivel de proyecto. De forma automática, se anulará la selección del permiso en la lista de permisos incluidos y podrás continuar con la creación del rol.

gcloud

Se muestra el siguiente mensaje de error: INVALID_ARGUMENT: Permission PERMISSION is not valid. El rol personalizado no se creará hasta que quites el permiso de la definición del rol y vuelvas a intentar realizar la operación.

API de REST

Se muestra el siguiente mensaje de error: Permission PERMISSION is not valid, junto con un código de error HTTP 400 y el estado de INVALID_ARGUMENT. El rol personalizado no se creará hasta que quites el permiso de la definición del rol y vuelvas a intentar realizar la operación.

Cada rol personalizado puede contener hasta 3,000 permisos. Además, el tamaño total máximo del título, la descripción y los nombres de permisos para un rol personalizado es de 64 KB. Si necesitas crear un rol personalizado más grande, puedes dividir los permisos en varios roles personalizados. Elige títulos de roles que muestren la relación entre los roles personalizados, como Custom Admin (1 of 2) y Custom Admin (2 of 2).

Cada rol personalizado puede tener una etapa de lanzamiento. La mayoría de las etapas de lanzamiento son informativas y te ayudan a realizar un seguimiento sobre cada rol a fin de determinar si está lista para el uso generalizado. Además, la etapa de lanzamiento DISABLED te permite inhabilitar un rol personalizado. Para obtener más información sobre las etapas de lanzamiento, consulta Ejecuta pruebas y realiza la implementación.

Console

Algunos roles predefinidos contienen permisos obsoletos o permisos que, de otra manera, no están permitidos en los roles personalizados. Si intentas crear un rol personalizado basado en uno de estos roles predefinidos, el rol personalizado omitirá los permisos obsoletos y restringidos.

Para crear un nuevo rol personalizado desde cero:

  1. En la consola de Google Cloud, ve a la página Roles.

    Ir a la página Roles

  2. En la lista desplegable de la parte superior de la página, selecciona la organización o el proyecto en el que deseas crear un rol.

  3. Haz clic en Crear rol.

  4. Ingresa un Nombre, un Título, una Descripción y una Etapa de lanzamiento del rol para el rol. El nombre del rol no se puede cambiar después de que se crea.

  5. Haz clic en Agregar permisos.

  6. Selecciona los permisos que desees incluir en el rol y haz clic en Agregar permisos. Usa las listas desplegables Todos los servicios y Todos los tipos para filtrar y seleccionar permisos por servicios y tipos.

Crea un rol personalizado según un rol predefinido existente:

  1. En la consola de Google Cloud, ve a la página Roles.

    Ir a la página Roles

  2. Selecciona la organización o el proyecto en el que deseas crear un rol.
  3. Selecciona los roles en los que deseas basar el nuevo rol personalizado.
  4. Haz clic en Crear rol de selección.
  5. Ingresa un Nombre, un Título, una Descripción y una Etapa de lanzamiento del rol para el rol. El nombre del rol no se puede cambiar después de que se crea.
  6. Desmarca los permisos que deseas excluir del rol.
  7. Haz clic en Agregar permisos para incluir cualquier permiso.
  8. Haga clic en Crear.

gcloud CLI

Usa el comando gcloud iam roles create para crear nuevas funciones personalizadas. Puedes usar este comando de las dos maneras que se mencionan a continuación:

  • Con un archivo YAML que contiene la definición del rol.
  • Con marcas para especificar la definición del rol

Cuando crees un rol personalizado, debes especificar si se aplica a nivel de la organización o a nivel del proyecto mediante las marcas --organization=organization-id o --project=project-id. En cada uno de los siguientes ejemplos, se crea un rol personalizado a nivel del proyecto.

Un rol personalizado solo puede contener permisos que se admiten en los roles personalizados. Si el rol personalizado contiene otros permisos, el comando falla.

Para crear un rol personalizado con un archivo YAML, haz lo siguiente:

Crea un archivo YAML que contenga la definición de tu rol personalizado. El archivo debe estar estructurado de la siguiente manera:

title: role-title
description: role-description
stage: launch-stage
includedPermissions:
- permission-1
- permission-2

Cada valor de marcador de posición se describe a continuación:

  • role-title es un título descriptivo para el rol, como "My Company Admin".
  • role-description es una descripción breve del rol, como "My custom role description".
  • launch-stage indica la etapa en la que se encuentra un rol en el ciclo de vida de lanzamiento, como ALPHA, BETA o GA.
  • permission-1 y permission-2 son permisos para incluir en el rol personalizado, como iam.roles.get. No puedes usar caracteres comodín (*) en los nombres de permisos.

Guarda el archivo YAML y, luego, ejecuta uno de los siguientes comandos:

  • Para crear un rol personalizado a nivel de la organización, ejecuta el siguiente comando:

    gcloud iam roles create role-id --organization=organization-id \
        --file=yaml-file-path
    
  • Para crear un rol personalizado a nivel de proyecto, ejecuta el siguiente comando:

    gcloud iam roles create role-id --project=project-id \
        --file=yaml-file-path
    

Cada valor de marcador de posición se describe a continuación:

  • role-id es el nombre del rol, como myCompanyAdmin.
  • organization-id es el ID numérico de la organización, como 123456789012.
  • project-id es el nombre del proyecto, como my-project-id.
  • yaml-file-path es la ruta de acceso a la ubicación de tu archivo YAML que contiene la definición del rol personalizado.

Ejemplos

En el siguiente archivo YAML de ejemplo, se muestra cómo crear una definición de rol:

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

En el siguiente ejemplo, se muestra cómo crear un rol a nivel de la organización mediante el archivo YAML:

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

Si el rol se creó con éxito, el resultado del comando es similar al siguiente:

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

En el siguiente ejemplo, se muestra cómo crear un rol a nivel de proyecto mediante el archivo YAML:

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

Si el rol se creó con éxito, el resultado del comando es similar al siguiente:

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

Para crear un rol personalizado mediante marcas, haz lo siguiente:

Ejecuta uno de los siguientes comandos:

  • Para crear un rol personalizado a nivel de la organización, ejecuta el siguiente comando:

    gcloud iam roles create role-id --organization=organization-id \
        --title=role-title --description=role-description \
        --permissions="permissions-list" --stage=launch-stage
    
  • Para crear un rol personalizado a nivel de proyecto, ejecuta el siguiente comando:

    gcloud iam roles create role-id --project=project-id \
        --title=role-title --description=role-description \
        --permissions="permissions-list" --stage=launch-stage
    

Cada valor de marcador de posición se describe a continuación:

  • role-id es el nombre del rol, como myCompanyAdmin.
  • organization-id es el ID numérico de la organización, como 123456789012.
  • project-id es el nombre del proyecto, como my-project-id.
  • role-title es un título descriptivo para el rol, como "My Company Admin".
  • role-description es una descripción breve del rol, como "My custom role description.".
  • permissions-list contiene una lista de permisos separada por comas que deseas incluir en el rol personalizado. Por ejemplo: iam.roles.get,iam.roles.list No puedes usar caracteres comodín (*) en los nombres de permisos.
  • launch-stage indica la etapa en la que se encuentra un rol en el ciclo de vida de lanzamiento, como ALPHA, BETA o GA.

Ejemplos

En el siguiente ejemplo, se muestra cómo crear un rol a nivel de la organización mediante marcas:

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

Si el rol se creó con éxito, el resultado del comando es similar al siguiente:

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

En el siguiente ejemplo, se muestra cómo crear un rol a nivel del proyecto mediante marcas:

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

Si la función se creó con éxito, el resultado del comando es similar al siguiente:

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

REST

El método roles.create permite crear una función personalizada en un proyecto o una organización.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • resource-type: Es el tipo de recurso cuyos roles personalizados quieres administrar. Usa el valor projects o organizations.
  • resource-id: es el ID del proyecto o de la organización cuyos roles personalizados deseas administrar. Los ID de proyecto son strings alfanuméricas, como my-project. Los ID de la organización son numéricos, como 123456789012.
  • role-id: Es el nombre del rol, como myCompanyAdmin.
  • role-title: Es el título legible para el rol. Por ejemplo, My Company Admin.
  • role-description: Es una descripción para el rol. Por ejemplo, "The company admin role allows company admins to access important resources".
  • permission-1 y permission-2: Son los permisos que deseas incluir en el rol. Por ejemplo, storage.objects.update. No puedes usar caracteres comodín (*) en los nombres de permisos.

    Un rol personalizado solo puede contener permisos que se admiten en los roles personalizados. Si el rol personalizado contiene otros permisos, la solicitud falla.

  • launch-stage: Es la etapa de lanzamiento actual del rol. Este campo puede contener uno de los siguientes valores: EAP, ALPHA, BETA, GA, DEPRECATED o DISABLED.

Método HTTP y URL:

POST https://iam.googleapis.com/v1/resource-type/resource-id/roles

Cuerpo JSON de la solicitud:

{
  "roleId": "role-id",
  "role": {
    "title": "role-title",
    "description": "role-description",
    "includedPermissions": [
      "permission-1",
      "permission-2"
    ],
    "stage": "launch-stage"
  }
}

Para enviar tu solicitud, expande una de estas opciones:

La respuesta contiene la función que creaste.

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

C++

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM C++.

namespace iam = ::google::cloud::iam;
[](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#

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM C#.


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

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM Go.

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: %v", 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: %v", err)
	}
	fmt.Fprintf(w, "Created role: %v", role.Name)
	return role, nil
}

Python

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM Python.

def create_role(name, project, title, description, permissions, stage):
    """Creates a role."""

    # pylint: disable=no-member
    role = service.projects().roles().create(
        parent='projects/' + project,
        body={
            'roleId': name,
            'role': {
                'title': title,
                'description': description,
                'includedPermissions': permissions,
                'stage': stage
            }
        }).execute()

    print('Created role: ' + role['name'])
    return role

Edita un rol personalizado existente

Un patrón común para actualizar los metadatos de un recurso, como un rol personalizado, es el patrón lectura-modificación-escritura. Con este patrón, se lee el estado actual del rol, se actualizan los datos de forma local y, luego, se envían los datos modificados para que se escriban.

El patrón lectura-modificación-escritura puede causar un conflicto si dos o más procesos independientes intentan la secuencia en simultáneo. Por ejemplo, si dos propietarios de un proyecto intentan realizar cambios conflictivos en un rol al mismo tiempo, algunos cambios podrían fallar. IAM resuelve este problema mediante una propiedad etag en los roles personalizados. Esta propiedad se usa para verificar si el rol personalizado cambió desde la última solicitud. Cuando realizas una solicitud a IAM con un valor ETag, IAM compara ese valor en la solicitud con el valor ETag existente asociado con el rol personalizado. Solo escribe el cambio si los valores ETag coinciden.

Cuando actualices un rol, primero debes obtenerlo con roles.get(), actualizarlo y, luego, escribir el rol actualizado con roles.patch(). Usa el valor de Etag cuando establezcas el rol solo si el rol correspondiente en roles.get() contiene un valor de Etag.

Console

  1. En la consola de Google Cloud, ve a la página Roles.

    Ir a la página Roles

  2. En la lista desplegable de la parte superior de la página, selecciona el proyecto o la organización que contiene el rol que deseas editar.

  3. Haz clic en un rol personalizado.

  4. Haz clic en Editar rol.

  5. Para actualizar los metadatos del rol, edita el Título, la Descripción o la Etapa de lanzamiento del rol del rol.

  6. Para actualizar los permisos del rol, haz lo siguiente:

    1. Haz clic en Agregar permisos para agregar permisos nuevos al rol.
    2. Desmarca permisos para quitarlos del rol.
  7. Haz clic en Actualizar para guardar la función editada.

gcloud CLI

Usa el comando gcloud iam roles update para actualizar las funciones personalizadas. Puedes usar este comando de las dos maneras que se mencionan a continuación:

  • Con un archivo YAML que contiene la definición del rol actualizado
  • Con marcas para especificar la definición del rol actualizado

Cuando actualices un rol personalizado, debes especificar si se aplica a nivel de la organización o a nivel del proyecto mediante las marcas --organization=organization-id o --project=project-id. En cada uno de los siguientes ejemplos, se crea un rol personalizado a nivel del proyecto.

Para actualizar un rol personalizado con un archivo YAML, haz lo siguiente:

Ejecuta uno de los siguientes comandos para obtener la definición actual del rol:

  • Para obtener la definición de un rol personalizado a nivel de la organización, ejecuta el siguiente comando:

    gcloud iam roles describe role-id --organization=organization-id
    
  • Para obtener la definición de rol de un rol personalizado a nivel de proyecto, ejecuta el siguiente comando:

    gcloud iam roles describe role-id --project=project-id
    

Cada valor de marcador de posición se describe a continuación:

  • role-id es el nombre del rol que quieres actualizar, como myCompanyAdmin.
  • organization-id es el ID numérico de la organización, como 123456789012.
  • project-id es el nombre del proyecto, como my-project-id.

El comando describe muestra la definición del rol y, además, incluye un valor de etag que identifica de forma única la versión actual del rol. El valor de etag debe proporcionarse en la definición del rol actualizado para garantizar que no se reemplace ningún cambio de rol simultáneo.

El comando describe muestra el siguiente resultado:

description: role-description
etag: etag-value
includedPermissions:
- permission-1
- permission-2
name: role-name
stage: launch-stage
title: role-title

Cada valor de marcador de posición se describe a continuación:

  • role-description es una descripción breve del rol, como "My custom role description".
  • etag-value es el identificador único de la versión actual del rol, como BwVkBkbfr70=.
  • permission-1 y permission-2 son permisos para incluir en el rol personalizado, como iam.roles.get. No puedes usar caracteres comodín (*) en los nombres de permisos.
  • role-name es el nombre completo del rol, incluidos los prefijos organizations/, projects/ o roles/. Por ejemplo: organizations/123456789012/roles/myCompanyAdmin..
  • launch-stage indica la etapa en la que se encuentra un rol en el ciclo de vida de lanzamiento, como ALPHA, BETA o GA.
  • role-title es un título descriptivo para el rol, como "My Company Admin".

Para actualizar el rol, incluye la definición de rol de salida en un archivo YAML o actualiza el archivo original YAML con el valor de salida de etag.

Considera el siguiente archivo YAML de ejemplo, que contiene la salida del comando describe para un rol a nivel del proyecto y agrega dos permisos de 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-id/roles/myCompanyAdmin
stage: ALPHA
title: My Company Admin

Guarda el archivo YAML y, luego, ejecuta uno de los siguientes comandos:

  • Para actualizar un rol a nivel de la organización, ejecuta el siguiente comando:

    gcloud iam roles update role-id --organization=organization-id \
        --file=yaml-file-path
    
  • Para actualizar un rol a nivel de proyecto, ejecuta el siguiente comando:

    gcloud iam roles update role-id --project=project-id \
        --file=yaml-file-path
    

Cada valor de marcador de posición se describe a continuación:

  • role-id es el nombre del rol que quieres actualizar, como myCompanyAdmin.
  • organization-id es el ID numérico de la organización, como 123456789012.
  • project-id es el nombre del proyecto, como my-project-id.
  • yaml-file-path es la ruta de acceso a la ubicación de tu archivo YAML que contiene la definición del rol personalizado actualizado.

Ejemplos

En el siguiente ejemplo, se muestra cómo actualizar un rol a nivel de la organización mediante un archivo YAML:

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

Si el rol se actualizó con éxito, el resultado del comando es similar al siguiente:

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

En el siguiente ejemplo, se muestra cómo actualizar un rol a nivel de proyecto mediante un archivo YAML:

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

Si el rol se actualizó con éxito, el resultado del comando es similar al siguiente:

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

Para actualizar un rol personalizado mediante marcas, haz lo siguiente:

Cada parte de la definición de un rol se puede actualizar mediante la marca correspondiente. Consulta el tema gcloud iam roles update para obtener una lista de todas las marcas posibles.

Puedes usar las siguientes marcas para agregar o quitar permisos:

  • --add-permissions=permissions: Agrega al rol uno o más permisos separados por comas. No puedes usar caracteres comodín (*) en los nombres de permisos.
  • --remove-permissions=permissions: Quita del rol uno o más permisos separados por comas. No puedes usar caracteres comodín (*) en los nombres de permisos.

De manera alternativa, puedes especificar los permisos nuevos mediante la marca --permissions=permissions y proporcionar una lista de permisos separados por comas para reemplazar la lista existente.

Para actualizar otras partes de la definición del rol, ejecuta uno de los siguientes comandos:

  • Para actualizar un rol a nivel de la organización, ejecuta el siguiente comando:

    gcloud iam roles update role-id --organization=organization-id \
        --title=role-title --description=role-description \
        --stage=launch-stage
    
  • Para actualizar un rol a nivel de proyecto, ejecuta el siguiente comando:

    gcloud iam roles update role-id --project=project-id \
        --title=role-title --description=role-description \
        --stage=launch-stage
    

Cada valor de marcador de posición se describe a continuación:

  • role-id es el nombre del rol, como myCompanyAdmin.
  • organization-id es el ID numérico de la organización, como 123456789012.
  • project-id es el nombre del proyecto, como my-project-id.
  • role-title es un título descriptivo para el rol, como "My Company Admin".
  • role-description es una descripción breve del rol, como "My custom role description.".
  • launch-stage indica la etapa en la que se encuentra un rol en el ciclo de vida de lanzamiento, como ALPHA, BETA o GA.

Ejemplos

En el siguiente ejemplo, se muestra cómo agregar permisos a un rol a nivel de la organización mediante marcas:

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

Si el rol se actualizó con éxito, el resultado del comando es similar al siguiente:

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

En el siguiente ejemplo, se muestra cómo agregar permisos a un rol a nivel de proyecto mediante marcas:

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

Si la función se actualizó con éxito, el resultado del comando es similar al siguiente:

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

REST

El método roles.patch permite actualizar una función personalizada en un proyecto o una organización.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

Obligatorio:

  • resource-type: Es el tipo de recurso cuyos roles personalizados quieres administrar. Usa el valor projects o organizations.
  • resource-id: es el ID del proyecto o de la organización cuyos roles personalizados deseas administrar. Los ID de proyecto son strings alfanuméricas, como my-project. Los ID de la organización son numéricos, como 123456789012.
  • role-name: Es el nombre completo del rol, incluidos los prefijos organizations/, projects/ o roles/. Por ejemplo: organizations/123456789012/roles/myCompanyAdmin

Recomendado:

  • etag: Es un identificador para una versión del rol. Incluye este campo para evitar reemplazar otros cambios de roles.

Opcional (define uno o más de los siguientes valores):

  • role-title: Es el título legible para el rol. Por ejemplo, My Company Admin.
  • role-description: Es una descripción para el rol. Por ejemplo, "The company admin role allows company admins to access important resources".
  • permission-1 y permission-2: Son los permisos que deseas incluir en el rol. Por ejemplo, storage.objects.update. No puedes usar caracteres comodín (*) en los nombres de permisos.
  • launch-stage: Es la etapa de lanzamiento actual del rol. Este campo puede contener uno de los siguientes valores: EAP, ALPHA, BETA, GA, DEPRECATED o DISABLED.

Método HTTP y URL:

PATCH https://iam.googleapis.com/v1/resource-type/resource-id/roles

Cuerpo JSON de la solicitud:

{
  "roleId": "full-role-id",
  "title": "role-title",
  "description": "role-description",
  "includedPermissions": [
    "permission-1",
    "permission-2"
  ],
  "stage": "launch-stage",
  "etag": "etag"
}

Para enviar tu solicitud, expande una de estas opciones:

La respuesta contiene una definición de función abreviada que incluye el nombre de la función, los campos que actualizaste y un ETag que identifica la versión actual de la función.

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

C++

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM C++.

namespace iam = ::google::cloud::iam;
[](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#

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM C#.


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

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM Go.

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: %v", err)
	}

	resource := "projects/" + projectID + "/roles/" + name
	role, err := service.Projects.Roles.Get(resource).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.Roles.Get: %v", 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: %v", err)
	}
	fmt.Fprintf(w, "Updated role: %v", role.Name)
	return role, nil
}

Python

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM Python.

def edit_role(name, project, title, description, permissions, stage):
    """Creates a role."""

    # pylint: disable=no-member
    role = service.projects().roles().patch(
        name='projects/' + project + '/roles/' + name,
        body={
            'title': title,
            'description': description,
            'includedPermissions': permissions,
            'stage': stage
        }).execute()

    print('Updated role: ' + role['name'])
    return role

Inhabilita un rol personalizado

Para inhabilitar un rol personalizado, cambia su etapa de lanzamiento a DISABLED. Cuando un rol está inhabilitado, todas las vinculaciones de roles relacionadas con él se desactivan, lo que significa que otorgar este rol a un usuario no tendrá efecto alguno.

Console

  1. En la consola de Google Cloud, ve a la página Roles.

    Ir a la página Roles

  2. Haz clic en la lista desplegable "Seleccionar un proyecto" en la parte superior de la página.

  3. Selecciona tu organización o proyecto.

  4. Selecciona una función personalizada y haz clic en Inhabilitar.

gcloud CLI

Si quieres usar el comando gcloud iam roles update para inhabilitar una función personalizada, establece su etapa de lanzamiento en DISABLED. Como se describe en la pestaña gcloud de la sección Edita un rol personalizado existente, puedes actualizar un rol personalizado existente mediante los siguientes dos métodos:

  • Con un archivo YAML que contiene la definición del rol actualizado
  • Con marcas para especificar la definición del rol actualizado

La forma más fácil de inhabilitar un rol personalizado existente es usar la marca --stage y establecerla en DISABLED. Ejecuta uno de los siguientes comandos:

  • Para inhabilitar un rol a nivel de la organización, ejecuta el siguiente comando:

    gcloud iam roles update role-id --organization=organization-id \
        --stage=DISABLED
    
  • Para inhabilitar un rol a nivel de proyecto, ejecuta el siguiente comando:

    gcloud iam roles update role-id --project=project-id \
        --stage=DISABLED
    

Cada valor de marcador de posición se describe a continuación:

  • role-id es el nombre del rol, como myCompanyAdmin.
  • organization-id es el ID numérico de la organización, como 123456789012.
  • project-id es el nombre del proyecto, como my-project-id.

Ejemplos

En el siguiente ejemplo, se muestra cómo inhabilitar un rol a nivel de la organización:

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

Si el rol se actualizó con éxito, el resultado del comando es similar al siguiente:

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

En el siguiente ejemplo, se muestra cómo inhabilitar un rol a nivel del proyecto:

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

Si la función se actualizó con éxito, el resultado del comando es similar al siguiente:

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

REST

El método roles.patch permite cambiar la etapa de lanzamiento de una función personalizada a DISABLED para inhabilitarla.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • resource-type: Es el tipo de recurso cuyos roles personalizados quieres administrar. Usa el valor projects o organizations.
  • resource-id: es el ID del proyecto o de la organización cuyos roles personalizados deseas administrar. Los ID de proyecto son strings alfanuméricas, como my-project. Los ID de la organización son numéricos, como 123456789012.
  • role-name: Es el nombre completo del rol, incluidos los prefijos organizations/, projects/ o roles/. Por ejemplo: organizations/123456789012/roles/myCompanyAdmin
  • etag: Es un identificador para una versión de la función. Incluye este campo para evitar reemplazar otros cambios de roles.

Método HTTP y URL:

PATCH https://iam.googleapis.com/v1/resource/resource-id/roles

Cuerpo JSON de la solicitud:

{
  "roleId": "full-role-id",
  "stage": DISABLED,
  "etag": "etag"
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

C++

Actualiza el campo stage del rol a DISABLED.

C#

Actualiza el campo stage del rol a DISABLED.

Go

Actualiza el campo stage del rol a DISABLED.

Python

Actualiza el campo stage del rol a DISABLED.

Enumera roles

Puedes enumerar todos los roles personalizados creados en tu organización o proyecto.

Console

En la consola de Google Cloud, ve a la página Roles.

Ir a la página Roles

Todas las funciones personalizadas para la organización o el proyecto que seleccionaste se enumeran en la página.

gcloud CLI

Usa el comando gcloud iam roles list a fin de enumerar las funciones personalizadas y predefinidas de una organización o un proyecto.

  • Para enumerar los roles personalizados a nivel de la organización, ejecuta el siguiente comando:

    gcloud iam roles list --organization=organization-id
    
  • Para enumerar los roles personalizados a nivel de proyecto, ejecuta el siguiente comando:

    gcloud iam roles list --project=project-id
    

Cada valor de marcador de posición se describe a continuación:

  • organization-id es el ID numérico de la organización, como 123456789012.
  • project-id es el nombre del proyecto, como my-project-id.

Para enumerar los roles que se borraron, también puedes especificar la marca --show-deleted.

Ejecuta el siguiente comando para enumerar las funciones predefinidas:

gcloud iam roles list

REST

El método roles.list permite enumerar todas las funciones personalizadas de un proyecto o una organización.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • resource-type: Es el tipo de recurso cuyos roles personalizados quieres administrar. Usa el valor projects o organizations.
  • resource-id: es el ID del proyecto o de la organización cuyos roles personalizados deseas administrar. Los ID de proyecto son strings alfanuméricas, como my-project. Los ID de la organización son numéricos, como 123456789012.
  • role-view: Opcional Es la información que se debe incluir para los roles que se muestran. Para incluir los permisos de los roles, establece este campo en FULL. Para excluir los permisos de los roles, establece este campo en BASIC. El valor predeterminado es BASIC.
  • page-size: Opcional. Es la cantidad de roles que se deben incluir en la respuesta. El valor predeterminado es 300 y el valor máximo es 1,000. Si la cantidad de roles es mayor que el tamaño de la página, la respuesta contiene un token de paginación que puedes usar para consultar la siguiente página de resultados.
  • next-page-token: Opcional. Es el token de paginación que se mostró en una respuesta anterior de este método. Si se especifica, la lista de roles comenzará desde el punto en que finalizó la solicitud anterior.

Método HTTP y URL:

GET https://iam.googleapis.com/v1/resource-type/resource-id/roles?view=role-view&pageSize=page-size&pageToken=next-page-token

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "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="
    }
  ]
}

C++

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM C++.

namespace iam = ::google::cloud::iam;
[](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#

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM C#.


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

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM Go.

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: %v", err)
	}

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

Python

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM Python.

def list_roles(project_id):
    """Lists roles."""

    # pylint: disable=no-member
    roles = service.roles().list(
        parent='projects/' + project_id).execute()['roles']
    for role in roles:
        print(role['name'])

Borra una función personalizada

Puedes borrar cualquier rol personalizado en tu organización o proyecto.

Console

  1. En la consola de Google Cloud, ve a la página Roles.

    Ir a la página Roles

  2. Selecciona la función que deseas borrar y haz clic en  Borrar en la parte superior de la página.

gcloud CLI

Usa el comando gcloud iam roles delete para borrar una función personalizada.

  • Para borrar un rol personalizado a nivel de la organización, ejecuta el siguiente comando:

    gcloud iam roles delete role-id --organization=organization-id
    
  • Para borrar un rol personalizado a nivel de proyecto, ejecuta el siguiente comando:

    gcloud iam roles delete role-id --project=project-id
    

Cada valor de marcador de posición se describe a continuación:

  • role-id es el nombre del rol, como myCompanyAdmin.
  • organization-id es el ID numérico de la organización, como 123456789012.
  • project-id es el nombre del proyecto, como my-project-id.

El rol no se incluirá en la gcloud iam roles list, a menos que se incluya la marca --show-deleted. Las funciones que se borraron se indican mediante el bloque deleted: true en una respuesta de la list, como la que se muestra a continuación:

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

REST

El método roles.delete permite borrar una función personalizada en un proyecto o una organización.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • role-name: Es el nombre completo del rol, incluidos los prefijos organizations/, projects/ o roles/. Por ejemplo: organizations/123456789012/roles/myCompanyAdmin

Método HTTP y URL:

DELETE https://iam.googleapis.com/v1/full-role-id

Para enviar tu solicitud, expande una de estas opciones:

La respuesta contiene la definición de la función que se borró.

{
  "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
}

C++

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM C++.

namespace iam = ::google::cloud::iam;
[](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#

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM C#.


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

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM Go.

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: %v", err)
	}

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

Python

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM Python.

def delete_role(name, project):
    """Deletes a role."""

    # pylint: disable=no-member
    role = service.projects().roles().delete(
        name='projects/' + project + '/roles/' + name).execute()

    print('Deleted role: ' + name)
    return role

Cuando se borra un rol, todas las vinculaciones de roles que hagan referencia a él permanecen en las políticas de permisos, pero no tienen efecto. Puedes recuperar un rol en un plazo de 7 días. Durante ese período de 7 días, la consola de Google Cloud muestra que se borró el rol. También puedes enumerar los roles que se borraron de manera programática, pero se omiten de forma predeterminada.

Después de 7 a 14 días, el rol está programado para borrarse de forma definitiva. En este punto, el rol ya no se tiene en cuenta para el límite de 300 roles personalizados por organización o 300 roles personalizados por proyecto.

El proceso de eliminación permanente demora 30 días. Durante el período de 30 días, el rol y todos los enlaces asociados se quitan de forma permanente, y no puedes crear un rol nuevo con el mismo ID de rol.

Una vez que el rol se haya borrado de forma definitiva, hasta 44 días después de la solicitud de eliminación inicial, puedes crear un rol nuevo con el mismo ID de rol.

Recupera un rol personalizado

Cuando recuperas un rol, este vuelve a su estado anterior.

Los roles solo se pueden recuperar en un plazo de 7 días. Después de 7 días, el rol se puede borrar de forma definitiva en cualquier momento, y se quitan todas las vinculaciones de roles que hacen referencia al rol.

Console

  1. En la consola de Google Cloud, ve a la página Roles.

    Ir a la página Roles

  2. Encuentra la función que deseas recuperar, haz clic en el ícono más al final de la fila y luego en Recuperar.

gcloud CLI

Usa el comando gcloud iam roles undelete para recuperar una función personalizada.

  • Para recuperar un rol personalizado a nivel de la organización, ejecuta el siguiente comando:

    gcloud iam roles undelete role-id --organization=organization-id
    
  • Para recuperar un rol personalizado a nivel de proyecto, ejecuta el siguiente comando:

    gcloud iam roles undelete role-id --project=project-id
    

Cada valor de marcador de posición se describe a continuación:

  • role-id es el nombre del rol, como myCompanyAdmin.
  • organization-id es el ID numérico de la organización, como 123456789012.
  • project-id es el nombre del proyecto, como my-project-id.

Ejemplos

En el siguiente ejemplo, se muestra cómo recuperar un rol personalizado a nivel de la organización:

gcloud iam roles undelete myCompanyAdmin --organization=123456789012

Si el rol se recuperó con éxito, el resultado del comando es similar al siguiente:

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

En el siguiente ejemplo, se muestra cómo recuperar un rol personalizado a nivel del proyecto:

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

Si la función se recuperó con éxito, el resultado del comando es similar al siguiente:

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

REST

El método roles.undelete permite recuperar una función personalizada en un proyecto o una organización.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • role-name: Es el nombre completo del rol, incluidos los prefijos organizations/, projects/ o roles/. Por ejemplo: organizations/123456789012/roles/myCompanyAdmin
  • etag: Es un identificador para una versión de la función. Incluye este campo para evitar reemplazar otros cambios de roles.

Método HTTP y URL:

POST https://iam.googleapis.com/v1/full-role-id:undelete

Cuerpo JSON de la solicitud:

{
  "etag": "etag"
}

Para enviar tu solicitud, expande una de estas opciones:

La respuesta contiene la definición de la función que se recuperó.

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

C++

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM C++.

namespace iam = ::google::cloud::iam;
[](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#

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM C#.


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

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM Go.

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: %v", 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: %v", err)
	}
	fmt.Fprintf(w, "Undeleted role: %v", role.Name)
	return role, nil
}

Python

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM Python.

def undelete_role(name, project):
    """Undeletes a role."""

    # pylint: disable=no-member
    role = service.projects().roles().patch(
        name='projects/' + project + '/roles/' + name,
        body={
            'stage': 'DISABLED'
        }).execute()

    print('Disabled role: ' + role['name'])
    return role

¿Qué sigue?