Como crear tu rol RBAC personalizado para Azure.
Buenos dias,
Hace poco en una visita a un muy buen cliente me comentó que determinados usuarios eran capaces de gestionar las máquinas virtuales que tenia en producción, reiniciarlas, cambiarlas el tamaño, etc., asi como trastear con las bases de datos de Azure SQL, y realmente nos dimos cuenta que un usuario administrador que solo se tendria que encargar de gestionar los servicios IaaS y PaaS podria darse la casualidad de que pudier acceder al contenido de una base de datos.
En ese momento nos surgió la duda sobre qué permisos tenia asignados ese usuario en concreto y cuales eran los permisos que realmente tenia que tener, una situación algo mas habitual de lo que pensamos.
Bien, pensé, Azure Active Directory, desde que estamos en su v2 con ARM, disponemos de toda la potencia del Control de Acceso basado en Roles, vamos lo que conocemos por RBAC y, en el caso de no encontrar un Rol creado por defecto con las caracterísitcas que necesitamos pues …….. lo creamos nosotros mismos y me puse manos a la obra….., sin olvidarnos de las premisas ya aprendias de los principios básicos de “minimos privilegios”
¿Que tareas y accesos necesitamos que tenga nuestro usuario de prueba?
- Poder apagar, reiniciar, VMs,
- Realizar un Resizing de IaaS.
- Gestionar las copias de seguridad de las mismas.
- Gestionar los Servidores de Azure SQL.
- Gestión de las bases de datos de Azure SQL
- No tener acceso al contenido de las bases de datos de Azure SQL.
- …..
Estos roles se pueden asociar tanto a usuarios como a grupos, recordar, siempre mejor asignar roles a grupos y posteriormante asociar al usuario al grupo, Best Practices. Ademas de que podemos aplicar estos privilegios de acceso tanto a nivel de la suscripción como a nivel de Grupos de Recursos, lo que se conoce como ámbito de aplicación. Un detalle a tener en cuenta es que la aplicación de estos privilegios conlleva a la suma de los mismos, en el caso de que haya múltiples pertenencias a grupos.
Para empezar, hay que decir que tenemos muchos roles predefinidos que, probablemente, cumplan con nuestras necesidades, para muestra un boton ….
# Listar roles RBACGet-AzureRmRoleDefinition | Format-Table Name, Description
Get-AzureRmRoleDefinition “Virtual Machine Contributor”Get-AzureRmRoleDefinition “SQL Server Contributor”
Creación del rol personalizado.
{“Name”: “Jordi custom Role”,“Id”: null,“IsCustom”: true,“Description”: “Lets you manage virtual machines, but not access to them, and not the virtual network or storage account they’re connected to, and Lets you manage SQL servers and databases, but not access to them, and not their security -related policies.”,“Actions”: [“Microsoft.Authorization/*/read”,“Microsoft.Compute/availabilitySets/*”,“Microsoft.Compute/locations/*”,“Microsoft.Compute/virtualMachines/*”,“Microsoft.Compute/virtualMachineScaleSets/*”,“Microsoft.DevTestLab/schedules/*”,“Microsoft.Insights/alertRules/*”,“Microsoft.Network/applicationGateways/backendAddressPools/join/action”,“Microsoft.Network/loadBalancers/backendAddressPools/join/action”,“Microsoft.Network/loadBalancers/inboundNatPools/join/action”,“Microsoft.Network/loadBalancers/inboundNatRules/join/action”,“Microsoft.Network/loadBalancers/probes/join/action”,“Microsoft.Network/loadBalancers/read”,“Microsoft.Network/locations/*”,“Microsoft.Network/networkInterfaces/*”,“Microsoft.Network/networkSecurityGroups/join/action”,“Microsoft.Network/networkSecurityGroups/read”,“Microsoft.Network/publicIPAddresses/join/action”,“Microsoft.Network/publicIPAddresses/read”,“Microsoft.Network/virtualNetworks/read”,“Microsoft.Network/virtualNetworks/subnets/join/action”,“Microsoft.RecoveryServices/locations/*”,“Microsoft.RecoveryServices/Vaults/backupFabrics/protectionContainers/protectedItems/*/read”,“Microsoft.RecoveryServices/Vaults/backupFabrics/protectionContainers/protectedItems/read”,“Microsoft.RecoveryServices/Vaults/backupFabrics/protectionContainers/protectedItems/write”,“Microsoft.RecoveryServices/Vaults/backupFabrics/backupProtectionIntent/write”,“Microsoft.RecoveryServices/Vaults/backupPolicies/read”,“Microsoft.RecoveryServices/Vaults/backupPolicies/write”,“Microsoft.RecoveryServices/Vaults/read”,“Microsoft.RecoveryServices/Vaults/usages/read”,“Microsoft.RecoveryServices/Vaults/write”,“Microsoft.ResourceHealth/availabilityStatuses/read”,“Microsoft.Resources/deployments/*”,“Microsoft.Resources/subscriptions/resourceGroups/read”,“Microsoft.Sql/locations/*/read”,“Microsoft.Sql/servers/*”,“Microsoft.Storage/storageAccounts/listKeys/action”,“Microsoft.Storage/storageAccounts/read”,“Microsoft.Support/*”],“NotActions”: [“Microsoft.Sql/servers/auditingPolicies/*”,“Microsoft.Sql/servers/auditingSettings/*”,“Microsoft.Sql/servers/databases/auditingPolicies/*”,“Microsoft.Sql/servers/databases/auditingSettings/*”,“Microsoft.Sql/servers/databases/auditRecords/read”,“Microsoft.Sql/servers/databases/connectionPolicies/*”,“Microsoft.Sql/servers/databases/dataMaskingPolicies/*”,“Microsoft.Sql/servers/databases/extendedAuditingSettings/*”,“Microsoft.Sql/servers/databases/schemas/tables/columns/sensitivityLabels/*”,“Microsoft.Sql/servers/databases/securityAlertPolicies/*”,“Microsoft.Sql/servers/databases/securityMetrics/*”,“Microsoft.Sql/servers/databases/sensitivityLabels/*”,“Microsoft.Sql/servers/databases/vulnerabilityAssessments/*”,“Microsoft.Sql/servers/databases/vulnerabilityAssessmentScans/*”,“Microsoft.Sql/servers/databases/vulnerabilityAssessmentSettings/*”,“Microsoft.Sql/servers/extendedAuditingSettings/*”,“Microsoft.Sql/servers/securityAlertPolicies/*”],“DataActions”: [],“NotDataActions”: [],“AssignableScopes”: [“/subscriptions/7647e062-d618-40b5-8276-9b22cfad3c22/resourceGroups/Desktops“]
Aplicación del Rol personalizado.
Comprobación de la creación del rol personalizado
Perfecto!!!!! Esto es lo que queriamos!!!!!
Aqui os dejo un video muy interesantes, sobre todo el video del gran Paco Sepulveda (@FMSepulveda), tomar nota, muy buen blog:
Un abrazo,
Roberto