En este post les presento un script de bash para usar en GCP para obtener los permisos de las Cuentas de Servicio a nivel de Proyecto y a nivel de Recursos (o activos) utilizando la API de Cloud Assets.
El script es realmente sencillo, utiliza comandos gcloud para comunicarse con GCP y solicitar una lista de todas las cuentas de servicio y sus permisos. Utilizamos la API de Cloud Assets para obtener los permisos de IAM a nivel de recursos. Luego utilizamos jq para manejar las salidas json y convertirlas en archivos csv.
El script
Clona el script a tu computadora desde este repo
git clone https://github.com/mdiloreto/gcp-sa-iam-script
Vas a obtener el archivo Service_account-proj-iam.sh. Que es el script en Bash:
#!/bin/bash
output_csv="gcp_service_accounts_permissions.csv"
# imprimir cabecera
echo "Proyecto,CuentaServicio,Rol,Miembro" > "$output_csv"
organization_id="{tu ID}" #<<<<<<Reemplaza con tu ID de ORG>>>>>
# Establecer tiempo de espera para comandos gcloud
GCLOUD_TIMEOUT=300
# Obtener una lista de todos los proyectos
PROJECTS=$(gcloud projects list --format="value(projectId)")
echo "Proyectos: $PROJECTS"
# Iterar todos los proyectos y obtener los permisos de IAM
for project in $PROJECTS; do
echo "Procesando proyecto: $project"
# IAM del proyecto
project_iam=$(timeout $GCLOUD_TIMEOUT gcloud projects get-iam-policy "$project" --format=json)
echo "IAM del Proyecto $project. ¡Hecho!"
# obtener cuentas de servicio
service_accounts=$(timeout $GCLOUD_TIMEOUT gcloud iam service-accounts list --project="$project" --format="value(email)")
echo "Cuentas de Servicio: $service_accounts"
for service_account in $service_accounts; do
echo "Procesando cuenta de servicio: $service_account"
# formateando csv
echo "$project_iam" | jq -r --arg sa "$service_account" --arg proj "$project" '
.bindings[] |
select(.members[] | contains($sa)) |
.role as $role |
.members[] |
select(contains($sa)) |
[$proj, $sa, $role, .] |
@csv' >> "$output_csv"
done
done
echo "Exportación completada: $output_csv"
echo "Obteniendo todos los Permisos IAM a nivel de organización"
# Usar la API de Google Cloud Assets para buscar todas las políticas de iam en formato json
gcloud asset search-all-iam-policies --scope=organizations/${organization_id} --format=json > policies.json
# procesar el JSON y convertir a csv
(
echo "Proyecto,Carpeta,Recurso,Miembro,Rol"
jq -r '.[] |
.project as $project |
(.
Prerrequisitos
Antes de ejecutar este script, necesitarás lo siguiente:
- Habilitar las APIs de Resource Manager, IAM y Cloud Assets en GCP.
- Acceso a una cuenta de GCP con los permisos necesarios para ver políticas de IAM y cuentas de servicio.
- La CLI de gcloud instalada y configurada en tu sistema o puedes ejecutarla en Cloud Shell.
- La utilidad jq para procesar JSON.
Setup
- Clona el repositorio o descarga el script a tu máquina local.
- Asegúrate de que la CLI de gcloud esté autorizada y configurada con tu cuenta de GCP. Puedes hacer esto ejecutando:
gcloud auth login
- Setear la variable organization_id en el script a tu ID de organización de GCP.
Ejecutar el script en Bash
¡Ahora ejecuta el script en bash! En este caso lo he hecho desde Cloud Shell.
mdiloreto@cloudshell:~/script $ ./gcp_service_accounts_permissions_exporter.sh
Output
En el mismo directorio del script obtendrás dos archivos:
gcp_service_accounts_permissions.csv
– Contiene los permisos de las cuentas de servicio para cada proyecto.service_accounts_iam_permissions_org.csv
– Contiene los permisos de las cuentas de servicio en todos los Activos a nivel de organización.
Enjoy!
Leave a Reply