Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Semelhante ao auditIfNotExists
, uma definição de política deployIfNotExists
executa um modelo de implantação quando a condição é atendida. As atribuições de política com efeito definido como DeployIfNotExists exigem uma identidade gerida para fazer a correção.
Observação
Modelos aninhados são suportados com deployIfNotExists
, mas modelos vinculados não são suportados no momento.
Avaliação de DeployIfNotExists
deployIfNotExists
é executado após um atraso configurável quando um Provedor de Recursos lida com uma solicitação de criação ou atualização de assinatura ou recurso e retorna um código de status de sucesso. Uma implantação de modelo ocorre se não houver recursos relacionados ou se os recursos definidos por existenceCondition
não forem avaliados como verdadeiros. A duração da implementação depende da complexidade dos recursos incluídos no modelo.
Durante um ciclo de avaliação, as definições de política com um efeito DeployIfNotExists que correspondem aos recursos são marcadas como não compatíveis, mas nenhuma ação é executada nesse recurso. Os recursos não compatíveis existentes podem ser remediados com uma tarefa de correção .
Propriedades DeployIfNotExists
A propriedade details
do efeito DeployIfNotExists tem todas as subpropriedades que definem os recursos relacionados a serem correspondidos e a implantação do modelo a ser executada.
-
type
(obrigatório)- Especifica o tipo do recurso relacionado a ser correspondido.
- Se
type
for um tipo de recurso abaixo do recurso de condiçãoif
, a política consultará recursos dessetype
dentro do escopo do recurso avaliado. Caso contrário, as consultas de política dentro do mesmo grupo de recursos ou assinatura que o recurso avaliado, dependendo doexistenceScope
.
-
name
(facultativo)- Especifica o nome exato do recurso a ser correspondido e faz com que a política busque um recurso específico em vez de todos os recursos do tipo especificado.
- Quando os valores de condição para
if.field.type
ethen.details.type
corresponderem,name
se torna necessário e deve ser[field('name')]
ou[field('fullName')]
para um recurso filho.
Observação
Os segmentos type
e name
podem ser combinados para recuperar genericamente recursos aninhados.
Para recuperar um recurso específico, você pode usar "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType"
e "name": "parentResourceName/nestedResourceName"
.
Para recuperar uma coleção de recursos aninhados, um carácter curinga ?
pode ser fornecido no lugar do segmento do nome final. Por exemplo, "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType"
e "name": "parentResourceName/?"
. Isso pode ser combinado com funções de campo para acessar recursos relacionados ao recurso avaliado, como "name": "[concat(field('name'), '/?')]"
".
resourceGroupName
(opcional)- Permite que a associação do recurso relacionado seja proveniente de um grupo de recursos diferente.
- Não se aplica se
type
for um recurso que estaria abaixo do recurso de condiçãoif
. - O padrão é o grupo de recursos do recurso de condição
if
. - Se uma implantação de modelo for executada, será implantada no grupo de recursos associado a esse valor.
existenceScope
(opcional)- Os valores permitidos são Subscription e ResourceGroup.
- Define o escopo de onde buscar o recurso relacionado a ser correspondido.
- Não se aplica se
type
for um recurso que estaria abaixo do recurso de condiçãoif
. - Para ResourceGroup, limitar-se-ia ao grupo de recursos em
resourceGroupName
se especificado. SeresourceGroupName
não for especificado, limitará ao grupo de recursos do recurso de condiçãoif
, que é o comportamento padrão. - Para Subscrição, consulta toda a subscrição para o recurso associado. O escopo da atribuição deve ser definido a nível de assinatura ou superior para uma avaliação adequada.
- O padrão é ResourceGroup.
evaluationDelay
(opcional)- Especifica quando a existência dos recursos relacionados deve ser avaliada. O atraso é usado apenas para avaliações que são resultado de uma solicitação de recurso de criação ou atualização.
- Os valores permitidos são
AfterProvisioning
,AfterProvisioningSuccess
,AfterProvisioningFailure
ou uma duração ISO 8601 entre 0 e 360 minutos. - Os valores AfterProvisioning inspecionam o resultado do provisionamento do recurso que foi avaliado na condição
if
da regra de política.AfterProvisioning
é executado após a conclusão do provisionamento, independentemente do resultado. O provisionamento que leva mais de seis horas é tratado como uma falha ao considerar AfterProvisioning atrasos de avaliação. - O padrão é
PT10M
(10 minutos). - Especificar um longo atraso de avaliação pode fazer com que o estado de conformidade registado do recurso não seja atualizado até ao próximo acionador de avaliação.
existenceCondition
(opcional)- Se não for especificado, qualquer recurso relacionado do
type
satisfaz o efeito e não aciona a implantação. - Usa a mesma linguagem que a regra de política para a condição
if
, mas avalia cada recurso relacionado de forma individual. - Se algum recurso relacionado correspondente for considerado verdadeiro, o efeito é satisfeito e não desencadeia a implantação.
- Pode usar [field()] para verificar a equivalência com valores na condição
if
. - Por exemplo, pode ser usado para validar que o recurso pai, estando na condição
if
, está na mesma localização que o recurso relacionado correspondente.
- Se não for especificado, qualquer recurso relacionado do
roleDefinitionIds
(obrigatório)- Essa propriedade deve incluir uma matriz de cadeias de caracteres que correspondam ao ID da função de controle de acesso baseado em função acessível pela assinatura. Para obter mais informações, consulte correção - configurar a definição de política.
deploymentScope
(opcional)- Os valores permitidos são Subscription e ResourceGroup.
- Configura o tipo de implantação a ser ativada. de Assinatura indica uma implantação de no nível de assinatura e ResourceGroup indica uma implantação em um grupo de recursos.
- Uma propriedade de localização deve ser especificada no de Implantação ao usar implantação ao nível de subscrição.
- O padrão é ResourceGroup.
deployment
(obrigatório)- Essa propriedade deve incluir a implantação completa do modelo, pois ela seria passada para a API PUT do
Microsoft.Resources/deployments
. Para obter mais informações, consulte a REST API de Deployments . - Os
Microsoft.Resources/deployments
aninhados no template devem usar nomes exclusivos para evitar conflitos durante várias avaliações de políticas. O nome da implantação pai pode ser usado como parte do nome da implantação aninhada por meio de[concat('NestedDeploymentName-', uniqueString(deployment().name))]
.
Observação
Todas as funções dentro da propriedade
deployment
são avaliadas como componentes do modelo, não da política. A exceção é a propriedadeparameters
que passa valores da política para o modelo. Ovalue
nesta seção sob um nome de parâmetro de modelo é usado para executar essa passagem de valor (consulte fullDbName no exemplo DeployIfNotExists).- Essa propriedade deve incluir a implantação completa do modelo, pois ela seria passada para a API PUT do
Exemplo de DeployIfNotExists
Exemplo: avalia bancos de dados do SQL Server para determinar se transparentDataEncryption
está habilitado. Caso contrário, será executada uma implantação para ser habilitada.
"if": {
"field": "type",
"equals": "Microsoft.Sql/servers/databases"
},
"then": {
"effect": "deployIfNotExists",
"details": {
"type": "Microsoft.Sql/servers/databases/transparentDataEncryption",
"name": "current",
"evaluationDelay": "AfterProvisioning",
"roleDefinitionIds": [
"/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleGUID}",
"/providers/Microsoft.Authorization/roleDefinitions/{builtinroleGUID}"
],
"existenceCondition": {
"field": "Microsoft.Sql/transparentDataEncryption.status",
"equals": "Enabled"
},
"deployment": {
"properties": {
"mode": "incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"fullDbName": {
"type": "string"
}
},
"resources": [
{
"name": "[concat(parameters('fullDbName'), '/current')]",
"type": "Microsoft.Sql/servers/databases/transparentDataEncryption",
"apiVersion": "2014-04-01",
"properties": {
"status": "Enabled"
}
}
]
},
"parameters": {
"fullDbName": {
"value": "[field('fullName')]"
}
}
}
}
}
}
Próximos passos
- Analise exemplos de políticas do Azure.
- Reveja a estrutura de definição do Azure Policy.
- Entenda como criar políticas de forma programática.
- Saiba como obter dados de conformidade.
- Saiba como corrigir recursos não compatíveis.
- Revise os grupos de gerenciamento do Azure.