Aplica políticas a grupos de usuarios con vinculaciones de acceso

Puedes usar vinculaciones de acceso para controlar a qué aplicaciones y recursos pueden acceder tus grupos de usuarios. Una vinculación de acceso especifica cómo aplicar niveles de acceso y controles de sesión a un grupo de usuarios. Puedes aplicar el mismo nivel de acceso y control de sesión a todas las aplicaciones, o bien definir comportamientos específicos para aplicaciones individuales.

Para asegurarte de que todo esté configurado correctamente, puedes probar tus políticas antes de aplicarlas.

Cuando trabajes con vinculaciones de acceso, ten en cuenta el siguiente comportamiento:

  • Un grupo de usuarios solo puede tener una vinculación de acceso.
  • Si un usuario pertenece a varios grupos, se le otorga acceso si alguna política lo permite (OR, no AND).
  • En el caso de los controles de sesión, solo se aplica la vinculación de acceso creada más recientemente.

Usa una sola configuración para todas las aplicaciones

Este método aplica el mismo nivel de acceso y control de sesión a todas las aplicaciones a las que accede un grupo de usuarios.

Te recomendamos que pruebes tu política con una ejecución de prueba o que la apliques a un grupo de prueba pequeño antes de implementarla en producción.

gcloud

Crea la vinculación de acceso.

gcloud access-context-manager cloud-bindings create \
     --group-key GROUP_ID
     --organization ORG_ID
     --level DEFAULT_ACCESS_LEVEL
  [  --session-length=DEFAULT_SESSION_LENGTH                ]
  [  --session-reauth-method=DEFAULT_SESSION_REAUTH_METHOD  ]

Reemplaza lo siguiente:

  • GROUP_ID: El ID del grupo. Si no tienes el ID del grupo disponible, puedes recuperarlo si llamas al método get en el recurso del grupo.
  • ORG_ID: Es el ID de tu organización.
  • DEFAULT_ACCESS_LEVEL: Es el nombre opcional del nivel de acceso, que tiene el formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME. Reemplaza POLICY_ID por el ID de la política de acceso y ACCESS_LEVEL_NAME por el nombre del nivel de acceso.
  • DEFAULT_SESSION_LENGTH: Es la duración opcional de la sesión con el formato de duración ISO 8601, como 30m para 30 minutos o 2h para dos horas.
  • DEFAULT_SESSION_REAUTH_METHOD: Es el método opcional para desafiar a los usuarios a volver a verificar su identidad, que debe ser uno de los siguientes:
    • LOGIN: Aplica el acceso estándar, que puede incluir la MFA o cualquier otro factor definido por Workspace.
    • PASSWORD: Solo requiere una contraseña, incluso si se definen otros factores. Si las contraseñas se administran con un IdP externo, los usuarios se redireccionan al IdP. Si la sesión del IdP está activa, se vuelve a autenticar a los usuarios de forma implícita. Si el IdP no está activo, los usuarios deben acceder a través de él.
    • SECURITY_KEY: Exige una llave de seguridad física.

API

  1. Crea un cuerpo JSON:

    {
      "groupKey": "GROUP_ID",
      "accessLevels": [
        "DEFAULT_ACCESS_LEVEL"
      ],
      // optional:
      "sessionSettings": {
        "sessionLength": "DEFAULT_SESSION_LENGTH",
        "sessionReauthMethod": "DEFAULT_SESSION_REAUTH_METHOD"
      }
    }
    

    Reemplaza lo siguiente:

    • GROUP_ID: El ID del grupo. Si no tienes el ID del grupo disponible, puedes recuperarlo si llamas al método get en el recurso del grupo.
    • DEFAULT_ACCESS_LEVEL: Es el nombre opcional del nivel de acceso, que tiene el formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME. Reemplaza POLICY_ID por el ID de la política de acceso y ACCESS_LEVEL_NAME por el nombre del nivel de acceso.
    • DEFAULT_SESSION_LENGTH: Es la duración opcional de la sesión con el formato de duración ISO 8601, como 30m para 30 minutos o 2h para dos horas.
    • DEFAULT_SESSION_REAUTH_METHOD: Es el método opcional para desafiar a los usuarios a volver a verificar su identidad, que debe ser uno de los siguientes:
      • LOGIN: Aplica el acceso estándar, que puede incluir la MFA o cualquier otro factor definido por Workspace.
      • PASSWORD: Solo requiere una contraseña, incluso si se definen otros factores. Si las contraseñas se administran con un IdP externo, los usuarios se redireccionan al IdP. Si la sesión del IdP está activa, se vuelve a autenticar a los usuarios de forma implícita. Si el IdP no está activo, los usuarios deben acceder a través de él.
      • SECURITY_KEY: Exige una llave de seguridad física.
  2. Envía la solicitud POST:

    POST https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings
    

    ORG_ID es el ID de la organización que usaste para crear el rol de administrador de vinculación de acceso a la nube. Si no se configuró la propiedad access-context-manager/organization, reemplaza ORG_ID en la marca opcional --organization por el ID de la organización que usaste cuando creaste el rol de administrador de vinculación de acceso a la nube.

Si se realiza correctamente, deberías recibir una representación del objeto JSON. Si hay un problema, recibirás un mensaje de error.

Define configuraciones para aplicaciones específicas

Este método te permite aplicar diferentes niveles de acceso y controles de sesión a distintas aplicaciones. También puedes establecer reglas predeterminadas para las aplicaciones que no tienen configuraciones específicas. Este método es útil cuando quieres hacer lo siguiente:

  • Aplicar políticas solo a ciertas aplicaciones
  • Crear una política general, pero excluir algunas aplicaciones de ella

gcloud

  1. Crea un archivo de vinculación en formato YAML con una lista de entradas de alcance dentro de la lista scopedAccessSettings. Para cada aplicación que quieras asignar a un nivel de acceso específico, incluye una entrada clientScope.

    scopedAccessSettings:
    - scope:
        clientScope:
          restrictedClientApplication:
            clientId: CLIENT_ID
      activeSettings:
        accessLevels:
        - ACCESS_LEVEL_A
        sessionSettings:
        - sessionLength: SESSION_LENGTH
          sessionReauthMethod: SESSION_REAUTH_METHOD
          sessionLengthEnabled: true
    - scope:
        clientScope:
          restrictedClientApplication:
            #
            # because this app is specified by `name`,
            # it won't work with sessionSettings.
            #
            # if you add sessionSettings, make sure to
            # replace the `name` key with `clientId`,
            # and use the OAuth client ID as the value.
            #
            name: CLIENT_NAME
      activeSettings:
        accessLevels:
        - ACCESS_LEVEL_B
    

    Reemplaza lo siguiente:

    • CLIENT_ID: El ID de cliente de OAuth. Debes usar clientId cuando una aplicación contiene sessionSettings.
    • ACCESS_LEVEL_A: Es un nombre de nivel de acceso con el formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
    • SESSION_LENGTH: Es la duración de la sesión con el formato de duración ISO 8601, como 30m para 30 minutos o 2h para dos horas.
    • SESSION_REAUTH_METHOD: Es el método opcional para desafiar a los usuarios a volver a verificar su identidad, que debe ser uno de los siguientes:

      • LOGIN: Aplica el acceso estándar, que puede incluir la MFA o cualquier otro factor definido por Workspace.
      • PASSWORD: Solo requiere una contraseña, incluso si se definen otros factores. Si las contraseñas se administran con un IdP externo, los usuarios se redireccionan al IdP. Si la sesión del IdP está activa, los usuarios se reautenticen de forma implícita. Si el IdP no está activo, los usuarios deben acceder a través del IdP.
      • SECURITY_KEY: Exige una llave de seguridad física.
    • CLIENT_NAME: El nombre del cliente. Si la aplicación contiene sessionSettings, no puedes usar el nombre del cliente. En su lugar, usa el ID de cliente de OAuth.

    • ACCESS_LEVEL_B: Es un nombre de nivel de acceso con el formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.

    Para establecer un nivel de acceso predeterminado para las aplicaciones que no se definen en el archivo YAML, usa el argumento --level. El archivo YAML solo admite parámetros de configuración específicos de la aplicación (scopedAccessSettings).

  2. Crea la vinculación de acceso.

    gcloud access-context-manager cloud-bindings create
        --organization ORG_ID
        --group-key GROUP_ID
        --binding-file BINDING_FILE_PATH
      [  --level DEFAULT_ACCESS_LEVEL ]
      [  --session-length=DEFAULT_SESSION_LENGTH                ]
      [  --session-reauth-method=DEFAULT_SESSION_REAUTH_METHOD  ]
    

    Reemplaza lo siguiente:

    • ORG_ID: Es el ID de tu organización.
    • GROUP_ID: El ID del grupo. Si no tienes el ID del grupo disponible, puedes recuperarlo si llamas al método get en el recurso del grupo.
    • BINDING_FILE_PATH: Es la ruta de acceso al archivo YAML que contiene el esquema de vinculación de acceso. El archivo de vinculación solo admite scopedAccessSettings.
    • DEFAULT_ACCESS_LEVEL: Es el nombre opcional del nivel de acceso, que tiene el formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME. Reemplaza POLICY_ID por el ID de la política de acceso y ACCESS_LEVEL_NAME por el nombre del nivel de acceso.
    • DEFAULT_SESSION_LENGTH: Es la duración opcional de la sesión con el formato de duración ISO 8601, como 30m para 30 minutos o 2h para dos horas.
    • DEFAULT_SESSION_REAUTH_METHOD: Es el método opcional para desafiar a los usuarios a volver a verificar su identidad, que debe ser uno de los siguientes:
      • LOGIN: Aplica el acceso estándar, que puede incluir la MFA o cualquier otro factor definido por Workspace.
      • PASSWORD: Solo requiere una contraseña, incluso si se definen otros factores. Si las contraseñas se administran con un IdP externo, los usuarios se redireccionan al IdP. Si la sesión del IdP está activa, se vuelve a autenticar a los usuarios de forma implícita. Si el IdP no está activo, los usuarios deben acceder a través de él.
      • SECURITY_KEY: Exige una llave de seguridad física.

Cómo funcionan juntos los argumentos --level y --binding-file

  • Si solo usas --binding-file, solo las aplicaciones del archivo tendrán aplicadas las políticas.
  • Si solo usas --level, el nivel de acceso se aplica a todas las aplicaciones.
  • Si usas ambos, las reglas del archivo YAML tienen prioridad. El valor --level se aplica a todas las aplicaciones que no aparecen en el archivo.

Cómo trabajar con controles de sesión

  • Para establecer controles de sesión predeterminados para todas las aplicaciones, usa --session-length y --session-reauth-method.
  • Si también defines controles de sesión en el archivo YAML, esos controles de sesión anula la configuración predeterminada de esas aplicaciones específicas.
  • Debes usar --session-length y --session-reauth-method juntos.

API

Crea un cuerpo JSON:

{
  "groupKey": "GROUP_ID",
   //
   // Optional; if specified, all applications that aren't defined in
   // scopedAccessSettings have these access levels applied.
   //
   // If more than one access level is specified, the user is
   // granted access if any one resolves to TRUE (OR logic, not AND).
   //
   // If you omit this key entirely, then no policy enforcement is
   // applied by default.
   //
  "accessLevels": [
    "DEFAULT_ACCESS_LEVEL"
  ],
  "scopedAccessSettings": [
    {
      "scope": {
        "clientScope": {
          "restrictedClientApplication": {
            "clientId": "CLIENT_ID"
          }
        }
      },
      "activeSettings": {
        "accessLevels": [
          "ACCESS_LEVEL_A"
        ],
        "sessionSettings": [
          {
            "sessionLength": "SESSION_LENGTH",
            "sessionReauthMethod": "SESSION_REAUTH_METHOD",
            "sessionLengthEnabled": true
          }
        ]
      }
    },
    {
      "scope": {
        "clientScope": {
          "restrictedClientApplication": {
            "name": "CLIENT_NAME"
          }
        },
        "activeSettings": {
          "accessLevels": [
            "ACCESS_LEVEL_B"
          ]
        }
      }
    }
  ]
}

Reemplaza lo siguiente:

  • GROUP_ID: El ID del grupo. Si no tienes el ID del grupo disponible, puedes recuperarlo si llamas al método get en el recurso del grupo.
  • DEFAULT_ACCESS_LEVEL: Es el nombre opcional del nivel de acceso, que tiene el formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME. Reemplaza POLICY_ID por el ID de la política de acceso y ACCESS_LEVEL_NAME por el nombre del nivel de acceso.
  • CLIENT_ID: El ID de cliente de OAuth. Debes usar clientId cuando una aplicación contiene sessionSettings.
  • ACCESS_LEVEL_A: Es un nombre de nivel de acceso con el formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
  • SESSION_LENGTH: Es la duración de la sesión con el formato de duración ISO 8601, como 30m para 30 minutos o 2h para dos horas.
  • SESSION_REAUTH_METHOD: Es el método opcional para desafiar a los usuarios a volver a verificar su identidad, que debe ser uno de los siguientes:

    • LOGIN: Aplica el acceso estándar, que puede incluir la MFA o cualquier otro factor definido por Workspace.
    • PASSWORD: Solo requiere una contraseña, incluso si se definen otros factores. Si las contraseñas se administran con un IdP externo, los usuarios se redireccionan al IdP. Si la sesión del IdP está activa, los usuarios se reautenticen de forma implícita. Si el IdP no está activo, los usuarios deben acceder a través del IdP.
    • SECURITY_KEY: Exige una llave de seguridad física.
  • CLIENT_NAME: El nombre del cliente. Si la aplicación contiene sessionSettings, no puedes usar el nombre del cliente. En su lugar, usa el ID de cliente de OAuth.

  • ACCESS_LEVEL_B: Es un nombre de nivel de acceso con el formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.

Envía la solicitud POST:

POST https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings

ORG_ID es el ID de la organización que usaste para crear el rol de Administrador de vinculación de acceso a la nube. Si no se configuró la propiedad access-context-manager/organization, reemplaza ORG_ID en la marca opcional --organization por el ID de la organización que usaste cuando creaste el rol de administrador de vinculación de acceso a la nube.

Si se realiza correctamente, deberías recibir una representación del objeto JSON o un mensaje de error si hubo un problema.

Usa niveles de acceso de ejecución de prueba para simular la aplicación forzosa

Los niveles de acceso de la ejecución de prueba te permiten probar tus políticas de acceso sin aplicarlas. Esto te ayuda a comprender el impacto de una política antes de que se publique. Puedes ver los registros de la ejecución de prueba para ver qué sucedería si la política estuviera activa.

Solo se pueden usar los niveles de acceso en el modo de ejecución de prueba. Los controles de sesión no están disponibles en el modo de ejecución de prueba.

Crea una vinculación de ejecución de prueba

Puedes definir niveles de acceso de prueba junto con niveles de acceso normales en la misma vinculación, o bien puedes usar vinculaciones separadas para las pruebas.

gcloud

  1. Configura la configuración de acceso.

    scopedAccessSettings:
    - scope:
        clientScope:
          restrictedClientApplication:
            name: CLIENT_NAME
      activeSettings:
        accessLevels:
        - ACCESS_LEVEL_A
      dryRunSettings:
        accessLevels:
        - DRY_RUN_ACCESS_LEVEL_1
    - scope:
        clientScope:
          restrictedClientApplication:
            clientId: CLIENT_ID
        dryRunSettings:
          accessLevels:
          - DRY_RUN_ACCESS_LEVEL_2
    

    Reemplaza lo siguiente:

    • CLIENT_NAME: El nombre del cliente. Si la aplicación contiene sessionSettings, no puedes usar el nombre del cliente. En su lugar, usa el ID de cliente de OAuth.
    • ACCESS_LEVEL_A: Es un nombre de nivel de acceso con el formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
    • DRY_RUN_ACCESS_LEVEL_1: Es un nombre de nivel de acceso con el formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
    • CLIENT_ID: El ID de cliente de OAuth. Debes usar clientId cuando una aplicación contiene sessionSettings.
    • DRY_RUN_ACCESS_LEVEL_2: Es un nombre de nivel de acceso con el formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
  2. Crea la vinculación de acceso.

    gcloud access-context-manager cloud-bindings create
      --organization ORG_ID
      --group-key GROUP_ID
      --binding-file BINDING_FILE_PATH
      --dry-run-level DEFAULT_DRY_RUN_ACCESS_LEVEL
    

    Reemplaza lo siguiente:

    • ORG_ID: Es el ID de tu organización.
    • GROUP_ID: El ID del grupo. Si no tienes el ID del grupo disponible, puedes recuperarlo si llamas al método get en el recurso del grupo.
    • BINDING_FILE_PATH: Es la ruta de acceso al archivo YAML que contiene el esquema de vinculación de acceso. El archivo de vinculación solo admite scopedAccessSettings.
    • DEFAULT_DRY_RUN_ACCESS_LEVEL_2: Es un nombre de nivel de acceso opcional en el formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.

    Incluye esta marca para aplicar el nivel de acceso de ejecución de prueba especificado a todas las aplicaciones de forma predeterminada si no se especifican en el YAML.

API

  1. Crea un cuerpo JSON:

    {
      "group_key": "GROUP_ID",
       //
       // Optional; if specified, all applications that aren't defined in
       // scopedAccessSettings have these access levels applied.
       //
       // If more than one access level is specified, the user is
       // granted access if any one resolves to TRUE (OR logic, not AND).
       //
       // If you omit this key entirely, then no policy enforcement is
       // be applied by default.
       //
      "access_levels": [
        "DEFAULT_ACCESS_LEVEL"
      ],
       //
       // Optional; if specified, all applications that aren't defined in
       // scopedAccessSettings will have these dry run access levels applied.
       //
      "dry_run_access_levels": [
        "DEFAULT_DRY_RUN_ACCESS_LEVEL"
      ],
      "scoped_access_settings": [
        {
          "scope": {
            "client_scope": {
              "restricted_client_application": {
                "name": "CLIENT_NAME"
              }
            }
          },
          "active_settings": {
            "access_levels": [
              "ACCESS_LEVEL_A"
            ]
          },
          "dry_run_settings": {
            "access_levels": [
              "DRY_RUN_ACCESS_LEVEL_1"
            ]
          }
        },
        {
          "scope": {
            "client_scope": {
              "restricted_client_application": {
                "client_id": "CLIENT_ID"
              }
            }
          },
          "active_settings": {
            "access_levels": [
              "DRY_RUN_ACCESS_LEVEL_2"
            ]
          }
        }
      ]
    }
    

    Reemplaza lo siguiente:

    • GROUP_ID: El ID del grupo. Si no tienes el ID del grupo disponible, puedes recuperarlo si llamas al método get en el recurso del grupo.
    • DEFAULT_ACCESS_LEVEL: Es el nombre opcional del nivel de acceso, que tiene el formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME. Reemplaza POLICY_ID por el ID de la política de acceso y ACCESS_LEVEL_NAME por el nombre del nivel de acceso.
    • DEFAULT_DRY_RUN_ACCESS_LEVEL: Es un nombre de nivel de acceso opcional en el formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
    • CLIENT_NAME: El nombre del cliente. Si la aplicación contiene sessionSettings, no puedes usar el nombre del cliente. En su lugar, usa el ID de cliente de OAuth.
    • ACCESS_LEVEL_A: Es un nombre de nivel de acceso con el formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
    • DRY_RUN_ACCESS_LEVEL_1: Es un nombre de nivel de acceso en el formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
    • CLIENT_ID: El ID de cliente de OAuth. Debes usar client_id cuando una aplicación contiene sessionSettings.
    • DRY_RUN_ACCESS_LEVEL_2: Es un nombre de nivel de acceso en el formato accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
  2. Envía la solicitud POST:

    https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings
    

    ORG_ID es el ID de la organización que usaste para crear el rol de Administrador de vinculación de acceso a la nube. Si no se configuró la propiedad access-context-manager/organization, reemplaza ORG_ID en la marca opcional --organization por el ID de la organización que usaste cuando creaste el rol de administrador de vinculación de acceso a la nube.

    Si se realiza correctamente, deberías recibir una representación del objeto JSON. Si hay un problema, recibirás un mensaje de error.

Consulta los registros de prueba de validación

Después de configurar una prueba sin conexión, puedes verificar los registros para ver qué intentos de acceso se habrían rechazado.

En la siguiente tabla, se enumeran los campos de registro que puedes usar para crear y ejecutar la consulta para obtener los registros:

Nombre del campo Descripción
protoPayload.authenticationInfo.principalEmail ID de correo electrónico del principal al que se le deniega el acceso.
protoPayload.metadata.deniedApplications Es el nombre de la aplicación para la que se deniega el acceso.
protoPayload.metadata.evaluationResult Es el resultado de la evaluación de la política de acceso activo. Valores posibles: GRANTED o DENIED.
protoPayload.metadata.appliedAccessLevels Los niveles de acceso aplicados que requiere la política de acceso activa.
protoPayload.metadata.appliedDryRunAccessLevels Los niveles de acceso aplicados que requiere la política de acceso de la ejecución de prueba.
protoPayload.metadata.dryRunEvaluationResult El resultado de la evaluación de la política de acceso de la ejecución de prueba, que indica la acción prevista cuando se aplica la política de acceso. Valores posibles: GRANTED o DENIED.

Para obtener detalles sobre cómo crear una consulta de registros, consulta Lenguaje de consulta de Logging.