Administra el acceso a proyectos, carpetas y organizaciones

En esta página, se describe cómo otorgar, cambiar y revocar el acceso a los proyectos, las carpetas y las organizaciones. Para obtener información sobre cómo administrar el acceso a otros recursos, consulta las siguientes guías:

En Identity and Access Management (IAM), el acceso se administra a través de las políticas de IAM. Una política de IAM se adjunta a un recurso de Google Cloud. Cada política contiene una colección de vinculaciones de funciones que asocian una o más principales, como usuarios o cuentas de servicio, a una función de IAM. Estas vinculaciones de funciones otorgan las funciones especificadas a las principales, tanto en el recurso al que se adjunta la política como en todos los elementos subordinados de ese recurso. Para obtener más información sobre las políticas de IAM, consulta Información sobre las políticas.

Puedes administrar el acceso a proyectos, carpetas y organizaciones con Google Cloud Console, la herramienta de línea de comandos de gcloud, la API de REST o las bibliotecas cliente de Resource Manager.

Antes de comenzar

Habilita las Cloud Resource Manager API.

Habilita la API

Permisos necesarios

Para administrar el acceso a un proyecto, organización o carpeta, necesitas una función que incluya los siguientes permisos, en que RESOURCE_TYPE es el tipo de recurso para el cual la principal administrará el acceso (projects, folders y organizations):

  • resourcemanager.RESOURCE_TYPE.get
  • resourcemanager.RESOURCE_TYPE.getIamPolicy
  • resourcemanager.RESOURCE_TYPE.setIamPolicy

Para obtener estos permisos y seguir el principio de privilegio mínimo, pídele a tu administrador que te otorgue una de las siguientes funciones:

  • Para administrar acceso a los proyectos: Administrador de IAM de proyectos (roles/resourcemanager.projectIamAdmin)
  • Para administrar el acceso a proyectos y carpetas: Administrador de carpetas (roles/resourcemanager.folderAdmin)
  • Para administrar el acceso a proyectos, carpetas y organizaciones: Administrador de la organización (roles/resourcemanager.organizationAdmin)
  • Para administrar el acceso a casi todos los recursos de Google Cloud, administrador de seguridad (roles/iam.securityAdmin)

Como alternativa, el administrador puede otorgarte una función diferente con los permisos necesarios, como una función personalizada o una función predefinida con más permisos.

Visualiza el acceso actual

Puedes ver quién tiene acceso a tu proyecto, organización o carpeta mediante Cloud Console, la herramienta de gcloud, la API de REST o las bibliotecas cliente de Resource Manager.

Console

  1. En Cloud Console, ve a la página IAM.

    Ir a IAM

  2. Selecciona un proyecto, una carpeta o una organización.

    Cloud Console enumera todas las principales a las que se les otorgaron funciones en tu proyecto, organización o carpeta. En esta lista, se incluyen las principales que heredaron funciones del recurso de los recursos superiores. Para obtener más información sobre la herencia de políticas, consulta La herencia de políticas y la jerarquía de recursos.

  3. Opcional: Para ver las asignaciones de funciones de las cuentas de servicio administradas por Google, selecciona la casilla de verificación Incluir asignaciones de funciones proporcionadas por Google.

gcloud

Para ver quién tiene acceso a tu proyecto, organización o carpeta, obtén la política de IAM para el recurso. Para obtener información sobre cómo interpretar las políticas de IAM, consulta Información sobre las políticas.

A fin de obtener la política de IAM del recurso, ejecuta el comando get-iam-policy para el recurso:

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

Ingresa los siguientes valores:

  • RESOURCE_TYPE: El tipo de recurso para el que deseas ver el acceso. Usa uno de estos valores: projects, resource-manager folders o organizations.
  • RESOURCE_ID: Tu ID de la organización, carpeta y proyecto de Google Cloud. Los ID de proyecto son alfanuméricos, como my-project. Los ID de carpeta y organización son numéricos, como 123456789012.
  • FORMAT: El formato deseado para la política. Usa json o yaml.
  • PATH: Es la ruta a un nuevo archivo de salida de la política.

Por ejemplo, con el siguiente comando, se obtiene la política para el proyecto my-project y se guarda en tu directorio principal en formato JSON:

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

REST

Para ver quién tiene acceso a tu proyecto, organización o carpeta, obtén la política de IAM para el recurso. Para obtener información sobre cómo interpretar las políticas de IAM, consulta Información sobre las políticas.

El método getIamPolicy de la API de Resource Manager obtiene la política de IAM de un proyecto, una carpeta o una organización.

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

  • API_VERSION: La versión de la API que se usará. Para los proyectos y las organizaciones, usa v1. Para las carpetas, usa v2.
  • RESOURCE_TYPE: El tipo de recurso cuya política deseas administrar. Usa el valor projects, folders o organizations.
  • RESOURCE_ID: El proyecto ID de la carpeta, la organización o el proyecto de Google Cloud. Los ID de proyecto son strings alfanuméricas, como my-project. Los ID de carpeta y organización son numéricos, como 123456789012.
  • POLICY_VERSION: Es la versión de la política que se mostrará. Las solicitudes deben especificar la versión de política más reciente, que es la versión de política 3. Consulta Especifica una versión de política cuando obtienes una política para obtener más detalles.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, expande una de estas opciones:

La respuesta contiene la política de IAM del proyecto. Por ejemplo:

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

C#


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

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

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

Java

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

public class GetPolicy {

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

    Policy policy = null;

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

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

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

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

Python

def get_policy(project_id, version=1):
    """Gets IAM policy for a project."""

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

Otorga o revoca una sola función

Puedes usar Cloud Console y la herramienta de gcloud a fin de otorgar o revocar con rapidez una sola función para una sola principal, sin editar directamente la política de IAM del recurso. Los tipos comunes de principales incluyen Cuentas de Google, cuentas de servicio, Grupos de Google y dominios. Para obtener una lista de todos los tipos de principales, consulta Conceptos relacionados con la identidad.

Otorga una sola función

Para otorgar una sola función a una principal, sigue estos pasos:

Console

  1. En Cloud Console, ve a la página IAM.

    Ir a IAM

  2. Selecciona un proyecto, una carpeta o una organización.

  3. Selecciona una principal para otorgarle una función:

    • Para otorgar una función a una principal que ya tenga otras funciones en el recurso, busca la fila que contiene la dirección de correo electrónico de la principal, haz clic en Editar principal en esa fila y, luego, en Agregar otra función.

      Si deseas otorgar una función a una cuenta de servicio administrada por Google, selecciona la casilla de verificación Incluir asignaciones de funciones proporcionadas por Google para ver su dirección de correo electrónico.

    • Para otorgar una función a una principal que aún no tenga otras funciones en el recurso, haz clic en Agregar y, luego, ingresa la dirección de correo electrónico de la principal.

  4. Selecciona una función para otorgar de la lista desplegable. Para una mejor seguridad, elige una función que incluya solo los permisos que necesita tu principal.

  5. Opcional: Agrega una condición a la función.

  6. Haz clic en Guardar. A la principal se le otorga la función en el recurso.

Para otorgar una función a una principal en más de un proyecto, organización o carpeta, haz lo siguiente:

  1. En Cloud Console, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. Selecciona todos los proyectos para los que deseas otorgar permisos.

  3. Si el panel de información no está visible, haz clic en Mostrar panel de información. Luego, haz clic en Permisos.

  4. Selecciona una principal para otorgarle una función:

    • Para otorgar una función a una principal que ya tenga otras funciones, busca una fila con la dirección de correo electrónico de la principal, haz clic en Editar principal en esa fila y, luego, en Agregar otra función.

    • Para otorgar una función a una principal que aún no tenga otras, haz clic en Agregar principal y, luego, ingresa la dirección de correo electrónico de la principal.

  5. Selecciona una función para otorgar de la lista desplegable.

  6. Opcional: Agrega una condición a la función.

  7. Haz clic en Guardar. A la principal se le otorga la función seleccionada en cada uno de los recursos seleccionados.

gcloud

Para otorgarle una función a una principal con rapidez, ejecuta el comando add-iam-policy-binding:

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

Ingresa los siguientes valores:

  • RESOURCE_TYPE: Es el tipo de recurso en el que deseas administrar el acceso. Usa projects, resource-manager folders o organizations.
  • RESOURCE_ID: Tu ID de la organización, carpeta y proyecto de Google Cloud. Los ID de proyecto son alfanuméricos, como my-project. Los ID de carpeta y organización son numéricos, como 123456789012.
  • PRINCIPAL: Un identificador para la principal o el miembro, que suele tener el siguiente formato: PRINCIPAL_TYPE:ID. Por ejemplo, user:my-user@example.com. Si deseas obtener una lista completa de los valores que PRINCIPAL puede tener, consulta la referencia sobre la vinculación de políticas.

    Para el tipo de principal user, el nombre de dominio en el identificador debe ser un dominio de Google Workspace o de Cloud Identity. Para obtener información sobre cómo configurar un dominio de Cloud Identity, consulta la descripción general de Cloud Identity.

  • ROLE_ID: El nombre de la función que deseas otorgar. Por ejemplo, roles/resourcemanager.projectCreator Para obtener una lista de funciones, consulta Información sobre las funciones.

  • CONDITION: Opcional La condición que se agregará a la vinculación de función. Para obtener más información sobre las condiciones, consulta la descripción general de las condiciones.

Por ejemplo, a fin de otorgar la función de creador de proyectos al usuario my-user@example.com para el proyecto my-project, ejecuta este comando:

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

Revoca una sola función

Para revocar una sola función de una principal, haz lo siguiente:

Console

  1. En Cloud Console, ve a la página IAM.

    Ir a IAM

  2. Selecciona un proyecto, una carpeta o una organización.

  3. Busca la fila con la dirección de correo electrónico de la principal cuyo acceso deseas revocar. Luego, haz clic en Editar principal en esa fila.

  4. Haz clic en el botón Borrar para cada función que desees revocar y, luego, haz clic en Guardar.

gcloud

Para revocar una función de un usuario, ejecuta el comando remove-iam-policy-binding:

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

Ingresa los siguientes valores:

  • RESOURCE_TYPE: Es el tipo de recurso en el que deseas administrar el acceso. Usa projects, resource-manager folders o organizations.
  • RESOURCE_ID: Tu ID de la organización, carpeta y proyecto de Google Cloud. Los ID de proyecto son alfanuméricos, como my-project. Los ID de carpeta y organización son numéricos, como 123456789012.
  • PRINCIPAL: Un identificador para la principal o el miembro, que suele tener el siguiente formato: PRINCIPAL_TYPE:ID. Por ejemplo, user:my-user@example.com. Si deseas obtener una lista completa de los valores que PRINCIPAL puede tener, consulta la referencia sobre la vinculación de políticas.

    Para el tipo de principal user, el nombre de dominio en el identificador debe ser un dominio de Google Workspace o de Cloud Identity. Para obtener información sobre cómo configurar un dominio de Cloud Identity, consulta la descripción general de Cloud Identity.

  • ROLE_ID: El nombre de la función que deseas revocar. Por ejemplo, roles/resourcemanager.projectCreator Para obtener una lista de funciones, consulta Información sobre las funciones.

Por ejemplo, para revocar la función de creador de proyectos del usuario my-user@example.com en el proyecto my-project, ejecuta este comando:

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

Otorga o revoca varias funciones

Para realizar cambios de acceso a gran escala que implican otorgar y revocar varias funciones, usa el patrón lectura-modificación-escritura a fin de actualizar la política de IAM del recurso:

  1. Lectura de la política actual mediante una llamada a getIamPolicy()
  2. Edición de la política mostrada, ya sea mediante el uso de un editor de texto o de manera programática, para agregar o quitar principales o vinculaciones de funciones.
  3. Escritura de la política actualizada mediante una llamada a setIamPolicy()

Puedes usar la herramienta de gcloud, la API de REST o las bibliotecas cliente de Resource Manager para actualizar la política.

Obtén la política actual

gcloud

A fin de obtener la política de IAM del recurso, ejecuta el comando get-iam-policy para el recurso:

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

Ingresa los siguientes valores:

  • RESOURCE_TYPE: Es el tipo de recurso para el que deseas obtener la política. Usa uno de los siguientes valores: projects, resource-manager folders o organizations.
  • RESOURCE_ID: Tu ID de la organización, carpeta y proyecto de Google Cloud. Los ID de proyecto son alfanuméricos, como my-project. Los ID de carpeta y organización son numéricos, como 123456789012.
  • FORMAT: El formato deseado para la política. Usa json o yaml.
  • PATH: Es la ruta a un nuevo archivo de salida de la política.

Por ejemplo, con el siguiente comando, se obtiene la política para el proyecto my-project y se guarda en tu directorio principal en formato JSON:

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

REST

El método getIamPolicy de la API de Resource Manager obtiene la política de IAM de un proyecto, una carpeta o una organización.

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

  • API_VERSION: La versión de la API que se usará. Para los proyectos y las organizaciones, usa v1. Para las carpetas, usa v2.
  • RESOURCE_TYPE: El tipo de recurso cuya política deseas administrar. Usa el valor projects, folders o organizations.
  • RESOURCE_ID: El proyecto ID de la carpeta, la organización o el proyecto de Google Cloud. Los ID de proyecto son strings alfanuméricas, como my-project. Los ID de carpeta y organización son numéricos, como 123456789012.
  • POLICY_VERSION: Es la versión de la política que se mostrará. Las solicitudes deben especificar la versión de política más reciente, que es la versión de política 3. Consulta Especifica una versión de política cuando obtienes una política para obtener más detalles.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, expande una de estas opciones:

La respuesta contiene la política de IAM del proyecto. Por ejemplo:

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

Guarda la respuesta en un archivo del tipo adecuado (json o yaml).

C#


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

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

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

Java

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

public class GetPolicy {

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

    Policy policy = null;

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

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

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

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

Python

def get_policy(project_id, version=1):
    """Gets IAM policy for a project."""

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

Modifica la política

De manera programática o mediante un editor de texto, modifica la copia local de la política de tu recurso para que refleje las funciones que deseas otorgar o revocar a determinados usuarios.

Para asegurarte de no reemplazar otros cambios en la política, no edites ni quites el campo etag de la política. El campo etag identifica el estado actual de la política. Cuando configuras la política actualizada, IAM compara el valor de etag en la solicitud con el etag existente y solo escribe la política si los valores coinciden.

Otorga una función

Para otorgar funciones a las principales, modifica las vinculaciones de funciones en la política. Para obtener información sobre qué funciones puedes otorgar, consulta Información sobre las funciones o Consulta funciones asignables para el recurso.

Para otorgar una función que ya está incluida en la política, agrega la principal a una vinculación de función existente:

gcloud

Edita la política que se muestra y agrega la principal a una vinculación de función existente. Ten en cuenta que este cambio en la política se implementará una vez que hayas establecido la política actualizada.

Por ejemplo, imagina que la política que se muestra contiene la siguiente vinculación de función, que otorga la función de revisor de seguridad (roles/iam.securityReviewer) a kai@example.com:

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

Para otorgar esa misma función a raha@example.com, agrega raha@example.com a la vinculación de función existente:

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

REST

Edita la política que se muestra y agrega la principal a una vinculación de función existente. Ten en cuenta que este cambio en la política se implementará una vez que hayas establecido la política actualizada.

Por ejemplo, imagina que la política que se muestra contiene la siguiente vinculación de función, que otorga la función de revisor de seguridad (roles/iam.securityReviewer) a kai@example.com:

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

Para otorgar esa misma función a raha@example.com, agrega raha@example.com a la vinculación de función existente:

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

C#

Si deseas obtener información sobre cómo instalar y usar la biblioteca cliente de Resource Manager, consulta las bibliotecas cliente de Resource Manager.


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

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

Java

Si deseas obtener información sobre cómo instalar y usar la biblioteca cliente de Resource Manager, consulta las bibliotecas cliente de Resource Manager.

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

public class AddMember {

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

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

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

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

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

Python

Si deseas obtener información sobre cómo instalar y usar la biblioteca cliente de Resource Manager, consulta las bibliotecas cliente de Resource Manager.

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

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

Para otorgar una función que aún no está incluida en la política, agrega una nueva vinculación de función:

gcloud

Edita la política mostrada mediante la adición de una nueva vinculación de función que otorga la función a la principal. Este cambio en la política se implementará una vez que hayas establecido la política actualizada.

Por ejemplo, para otorgar la función de administrador de Compute Storage (roles/compute.storageAdmin) a raha@example.com, agrega la siguiente vinculación de función al array bindings de la política:

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

REST

Edita la política mostrada mediante la adición de una nueva vinculación de función que otorga la función a la principal. Este cambio en la política se implementará una vez que hayas establecido la política actualizada.

Por ejemplo, para otorgar la función de administrador de Compute Storage (roles/compute.storageAdmin) a raha@example.com, agrega la siguiente vinculación de función al array bindings de la política:

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

C#

Si deseas obtener información sobre cómo instalar y usar la biblioteca cliente de Resource Manager, consulta las bibliotecas cliente de Resource Manager.


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

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

Java

Si deseas obtener información sobre cómo instalar y usar la biblioteca cliente de Resource Manager, consulta las bibliotecas cliente de Resource Manager.

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

public class AddBinding {

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

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

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

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

Python

Si deseas obtener información sobre cómo instalar y usar la biblioteca cliente de Resource Manager, consulta las bibliotecas cliente de Resource Manager.

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

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

Solo puedes otorgar funciones relacionadas con los servicios de API activados. Si un servicio, como Compute Engine, no está activo, no puedes otorgar funciones relacionadas exclusivamente con Compute Engine. Para obtener más información, consulta Habilitar e inhabilitar las API.

Hay algunas restricciones únicas cuando se otorgan permisos en proyectos, en particular, cuando se otorga la función de propietario (roles/owner). Consulta la documentación de referencia de projects.setIamPolicy() para obtener más información.

Revoca una función

Para revocar una función, quita la principal de la vinculación de función. Si no hay otras principales en la vinculación de función, quita toda la vinculación de la función.

gcloud

Para revocar una función, edita la política JSON o YAML que muestra el comando get-iam-policy. Este cambio en la política se implementará una vez que hayas establecido la política actualizada.

Para revocar una función de una principal, borra las principales o vinculaciones deseadas del array bindings de la política.

REST

Para revocar una función, edita la política JSON o YAML que muestra el comando get-iam-policy. Este cambio en la política se implementará una vez que hayas establecido la política actualizada.

Para revocar una función de una principal, borra las principales o vinculaciones deseadas del array bindings de la política.

C#

Si deseas obtener información sobre cómo instalar y usar la biblioteca cliente de Resource Manager, consulta las bibliotecas cliente de Resource Manager.


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

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

Java

Si deseas obtener información sobre cómo instalar y usar la biblioteca cliente de Resource Manager, consulta las bibliotecas cliente de Resource Manager.

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

public class RemoveMember {

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

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

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

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

Python

Si deseas obtener información sobre cómo instalar y usar la biblioteca cliente de Resource Manager, consulta las bibliotecas cliente de Resource Manager.

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

Establece la política

Después de modificar la política para otorgar y revocar las funciones deseadas, llama a setIamPolicy() con el fin de realizar las actualizaciones.

gcloud

A fin de configurar la política de IAM del recurso, ejecuta el comando set-iam-policy para el recurso:

gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

Ingresa los siguientes valores:

  • RESOURCE_TYPE: Es el tipo de recurso en el que quieres establecer la política. Usa uno de los siguientes valores: projects, resource-manager folders o organizations.
  • RESOURCE_ID: Tu ID de la organización, carpeta y proyecto de Google Cloud. Los ID de proyecto son alfanuméricos, como my-project. Los ID de carpeta y organización son numéricos, como 123456789012.
  • PATH: Es la ruta a un archivo que contiene la política nueva.

La respuesta contiene la política actualizada.

Por ejemplo, con el siguiente comando, se configura la política almacenada en policy.json como la política para el proyecto my-project:

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

REST

El método setIamPolicy de la API de Resource Manager establece la política en la solicitud como la política de IAM nueva para el proyecto, la carpeta o la organización.

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

  • API_VERSION: La versión de la API que se usará. Para los proyectos y las organizaciones, usa v1. Para las carpetas, usa v2.
  • RESOURCE_TYPE: El tipo de recurso cuya política deseas administrar. Usa el valor projects, folders o organizations.
  • RESOURCE_ID: El proyecto ID de la carpeta, la organización o el proyecto de Google Cloud. Los ID de proyecto son strings alfanuméricas, como my-project. Los ID de carpeta y organización son numéricos, como 123456789012.
  • POLICY: Una representación JSON de la política que deseas establecer. Para obtener más información sobre el formato de una política, consulta Referencia de políticas.

    Por ejemplo, para establecer la política que se muestra en el paso anterior, reemplaza POLICY por lo siguiente:

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

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
  "policy": POLICY
}

Para enviar tu solicitud, expande una de estas opciones:

La respuesta contiene la política actualizada.

C#


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

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

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

Java

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

public class SetPolicy {

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

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

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

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

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

Python

def set_policy(project_id, policy):
    """Sets IAM policy for a project."""

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

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

¿Qué sigue?

Pruébalo tú mismo

Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.

Comenzar gratis