Asignación de roles de Azure mediante plantillas de Azure Resource Manager
Artikulua
El control de acceso basado en rol (RBAC) de Azure es el sistema de autorización que puede utilizar para administrar el acceso a los recursos de Azure. Para conceder acceso, debe asignar roles a usuarios, grupos, entidades de servicio o identidades administradas en un ámbito determinado. Además de usar Azure PowerShell o la CLI de Azure, puede asignar roles mediante plantillas de Azure Resource Manager. Las plantillas se pueden usar si necesita implementar recursos de manera repetida y uniforme. En este artículo se describe cómo asignar roles mediante plantillas.
Oharra
Bicep es un nuevo lenguaje para definir los recursos de Azure. Ofrece una experiencia de creación más sencilla que JSON, junto con otras características que ayudan a mejorar la calidad de la infraestructura como código. Se recomienda que cualquier usuario nuevo en la infraestructura como código en Azure utilice Bicep en lugar de JSON.
Para asignar un rol, debe especificar el identificador del usuario, del grupo o de la aplicación a los que quiere asignar el rol. El identificador tiene el formato: 11111111-1111-1111-1111-111111111111. Puede obtenerlo mediante Azure Portal, Azure PowerShell o la CLI de Azure.
objectid=$(az ad sp list --display-name<Azure resource name>--query[].id --output tsv)
Aplicación
Para obtener el identificador de una entidad de servicio (identidad usada por una aplicación), puede usar los comandos Get-AzADServicePrincipal o az ad sp list. Para una entidad de servicio, use el id. de objeto y no el de aplicación.
az deployment group create --resource-group ExampleGroup --template-file rbac-test.json
A continuación se muestra un ejemplo de la asignación del rol de lector a un usuario de un grupo de recursos después de implementar la plantilla.
Ámbito del grupo de recursos o suscripción
La plantilla anterior no es muy flexible. La siguiente plantilla usa parámetros y se puede emplear en distintos ámbitos. La plantilla siguiente muestra:
Cómo asignar un rol a un usuario, un grupo o una aplicación en el ámbito de un grupo de recursos o de una suscripción
Cómo especificar los roles de propietario, colaborador y lector como parámetro
Para usar la plantilla, debe especificar las siguientes entradas:
El identificador de un usuario, de un grupo o de una aplicación al que se asignará el rol.
Un identificador único que se usará para la asignación de roles (también puede usar el identificador predeterminado).
JSON
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"principalId": {
"type": "string",
"metadata": {
"description": "The principal to assign the role to"
}
},
"builtInRoleType": {
"type": "string",
"allowedValues": [
"Owner",
"Contributor",
"Reader"
],
"metadata": {
"description": "Built-in role to assign"
}
},
"roleNameGuid": {
"type": "string",
"defaultValue": "[newGuid()]",
"metadata": {
"description": "A new GUID used to identify the role assignment"
}
}
},
"variables": {
"Owner": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', '8e3af657-a8ff-443c-a75c-2fe8c4bcb635')]",
"Contributor": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",
"Reader": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')]"
},
"resources": [
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[parameters('roleNameGuid')]",
"properties": {
"roleDefinitionId": "[variables(parameters('builtInRoleType'))]",
"principalId": "[parameters('principalId')]"
}
}
]
}
Oharra
Esta plantilla no es idempotente, a menos que se proporcione el mismo valor roleNameGuid como parámetro para cada implementación de la plantilla. Si no se proporciona roleNameGuid, de manera predeterminada se generará un nuevo GUID en cada implementación y se producirá un error Conflict: RoleAssignmentExists en las implementaciones posteriores.
El ámbito de la asignación de roles se determina a partir del nivel de la implementación. Los comandos New-AzResourceGroupDeployment y az deployment group create son ejemplos de cómo iniciar la implementación en el ámbito de un grupo de recursos.
az deployment group create --resource-group ExampleGroup --template-file rbac-test.json --parametersprincipalId=$objectid builtInRoleType=Reader
Los comandos New-AzDeployment y az deployment sub create son ejemplos de cómo iniciar la implementación en el ámbito de una suscripción y especificar la ubicación.
Para implementar la plantilla anterior, usará los comandos de grupo de recursos. Los comandos New-AzResourceGroupDeployment y az deployment group create son ejemplos de cómo iniciar la implementación en el ámbito de un recurso.
az deployment group create --resource-group ExampleGroup --template-file rbac-test.json --parametersprincipalId=$objectid builtInRoleType=Contributor
A continuación se muestra un ejemplo de una asignación de rol de colaborador a un usuario de una cuenta de almacenamiento después de implementar la plantilla.
Nueva entidad de servicio
Si crea una entidad de servicio e inmediatamente intenta asignarle un rol, esa asignación de roles puede producir un error en algunos casos. Por ejemplo, si crea una identidad administrada y luego intenta asignarle un rol en la misma plantilla de Azure Resource Manager, la asignación de roles podría producir un error. Es probable que el motivo de este error sea un retraso en la replicación. La entidad de servicio se crea en una región; sin embargo, la asignación de roles puede tener lugar en una región distinta que todavía no haya replicado la entidad de servicio.
Para abordar este escenario, debe establecer la propiedad principalType en ServicePrincipal al crear la asignación de roles. También debe establecer la propiedad apiVersion de la asignación de roles en 2018-09-01-preview o posterior. 2022-04-01 es la primera versión estable.
La plantilla siguiente muestra:
Cómo crear una entidad de servicio de identidad administrada
Cómo especificar principalType
Cómo asignar el rol de colaborador a esa entidad de servicio en el ámbito de un grupo de recursos
Para usar la plantilla, debe especificar las siguientes entradas:
El nombre base de la identidad administrada, o puede usar la cadena predeterminada.
az deployment group create --resource-group ExampleGroup2 --template-file rbac-test.json
A continuación se muestra un ejemplo de la asignación del rol de colaborador a una nueva entidad de servicio de identidad administrada después de implementar la plantilla.
Explore cómo usar roles integrados de Azure, identidades administradas y directivas de RBAC para controlar el acceso a recursos de Azure. La identidad es la clave para proteger las soluciones.
Muestre las características de Microsoft Entra ID para modernizar las soluciones de identidad, implementar soluciones híbridas e implementar la gobernanza de identidades.