Script para sincronizar permisos de lectura en datasets de BigQuery y gestionar IAM a nivel de proyecto.
-
Instalar Google Cloud SDK
- Descargar desde: https://cloud.google.com/sdk/docs/install
- Asegurar que
gcloud
esté en el PATH del sistema
-
Instalar dependencias de Python
pip install -r requirements.txt
-
Autenticación con Google Cloud
gcloud auth application-default login
Existen dos formas de especificar los usuarios:
Edita el archivo emails.txt
y añade un correo electrónico por línea:
usuario1@ejemplo.com
usuario2@ejemplo.com
usuario3@ejemplo.com
Puedes especificar correos directamente en el comando:
python main.py --emails "usuario1@ejemplo.com" "usuario2@ejemplo.com"
O separados por comas:
python main.py --emails "usuario1@ejemplo.com,usuario2@ejemplo.com"
Para eliminar usuarios del acceso:
- Quítalos del archivo
emails.txt
o de la lista de--emails
- Ejecuta el script con la opción
--prune-extra
para remover accesos no listados
--project
: ID del proyecto (default:ripa-public
)--emails-file
: Ruta al archivo con correos electrónicos--emails
: Lista de correos por línea de comandos--prune-extra
: Elimina accesos de usuarios no listados (modo sync estricto)--update-project-iam
: Sincroniza roles de BigQuery según lista configurada--remove-job-user
: (Obsoleto: ahora se gestiona automáticamente)--dry-run
: Modo de prueba (no aplica cambios)
python main.py --project ripa-public --emails-file emails.txt --update-project-iam --prune-extra --dry-run
python main.py --project ripa-public --emails-file emails.txt --update-project-iam --prune-extra
python main.py --project ripa-public --emails-file emails.txt --prune-extra
python main.py --project ripa-public --emails-file emails.txt --prune-extra
python main.py --project ripa-public --emails "usuario@ejemplo.com" --update-project-iam
desired_roles = [
"roles/bigquery.dataViewer"
]
desired_roles = [
"roles/bigquery.dataViewer",
"roles/bigquery.metadataViewer"
]
desired_roles = [
"roles/bigquery.dataEditor"
]
desired_roles = [
"roles/bigquery.admin"
]
-
A nivel de datasets:
- Otorga permisos de
READER
a los usuarios especificados en todos los datasets - Opcionalmente elimina usuarios no listados (con
--prune-extra
)
- Otorga permisos de
-
A nivel de proyecto (con
--update-project-iam
):- Otorga únicamente los roles configurados en la lista
desired_roles
- Remueve automáticamente cualquier otro rol de BigQuery que no esté en la lista
- Permite cambios fáciles modificando la lista en el código
- Otorga únicamente los roles configurados en la lista
Para cambiar qué roles se otorgan, modifica la lista DESIRED_BIGQUERY_ROLES
al inicio del archivo:
# Configuración de roles de BigQuery (MODIFICA AQUÍ PARA CAMBIAR ROLES)
DESIRED_BIGQUERY_ROLES = [
"roles/bigquery.dataViewer"
# Puedes agregar más roles aquí, por ejemplo:
# "roles/bigquery.metadataViewer",
# "roles/bigquery.dataEditor",
]
El script incluye varias optimizaciones para mejorar el rendimiento:
- 🚀 Una sola consulta IAM: Obtiene la política completa una vez en lugar de consultar por cada usuario/rol
- ⚡ Procesamiento paralelo: Procesa múltiples datasets simultáneamente usando ThreadPoolExecutor
- 🎯 Operaciones inteligentes: Solo ejecuta comandos gcloud cuando hay cambios reales
- 📊 Métricas de tiempo: Muestra tiempo de ejecución para identificar cuellos de botella
- 🛡️ Manejo robusto de errores: Continúa procesando aunque algunos comandos fallen
roles/bigquery.dataViewer
: Permite leer datos de tablas y vistas (configurado actualmente)
READER
: Permite leer datos específicos de cada dataset
- Cualquier rol de BigQuery que no esté en la lista
desired_roles
- Incluye:
jobUser
,metadataViewer
,admin
,dataEditor
, etc.
- Error "gcloud no encontrado": Instala Google Cloud SDK y verifica que esté en el PATH
- Error de autenticación: Ejecuta
gcloud auth application-default login
- Correos inválidos: Verifica que todos los correos contengan el símbolo "@"