Tutorial: Criar uma definição de política personalizadaTutorial: Create a custom policy definition

Uma definição de política personalizada permite que os clientes definam as suas próprias regras para a utilização do Azure.A custom policy definition allows customers to define their own rules for using Azure. Estas regras aplicam frequentemente:These rules often enforce:

  • Práticas de segurançaSecurity practices
  • Gestão de custosCost management
  • Regras específicas da organização (como nomeação ou locais)Organization-specific rules (like naming or locations)

Qualquer que seja o motorista de negócios para criar uma política personalizada, os passos são os mesmos para definir a nova política personalizada.Whatever the business driver for creating a custom policy, the steps are the same for defining the new custom policy.

Antes de criar uma política personalizada, consulte as amostras de política para ver se já existe uma política que corresponda às suas necessidades.Before creating a custom policy, check the policy samples to see if a policy that matches your needs already exists.

A abordagem para criar uma política personalizada segue estes passos:The approach to creating a custom policy follows these steps:

  • Identifique os seus requisitos de negócioIdentify your business requirements
  • Mapear cada requisito para uma propriedade de recursos AzureMap each requirement to an Azure resource property
  • Mapear a propriedade para um pseudónimoMap the property to an alias
  • Determinar qual o efeito a utilizarDetermine which effect to use
  • Compor a definição de políticaCompose the policy definition

Pré-requisitosPrerequisites

Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.If you don't have an Azure subscription, create a free account before you begin.

Identificar requisitosIdentify requirements

Antes de criar a definição de política, é importante entender a intenção da política.Before creating the policy definition, it's important to understand the intent of the policy. Para este tutorial, usaremos um requisito comum de segurança da empresa como objetivo para ilustrar os passos envolvidos:For this tutorial, we'll use a common enterprise security requirement as the goal to illustrate the steps involved:

  • Cada conta de armazenamento deve ser ativada para HTTPSEach storage account must be enabled for HTTPS
  • Cada conta de armazenamento deve ser desativada para HTTPEach storage account must be disabled for HTTP

Os seus requisitos devem identificar claramente tanto os estados de "ser" como os "não ser".Your requirements should clearly identify both the "to be" and the "not to be" resource states.

Embora tenhamos definido o estado esperado do recurso, ainda não definimos o que queremos fazer com recursos não conformes.While we've defined the expected state of the resource, we've not yet defined what we want done with non-compliant resources. A Política Azure apoia uma série de efeitos.Azure Policy supports a number of effects. Para este tutorial, vamos definir a exigência do negócio como prevenção da criação de recursos se não estiverem em conformidade com as regras do negócio.For this tutorial, we'll define the business requirement as preventing the creation of resources if they aren't compliant with the business rules. Para atingir este objetivo, usaremos o efeito Deny.To meet this goal, we'll use the Deny effect. Queremos também a opção de suspender a política para atribuições específicas.We also want the option to suspend the policy for specific assignments. Como tal, usaremos o efeito de deficientes e faremos do efeito um parâmetro na definição de política.As such, we'll use the Disabled effect and make the effect a parameter in the policy definition.

Determinar propriedades de recursosDetermine resource properties

Com base na exigência do negócio, o recurso Azure para auditar com a Azure Policy é uma conta de armazenamento.Based on the business requirement, the Azure resource to audit with Azure Policy is a storage account. No entanto, não sabemos as propriedades a usar na definição de política.However, we don't know the properties to use in the policy definition. A Azure Policy avalia contra a representação JSON do recurso, por isso precisamos entender as propriedades disponíveis nesse recurso.Azure Policy evaluates against the JSON representation of the resource, so we'll need to understand the properties available on that resource.

Existem muitas maneiras de determinar as propriedades de um recurso Azure.There are many ways to determine the properties for an Azure resource. Vamos olhar cada um para este tutorial:We'll look at each for this tutorial:

  • Extensão do Azure Policy para o VS CodeAzure Policy extension for VS Code
  • Modelos de gestor de recursos Azure (modelos ARM)Azure Resource Manager templates (ARM templates)
    • Exportar recurso existenteExport existing resource
    • Experiência de criaçãoCreation experience
    • Modelos quickstart (GitHub)Quickstart templates (GitHub)
    • Documentos de referência do modeloTemplate reference docs
  • Explorador de Recursos do AzureAzure Resource Explorer

Ver recursos na extensão do Código VSView resources in VS Code extension

A extensão do Código VS pode ser usada para navegar recursos no seu ambiente e ver as propriedades do Gestor de Recursos em cada recurso.The VS Code extension can be used to browse resources in your environment and see the Resource Manager properties on each resource.

Modelos de ARMARM templates

Existem várias formas de olhar para um ARM que inclui a propriedade que você está procurando gerir.There are several ways to look at an ARM that includes the property you're looking to manage.

Recurso existente no portalExisting resource in the portal

A forma mais simples de encontrar propriedades é olhar para um recurso existente do mesmo tipo.The simplest way to find properties is to look at an existing resource of the same type. Os recursos já configurados com a configuração que pretende impor também fornecem o valor para comparar.Resources already configured with the setting you want to enforce also provide the value to compare against. Veja a página do modelo de exportação (em Definições) no portal Azure para esse recurso específico.Look at the Export template page (under Settings) in the Azure portal for that specific resource.

Aviso

O modelo ARM exportado pelo portal Azure não pode ser ligado diretamente à deployment propriedade para um modelo ARM numa definição de política de implementaçãoIfNotExists.The ARM template exported by Azure portal can't be plugged straight into the deployment property for an ARM template in a deployIfNotExists policy definition.

Screenshot da página do modelo de exportação num recurso existente no portal Azure.

Fazê-lo para uma conta de armazenamento revela um modelo semelhante a este exemplo:Doing so for a storage account reveals a template similar to this example:

...
"resources": [{
    "comments": "Generalized from resource: '/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/mystorageaccount'.",
    "type": "Microsoft.Storage/storageAccounts",
    "sku": {
        "name": "Standard_LRS",
        "tier": "Standard"
    },
    "kind": "Storage",
    "name": "[parameters('storageAccounts_mystorageaccount_name')]",
    "apiVersion": "2018-07-01",
    "location": "westus",
    "tags": {
        "ms-resource-usage": "azure-cloud-shell"
    },
    "scale": null,
    "properties": {
        "networkAcls": {
            "bypass": "AzureServices",
            "virtualNetworkRules": [],
            "ipRules": [],
            "defaultAction": "Allow"
        },
        "supportsHttpsTrafficOnly": false,
        "encryption": {
            "services": {
                "file": {
                    "enabled": true
                },
                "blob": {
                    "enabled": true
                }
            },
            "keySource": "Microsoft.Storage"
        }
    },
    "dependsOn": []
}]
...

Sob propriedades é um valor chamado suportesHttpsTrafficOnly definido para falso.Under properties is a value named supportsHttpsTrafficOnly set to false. Esta propriedade parece ser a propriedade que procuramos.This property looks like it may be the property we're looking for. Além disso, o tipo de recurso é Microsoft.Storage/storageAcounts.Also, the type of the resource is Microsoft.Storage/storageAccounts. O tipo permite limitar a política apenas a recursos deste tipo.The type lets us limit the policy to only resources of this type.

Criar um recurso no portalCreate a resource in the portal

Outra forma através do portal é a experiência de criação de recursos.Another way through the portal is the resource creation experience. Ao criar uma conta de armazenamento através do portal, uma opção sob o separador Avançado é necessária transferência de segurança.While creating a storage account through the portal, an option under the Advanced tab is Security transfer required. Esta propriedade tem opções desativadas e ativadas.This property has Disabled and Enabled options. O ícone de informação tem texto adicional que confirma que esta opção é provavelmente a propriedade que queremos.The info icon has additional text that confirms this option is likely the property we want. No entanto, o portal não nos diz o nome da propriedade neste ecrã.However, the portal doesn't tell us the property name on this screen.

No separador 'Rever +' criar, um link está na parte inferior da página para descarregar um modelo para automatização.On the Review + create tab, a link is at the bottom of the page to Download a template for automation. A seleção do link abre o modelo que cria o recurso que configuramos.Selecting the link opens the template that creates the resource we configured. Neste caso, vemos duas peças-chave de informação:In this case, we see two key pieces of information:

...
"supportsHttpsTrafficOnly": {
    "type": "bool"
}
...
"properties": {
    "accessTier": "[parameters('accessTier')]",
    "supportsHttpsTrafficOnly": "[parameters('supportsHttpsTrafficOnly')]"
}
...

Esta informação diz-nos o tipo de propriedade e também confirma o suporteHttpsTrafficOnly é a propriedade que procuramos.This information tells us the property type and also confirms supportsHttpsTrafficOnly is the property we're looking for.

Modelos de quickstart no GitHubQuickstart templates on GitHub

Os modelos de arranque rápido do Azure no GitHub têm centenas de modelos ARM construídos para diferentes recursos.The Azure quickstart templates on GitHub has hundreds of ARM templates built for different resources. Estes modelos podem ser uma ótima maneira de encontrar a propriedade de recursos que você procura.These templates can be a great way to find the resource property you're looking for. Algumas propriedades podem parecer o que procura, mas controle outra coisa.Some properties may appear to be what you're looking for, but control something else.

Documentos de referência de recursosResource reference docs

Para validar suportesHttpsTrafficOnly é propriedade correta, verifique a referência do modelo ARM para o recurso da conta de armazenamento no fornecedor de armazenamento.To validate supportsHttpsTrafficOnly is correct property, check the ARM template reference for the storage account resource on the storage provider. O objeto de propriedades tem uma lista de parâmetros válidos.The properties object has a list of valid parameters. A seleção da ligação de objetos StorageAccountCountCountPropertiesCreateParameters mostra uma tabela de propriedades aceitáveis.Selecting the StorageAccountPropertiesCreateParameters-object link shows a table of acceptable properties. supportsHttpsTrafficOnly está presente e a descrição corresponde ao que procuramos para satisfazer os requisitos de negócio.supportsHttpsTrafficOnly is present and the description matches what we are looking for to meet the business requirements.

Explorador de Recursos do AzureAzure Resource Explorer

Outra forma de explorar os seus recursos Azure é através do Azure Resource Explorer (Preview).Another way to explore your Azure resources is through the Azure Resource Explorer (Preview). Esta ferramenta utiliza o contexto da sua subscrição, pelo que tem de autenticar o website com as suas credenciais Azure.This tool uses the context of your subscription, so you need to authenticate to the website with your Azure credentials. Uma vez autenticado, pode navegar por fornecedores, subscrições, grupos de recursos e recursos.Once authenticated, you can browse by providers, subscriptions, resource groups, and resources.

Localize um recurso de conta de armazenamento e olhe para as propriedades.Locate a storage account resource and look at the properties. Vemos a propriedade de suportehttpsTrafficOnly aqui também.We see the supportsHttpsTrafficOnly property here as well. Selecionando o separador Documentação, vemos que a descrição da propriedade corresponde ao que encontramos nos documentos de referência anteriormente.Selecting the Documentation tab, we see that the property description matches what we found in the reference docs earlier.

Encontre o pseudónimo da propriedadeFind the property alias

Identificamos a propriedade de recursos, mas precisamos mapear essa propriedade para um pseudónimo.We've identified the resource property, but we need to map that property to an alias.

Há algumas maneiras de determinar os pseudónimos de um recurso Azure.There are a few ways to determine the aliases for an Azure resource. Vamos olhar cada um para este tutorial:We'll look at each for this tutorial:

  • Extensão do Azure Policy para o VS CodeAzure Policy extension for VS Code
  • CLI do AzureAzure CLI
  • Azure PowerShellAzure PowerShell

Obtenha pseudónimos na extensão do Código VSGet aliases in VS Code extension

A extensão da Política Azure para a extensão do Código VS facilita a navegação dos seus recursos e descobre pseudónimos.The Azure Policy extension for VS Code extension makes it easy to browse your resources and discover aliases.

Nota

A extensão do Código VS expõe apenas as propriedades do modo Gestor de Recursos e não apresenta nenhumas propriedades do modo Fornecedor de Recursos.The VS Code extension only exposes Resource Manager mode properties and doesn't display any Resource Provider mode properties.

CLI do AzureAzure CLI

No Azure CLI, o az provider grupo de comando é usado para procurar pseudónimos de recursos.In Azure CLI, the az provider command group is used to search for resource aliases. Vamos filtrar o espaço de nomes microsoft.Storage com base nos detalhes que obtivemos sobre o recurso Azure anteriormente.We'll filter for the Microsoft.Storage namespace based on the details we got about the Azure resource earlier.

# Login first with az login if not using Cloud Shell

# Get Azure Policy aliases for type Microsoft.Storage
az provider show --namespace Microsoft.Storage --expand "resourceTypes/aliases" --query "resourceTypes[].aliases[].name"

Nos resultados, vemos um pseudónimo suportado pelas contas de armazenamento denominadas suportesHttpsTrafficOnly.In the results, we see an alias supported by the storage accounts named supportsHttpsTrafficOnly. Esta existência deste pseudónimo significa que podemos escrever a política para fazer cumprir os nossos requisitos comerciais!This existence of this alias means we can write the policy to enforce our business requirements!

Azure PowerShellAzure PowerShell

Em Azure PowerShell, o Get-AzPolicyAlias cmdlet é usado para procurar pseudónimos de recursos.In Azure PowerShell, the Get-AzPolicyAlias cmdlet is used to search for resource aliases. Vamos filtrar o espaço de nomes microsoft.Storage com base nos detalhes que obtivemos sobre o recurso Azure anteriormente.We'll filter for the Microsoft.Storage namespace based on the details we got about the Azure resource earlier.

# Login first with Connect-AzAccount if not using Cloud Shell

# Use Get-AzPolicyAlias to list aliases for Microsoft.Storage
(Get-AzPolicyAlias -NamespaceMatch 'Microsoft.Storage').Aliases

Tal como o Azure CLI, os resultados mostram um pseudónimo suportado pelas contas de armazenamento denominadas supportsHttpsTrafficOnly.Like Azure CLI, the results show an alias supported by the storage accounts named supportsHttpsTrafficOnly.

Determinar o efeito de utilizaçãoDetermine the effect to use

Decidir o que fazer com os seus recursos não conformes é quase tão importante como decidir o que avaliar em primeiro lugar.Deciding what to do with your non-compliant resources is nearly as important as deciding what to evaluate in the first place. Cada resposta possível a um recurso não conforme é chamada de efeito.Each possible response to a non-compliant resource is called an effect. O efeito controla se o recurso não conforme for registado, bloqueado, tiver dados anexados ou tiver uma implantação associada a ele para reencaminhar o recurso num estado conforme.The effect controls if the non-compliant resource is logged, blocked, has data appended, or has a deployment associated to it for putting the resource back into a compliant state.

Para o nosso exemplo, Deny é o efeito que queremos, pois não queremos recursos não conformes criados no nosso ambiente Azure.For our example, Deny is the effect we want as we don't want non-compliant resources created in our Azure environment. A auditoria é uma boa primeira escolha para um efeito político para determinar qual é o impacto de uma política antes de defini-la para Deny.Audit is a good first choice for a policy effect to determine what the impact of a policy is before setting it to Deny. Uma maneira de facilitar a alteração do efeito por atribuição é parametrizar o efeito.One way to make changing the effect per assignment easier is to parameterize the effect. Consulte os parâmetros abaixo para saber como.See parameters below for the details on how.

Compor a definiçãoCompose the definition

Agora temos os detalhes da propriedade e pseudónimo para o que planejamos gerir.We now have the property details and alias for what we plan to manage. Em seguida, vamos compor a própria regra da política.Next, we'll compose the policy rule itself. Se ainda não está familiarizado com a linguagem política, a estrutura de definição de políticas de referência para estruturar a definição de política.If you aren't yet familiar with the policy language, reference policy definition structure for how to structure the policy definition. Aqui está um modelo vazio do que uma definição de política parece:Here is an empty template of what a policy definition looks like:

{
    "properties": {
        "displayName": "<displayName>",
        "description": "<description>",
        "mode": "<mode>",
        "parameters": {
                <parameters>
        },
        "policyRule": {
            "if": {
                <rule>
            },
            "then": {
                "effect": "<effect>"
            }
        }
    }
}

MetadadosMetadata

Os três primeiros componentes são metadados de política.The first three components are policy metadata. Estes componentes são fáceis de fornecer valores, uma vez que sabemos para que estamos a criar a regra.These components are easy to provide values for since we know what we are creating the rule for. O modo é principalmente sobre tags e localização de recursos.Mode is primarily about tags and resource location. Uma vez que não precisamos de limitar a avaliação aos recursos que suportam etiquetas, usaremos todo o valor para o modo.Since we don't need to limit evaluation to resources that support tags, we'll use the all value for mode.

"displayName": "Deny storage accounts not using only HTTPS",
"description": "Deny storage accounts not using only HTTPS. Checks the supportsHttpsTrafficOnly property on StorageAccounts.",
"mode": "all",

ParâmetrosParameters

Embora não tenhamos usado um parâmetro para alterar a avaliação, queremos usar um parâmetro para permitir alterar o efeito para a resolução de problemas.While we didn't use a parameter for changing the evaluation, we do want to use a parameter to allow changing the effect for troubleshooting. Vamos definir um parâmetro de efeitoType e limitá-lo apenas a Deny e Desativado.We'll define an effectType parameter and limit it to only Deny and Disabled. Estas duas opções correspondem às nossas necessidades de negócio.These two options match our business requirements. O bloco de parâmetros acabados parece este exemplo:The finished parameters block looks like this example:

"parameters": {
    "effectType": {
        "type": "string",
        "defaultValue": "Deny",
        "allowedValues": [
            "Deny",
            "Disabled"
        ],
        "metadata": {
            "displayName": "Effect",
            "description": "Enable or disable the execution of the policy"
        }
    }
},

Regra políticaPolicy rule

A composição da regra política é o passo final na construção da nossa definição de política personalizada.Composing the policy rule is the final step in building our custom policy definition. Identificámos duas declarações para testar:We've identified two statements to test for:

  • Que o tipo de conta de armazenamento é Microsoft.Storage/storageA contasThat the storage account type is Microsoft.Storage/storageAccounts
  • Que a conta de armazenamento suportaHttpsTrafficOnly não é verdadeThat the storage account supportsHttpsTrafficOnly isn't true

Uma vez que precisamos que ambas as declarações sejam verdadeiras, usaremos o operador lógico.Since we need both of these statements to be true, we'll use the allOf logical operator. Passaremos o parâmetro de efeitoType para o efeito em vez de fazer uma declaração estática.We'll pass the effectType parameter to the effect instead of making a static declaration. A nossa regra acabada parece este exemplo:Our finished rule looks like this example:

"if": {
    "allOf": [
        {
            "field": "type",
            "equals": "Microsoft.Storage/storageAccounts"
        },
        {
            "field": "Microsoft.Storage/storageAccounts/supportsHttpsTrafficOnly",
            "notEquals": "true"
        }
    ]
},
"then": {
    "effect": "[parameters('effectType')]"
}

Definição completaCompleted definition

Com as três partes da política definidas, aqui está a nossa definição completa:With all three parts of the policy defined, here is our completed definition:

{
    "properties": {
        "displayName": "Deny storage accounts not using only HTTPS",
        "description": "Deny storage accounts not using only HTTPS. Checks the supportsHttpsTrafficOnly property on StorageAccounts.",
        "mode": "all",
        "parameters": {
            "effectType": {
                "type": "string",
                "defaultValue": "Deny",
                "allowedValues": [
                    "Deny",
                    "Disabled"
                ],
                "metadata": {
                    "displayName": "Effect",
                    "description": "Enable or disable the execution of the policy"
                }
            }
        },
        "policyRule": {
            "if": {
                "allOf": [
                    {
                        "field": "type",
                        "equals": "Microsoft.Storage/storageAccounts"
                    },
                    {
                        "field": "Microsoft.Storage/storageAccounts/supportsHttpsTrafficOnly",
                        "notEquals": "true"
                    }
                ]
            },
            "then": {
                "effect": "[parameters('effectType')]"
            }
        }
    }
}

A definição completa pode ser usada para criar uma nova política.The completed definition can be used to create a new policy. Portal e cada SDK (Azure CLI, Azure PowerShell e REST API) aceitam a definição de diferentes maneiras, por isso reveja os comandos para cada um validar o uso correto.Portal and each SDK (Azure CLI, Azure PowerShell, and REST API) accept the definition in different ways, so review the commands for each to validate correct usage. Em seguida, atribua-o, utilizando o efeito parametrizado, a recursos adequados para gerir a segurança das suas contas de armazenamento.Then assign it, using the parameterized effect, to appropriate resources to manage the security of your storage accounts.

Limpar os recursosClean up resources

Se já acabou de trabalhar com recursos deste tutorial, use os seguintes passos para eliminar qualquer uma das atribuições ou definições acima criadas:If you're done working with resources from this tutorial, use the following steps to delete any of the assignments or definitions created above:

  1. Selecione Definições (ou Atribuições se estiver a tentar apagar uma atribuição) em Autoria no lado esquerdo da página Política Azure.Select Definitions (or Assignments if you're trying to delete an assignment) under Authoring in the left side of the Azure Policy page.

  2. Procure a nova definição de iniciativa ou de política (ou atribuição) que acabou de remover.Search for the new initiative or policy definition (or assignment) you want to remove.

  3. Clique com o botão direito do rato na linha ou selecione as reticências no fim da definição (ou atribuição) e selecione Eliminar definição (ou Eliminar atribuição).Right-click the row or select the ellipses at the end of the definition (or assignment), and select Delete definition (or Delete assignment).

RevisãoReview

Neste tutorial conseguiu realizar com êxito as seguintes tarefas:In this tutorial, you successfully accomplished the following tasks:

  • Identificou os seus requisitos de negócioIdentified your business requirements
  • Mapeado cada requisito para uma propriedade de recursos AzureMapped each requirement to an Azure resource property
  • Mapeou a propriedade para um pseudónimoMapped the property to an alias
  • Determinou o efeito de usarDetermined the effect to use
  • Compôs a definição de políticaComposed the policy definition

Passos seguintesNext steps

Em seguida, use a sua definição de política personalizada para criar e atribuir uma política:Next, use your custom policy definition to create and assign a policy: