Orquesta Agentes IA que desarrollan por ti
Verificando...
44-iam-permissions-audit
Procedimiento: IAM Permissions Audit
Seguridad
1 plugin(s)
Editor
Preview
Tareas
1
Info
Titulo
Audita permisos IAM en la nube. Verifica políticas de acceso, detecta permisos no utilizados, y genera recomendaciones de hardening.
Descripcion
Contenido Markdown
9693 caracteres
Guardar
# Procedimiento: IAM Permissions Audit ## Metadata - **ID**: PROC-44 - **Frecuencia**: Mensual - **Duraci├│n estimada**: 30-45 min - **Requiere**: Acceso admin a plataformas (Azure, GitLab, AWS) - **Dependencias**: Ninguna - **Bloquea**: Ninguno - **Agentes**: security-engineer --- ## Objetivo Auditar permisos y accesos para: 1. Detectar permisos excesivos (principio de m├¡nimo privilegio) 2. Identificar usuarios/service accounts inactivos 3. Verificar roles y grupos 4. Limpiar accesos obsoletos --- ## Principios de Seguridad | Principio | Descripci├│n | |-----------|-------------| | Least Privilege | Solo permisos necesarios para la tarea | | Separation of Duties | No concentrar permisos cr├¡ticos | | Regular Review | Revisar accesos peri├│dicamente | | Just-in-Time | Acceso temporal cuando sea posible | --- ## Checklist Ejecutable ### 1. Auditar Azure AD / Entra ID ```bash # Login a Azure CLI az login # Listar todos los usuarios con roles az role assignment list --all --output table # Usuarios con rol Owner (peligroso) az role assignment list --all --role "Owner" --output table # Usuarios con rol Contributor az role assignment list --all --role "Contributor" --output table # Service Principals con roles az ad sp list --all --query "[].{name:displayName, appId:appId}" -o table ``` **Verificaciones:** - [ ] Usuarios con rol Owner: ___ - [ ] Service Principals activos: ___ - [ ] Roles custom definidos: ___ #### Detectar Permisos Excesivos ```bash # Usuarios con m├║ltiples roles de alto nivel az role assignment list --all -o json | jq ' group_by(.principalName) | map({ user: .[0].principalName, roles: [.[].roleDefinitionName], count: length }) | sort_by(-.count) | .[0:10]' # Service accounts sin uso reciente # (Verificar en logs de Azure AD) ``` | Usuario/SP | Roles | ┬┐Excesivo? | Acci├│n | |------------|-------|------------|--------| | ___ | ___ | S├¡/No | ___ | - [ ] Permisos excesivos identificados ### 2. Auditar GitLab ```bash # Listar miembros del grupo/proyecto curl -s --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \ "$GITLAB_URL/api/v4/groups/$GROUP_ID/members/all" | \ jq '.[] | {username, access_level, expires_at}' # Niveles de acceso: # 10 = Guest, 20 = Reporter, 30 = Developer, 40 = Maintainer, 50 = Owner # Usuarios con nivel Owner/Maintainer curl -s --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \ "$GITLAB_URL/api/v4/groups/$GROUP_ID/members/all" | \ jq '[.[] | select(.access_level >= 40)] | length' # Tokens de acceso personal (PATs) activos curl -s --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \ "$GITLAB_URL/api/v4/personal_access_tokens" | \ jq '.[] | {name, expires_at, active, scopes}' # Deploy tokens curl -s --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \ "$GITLAB_URL/api/v4/projects/$PROJECT_ID/deploy_tokens" | \ jq '.[] | {name, expires_at, scopes}' ``` **Verificaciones:** - [ ] Usuarios Owner: ___ - [ ] Usuarios Maintainer: ___ - [ ] PATs sin expiraci├│n: ___ - [ ] Deploy tokens activos: ___ ### 3. Auditar Azure DevOps ```bash # Listar miembros de proyecto az devops security group list --org $AZURE_ORG --output table # Miembros de grupos espec├¡ficos az devops security group membership list \ --id "[$PROJECT_ID]\Project Administrators" \ --org $AZURE_ORG # Service connections az devops service-endpoint list --org $AZURE_ORG --project $PROJECT -o table ``` - [ ] Project Administrators: ___ - [ ] Service connections: ___ ### 4. Auditar Accesos a Bases de Datos #### SQL Server ```sql -- Listar todos los logins SELECT name, type_desc, is_disabled, create_date, modify_date FROM sys.server_principals WHERE type IN ('S', 'U', 'G') ORDER BY modify_date DESC; -- Usuarios con rol sysadmin SELECT p.name FROM sys.server_role_members rm JOIN sys.server_principals p ON rm.member_principal_id = p.principal_id JOIN sys.server_principals r ON rm.role_principal_id = r.principal_id WHERE r.name = 'sysadmin'; -- Permisos por base de datos SELECT dp.name, dp.type_desc, p.permission_name, p.state_desc FROM sys.database_permissions p JOIN sys.database_principals dp ON p.grantee_principal_id = dp.principal_id WHERE dp.name NOT IN ('public', 'guest', 'dbo'); ``` #### PostgreSQL ```sql -- Listar roles SELECT rolname, rolsuper, rolcreaterole, rolcreatedb, rolcanlogin FROM pg_roles WHERE rolname NOT LIKE 'pg_%' ORDER BY rolname; -- Permisos por tabla SELECT grantee, table_name, privilege_type FROM information_schema.table_privileges WHERE table_schema = 'public'; ``` - [ ] Usuarios DB con permisos admin: ___ - [ ] Usuarios DB inactivos: ___ ### 5. Identificar Usuarios Inactivos ```bash # Azure AD - ├Ültimo login (requiere Azure AD Premium) az ad user list --query "[].{name:displayName, lastSignIn:signInActivity.lastSignInDateTime}" -o table # GitLab - ├Ültima actividad curl -s --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \ "$GITLAB_URL/api/v4/users?per_page=100" | \ jq '.[] | select(.last_activity_on < (now - 90*24*3600 | todate)) | {username, last_activity_on}' ``` | Usuario | ├Ültima Actividad | Inactivo > 90 d├¡as | Acci├│n | |---------|------------------|--------------------| ------| | ___ | ___ | S├¡/No | ___ | - [ ] Usuarios inactivos > 90 d├¡as: ___ ### 6. Revisar Service Accounts ```bash # Listar service accounts y sus permisos # Verificar que cada uno tiene prop├│sito documentado # Azure - Service Principals az ad sp list --all --query "[].{name:displayName, appId:appId, created:createdDateTime}" -o table # Verificar secretos y certificados expirados az ad app credential list --id $APP_ID ``` | Service Account | Prop├│sito | Permisos | Rotaci├│n | Estado | |-----------------|-----------|----------|----------|--------| | ___ | ___ | ___ | ___ | ___ | - [ ] Service accounts documentados - [ ] Secretos con rotaci├│n programada ### 7. Generar Recomendaciones **Por cada hallazgo:** | Hallazgo | Riesgo | Recomendaci├│n | Prioridad | |----------|--------|---------------|-----------| | User X con Owner | Alto | Reducir a Contributor | P1 | | PAT sin expiraci├│n | Medio | A├▒adir expiraci├│n | P2 | | DB user sa habilitado | Alto | Deshabilitar, usar cuentas nominales | P1 | - [ ] Recomendaciones documentadas - [ ] Prioridades asignadas --- ## Output Esperado ``` ====== PROC-44 COMPLETADO [TIMESTAMP] ====== Proyecto: [nombre] RESUMEN: - Plataformas auditadas: Azure, GitLab, BD - Usuarios totales: X - Service accounts: Y AZURE: - Owners: X (recomendado: <3) - Contributors: Y - Service Principals: Z - ÔÜá´©Å SPs sin rotaci├│n de secretos: W GITLAB: - Owners: X - Maintainers: Y - PATs activos: Z - ÔÜá´©Å PATs sin expiraci├│n: W BASE DE DATOS: - Usuarios admin: X - ÔÜá´©Å Login 'sa' habilitado: S├¡/No USUARIOS INACTIVOS (>90 d├¡as): | Usuario | Plataforma | ├Ültima Actividad | |---------|------------|------------------| | user1 | GitLab | 2024-01-15 | ... HALLAZGOS CR├ìTICOS: 1. [hallazgo] - Riesgo: Alto 2. [hallazgo] - Riesgo: Alto RECOMENDACIONES: 1. [P1] Reducir permisos de [user] 2. [P1] Deshabilitar login sa 3. [P2] A├▒adir expiraci├│n a PATs ACCIONES COMPLETADAS: - [lista si se tomaron acciones] ``` --- ## Criterios de ├ëxito - [ ] 0 usuarios con permisos excesivos sin justificaci├│n - [ ] 0 service accounts sin documentar - [ ] 0 PATs/tokens sin expiraci├│n - [ ] 0 usuarios inactivos > 180 d├¡as con acceso --- ## Alertas y Escalaci├│n | Severidad | Condici├│n | Acci├│n | |-----------|-----------|--------| | CRITICAL | Login sa/root habilitado | Deshabilitar inmediatamente | | CRITICAL | >5 Owners sin justificaci├│n | Revisar con management | | WARNING | PAT sin expiraci├│n | A├▒adir expiraci├│n | | WARNING | Usuario inactivo > 90 d├¡as | Notificar y deshabilitar | --- ## Automatizaci├│n En ejecuci├│n no-interactiva: 1. Consultar APIs de cada plataforma 2. Listar usuarios y permisos 3. Detectar anomal├¡as 4. Generar reporte 5. Alertar hallazgos cr├¡ticos --- --- ## Output Estructurado (Nexus) Al finalizar, el agente DEBE generar un bloque JSON con el siguiente formato para que Nexus pueda procesarlo automaticamente: ```json { "result": "success", "summary": "Ejecucion de PROC-44 completada. [Descripcion breve de resultados]", "metrics": { "issues_found": 0, "issues_resolved": 0, "findings_total": 5, "findings_critical": 0, "custom": { "procedure_specific_metric": "value" } }, "backlog_items": [ { "title": "Titulo del item de seguimiento", "description": "Descripcion detallada si se requiere accion futura", "priority": "medium", "type": "improvement", "tags": ["proc-44"] } ], "next_steps": [ "Accion recomendada 1", "Accion recomendada 2" ], "warnings": [ "Advertencias encontradas durante la ejecucion" ] } ``` **Campos requeridos:** - `result`: `"success"` | `"partial"` | `"failed"` - `summary`: Resumen ejecutivo en 1-3 lineas **Metricas especificas de este procedure:** - permissions_reviewed, excessive_permissions, compliance_percent **Criterios de resultado:** - `success`: Procedimiento completado sin errores criticos - `partial`: Completado con algunos problemas menores o items pendientes - `failed`: Error critico o no se pudo completar ## Historial de Ejecuciones | Fecha | Proyecto | Usuarios | Hallazgos | Cr├¡ticos | Acciones | |-------|----------|----------|-----------|----------|----------| | | | | | | |
H1
H2
H3
Bold
Italic
Code
Lista
Num
Task
Code Block
Link
Nexus Platform
Reconectando
Recuperando la conexion
Se ha interrumpido la conexion con el servidor. Estamos reconectando automaticamente.
Reconectando...
Manten esta pestana abierta, volvemos enseguida.
No hemos podido reconectar
El servidor puede estar reiniciandose o tu conexion a internet es inestable.
Reintentar
La sesion ha expirado
Recarga la pagina para iniciar una nueva sesion.
Recargar
Si no vuelve en 30 segundos, recarga la pagina.