Cómo otorgar, cambiar y revocar el acceso a los recursos

En esta página, se describe cómo otorgar, cambiar y revocar el acceso a un recurso. Puedes otorgar diferentes niveles de acceso para los recursos que posees a diferentes usuarios mediante el uso de funciones Cloud IAM específicas.

Puedes administrar funciones de usuario con GCP Console, la herramienta de línea de comandos de gcloud, la API de REST o las bibliotecas cliente. Usar GCP Console es el método más fácil y se trata en la primera mitad de este artículo. El uso de métodos programáticos para situaciones más complejas se trata más adelante.

Si desea usar Cloud IAM con Cloud Identity-Aware Proxy (Cloud IAP) para asegurar el acceso a tus aplicaciones, consulta la documentación de Cloud IAP.

Antes de comenzar

Mediante GCP Console

Usar GCP Console es una forma rápida y fácil de administrar las funciones de los usuarios. Cuando otorgas una función a un usuario, no recibirán un correo electrónico de invitación. Su acceso se actualiza directamente.

Otorga el acceso

Para agregar un miembro del equipo a un proyecto y otorgarle una función de Cloud IAM:

  1. Abre la página IAM en GCP Console.

    Abrir la página IAM.

  2. Haz clic en Seleccionar un proyecto, elige un proyecto y haz clic en Abrir.

  3. Haz clic en Agregar.

  4. Ingresa una dirección de correo electrónico. Puedes agregar personas, cuentas de servicio o Grupos de Google como miembros, pero cada proyecto debe tener al menos una persona como miembro.

  5. Selecciona una función. Las funciones les dan a los miembros el nivel adecuado de permiso. Recomendamos darle al miembro la menor cantidad de privilegios necesarios. Los miembros con permisos de propietario también son propietarios de proyectos y pueden gestionar todos los aspectos del proyecto, incluida su finalización.

  6. Haz clic en Guardar.

Para otorgar una función a un miembro para más de un proyecto:

  1. Abre la página IAM y proyectos del administrador en GCP Console.

    Abrir la página IAM y proyectos del administrador

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

  3. Haz clic en Mostrar panel de información, seguido de la pestaña Permisos.

  4. Ingresa una dirección de correo electrónico en el campo Agregar miembros y selecciona la función deseada en el menú desplegable.

  5. Haz clic en el botón Agregar. Al miembro se le otorgará la función seleccionada en cada uno de los proyectos seleccionados.

Revoca el acceso

  1. Abre la página IAM en Google Cloud Platform Console.

    Abrir la página IAM.

  2. Haz clic en Seleccionar un proyecto.

  3. Selecciona un proyecto y haz clic en Abrir.

  4. Localiza al miembro al que quieras revocarle el acceso y, a continuación, haz clic en el botón Editar edit de la derecha.

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

Modifica el acceso

No hay ningún procedimiento especial para modificar el acceso. Simplemente sigue los pasos para otorgar y revocar el acceso hasta que el usuario tenga las funciones deseadas.

Mediante gcloud, API de REST o bibliotecas cliente

En algunos casos prácticos, es más fácil administrar el control de acceso de manera programática en lugar de usar GCP Console. Puedes utilizar la herramienta de línea de comandos de gcloud, la API de REST o las bibliotecas cliente para Cloud IAM. Los métodos programáticos son particularmente útiles cuando se realizan actualizaciones a gran escala o automáticas que llevarían mucho tiempo en GCP Console.

Actualizaciones rápidas con la herramienta de línea de comandos de gcloud

Si solo deseas otorgar o revocar rápidamente una función a un solo usuario mediante la línea de comandos, usa los comandos add-iam-policy-binding y remove-iam-policy-binding. Pasa una marca de --role para cada función que desees agregar o quitar.

Para otorgar una función:

gcloud [GROUP] add-iam-policy-binding [RESOURCE-NAME]
  --member user:[USER-EMAIL] --role [ROLE-ID]

Para revocar una función:

gcloud [GROUP] remove-iam-policy-binding [RESOURCE-NAME]
  --member user:[EMAIL] --role [ROLE-ID]

[GROUP] es el grupo de gcloud para el recurso al que deseas otorgar permisos, como projects o organizations. [RESOURCE] es el nombre del recurso. [EMAIL] es el usuario al que se le otorga la función. [ROLE-ID] es el ID de la función a otorgar.

El siguiente ejemplo otorga la función de propietario a user-1@gmail.com para el proyecto my-project.

gcloud projects add-iam-policy-binding my-project
  --member user:user-1@gmail.com --role roles/owner

Descripción general de la política de Cloud IAM

El acceso a un recurso se gestiona a través de una política de Cloud IAM. Una política es una colección de vinculaciones que asocian a un miembro, como una cuenta de usuario o de servicio, con una función. Las políticas se representan con JSON o YAML.

Te mostramos un ejemplo en el que a la política user-1@gmail.com se le ha concedido la función propietario y a user-2@gmail.com y service-account-13@appspot.gserviceaccount.com se les ha concedido la función editor:

{
  "bindings":[
    {
      "members":[
        "user:user-1@gmail.com"
      ],
      "role":"roles/owner"
    },
    {
      "members":[
        "serviceAccount:service-account-13@appspot.gserviceaccount.com",
        "user-2@gmail.com"
      ],
      "role":"roles/editor"
    }
  ],
  "etag":"BwUjMhCsNvY=",
  "version":1
}

Actualizas una política para un recurso con el patrón de lectura-modificación-escritura. Esto significa que no hay métodos distintos para crear, modificar o revocar el acceso de los usuarios. En cambio, todas las modificaciones son hechas por lo siguiente:

  1. Lectura de la política actual llamando 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 a los miembros deseados y sus concesiones de funciones.
  3. Escritura de la política actualizada llamando a setIamPolicy().

Es común otorgar permisos para un proyecto o una organización completos. Sin embargo, también puedes configurar políticas a un nivel más detallado en una amplia gama de recursos de GCP, como instancias de Compute Engine o depósitos de Cloud Storage. Para obtener una lista completa de funciones y el nivel de recursos más bajo al que puedes otorgar cada función, consulta Cómo comprender las funciones.

Las secciones a continuación muestran cómo obtener, modificar y configurar una política para un proyecto.

Obtén la política

COMANDO DE GCLOUD

Ejecuta el comando get-iam-policy:

gcloud projects get-iam-policy [PROJECT] --format [FORMAT] > [FILE-PATH]

[PROJECT] es el nombre del proyecto. [FORMAT] es JSON o YAML. [FILE-PATH] es la ruta en el disco para guardar la política.

Por ejemplo, el siguiente obtiene la política para el proyecto my-project en formato JSON y la guarda en el directorio de inicio del usuario.

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

La respuesta será una política.

API de REST

Llamar a getIamPolicy():

POST https://cloudresourcemanager.googleapis.com/v1/[PROJECT]:getIamPolicy

[PROJECT] es el nombre del recurso para el que se aplicará la política, como proyectos/mi-proyecto.

La respuesta será una política.

C#

Antes de probar esta muestra, sigue las instrucciones de configuración para C# que se encuentran en la Guía de inicio rápido de Cloud IAM con bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud IAM para C#.

public Policy GetPolicy(string projectId)
{
    Policy policy = _service.Projects.GetIamPolicy(
        new GetIamPolicyRequest(), projectId).Execute();
    return policy;
}

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de Cloud IAM con bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud IAM para Python.

def get_policy(project_id):
    """Gets IAM policy for a project."""

    # pylint: disable=no-member
    policy = service.projects().getIamPolicy(
        resource=project_id, body={}).execute()
    print(policy)
    return policy

Modifica la política

De manera programática o con un editor de texto, modifica la política para otorgar o revocar funciones a los usuarios dados.

Para otorgar a un usuario una función existente:

COMANDO DE GCLOUD

El siguiente ejemplo otorga a user-3@gmail.com el editor con un editor de texto agregando su dirección de correo electrónico a la matriz de members bajo esa vinculación:

{
  "members":[
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user-2@gmail.com",
    "user-3@gmail.com"
  ],
  "role":"roles/editor"
}

API de REST

El siguiente ejemplo otorga a user-3@gmail.com el editor con un editor de texto agregando su dirección de correo electrónico a la matriz de members bajo esa vinculación:

{
  "members":[
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user-2@gmail.com",
    "user-3@gmail.com"
  ],
  "role":"roles/editor"
}

C#

Antes de probar esta muestra, sigue las instrucciones de configuración para C# que se encuentran en la Guía de inicio rápido de Cloud IAM con bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud IAM para C#.

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

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de Cloud IAM con bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud IAM para Python.

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 agregar usuarios a una nueva función que aún no existe, agrega una nueva binding.

COMANDO DE GCLOUD

Con un editor de texto, agrega una nueva binding a la matriz de bindings. El siguiente otorga a user-3@gmail.com la función de lector:

{
  "members":[
    "user-3@gmail.com"
  ],
  "role":"roles/reader"
}

API de REST

Con un editor de texto, agrega una nueva binding a la matriz de bindings. El siguiente otorga a user-3@gmail.com la función de lector:

{
  "members":[
    "user-3@gmail.com"
  ],
  "role":"roles/reader"
}

C#

Antes de probar esta muestra, sigue las instrucciones de configuración para C# que se encuentran en la Guía de inicio rápido de Cloud IAM con bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud IAM para C#.

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

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de Cloud IAM con bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud IAM para Python.

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

Para revocar el acceso, borra los miembros o vinculaciones deseados por completo. No se permiten vinculaciones vacías sin miembros.

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, especialmente cuando se otorga la función de propietario. Consulta la documentación de referencia projects.setIamPolicy() para obtener más información.

Configura la política

Una vez que hayas modificado la política para otorgar las funciones deseadas, llama a setIamPolicy() para realizar las actualizaciones.

COMANDO DE GCLOUD

Ejecute el comando de set-iam-policy con la ruta al archivo JSON que contiene la política actualizada:

gcloud projects set-iam-policy [PROJECT] [FILE-PATH]

Al igual que con get-iam-policy, [PROJECT] es el nombre del proyecto para el que se configurará la política. [FILE-PATH] es la ruta al archivo que contiene la nueva política.

La respuesta será la política actualizada.

API de REST

Llama a setIamPolicy():

POST https://cloudresourcemanager.googleapis.com/v1/[PROJECT]:setIamPolicy

[PROJECT] es el nombre del recurso para el que se configurará la política, como proyectos/mi-proyecto.

El cuerpo de la solicitud debe contener la política de IAM actualizada.

La respuesta será la política actualizada.

C#

public Policy SetPolicy(string projectId, Policy policy)
{
    return _service.Projects.SetIamPolicy(new SetIamPolicyRequest
    {
        Policy = policy
    }, projectId).Execute();
}

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de Cloud IAM con bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud IAM para Python.

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

    # pylint: disable=no-member
    policy = service.projects().setIamPolicy(
        resource=project_id, body={
            'policy': policy
        }).execute()
    print(policy)
    return policy

Para evitar colisiones si múltiples fuentes intentan actualizar la política simultáneamente, la política contiene un valor etag. Cuando llamas a setIamPolicy(), Cloud IAM compara el valor etag de la solicitud con el etag existente y solo escribe la política si los valores coinciden.

Pasos siguientes

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Cloud Identity and Access Management