Skip to content

DatosLabUPLA/ripa-public

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ripa-public

Script para sincronizar permisos de lectura en datasets de BigQuery y gestionar IAM a nivel de proyecto.

Prerrequisitos

  1. Instalar Google Cloud SDK

  2. Instalar dependencias de Python

    pip install -r requirements.txt
  3. Autenticación con Google Cloud

    gcloud auth application-default login

Gestión de Usuarios

Agregar o Modificar Usuarios

Existen dos formas de especificar los usuarios:

Opción 1: Archivo de correos (recomendado)

Edita el archivo emails.txt y añade un correo electrónico por línea:

usuario1@ejemplo.com
usuario2@ejemplo.com
usuario3@ejemplo.com

Opción 2: Correos por línea de comandos

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"

Eliminar Usuarios

Para eliminar usuarios del acceso:

  1. Quítalos del archivo emails.txt o de la lista de --emails
  2. Ejecuta el script con la opción --prune-extra para remover accesos no listados

Ejecución del Script

Opciones de Comando

  • --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)

Ejemplos de Uso

1. Ejecutar en modo de prueba (recomendado primero)

python main.py --project ripa-public --emails-file emails.txt --update-project-iam --prune-extra --dry-run

2. Sincronización completa con archivo de correos

python main.py --project ripa-public --emails-file emails.txt --update-project-iam --prune-extra

3. Solo actualizar datasets (sin IAM de proyecto)

python main.py --project ripa-public --emails-file emails.txt --prune-extra

4. Sincronización estricta (elimina usuarios no listados)

python main.py --project ripa-public --emails-file emails.txt --prune-extra

5. Usar correos por línea de comandos

python main.py --project ripa-public --emails "usuario@ejemplo.com" --update-project-iam

Ejemplos de Configuración de Roles

Solo lectura de datos (actual)

desired_roles = [
    "roles/bigquery.dataViewer"
]

Lectura de datos + metadatos

desired_roles = [
    "roles/bigquery.dataViewer",
    "roles/bigquery.metadataViewer"
]

Edición de datos

desired_roles = [
    "roles/bigquery.dataEditor"
]

Acceso completo para administradores

desired_roles = [
    "roles/bigquery.admin"
]

¿Qué hace el script?

  1. A nivel de datasets:

    • Otorga permisos de READER a los usuarios especificados en todos los datasets
    • Opcionalmente elimina usuarios no listados (con --prune-extra)
  2. 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

Configuración de Roles

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",
]

Optimizaciones de Rendimiento

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

Permisos Actuales

Permisos de Proyecto (configurables):

  • roles/bigquery.dataViewer: Permite leer datos de tablas y vistas (configurado actualmente)

Permisos de Dataset:

  • READER: Permite leer datos específicos de cada dataset

Roles Removidos automáticamente:

  • Cualquier rol de BigQuery que no esté en la lista desired_roles
  • Incluye: jobUser, metadataViewer, admin, dataEditor, etc.

Resolución de Problemas

  • 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 "@"

About

Permite actualizar los permisos de ripa-public para agregar o quitar correos desde emails.txt

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages