Creare o aggiornare ruoli personalizzati di Azure usando un modello di Resource Manager
Se i ruoli predefiniti di Azure non soddisfano le esigenze specifiche dell'organizzazione, è possibile creare ruoli personalizzati. Questo articolo descrive come creare o aggiornare un ruolo personalizzato usando un modello di Azure Resource Manager .This article describe how to create or update a custom role using an Azure Resource Manager template (ARM template).
Un modello di Azure Resource Manager è un file JSON (JavaScript Object Notation) che definisce l'infrastruttura e la configurazione del progetto. Il modello utilizza la sintassi dichiarativa. Si descrive la distribuzione prevista senza scrivere la sequenza di comandi di programmazione necessari per creare la distribuzione.
Per creare un ruolo personalizzato, è necessario specificare un nome di ruolo, le autorizzazioni e la posizione in cui è possibile usare il ruolo. In questo articolo viene creato un ruolo denominato Ruolo personalizzato - Lettore RG con autorizzazioni di risorsa che possono essere assegnate a un ambito di sottoscrizione o inferiore.
Se l'ambiente soddisfa i prerequisiti e si ha familiarità con l'uso dei modelli di Resource Manager, selezionare il pulsante Distribuisci in Azure. Il modello verrà aperto nel portale di Azure.
Prerequisiti
Per creare un ruolo personalizzato, è necessario disporre di:
- Autorizzazioni per creare ruoli personalizzati, ad esempio Amministratore accesso utenti.
È necessario usare la versione seguente:
2018-07-01
o versioni successive
Per altre informazioni, vedere Versioni API delle API REST di Controllo degli accessi in base al ruolo di Azure.
Rivedere il modello
Il modello usato in questo articolo proviene dai modelli di avvio rapido di Azure. Il modello ha quattro parametri e una sezione resources. I quattro parametri sono:
- Matrice di azioni con un valore predefinito di
["Microsoft.Resources/subscriptions/resourceGroups/read"]
. - Matrice di
notActions
con un valore predefinito vuoto. - Nome del ruolo con un valore predefinito di
Custom Role - RG Reader
. - Descrizione del ruolo con un valore predefinito di
Subscription Level Deployment of a Role Definition
.
L'ambito in cui è possibile assegnare questo ruolo personalizzato è impostato sulla sottoscrizione corrente.
{
"$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]"
]
}
}
]
}
Nel modello è definita la risorsa seguente:
Distribuire il modello
Seguire questa procedura per distribuire il modello precedente.
Accedere al portale di Azure.
Aprire Azure Cloud Shell per PowerShell.
Copiare e incollare lo script seguente in 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
Immettere un percorso per la distribuzione,
centralus
ad esempio .Immettere un elenco di azioni per il ruolo personalizzato come elenco delimitato da virgole,
Microsoft.Resources/resources/read,Microsoft.Resources/subscriptions/resourceGroups/read
ad esempio .Se necessario, premere INVIO per eseguire il
New-AzDeployment
comando.Il comando New-AzDeployment distribuisce il modello per creare il ruolo personalizzato.
L'output dovrebbe essere simile al seguente:
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 :
Esaminare le risorse distribuite
Seguire questa procedura per verificare che il ruolo personalizzato sia stato creato.
Eseguire il comando Get-AzRoleDefinition per elencare il ruolo personalizzato.
Get-AzRoleDefinition "Custom Role - RG Reader" | ConvertTo-Json
L'output dovrebbe essere simile al seguente:
{ "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}" ] }
Nella portale di Azure aprire la sottoscrizione.
Nel menu a sinistra selezionare Controllo di accesso (IAM).
Selezionare la scheda Ruoli.
Impostare l'elenco Tipo su CustomRole.
Verificare che sia elencato il ruolo personalizzato Ruolo - Lettore RG.
Aggiornare un ruolo personalizzato
Analogamente alla creazione di un ruolo personalizzato, è possibile aggiornare un ruolo personalizzato esistente usando un modello. Per aggiornare un ruolo personalizzato, è necessario specificare il ruolo da aggiornare.
Ecco le modifiche che è necessario apportare al modello di avvio rapido precedente per aggiornare il ruolo personalizzato.
Includere l'ID ruolo come parametro.
... "roleDefName": { "type": "string", "metadata": { "description": "ID of the role definition" } ...
Includere il parametro ID ruolo nella definizione del ruolo.
... "resources": [ { "type": "Microsoft.Authorization/roleDefinitions", "apiVersion": "2022-04-01", "name": "[parameters('roleDefName')]", "properties": { ...
Ecco un esempio di come distribuire il modello.
$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
Pulire le risorse
Per rimuovere il ruolo personalizzato, seguire questa procedura.
Eseguire il comando seguente per rimuovere il ruolo personalizzato.
Get-AzRoleDefinition -Name "Custom Role - RG Reader" | Remove-AzRoleDefinition
Immettere Y per confermare che si vuole rimuovere il ruolo personalizzato.