Partilhar via


Tutorial: Criar uma definição de política personalizada

Uma definição de política personalizada permite que os clientes definam suas próprias regras para usar o Azure. Frequentemente, estas regras impõem:

  • Práticas de segurança
  • Gestão de custos
  • Regras específicas da organização (como nomenclatura ou localizações)

Seja qual for o fator de negócio que leve à criação de uma política personalizada, os passos para definir a nova política personalizada são os mesmos.

Antes de criar uma política personalizada, veja os exemplos de política para ver se já existe uma política que satisfaça as suas necessidades.

A abordagem para criar uma política personalizada segue estas etapas:

  • Identifique os seus requisitos de negócio
  • Mapeie cada requisito numa propriedade de recursos do Azure
  • Mapeie a propriedade num alias
  • Determine o efeito a utilizar
  • Componha a definição de política

Pré-requisitos

Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

Identificar requisitos

Antes de criar a definição de política, é importante que compreenda a intenção da política. Para este tutorial, usaremos um requisito de segurança empresarial comum como objetivo para ilustrar as etapas envolvidas:

  • Cada conta de armazenamento deve estar habilitada para HTTPS
  • Cada conta de armazenamento deve ser desabilitada para HTTP

Seus requisitos devem identificar claramente os estados de recurso "ser" e "não ser".

Embora tenhamos definido o estado esperado do recurso, ainda não definimos o que queremos fazer com recursos não compatíveis. A Política do Azure suporta muitos efeitos. Para este tutorial, definiremos o requisito de negócios como impedir a criação de recursos se eles não estiverem em conformidade com as regras de negócios. Para atingir esse objetivo, usaremos o efeito Negar . Também queremos a opção de suspender a política para atribuições específicas. Como tal, usaremos o efeito Desativado e tornaremos o efeito um parâmetro na definição da política.

Determinar propriedades do recurso

Com base nos requisitos de negócio, o recurso do Azure a auditar com o Azure Policy é uma conta de armazenamento. No entanto, não sabemos as propriedades a serem usadas na definição da política. O Azure Policy avalia em relação à representação JSON do recurso, portanto, precisaremos entender as propriedades disponíveis nesse recurso.

Há muitas maneiras de determinar as propriedades de um recurso do Azure. Veremos cada um deles para este tutorial:

  • Extensão do Azure Policy para o VS Code
  • Modelos do Azure Resource Manager (modelos ARM)
    • Exportar recurso existente
    • Experiência de criação
    • Modelos de início rápido (GitHub)
    • Documentos de referência de modelo
  • Explorador de Recursos do Azure

Ver recursos na extensão do VS Code

Pode utilizar a extensão do VS Code para navegar pelos recursos do seu ambiente e ver as propriedades do Resource Manager em cada recurso.

Modelos do ARM

Há várias formas de olhar para um modelo do ARM que inclui a propriedade que quer gerir.

Recurso existente no portal

A forma mais simples de encontrar propriedades é procurar num recurso existente do mesmo tipo. Os recursos que já estão configurados com a definição que quer impor também fornecem o valor com o qual comparar. Observe a página Exportar modelo (em Configurações) no portal do Azure para esse recurso específico.

Aviso

O modelo ARM exportado pelo portal do Azure não pode ser conectado diretamente à propriedade de deployment um modelo ARM em uma definição de política deployIfNotExists .

Captura de ecrã da página Exportar modelo num recurso existente no portal do Azure.

Isso para uma conta de armazenamento revela um modelo semelhante a este exemplo:

...
"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": []
}]
...

Em propriedades está um valor chamado supportsHttpsTrafficOnly definido como false. Esta propriedade parece ser a propriedade que estamos procurando. Além disso, o tipo de recurso é Microsoft.Storage/storageAccounts. O tipo permite-nos limitar a política apenas a recursos deste tipo.

Criar um recurso no portal

Outra forma de utilizar o portal é a experiência de criação de recursos. Ao criar uma conta de armazenamento através do portal, verá uma opção no separador Avançado, que é a opção Transferência de segurança necessária. Esta propriedade tem as opções Desativado e Ativado. O ícone de informações tem texto adicional que confirma que esta opção é provavelmente a propriedade que queremos. No entanto, o portal não nos informa o nome da propriedade nesta tela.

No separador Rever + criar, encontra uma ligação na parte inferior da página que lhe permite Transferir um modelo para automatização. Selecionar o link abre o modelo que cria o recurso que configuramos. Neste caso, vemos duas informações fundamentais:

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

Esta informação indica-nos o tipo de propriedade e também confirma supportsHttpsTrafficOnly é a propriedade que procuramos.

Modelos de início rápido no GitHub

Os modelos de início rápido do Azure no GitHub têm centenas de modelos do ARM criados para diferentes recursos. Estes modelos podem ser uma ótima maneira de encontrar a propriedade de recurso de que está à procura. Algumas propriedades podem parecer o que você está procurando, mas controle outra coisa.

Documentos de referência do recurso

Para validar a propriedade supportsHttpsTrafficOnly está correta, verifique a referência de modelo ARM para o recurso de conta de armazenamento no provedor de armazenamento. O objeto de propriedades tem uma lista de parâmetros válidos. A seleção do link StorageAccountPropertiesCreateParameters-object mostra uma tabela de propriedades aceitáveis. supportsHttpsTrafficOnly está presente e a descrição corresponde ao que estamos procurando para atender aos requisitos de negócios.

Explorador de Recursos do Azure

Outra maneira de explorar seus recursos do Azure é por meio do Gerenciador de Recursos do Azure (Visualização). Esta ferramenta utiliza o contexto da sua subscrição, pelo que tem de se autenticar no site com as suas credenciais do Azure. Depois de se autenticar, pode procurar por fornecedores, subscrições, grupos de recursos e recursos.

Localize um recurso de conta de armazenamento e examine as propriedades. Também vemos a propriedade supportsHttpsTrafficOnly aqui. Selecionando a guia Documentação , vemos que a descrição da propriedade corresponde ao que encontramos nos documentos de referência anteriormente.

Encontre o alias da propriedade

Identificamos a propriedade do recurso, mas precisamos mapear essa propriedade para um alias.

Há algumas maneiras de determinar os aliases para um recurso do Azure. Veremos cada um deles para este tutorial:

  • Extensão do Azure Policy para o VS Code
  • CLI do Azure
  • Azure PowerShell

Obter aliases na extensão do VS Code

A extensão do Azure Policy para a extensão do VS Code facilita a navegação nos seus recursos e a deteção de aliases.

Nota

A extensão VS Code expõe apenas as propriedades do modo Resource Manager e não exibe nenhuma propriedade do modo Resource Provider.

CLI do Azure

Na CLI do Azure, o grupo de comandos az provider é utilizado para procurar aliases de recursos. Filtraremos o namespace Microsoft.Storage com base nos detalhes que obtivemos sobre o recurso do Azure anteriormente.

# 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 alias suportado pelas contas de armazenamento chamadas supportsHttpsTrafficOnly. Esta existência deste alias significa que podemos escrever a política para fazer cumprir os nossos requisitos de negócio!

Azure PowerShell

No Azure PowerShell, o cmdlet Get-AzPolicyAlias é utilizado para procurar aliases de recursos. Filtraremos o namespace Microsoft.Storage com base nos detalhes que obtivemos sobre o recurso do Azure anteriormente.

# 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

Como a CLI do Azure, os resultados mostram um alias suportado pelas contas de armazenamento chamadas supportsHttpsTrafficOnly.

Determinar o efeito a utilizar

Decidir o que fazer com seus recursos não compatíveis é quase tão importante quanto decidir o que avaliar em primeiro lugar. Cada resposta possível a um recurso não compatível é chamada de efeito. O efeito controla se o recurso não compatível é registrado, bloqueado, tem dados anexados ou tem uma implantação associada a ele para colocar o recurso de volta em um estado compatível.

Para nosso exemplo, Negar é o efeito que queremos, pois não queremos recursos não compatíveis criados em nosso ambiente do Azure. A auditoria é uma boa primeira escolha para um efeito de política para determinar qual é o impacto de uma política antes de defini-la como Negar. Uma maneira de facilitar a alteração do efeito por atribuição é parametrizar o efeito. Veja os parâmetros abaixo para obter detalhes sobre como.

Compor a definição

Agora temos os detalhes da propriedade e o alias para o que planejamos gerenciar. Em seguida, vamos compor a própria regra de política. Se ainda não está familiarizado com a linguagem da política, veja a estrutura da definição de política para saber como estruturar a definição de política. Aqui está um modelo vazio de como é uma definição de política:

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

Metadados

Os primeiros três componentes são metadados da política. Esses componentes são fáceis de fornecer valores, pois sabemos para que estamos criando a regra. O modo é principalmente sobre tags e localização de recursos. Como não precisamos limitar a avaliação a recursos que suportam tags, usaremos o valor all para o modo.

"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âmetros

Embora não tenhamos usado um parâmetro para alterar a avaliação, queremos usar um parâmetro para permitir a alteração do efeito para a solução de problemas. Vamos definir um parâmetro effectType e limitá-lo a apenas Deny e Disabled. Estas duas opções correspondem aos nossos requisitos de negócio. O bloco de parâmetros concluídos é semelhante a este exemplo:

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

Regra de política

Compor a regra de política é a etapa final na construção de nossa definição de política personalizada. Identificamos duas declarações para testar:

  • O tipo de conta de armazenamento é Microsoft.Storage/storageAccounts
  • A conta de armazenamento suportaHttpsTrafficOnly não é verdadeira

Como precisamos que ambas as afirmações sejam verdadeiras, usaremos o operador lógico allOf. Passaremos o parâmetro effectType para o efeito em vez de fazer uma declaração estática. Nossa regra concluída se parece com este exemplo:

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

Definição concluída

Com as três partes da política definidas, aqui está a nossa definição completa:

{
    "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')]"
            }
        }
    }
}

Pode utilizar a definição concluída para criar uma nova política. O portal e cada SDK (CLI do Azure, Azure PowerShell e API REST) aceitam a definição de maneiras diferentes, portanto, revise os comandos de cada um para validar o uso correto. Em seguida, atribua-a, com o efeito parametrizado, a recursos adequados para gerir a segurança das suas contas de armazenamento.

Clean up resources (Limpar recursos)

Se tiver terminado de trabalhar com recursos deste tutorial, use as seguintes etapas para excluir qualquer uma das atribuições ou definições criadas acima:

  1. Selecione Definições (ou Atribuições, se estiver a tentar eliminar uma atribuição) em Criação no lado esquerdo da página Política do Azure.

  2. Procure a nova definição de iniciativa ou de política (ou atribuição) que acabou de remover.

  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).

Rever

Neste tutorial conseguiu realizar com êxito as seguintes tarefas:

  • Identificou os requisitos do seu negócio
  • Mapeado cada requisito para uma propriedade de recurso do Azure
  • Mapeado a propriedade para um alias
  • Determinado o efeito a utilizar
  • Compôs a definição da política

Próximos passos

Em seguida, use sua definição de política personalizada para criar e atribuir uma política: