Buenos dias,
Hace poco en una visita a un 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 con un rol administrativo, que solo se tenia que encargar de gestionar los servicios IaaS y PaaS, podria darse la casualidad de que accediese 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.
Azure Active Directory, desde que estamos en ARM (v2 de Azure), 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 y personalizamos……. sin olvidarnos de las premisas ya aprendias de los principios básicos de «minimos privilegios»
¿Que tareas y accesos necesitamos que tenga nuestro usuario administrador de PaaS e IaaS?
- 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 incluir al usuario dentro del grupo, Best Practices. Ademas, 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.
Hay que decir que tenemos muchos roles RBAC 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/XXXX-xxxx-XXXXX-xxxxx/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, del gran Paco Sepulveda (@FMSepulveda), tomar nota y apuntaros su Twitter y su gran blog:
Un abrazo,
Roberto