Criar ou atualizar funções personalizadas do Azure usando um modelo do ARM
Se as funções internas do Azure não atenderem às necessidades específicas da sua organização, você poderá criar funções personalizadas próprias. Este artigo descreve como criar ou atualizar uma função personalizada usando um modelo do Azure Resource Manager (modelo do ARM).
Um modelo do Azure Resource Manager é um arquivo em JavaScript Object Notation (JSON) que define a infraestrutura e a configuração do seu projeto. O modelo usa a sintaxe declarativa. Você descreve a implantação pretendida sem escrever a sequência de comandos de programação para criar a implantação.
Para criar uma função personalizada, especifique um nome de função, permissões e onde a função pode ser usada. Neste artigo, você cria uma função chamada de Função Personalizada – Leitor RG com permissões de recurso que podem ser atribuídas a um escopo de assinatura ou inferior.
Se seu ambiente atender aos pré-requisitos e você estiver familiarizado com o uso de modelos ARM, selecione o botão Implantar no Azure. O modelo será aberto no portal do Azure.
Pré-requisitos
Para criar uma função personalizada, você deve ter:
- Permissões para criar funções personalizadas, como Administrador de Acesso de Usuário.
Você deve usar a seguinte versão:
2018-07-01
ou posterior
Para obter mais informações, consulte as Versões da API das APIs REST do RBAC do Azure.
Examinar o modelo
O modelo usado neste artigo é proveniente dos Modelos de Início Rápido do Azure. O modelo tem quatro parâmetros e uma seção de recursos. Os quatro parâmetros são:
- Matriz de ações com um valor padrão de
["Microsoft.Resources/subscriptions/resourceGroups/read"]
. - Matriz de
notActions
com um valor padrão vazio. - Nome da função com um valor padrão de
Custom Role - RG Reader
. - Descrição da função com um valor padrão de
Subscription Level Deployment of a Role Definition
.
O escopo onde essa função personalizada pode ser atribuída é definido como a assinatura atual.
{
"$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]"
]
}
}
]
}
O recurso definido no modelo inclui:
Implantar o modelo
Siga estas etapas para implantar o modelo anterior.
Entre no portal do Azure.
Abra o Azure Cloud Shell para PowerShell.
Copie e cole o script a seguir no 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
Insira um local para a implantação, como
centralus
.Insira uma lista de ações para a função personalizada como uma lista separada por vírgulas, como
Microsoft.Resources/resources/read,Microsoft.Resources/subscriptions/resourceGroups/read
.Se necessário, pressione Enter para executar o comando
New-AzDeployment
.O comando New-AzDeployment implanta o modelo para criar a função personalizada.
Será exibida uma saída semelhante à seguinte:
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 :
Examinar os recursos implantados
Siga estas etapas para verificar se a função personalizada foi criada.
Use o comando Get-AzRoleDefinition para listar a função personalizada.
Get-AzRoleDefinition "Custom Role - RG Reader" | ConvertTo-Json
Será exibida uma saída semelhante à seguinte:
{ "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}" ] }
No portal do Azure, abra sua assinatura.
No menu à esquerda, selecione Controle de acesso (IAM) .
Selecione a guia Funções.
Defina a lista de Tipos como CustomRole.
Verifique se a Função Personalizada – Leitor RG está listada.
Atualizar uma função personalizada
Semelhante à criação de uma função personalizada, você pode atualizar uma função personalizada existente usando um modelo. Para atualizar uma função personalizada, você deve especificar a função que deseja atualizar.
Aqui estão as alterações que você precisaria fazer no modelo de Início Rápido anterior para atualizar a função personalizada.
Inclua a ID da função como um parâmetro.
... "roleDefName": { "type": "string", "metadata": { "description": "ID of the role definition" } ...
Inclua o parâmetro de ID da função na definição de função.
... "resources": [ { "type": "Microsoft.Authorization/roleDefinitions", "apiVersion": "2022-04-01", "name": "[parameters('roleDefName')]", "properties": { ...
Aqui está um exemplo de como implantar o modelo.
$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
Limpar os recursos
Para remover a função personalizada, siga estas etapas.
Execute o comando a seguir para remover a função personalizada.
Get-AzRoleDefinition -Name "Custom Role - RG Reader" | Remove-AzRoleDefinition
Insira Y para confirmar que deseja remover a função personalizada.