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

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.

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/7647e062-d618-40b5-8276-9b22cfad3c22/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? 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 como 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, sobre todo el video del gran Paco Sepulveda (@FMSepulveda), tomar nota, muy buen blog:

Un abrazo,

Roberto

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

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.

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/7647e062-d618-40b5-8276-9b22cfad3c22/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? 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 como 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, sobre todo el video del gran Paco Sepulveda (@FMSepulveda), tomar nota, muy buen blog:

Un abrazo,

Roberto

También te podría gustar...