Azure Azure Stack AzureAD Seguridad

Como crear tu rol RBAC personalizado para Azure.

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 ….

Podemos sacar un listado de ellos con el siguiente cmdlet:
# Listar roles RBAC
Get-AzureRmRoleDefinition | Format-Table Name, Description
Ademas, podemos ver las características de los roles que, en principio, se acercan a cubrir nuestras necesidades:
Get-AzureRmRoleDefinition «Virtual Machine Contributor»
Get-AzureRmRoleDefinition «SQL Server Contributor»

Creación del rol personalizado.

Lo hacemos via Powershell, ese gran amigo. Como primer paso tenemos que definir tanto el Nombre del rol personalizado, Descirpción del mismo, Actions, NotActions y, muy importante, ámbitro de aplicación del rol a traves de la generación de un fichero .json, que, para nuestro ejemplo, denominaremos JordiCustomRBACAzureADRole.json
{
«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«
]
En el he tratado de recoger todas las tareas a realizar por nuestro rol personalizado «Jordi» a nivel Iaas sobre las máquinas virtuales asi como PaaS, nuestros servidores y bases de datos Azure SQL.

Aplicación del Rol personalizado.

En el paso anterior solo hemos definido el rol, ahora vamos a crearlo y aplicarlo al ámbito deseado ¿cómo? lo mas facil, a través de la aplicación del siguiente cmdlet:

Comprobación de la creación del rol personalizado

Como últimos pasos, primero vamos a comprobar que el rol se ha creado en Azure, que com podeis ver, tiene un icono distinto al resto de los precreados:
Y, segundo, la comprobación de que realmente nuestro usuario Jordi no puede acceder, por ejemplo a Dynamic Data Masking 😉

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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *