Criar ou atualizar funções personalizadas do Azure usando um modelo ARM
Se as funções internas do Azure não atenderem às necessidades específicas da sua organização, você poderá criar suas próprias funções personalizadas. Este artigo descreve como criar ou atualizar uma função personalizada usando um modelo do Azure Resource Manager (modelo ARM).
Um modelo do Azure Resource Manager é um arquivo JSON (JavaScript Object Notation) que define a infraestrutura e a configuração do seu projeto. O modelo utiliza 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 Função Personalizada - Leitor RG com permissões de recursos que podem ser atribuídas em um escopo de assinatura ou inferior.
Se o seu ambiente cumpre os pré-requisitos e se está familiarizado com a utilização de modelos ARM, selecione o botão Implementar 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 mais tarde
Para mais informações, consulte Versões da API das APIs REST do Azure RBAC.
Rever o modelo
O modelo usado neste artigo é de 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 no qual essa função personalizada pode ser atribuída é definido para 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 é:
Implementar o modelo
Siga estas etapas para implantar o modelo anterior.
Inicie sessão no portal do Azure.
Abra o Azure Cloud Shell para PowerShell.
Copie e cole o seguinte script 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írgula, como
Microsoft.Resources/resources/read,Microsoft.Resources/subscriptions/resourceGroups/read
.Se necessário, pressione Enter para executar o
New-AzDeployment
comando.O comando New-AzDeployment implanta o modelo para criar a função personalizada.
Deverá ver um resultado semelhante ao 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 :
Rever os recursos implementados
Siga estas etapas para verificar se a função personalizada foi criada.
Execute o comando Get-AzRoleDefinition para listar a função personalizada.
Get-AzRoleDefinition "Custom Role - RG Reader" | ConvertTo-Json
Deverá ver um resultado semelhante ao 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 o separador Funções.
Defina a lista Tipo como CustomRole.
Verifique se a função Função Personalizada - Leitor de 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 o ID da função como parâmetro.
... "roleDefName": { "type": "string", "metadata": { "description": "ID of the role definition" } ...
Inclua o parâmetro role ID 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
Clean up resources (Limpar recursos)
Para remover a função personalizada, siga estas etapas.
Execute o seguinte comando para remover a função personalizada.
Get-AzRoleDefinition -Name "Custom Role - RG Reader" | Remove-AzRoleDefinition
Digite Y para confirmar que deseja remover a função personalizada.