Soluciona problemas de control de acceso

En este documento, se muestra cómo solucionar problemas de seguridad relacionados con los permisos de Identity and Access Management (IAM), el control de acceso a nivel de columna y las claves de encriptación administradas por el cliente (CMEK) en BigQuery. Por lo general, los problemas de permisos de IAM generan errores Access Denied como los siguientes:

  • Access Denied: Project PROJECT_ID: User does not have bigquery.jobs.create permission in project PROJECT_ID.
  • Access Denied: Project PROJECT_ID: User does not have bigquery.datasets.get permission on dataset DATASET.
  • User does not have permission to query table PROJECT_ID:DATASET.TABLE.
  • Access Denied: Table PROJECT_ID:DATASET.TABLE: User does not have permission to query table PROJECT_ID:DATASET.TABLE, or perhaps it does not exist.
  • Access Denied: User PRINCIPAL does not have permission to perform bigquery.tables.getData on resource 'projects/PROJECT_ID/datasets/DATASET/tables/TABLE'.

Antes de comenzar

  • Para solucionar problemas relacionados con el acceso de una principal a un recurso de BigQuery, asegúrate de tener los permisos de IAM necesarios.

Recopila información sobre el problema

El primer paso para solucionar un problema de acceso a un recurso es determinar el permiso que falta, la principal de IAM a la que se le negó el acceso y el recurso al que la principal intentaba acceder.

Obtén información del historial de errores o trabajos

Para obtener información sobre la principal, el recurso y los permisos, examina el resultado de la herramienta de línea de comandos de bq, la respuesta de la API o BigQuery en la consola de Google Cloud .

Por ejemplo, si intentas ejecutar una consulta con permisos insuficientes, verás un error como el siguiente en la pestaña Información del trabajo de la sección Resultados de la consulta de la consola de Google Cloud .

Se muestra un error de acceso denegado en la pestaña Información del trabajo de la sección Resultados de la consulta.

Examina el error para determinar la principal, el recurso y los permisos.

En algunos casos, es posible que puedas solicitar los permisos faltantes directamente desde el mensaje de error. Para obtener más información, consulta Mensajes de error de permisos en la documentación de IAM.

Obtén información de los registros de auditoría de Cloud

Si el mensaje de error es genérico, falta información o la acción falló en un proceso en segundo plano, usa el Explorador de registros de los Registros de auditoría de Cloud para obtener información sobre el error.

  1. En la consola de Google Cloud , accede a la página Explorador de registros.

    Ve al Explorador de registros

    Como alternativa, en el menú de navegación, elige Monitoring > Explorador de registros.

  2. En el Explorador de registros, para el alcance de los registros, elige Registros del proyecto.

  3. En la ventana de consulta, ingresa la siguiente consulta para obtener errores relacionados con los permisos de los registros de acceso a los datos de BigQuery:

    resource.type="bigquery_resource" AND
    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access" AND
    protoPayload.status.message:"Access Denied" OR
    protoPayload.status.message:"Permission denied" OR
    protoPayload.status.code=7

    Reemplaza PROJECT_ID con el ID del proyecto.

  4. En los resultados de la consulta, expande la entrada de registro que corresponde a la operación fallida.

  5. En la sección protoPayload, expande el array authorizationInfo y, luego, expande cada nodo del array authorizationInfo.

    El array authorizationInfo muestra cada verificación de permisos que se realizó durante la llamada a la API.

  6. Para ver la causa del error, busca la entrada granted: false. La entrada granted: false muestra la siguiente información:

    • permission: Es la cadena de permiso de IAM que se verificó. Por ejemplo, bigquery.tables.getData
    • resource: Es el nombre completamente calificado del recurso al que intentó acceder la principal. Por ejemplo, projects/myproject/datasets/mydataset/tables/mytable.
    • principalEmail (si está disponible): Se hace referencia en protoPayload.authenticationInfo. Es la principal que intentó realizar la acción.

    La sección authorizationInfo del protoPayload que muestra el permiso, el recurso y el principalEmail.

Usa el Analizador de políticas para las políticas de permiso

El Analizador de políticas de permisos te permite descubrir qué principales de IAM tienen qué tipo de acceso a cuáles recursos de BigQuery en función de tus políticas de permisos de IAM.

Después de recopilar información sobre el error de permisos, puedes usar el Analizador de políticas para comprender por qué la principal no tiene el acceso requerido. Esta herramienta analiza todas las políticas pertinentes, las membresías en Grupos de Google y la herencia de recursos superiores, como un proyecto, una carpeta y tu organización.

Para usar el Analizador de políticas en políticas de permiso, crea una consulta de análisis, especifica un alcance para el análisis y, luego, ejecuta la consulta.

  1. En la consola de Google Cloud , ve a la página Analizador de políticas.

    Ir al Analizador de políticas

    Como alternativa, en el menú de navegación, elige IAM y administración > Analizador de políticas.

  2. Haz clic en Crear consulta personalizada.

  3. En la página Configura tu consulta, ingresa la información que recopilaste anteriormente:

    1. En la sección Selecciona el alcance, en el campo Selecciona el alcance de la consulta, verifica que aparezca tu proyecto actual o haz clic en Explorar para elegir otro recurso.

    2. En la sección Configura los parámetros de consulta, para Parámetro 1, elige Principal y, en el campo Principal, ingresa el correo electrónico del usuario, el grupo o la cuenta de servicio.

    3. Haz clic en Agregar parámetro.

    4. En Parámetro 2, elige Permiso y, en el campo Permiso, haz clic en Seleccionar, elige el permiso de BigQuery y, luego, haz clic en Agregar. Por ejemplo, selecciona bigquery.tables.getData.

    5. Haz clic en Agregar parámetro.

    6. En Parámetro 3, elige Recurso y, en el campo Recurso, ingresa el nombre del recurso completamente calificado. El nombre del recurso debe incluir el prefijo del servicio, como en los siguientes ejemplos:

      • Proyecto de BigQuery: //cloudresourcemanager.googleapis.com/projects/PROJECT_ID
      • Conjunto de datos de BigQuery: //bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET
      • Tabla de BigQuery: //bigquery.googleapis.com/projects/PROJECT/datasets/DATASET/tables/TABLE
  4. En el panel Consulta personalizada, haz clic en Analizar > Ejecutar consulta.

  5. Examina los resultados de la consulta. El resultado puede ser uno de los siguientes:

    • Una lista vacía Si no se muestran resultados, se confirma que el principal no tiene el permiso requerido. Deberás otorgarle a la principal un rol que proporcione los permisos correctos.
    • Uno o más resultados Si el analizador encuentra una política de permisos, significa que existe alguna forma de acceso. Haz clic en View Binding en cada resultado para ver los roles que brindan acceso al recurso del que la principal es miembro. La vinculación de la política muestra si el acceso se otorga a través de la membresía o la herencia de un grupo, o si se rechaza por una condición de IAM o una política de denegación de IAM.

Encuentra el rol de IAM correcto que otorga los permisos necesarios

Después de confirmar que el principal no tiene acceso suficiente, el siguiente paso es encontrar el rol de IAM predefinido o personalizado adecuado que otorgue los permisos necesarios. El rol que elijas debe cumplir con el principio de privilegio mínimo.

Si tu organización usa roles personalizados, puedes encontrar el rol correcto enumerando todos los roles personalizados creados en tu organización o proyecto. Por ejemplo, en la consola de Google Cloud , en la página Roles, puedes filtrar la lista por Tipo:Personalizado para ver solo los roles personalizados.

Para encontrar el rol de IAM predefinido correcto, sigue estos pasos.

  1. Abre la sección de permisos de BigQuery de la página Roles y permisos de IAM de BigQuery.

  2. En la barra de búsqueda Ingresa un permiso, ingresa el permiso que recuperaste del mensaje de error, el historial de trabajos o los registros de auditoría. Por ejemplo, bigquery.tables.getData.

    En los resultados de la búsqueda, se muestran todos los roles predefinidos de BigQuery que otorgan el permiso.

  3. Aplica el principio de privilegio mínimo: En la lista de roles, elige el rol menos permisivo que otorga los permisos necesarios. Por ejemplo, si buscaste bigquery.tables.getData para otorgar la capacidad de consultar datos de tablas, Visualizador de datos de BigQuery es el rol menos permisivo que otorga ese permiso.

  4. Otorga a la principal el rol adecuado. Para obtener información sobre cómo otorgar un rol de IAM a un recurso de BigQuery, consulta Controla el acceso a los recursos con IAM.

Soluciona problemas relacionados con el control de acceso a nivel de columna

En las siguientes secciones, se explica cómo solucionar problemas relacionados con el control de acceso a nivel de la columna y las etiquetas de política de Data Catalog.

No puedo ver los roles de Data Catalog

Si no puedes ver roles como el de lector detallado de Data Catalog, es posible que no hayas habilitado la API de Data Catalog en tu proyecto. Para obtener información sobre cómo habilitar la API de Data Catalog, consulta Antes de comenzar. Los roles de Data Catalog aparecen varios minutos después de que habilitas la API de Data Catalog.

No puedo ver la página Taxonomías

Necesitas permisos adicionales para ver la página Taxonomías de etiquetas de política en la consola deGoogle Cloud . Por ejemplo, el rol de administrador de etiquetas de política de Data Catalog tiene acceso a la página Taxonomías.

Apliqué las etiquetas de política, pero no funcionan.

Si sigues recibiendo resultados de la búsqueda para una cuenta que no debería tener acceso, es posible que la cuenta esté recibiendo resultados almacenados en caché. Específicamente, si ejecutaste la consulta correctamente y, luego, aplicaste etiquetas de política, es posible que obtengas resultados de la caché de resultados de la búsqueda. De forma predeterminada, los resultados de las consultas se almacenan en caché durante 24 horas. La consulta falla de inmediato si inhabilitas la caché de resultados. Para obtener más detalles sobre el almacenamiento en caché, consulta Impacto del control de acceso a nivel de columna.

En general, las actualizaciones de IAM tardan unos 30 segundos en propagarse. Los cambios en la jerarquía de etiquetas de política pueden demorar hasta 30 minutos en propagarse.

No tengo permiso para leer desde una tabla con seguridad a nivel de columnas

Necesitas el rol de lector detallado o el rol de lector enmascarado en diferentes niveles, como la organización, la carpeta, el proyecto y la etiqueta de política. El rol de lector detallado otorga acceso a los datos sin procesar, mientras que el rol de lector enmascarado otorga acceso a los datos enmascarados. Puedes usar el solucionador de problemas de políticas de IAM para verificar este permiso a nivel del proyecto.

Configuré el control de acceso detallado en la taxonomía de etiqueta de política, pero los usuarios ven datos protegidos

Para solucionar este problema, confirma los siguientes detalles:

  • En la página Taxonomías de etiquetas de política del Centro de seguridad de BigQuery, confirma que el botón de activación Aplicar control de acceso esté en la posición Activado.
  • Asegúrate de que tus consultas no usen resultados de consultas almacenados en caché. Si usas la herramienta de línea de comandos de bq para probar tus consultas, usa la marca --nouse_cache para inhabilitar la caché de consultas. Por ejemplo:

    bq query --nouse_cache --use_legacy_sql=false "SELECT * EXCEPT (customer_pii) FROM my_table;"

Consideraciones sobre la migración de proyectos

Las etiquetas de política y las taxonomías se almacenan en una Google Cloud organización específica y no se vuelven a asociar automáticamente cuando se migra un proyecto a una nueva organización. Si migras un proyecto que usa etiquetas de política para el control de acceso a nivel de la columna a otra organización, se producen los siguientes problemas:

  • Las etiquetas de política ya no se pueden administrar en la Google Cloud consola del proyecto migrado.
  • No puedes aplicar estas etiquetas de política a las columnas nuevas del proyecto migrado.
  • Es posible que los controles de acceso a nivel de la columna existentes parezcan seguir vigentes, pero el vínculo a la taxonomía de origen en la organización original está roto a los efectos de la administración.

Para resolver este problema, el equipo de asistencia de Google Cloud debe intervenir de forma manual para volver a asociar la taxonomía con la nueva organización. Si migraste un proyecto con etiquetas de política y tienes estos problemas, comunícate con Atención al cliente de Cloud.

Soluciona problemas de claves de encriptación administradas por el cliente

En la siguiente lista, se describen los errores comunes y las resoluciones recomendadas cuando usas claves de encriptación administradas por el cliente (CMEK) con Cloud Key Management Service:

Error: Please grant Cloud KMS CryptoKey Encrypter/Decrypter role
Resolución: La cuenta de servicio de BigQuery asociada a tu proyecto no tiene permisos de IAM suficientes para operar en la clave de Cloud KMS especificada. Para otorgar el permiso de IAM requerido, sigue las instrucciones del mensaje de error o de Otorga permisos de encriptación y desencriptación.
Error: Existing table encryption settings don't match encryption settings specified in the request
Resolución: Este error puede ocurrir cuando la tabla de destino tiene una configuración de encriptación que no coincide con la configuración de encriptación en tu solicitud. Para solucionar este problema, usa la disposición de escritura TRUNCATE para reemplazar la tabla o especifica una tabla de destino diferente.
Error: This region is not supported
Resolución: La región de la clave de Cloud KMS no coincide con la región del conjunto de datos de BigQuery para la tabla de destino. Para resolver este problema, selecciona una clave en una región que coincida con tu conjunto de datos o carga datos en un conjunto de datos que coincida con la región de la clave.
Error: Your administrator requires that you specify an encryption key for queries in project PROJECT_ID.
Resolución: Una política de la organización impidió crear un recurso o ejecutar una consulta. Para obtener más información sobre esta política, consulta Requerir CMEK para todos los recursos.
Error: Your administrator prevents using KMS keys from project KMS_PROJECT_ID to protect resources in project PROJECT_ID.
Resolución: Una política de la organización impidió crear un recurso o ejecutar una consulta. Para obtener más información sobre esta política, consulta Restringe las claves de Cloud KMS de un proyecto de BigQuery.

¿Qué sigue?