Assegnare ruoli di Azure usando i modelli di Azure Resource Manager
Articolo
Il controllo degli accessi in base al ruolo di Azure è il sistema di autorizzazione che si usa per gestire l'accesso alle risorse di Azure. Per concedere l'accesso, assegnare ruoli a utenti, gruppi, entità servizio o identità gestite in un ambito specifico. Oltre a usare Azure PowerShell o l'interfaccia della riga di comando di Azure, è possibile assegnare ruoli usando i modelli di Azure Resource Manager. I modelli possono essere usati per distribuire le risorse in modo coerente e ripetuto. Questo articolo descrive come assegnare ruoli usando i modelli.
Nota
Bicep è un nuovo linguaggio per la definizione delle risorse di Azure. Offre un'esperienza di creazione più semplice rispetto a JSON, insieme ad altre funzionalità che contribuiscono a migliorare la qualità dell'infrastruttura come codice. Si consiglia a chiunque non abbia familiarità con l'infrastruttura come codice in Azure di usare Bicep invece di JSON.
Per assegnare un ruolo, è necessario specificare l'ID dell'utente, del gruppo o dell'applicazione a cui si vuole assegnare il ruolo. Il formato dell'ID è il seguente: 11111111-1111-1111-1111-111111111111. È possibile ottenere l'ID tramite il portale di Azure, Azure PowerShell o l'interfaccia della riga di comando di Azure.
objectid=$(az ad sp list --display-name<Azure resource name>--query[].id --output tsv)
Applicazione
Per ottenere l'ID di un'entità servizio (identità usata da un'applicazione), è possibile usare i comandi Get-AzADServicePrincipal o az ad sp list. Per un'entità servizio usare l'ID oggetto, non l'ID applicazione.
objectid=$(az ad sp list --display-name"{name}"--query[].id --output tsv)
Assegnare un ruolo di Azure
In Controllo degli accessi in base al ruolo di Azure, per concedere l'accesso, si assegna un ruolo.
Ambito del gruppo di risorse (senza parametri)
Il modello seguente illustra un modo di base per assegnare un ruolo. Alcuni valori sono specificati all'interno del modello. Il modello seguente illustra:
Come assegnare il ruolo Lettore a un utente, un gruppo o un'applicazione nell'ambito di un gruppo di risorse
Per usare il modello, è necessario:
Creare un nuovo file JSON e copiare il modello
Sostituire <your-principal-id> con l'ID di un utente, un gruppo, un'identità gestita o un'applicazione a cui assegnare il ruolo
az deployment group create --resource-group ExampleGroup --template-file rbac-test.json
L'esempio seguente illustra un'assegnazione del ruolo Lettore a un utente per un gruppo di risorse dopo la distribuzione del modello.
Ambito del gruppo di risorse o della sottoscrizione
Il modello precedente non è molto flessibile. Il modello seguente usa parametri e può essere usato in ambiti diversi. Il modello seguente illustra:
Come assegnare un ruolo a un utente, un gruppo o un'applicazione nell'ambito di un gruppo di risorse o di una sottoscrizione
Come specificare i ruoli proprietario, collaboratore e lettore come parametro
Per usare il modello, è necessario specificare gli input seguenti:
ID di un utente, un gruppo, un'identità gestita o un'applicazione a cui assegnare il ruolo
Un ID univoco che verrà usato per l'assegnazione del ruolo. In alternativa, è possibile usare l'ID predefinito
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')]"
}
}
]
}
Nota
Questo modello non è idempotente, a meno che non venga specificato lo stesso valore di roleNameGuid come parametro per ogni distribuzione del modello. Se non viene specificato alcun valore di roleNameGuid, per impostazione predefinita viene generato un nuovo GUID per ogni distribuzione e le distribuzioni successive avranno esito negativo con la visualizzazione di un errore Conflict: RoleAssignmentExists.
az deployment group create --resource-group ExampleGroup --template-file rbac-test.json --parametersprincipalId=$objectid builtInRoleType=Reader
Di seguito sono riportati esempi di comandi New-AzDeployment e az deployment sub create per informazioni su come avviare la distribuzione in un ambito di sottoscrizione e specificare il percorso.
az deployment group create --resource-group ExampleGroup --template-file rbac-test.json --parametersprincipalId=$objectid builtInRoleType=Contributor
L'esempio seguente illustra un'assegnazione del ruolo Collaboratore a un utente per un account di archiviazione dopo la distribuzione del modello.
Nuova entità servizio
Se si crea una nuova entità servizio e si prova ad assegnare subito un ruolo a tale entità, in alcuni casi l'assegnazione di ruolo può avere esito negativo. Se ad esempio si crea una nuova identità gestita e si prova quindi ad assegnare un ruolo a tale entità nello stesso modello di Azure Resource Manager, l'assegnazione del ruolo potrebbe avere esito negativo. Il motivo di questo errore è probabilmente un ritardo di replica. L'entità servizio viene creata in un'area. L'assegnazione di ruolo potrebbe tuttavia verificarsi in un'area diversa che non ha ancora replicato l'entità servizio.
Per far fronte a questo scenario, è necessario impostare la proprietà principalType su ServicePrincipal quando si crea l'assegnazione di ruolo. È anche necessario impostare il valore di apiVersion dell'assegnazione di ruolo su 2018-09-01-preview o su una versione successiva. 2022-04-01 è la prima versione stabile.
Il modello seguente illustra:
Come creare una nuova entità servizio dell'identità gestita
Come specificare la proprietà principalType
Come assegnare il ruolo Collaboratore a tale entità servizio nell'ambito di un gruppo di risorse
Per usare il modello, è necessario specificare gli input seguenti:
Nome di base dell'identità gestita. In alternativa, è possibile usare la stringa predefinita
Esplorare come usare ruoli predefiniti di Azure, identità gestite e criteri di controllo degli accessi in base al ruolo per controllare l'accesso alle risorse di Azure. L'identità è l'elemento chiave per proteggere le soluzioni.
Illustrare le funzionalità di Microsoft Entra ID per modernizzare le soluzioni di identità, implementare soluzioni ibride e implementare la governance delle identità.
Sintassi e proprietà Microsoft.Authorization/roleAssignments da usare nei modelli di Azure Resource Manager per la distribuzione della risorsa. Versione più recente dell'API
Informazioni su come concedere l'accesso alle risorse di Azure per un utente nell'ambito di un gruppo di risorse tramite modelli di Azure Resource Manager e il controllo degli accessi in base al ruolo Azure.
Sintassi e proprietà di Azure Microsoft.Authorization/roleDefinitions da usare nei modelli di Azure Resource Manager per la distribuzione della risorsa. Versione più recente dell'API
Informazioni su come concedere l'accesso alle risorse di Azure per un utente nell'ambito del gruppo di risorse usando Bicep e il controllo degli accessi in base al ruolo di Azure.
Sintassi e proprietà Microsoft.Authorization/roleAssignments da usare nei modelli di Azure Resource Manager per la distribuzione della risorsa. API versione 2022-04-01
Sintassi e proprietà di Microsoft.Resources/deployments di Azure da usare nei modelli di Azure Resource Manager per la distribuzione della risorsa. Versione più recente dell'API