Soluciona problemas de permisos de IAM en BigQuery

En este documento, se muestra cómo solucionar problemas relacionados con los permisos de Identity and Access Management (IAM) 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 denegó 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 produjo 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 Soluciona problemas relacionados con 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 Cloud Audit Logs para obtener información sobre el error.

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

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

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

El Analizador de políticas para 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é el 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 principales, 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 > Policy Analyzer.

  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 Seleccionar 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 de recurso completo. 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 la 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 algún tipo de acceso. Haz clic en Ver vinculación en cada resultado para ver los roles que brindan acceso al recurso del que el 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 Type:Custom 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 Enter a permission, 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.

¿Qué sigue?