Creación o actualización de roles personalizados de Azure mediante una plantilla de ARM
Si los roles integrados de Azure no cumplen las necesidades específicas de su organización, puede crear los suyos propios. En este artículo se describe cómo crear o actualizar un rol personalizado mediante una plantilla de Azure Resource Manager (ARM).
Una plantilla de Azure Resource Manager es un archivo de notación de objetos JavaScript (JSON) que define tanto la infraestructura como la configuración de un proyecto. La plantilla usa sintaxis declarativa. Se describe la implementación deseada sin escribir la secuencia de comandos de programación para crear la implementación.
Para crear un rol personalizado, especifique un nombre de rol, los permisos y dónde se puede usar el rol. En este artículo, se creará un rol denominado Rol personalizado: lector RG con permisos de recursos que se pueden asignar en un ámbito de suscripción o inferior.
Si su entorno cumple los requisitos previos y está familiarizado con el uso de plantillas de Resource Manager, seleccione el botón Implementar en Azure. La plantilla se abrirá en Azure Portal.
Requisitos previos
Para crear un rol personalizado, debe tener:
- Permisos para crear roles personalizados, como Administrador de acceso de usuario.
Debe usar la versión siguiente:
2018-07-01
o posterior
Para obtener más información, consulte Versiones de la API REST de RBAC de Azure.
Revisión de la plantilla
La plantilla usada en este artículo forma parte de las plantillas de inicio rápido de Azure. La plantilla tiene cuatro parámetros y una sección de recursos. Los cuatro parámetros son:
- Matriz de acciones con un valor predeterminado de
["Microsoft.Resources/subscriptions/resourceGroups/read"]
. - Matriz de
notActions
con un valor predeterminado vacío. - Nombre del rol con un valor predeterminado de
Custom Role - RG Reader
. - Descripción del rol con un valor predeterminado de
Subscription Level Deployment of a Role Definition
.
El ámbito en el que se puede asignar este rol personalizado se establece en la suscripción actual.
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.25.53.49325",
"templateHash": "16704138909949665309"
}
},
"parameters": {
"actions": {
"type": "array",
"defaultValue": [
"Microsoft.Resources/subscriptions/resourceGroups/read"
],
"metadata": {
"description": "Array of actions for the roleDefinition"
}
},
"notActions": {
"type": "array",
"defaultValue": [],
"metadata": {
"description": "Array of notActions for the roleDefinition"
}
},
"roleName": {
"type": "string",
"defaultValue": "Custom Role - RG Reader",
"metadata": {
"description": "Friendly name of the role definition"
}
},
"roleDescription": {
"type": "string",
"defaultValue": "Subscription Level Deployment of a Role Definition",
"metadata": {
"description": "Detailed description of the role definition"
}
}
},
"variables": {
"roleDefName": "[guid(parameters('roleName'))]"
},
"resources": [
{
"type": "Microsoft.Authorization/roleDefinitions",
"apiVersion": "2022-04-01",
"name": "[variables('roleDefName')]",
"properties": {
"roleName": "[parameters('roleName')]",
"description": "[parameters('roleDescription')]",
"type": "customRole",
"permissions": [
{
"actions": "[parameters('actions')]",
"notActions": "[parameters('notActions')]"
}
],
"assignableScopes": [
"[subscription().id]"
]
}
}
]
}
El recurso definido en la plantilla es el siguiente:
Implementación de la plantilla
Siga estos pasos para implementar la plantilla anterior.
Inicie sesión en Azure Portal.
Abra Azure Cloud Shell para PowerShell.
Copie y pegue el siguiente script en Cloud Shell.
$location = Read-Host -Prompt "Enter a location (i.e. centralus)" [string[]]$actions = Read-Host -Prompt "Enter actions as a comma-separated list (i.e. action1,action2)" $actions = $actions.Split(',') $templateUri = "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/subscription-deployments/create-role-def/azuredeploy.json" New-AzDeployment -Location $location -TemplateUri $templateUri -actions $actions
Escriba una ubicación para la implementación, como
centralus
.Escriba una lista de acciones para el rol personalizado como una lista separada por comas, como
Microsoft.Resources/resources/read,Microsoft.Resources/subscriptions/resourceGroups/read
.Si es necesario, presione Entrar para ejecutar el comando
New-AzDeployment
.El comando New-AzDeployment implementa la plantilla para crear el rol personalizado.
Debería ver un resultado similar al siguiente:
PS> New-AzDeployment -Location $location -TemplateUri $templateUri -actions $actions Id : /subscriptions/{subscriptionId}/providers/Microsoft.Resources/deployments/azuredeploy DeploymentName : azuredeploy Location : centralus ProvisioningState : Succeeded Timestamp : 6/25/2020 8:08:32 PM Mode : Incremental TemplateLink : Uri : https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/subscription-deployments/create-role-def/azuredeploy.json ContentVersion : 1.0.0.0 Parameters : Name Type Value ================= ========================= ========== actions Array [ "Microsoft.Resources/resources/read", "Microsoft.Resources/subscriptions/resourceGroups/read" ] notActions Array [] roleName String Custom Role - RG Reader roleDescription String Subscription Level Deployment of a Role Definition Outputs : DeploymentDebugLogLevel :
Revisión de los recursos implementados
Siga estos pasos para comprobar que se ha creado el rol personalizado.
Ejecute el comando Get-AzRoleDefinition para mostrar el rol personalizado.
Get-AzRoleDefinition "Custom Role - RG Reader" | ConvertTo-Json
Debería ver un resultado similar al siguiente:
{ "Name": "Custom Role - RG Reader", "Id": "11111111-1111-1111-1111-111111111111", "IsCustom": true, "Description": "Subscription Level Deployment of a Role Definition", "Actions": [ "Microsoft.Resources/resources/read", "Microsoft.Resources/subscriptions/resourceGroups/read" ], "NotActions": [], "DataActions": [], "NotDataActions": [], "AssignableScopes": [ "/subscriptions/{subscriptionId}" ] }
Abra la suscripción en Azure Portal.
En el menú izquierdo, seleccione Control de acceso (IAM) .
Seleccione la pestaña Roles.
Establezca la lista Tipo en CustomRole.
Compruebe que se muestre el rol Rol personalizado: lector RG.
Actualización de un rol personalizado
De forma similar a la creación de un rol personalizado, puede actualizar un rol personalizado existente mediante una plantilla. Para actualizar un rol personalizado, debe especificar el rol que quiere actualizar.
Estos son los cambios que debe realizar en la plantilla de inicio rápido anterior para actualizar el rol personalizado.
Incluya el id. de rol como parámetro.
... "roleDefName": { "type": "string", "metadata": { "description": "ID of the role definition" } ...
Incluya el parámetro de id. de rol en la definición de roles.
... "resources": [ { "type": "Microsoft.Authorization/roleDefinitions", "apiVersion": "2022-04-01", "name": "[parameters('roleDefName')]", "properties": { ...
A continuación proporcionamos un ejemplo de cómo implementar la plantilla.
$location = Read-Host -Prompt "Enter a location (i.e. centralus)"
[string[]]$actions = Read-Host -Prompt "Enter actions as a comma-separated list (i.e. action1,action2)"
$actions = $actions.Split(',')
$roleDefName = Read-Host -Prompt "Enter the role ID to update"
$templateFile = "rg-reader-update.json"
New-AzDeployment -Location $location -TemplateFile $templateFile -actions $actions -roleDefName $roleDefName
Limpieza de recursos
Para quitar el rol personalizado, siga estos pasos.
Ejecute el siguiente comando para quitar el rol personalizado.
Get-AzRoleDefinition -Name "Custom Role - RG Reader" | Remove-AzRoleDefinition
Escriba Y para confirmar que desea quitar el rol personalizado.