Tutorial: Creación de una definición de directiva personalizadaTutorial: Create a custom policy definition

Una definición de directiva personalizada permite a los clientes definir sus propias reglas para usar Azure.A custom policy definition allows customers to define their own rules for using Azure. Estas reglas exigen a menudo:These rules often enforce:

  • Prácticas de seguridadSecurity practices
  • Administración de costosCost management
  • Reglas específicas de la organización (como nombres o ubicaciones)Organization-specific rules (like naming or locations)

Sea cual sea el factor empresarial para crear una directiva personalizada, los pasos para definir la nueva directiva personalizada son los mismos.Whatever the business driver for creating a custom policy, the steps are the same for defining the new custom policy.

Antes de crear una directiva personalizada, consulte los ejemplos de directivas para ver si ya existe una directiva que coincida con sus necesidades.Before creating a custom policy, check the policy samples to see if a policy that matches your needs already exists.

El enfoque para crear una directiva personalizada sigue estos pasos:The approach to creating a custom policy follows these steps:

  • Identificar los requisitos empresarialesIdentify your business requirements
  • Asignar a cada requisito una propiedad de recurso de AzureMap each requirement to an Azure resource property
  • Asignar a la propiedad un aliasMap the property to an alias
  • Determinar qué efecto usarDetermine which effect to use
  • Elaborar la definición de directivaCompose the policy definition

PrerrequisitosPrerequisites

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.If you don't have an Azure subscription, create a free account before you begin.

Identificación de los requisitosIdentify requirements

Antes de crear la definición de directiva, es importante entender su intención.Before creating the policy definition, it's important to understand the intent of the policy. En este tutorial, se va a usar un requisito de seguridad empresarial común como objetivo para ilustrar los pasos implicados:For this tutorial, we'll use a common enterprise security requirement as the goal to illustrate the steps involved:

  • Cada cuenta de almacenamiento debe estar habilitada para HTTPS.Each storage account must be enabled for HTTPS
  • Cada cuenta de almacenamiento debe estar deshabilitada para HTTP.Each storage account must be disabled for HTTP

Los requisitos deben identificar claramente los estados de los recursos "será" y "no será".Your requirements should clearly identify both the "to be" and the "not to be" resource states.

Aunque se ha definido el estado esperado del recurso, no se ha definido aún lo que se quiere hacer con los recursos no compatibles.While we've defined the expected state of the resource, we've not yet defined what we want done with non-compliant resources. Azure Policy admite una serie de efectos.Azure Policy supports a number of effects. En este tutorial, el requisito empresarial se define de este modo: impedir la creación de recursos si no son compatibles con las reglas de negocio.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 alcanzar este objetivo, se usará el efecto Denegar.To meet this goal, we'll use the Deny effect. También se desea la opción para suspender la directiva en el caso de asignaciones específicas.We also want the option to suspend the policy for specific assignments. Por lo tanto, se usará el efecto Deshabilitado y el efecto se convertirá en un parámetro en la definición de directiva.As such, we'll use the Disabled effect and make the effect a parameter in the policy definition.

Determinación de las propiedades de recursosDetermine resource properties

En función de las necesidades de la organización, el recurso de Azure que se va a auditar con Azure Policy puede ser una cuenta de almacenamiento.Based on the business requirement, the Azure resource to audit with Azure Policy is a storage account. Sin embargo, se desconocen las propiedades que se usarán en la definición de directiva.However, we don't know the properties to use in the policy definition. Para realizar la evaluación, Azure Policy utiliza la representación JSON del recurso, por lo que es necesario conocer las propiedades disponibles en dicho recurso.Azure Policy evaluates against the JSON representation of the resource, so we'll need to understand the properties available on that resource.

Hay muchas maneras de determinar las propiedades de un recurso de Azure.There are many ways to determine the properties for an Azure resource. Se analizará cada una de ellas en este tutorial:We'll look at each for this tutorial:

  • Extensión de Azure Policy para VS CodeAzure Policy extension for VS Code
  • Plantillas de Resource ManagerResource Manager templates
    • Exportar un recurso existenteExport existing resource
    • Experiencia de creaciónCreation experience
    • Plantillas de inicio rápido (GitHub)Quickstart templates (GitHub)
    • Documentos de referencia de plantillaTemplate reference docs
  • Azure Resource ExplorerAzure Resource Explorer

Visualización de recursos en la extensión de VS CodeView resources in VS Code extension

La extensión de VS Code se puede usar para examinar los recursos de su entorno y ver las propiedades de Resource Manager en cada recurso.The VS Code extension can be used to browse resources in your environment and see the Resource Manager properties on each resource.

Plantillas de Resource ManagerResource Manager templates

Hay varias maneras de examinar una plantilla de Resource Manager que incluye la propiedad que quiere administrar.There are several ways to look at a Resource Manager template that includes the property you're looking to manage.

Recurso existente en el portalExisting resource in the portal

La manera más sencilla de buscar propiedades es examinar un recurso existente del mismo tipo.The simplest way to find properties is to look at an existing resource of the same type. Los recursos que ya haya configurado con el valor que quiere aplicar también proporcionan el valor con el que comparar.Resources already configured with the setting you want to enforce also provide the value to compare against. Examine ese recurso concreto en la página Exportar plantilla (en Configuración) de Azure Portal.Look at the Export template page (under Settings) in the Azure portal for that specific resource.

Exportación de la página de plantilla en el recurso existente

Al hacer esto mismo con una cuenta de almacenamiento se revela una plantilla similar a la de este ejemplo: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": []
}]
...

En propiedades hay un valor llamado supportsHttpsTrafficOnly establecido en false.Under properties is a value named supportsHttpsTrafficOnly set to false. Esta propiedad se parece a la que se está buscando.This property looks like it may be the property we're looking for. Además, el tipo del recurso es Microsoft.Storage/storageAccounts.Also, the type of the resource is Microsoft.Storage/storageAccounts. El tipo nos permite limitar la directiva a solo los recursos de este tipo.The type lets us limit the policy to only resources of this type.

Creación de un recurso en el portalCreate a resource in the portal

Otra manera mediante el portal es la experiencia de creación de recursos.Another way through the portal is the resource creation experience. Al crear una cuenta de almacenamiento mediante el portal, una opción en la pestaña Avanzadas es Security transfer required (Transferencia de seguridad necesaria).While creating a storage account through the portal, an option under the Advanced tab is Security transfer required. Esta propiedad tiene las opciones Disabled (Deshabilitado) y Enabled (Habilitado).This property has Disabled and Enabled options. El icono de información tiene texto adicional que confirma que esta opción es probablemente la propiedad que busca.The info icon has additional text that confirms this option is likely the property we want. Sin embargo, el portal no dice el nombre de la propiedad en esta pantalla.However, the portal doesn't tell us the property name on this screen.

En la pestaña Revisar y crear, hay un vínculo en la parte inferior de la página a Descargar una plantilla para la automatización.On the Review + create tab, a link is at the bottom of the page to Download a template for automation. Al seleccionar el vínculo se abre la plantilla que crea el recurso que se ha configurado.Selecting the link opens the template that creates the resource we configured. En este caso, se pueden ver dos trozos principales de información:In this case, we see two key pieces of information:

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

Esta información indica el tipo de propiedad y también confirma que supportsHttpsTrafficOnly es la propiedad que se busca.This information tells us the property type and also confirms supportsHttpsTrafficOnly is the property we're looking for.

Plantillas de inicio rápido de GitHubQuickstart templates on GitHub

Las plantillas de inicio rápido de Azure en GitHub contienen cientos de plantillas de Resource Manager creadas para distintos recursos.The Azure quickstart templates on GitHub has hundreds of Resource Manager templates built for different resources. Estas plantillas pueden ser una excelente manera de encontrar la propiedad de recurso que se busca.These templates can be a great way to find the resource property you're looking for. Puede que algunas propiedades parezcan ser lo que busca, sin embargo, es necesario controlar algo más.Some properties may appear to be what you're looking for, but control something else.

Documentos de referencia de recursosResource reference docs

Para validar que supportsHttpsTrafficOnly es la propiedad correcta, compruebe la referencia de la plantilla de Resource Manager correspondiente al recurso de cuenta de almacenamiento en el proveedor de almacenamiento.To validate supportsHttpsTrafficOnly is correct property, check the Resource Manager template reference for the storage account resource on the storage provider. El objeto de propiedades tiene una lista de parámetros válidos.The properties object has a list of valid parameters. Al seleccionar el vínculo StorageAccountPropertiesCreateParameters-object se muestra una tabla de propiedades aceptables.Selecting the StorageAccountPropertiesCreateParameters-object link shows a table of acceptable properties. supportsHttpsTrafficOnly existe y la descripción coincide con lo que se busca para satisfacer los requisitos empresariales.supportsHttpsTrafficOnly is present and the description matches what we are looking for to meet the business requirements.

Azure Resource ExplorerAzure Resource Explorer

Otra forma de explorar los recursos de Azure es mediante Azure Resource Explorer (versión preliminar).Another way to explore your Azure resources is through the Azure Resource Explorer (Preview). Esta herramienta usa el contexto de su suscripción, así que debe autenticarse en el sitio web con sus credenciales de Azure.This tool uses the context of your subscription, so you need to authenticate to the website with your Azure credentials. Una vez autenticado, puede examinar por proveedores, suscripciones, grupos de recursos y recursos.Once authenticated, you can browse by providers, subscriptions, resource groups, and resources.

Busque un recurso de cuenta de almacenamiento y examine las propiedades.Locate a storage account resource and look at the properties. Aquí también se puede ver la propiedad supportsHttpsTrafficOnly.We see the supportsHttpsTrafficOnly property here as well. Al seleccionar la pestaña Documentación, se puede ver que la descripción de la propiedad coincide con lo que se ha encontrado en los documentos de referencia anteriormente.Selecting the Documentation tab, we see that the property description matches what we found in the reference docs earlier.

Búsqueda del alias de propiedadFind the property alias

Se ha identificado la propiedad de recurso, pero es necesario asignarle un alias.We've identified the resource property, but we need to map that property to an alias.

Hay varias maneras de determinar los alias de un recurso de Azure.There are a few ways to determine the aliases for an Azure resource. Se analizará cada una de ellas en este tutorial:We'll look at each for this tutorial:

  • Extensión de Azure Policy para VS CodeAzure Policy extension for VS Code
  • Azure CLIAzure CLI
  • Azure PowerShellAzure PowerShell
  • Azure Resource GraphAzure Resource Graph

Obtención de alias en la extensión de VS CodeGet aliases in VS Code extension

La extensión de Azure Policy para la extensión de VS Code facilita el examen de los recursos y la detección de alias.The Azure Policy extension for VS Code extension makes it easy to browse your resources and discover aliases.

Azure CLIAzure CLI

En la CLI de Azure, el grupo de comandos az provider se usa para buscar alias de recursos.In Azure CLI, the az provider command group is used to search for resource aliases. Se va a filtrar por el espacio de nombres Microsoft.Storage según los detalles que se tienen anteriormente sobre el recurso de Azure.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"

En los resultados, se puede ver un alias compatible con las cuentas de almacenamiento llamado supportsHttpsTrafficOnly.In the results, we see an alias supported by the storage accounts named supportsHttpsTrafficOnly. La existencia de este alias significa que se puede escribir la directiva para aplicar los requisitos empresariales.This existence of this alias means we can write the policy to enforce our business requirements!

Azure PowerShellAzure PowerShell

En Azure PowerShell, el cmdlet Get-AzPolicyAlias se usa para buscar los alias de recurso.In Azure PowerShell, the Get-AzPolicyAlias cmdlet is used to search for resource aliases. Se va a filtrar por el espacio de nombres Microsoft.Storage según los detalles que se tienen anteriormente sobre el recurso de Azure.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

Al igual que con la CLI de Azure, los resultados muestran un alias compatible con las cuentas de almacenamiento llamado supportsHttpsTrafficOnly.Like Azure CLI, the results show an alias supported by the storage accounts named supportsHttpsTrafficOnly.

Azure Resource GraphAzure Resource Graph

Azure Resource Graph es un servicio que proporciona otro método para buscar las propiedades de los recursos de Azure.Azure Resource Graph is a service that provides another method to find properties of Azure resources. A continuación se describe una consulta sencilla para buscar una única cuenta de almacenamiento con Resource Graph:Here is a sample query for looking at a single storage account with Resource Graph:

Resources
| where type=~'microsoft.storage/storageaccounts'
| limit 1
az graph query -q "Resources | where type=~'microsoft.storage/storageaccounts' | limit 1"
Search-AzGraph -Query "Resources | where type=~'microsoft.storage/storageaccounts' | limit 1"

Los resultados son similares a lo que se puede ver en las plantillas de Resource Manager y mediante Azure Resource Explorer.The results look similar to what we see in the Resource Manager templates and through the Azure Resource Explorer. Sin embargo, los resultados de Azure Resource Graph también pueden incluir información del aliasproyectando la matriz aliases:However, Azure Resource Graph results can also include alias details by projecting the aliases array:

Resources
| where type=~'microsoft.storage/storageaccounts'
| limit 1
| project aliases
az graph query -q "Resources | where type=~'microsoft.storage/storageaccounts' | limit 1 | project aliases"
Search-AzGraph -Query "Resources | where type=~'microsoft.storage/storageaccounts' | limit 1 | project aliases"

Esta es una salida de ejemplo de una cuenta de almacenamiento de alias:Here is example output from a storage account for aliases:

"aliases": {
    "Microsoft.Storage/storageAccounts/accessTier": null,
    "Microsoft.Storage/storageAccounts/accountType": "Standard_LRS",
    "Microsoft.Storage/storageAccounts/enableBlobEncryption": true,
    "Microsoft.Storage/storageAccounts/enableFileEncryption": true,
    "Microsoft.Storage/storageAccounts/encryption": {
        "keySource": "Microsoft.Storage",
        "services": {
            "blob": {
                "enabled": true,
                "lastEnabledTime": "2018-06-04T17:59:14.4970000Z"
            },
            "file": {
                "enabled": true,
                "lastEnabledTime": "2018-06-04T17:59:14.4970000Z"
            }
        }
    },
    "Microsoft.Storage/storageAccounts/encryption.keySource": "Microsoft.Storage",
    "Microsoft.Storage/storageAccounts/encryption.keyvaultproperties.keyname": null,
    "Microsoft.Storage/storageAccounts/encryption.keyvaultproperties.keyvaulturi": null,
    "Microsoft.Storage/storageAccounts/encryption.keyvaultproperties.keyversion": null,
    "Microsoft.Storage/storageAccounts/encryption.services": {
        "blob": {
            "enabled": true,
            "lastEnabledTime": "2018-06-04T17:59:14.4970000Z"
        },
        "file": {
            "enabled": true,
            "lastEnabledTime": "2018-06-04T17:59:14.4970000Z"
        }
    },
    "Microsoft.Storage/storageAccounts/encryption.services.blob": {
        "enabled": true,
        "lastEnabledTime": "2018-06-04T17:59:14.4970000Z"
    },
    "Microsoft.Storage/storageAccounts/encryption.services.blob.enabled": true,
    "Microsoft.Storage/storageAccounts/encryption.services.file": {
        "enabled": true,
        "lastEnabledTime": "2018-06-04T17:59:14.4970000Z"
    },
    "Microsoft.Storage/storageAccounts/encryption.services.file.enabled": true,
    "Microsoft.Storage/storageAccounts/networkAcls": {
        "bypass": "AzureServices",
        "defaultAction": "Allow",
        "ipRules": [],
        "virtualNetworkRules": []
    },
    "Microsoft.Storage/storageAccounts/networkAcls.bypass": "AzureServices",
    "Microsoft.Storage/storageAccounts/networkAcls.defaultAction": "Allow",
    "Microsoft.Storage/storageAccounts/networkAcls.ipRules": [],
    "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*]": [],
    "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action": [],
    "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].value": [],
    "Microsoft.Storage/storageAccounts/networkAcls.virtualNetworkRules": [],
    "Microsoft.Storage/storageAccounts/networkAcls.virtualNetworkRules[*]": [],
    "Microsoft.Storage/storageAccounts/networkAcls.virtualNetworkRules[*].action": [],
    "Microsoft.Storage/storageAccounts/networkAcls.virtualNetworkRules[*].id": [],
    "Microsoft.Storage/storageAccounts/networkAcls.virtualNetworkRules[*].state": [],
    "Microsoft.Storage/storageAccounts/primaryEndpoints": {
        "blob": "https://mystorageaccount.blob.core.windows.net/",
        "file": "https://mystorageaccount.file.core.windows.net/",
        "queue": "https://mystorageaccount.queue.core.windows.net/",
        "table": "https://mystorageaccount.table.core.windows.net/"
    },
    "Microsoft.Storage/storageAccounts/primaryEndpoints.blob": "https://mystorageaccount.blob.core.windows.net/",
    "Microsoft.Storage/storageAccounts/primaryEndpoints.file": "https://mystorageaccount.file.core.windows.net/",
    "Microsoft.Storage/storageAccounts/primaryEndpoints.queue": "https://mystorageaccount.queue.core.windows.net/",
    "Microsoft.Storage/storageAccounts/primaryEndpoints.table": "https://mystorageaccount.table.core.windows.net/",
    "Microsoft.Storage/storageAccounts/primaryEndpoints.web": null,
    "Microsoft.Storage/storageAccounts/primaryLocation": "eastus2",
    "Microsoft.Storage/storageAccounts/provisioningState": "Succeeded",
    "Microsoft.Storage/storageAccounts/sku.name": "Standard_LRS",
    "Microsoft.Storage/storageAccounts/sku.tier": "Standard",
    "Microsoft.Storage/storageAccounts/statusOfPrimary": "available",
    "Microsoft.Storage/storageAccounts/supportsHttpsTrafficOnly": false
}

Azure Resource Graph se usa mediante Cloud Shell, lo que hace que sea una manera rápida y fácil de explorar las propiedades de los recursos.Azure Resource Graph can be used through Cloud Shell, making it a fast and easy way to explore the properties of your resources.

Determinación del efecto para usarDetermine the effect to use

Decidir qué hacer con los recursos no compatibles es casi tan importante como decidir qué se debe evaluar en primer lugar.Deciding what to do with your non-compliant resources is nearly as important as deciding what to evaluate in the first place. Cada posible respuesta a un recurso no compatible se conoce como efecto.Each possible response to a non-compliant resource is called an effect. Los efectos controlan si se registra o bloquea el recurso no compatible, si tiene datos anexados o si tiene una implementación asociada para devolver el recurso a un estado de compatibilidad.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.

En nuestro ejemplo, Denegar es el efecto que se desea ya que no queremos tener recursos no compatibles creados en el entorno de Azure.For our example, Deny is the effect we want as we do not want non-compliant resources created in our Azure environment. Auditar es una buena primera opción de efecto de directiva para determinar de qué modo afecta una directiva antes de establecerla en Denegar.Audit is a good first choice for a policy effect to determine what the impact of a policy is before setting it to Deny. Una manera de facilitar el cambio del efecto por asignación es parametriza el efecto.One way to make changing the effect per assignment easier is to parameterize the effect. Consulte a continuación los parámetros para saber cómo hacerlo.See parameters below for the details on how.

Elaboración de la definiciónCompose the definition

Ya se tienen los detalles de la propiedad y el alias de lo que se planea administrar.We now have the property details and alias for what we plan to manage. El siguiente paso es elaborar la propia regla de directiva.Next, we'll compose the policy rule itself. Si aún no está familiarizado con el lenguaje de directiva, consulte la estructura de definición de directivas para saber cómo estructurar la definición de directiva.If you aren't yet familiar with the policy language, reference policy definition structure for how to structure the policy definition. Esta es una plantilla vacía del aspecto de una definición de directiva: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>"
            }
        }
    }
}

MetadatosMetadata

Los tres primeros componentes son metadatos de la directiva.The first three components are policy metadata. Es fácil proporcionar valores para estos componentes dado que ya se sabe para lo que se está creando la regla.These components are easy to provide values for since we know what we are creating the rule for. El modo consiste principalmente en las etiquetas y la ubicación del recurso.Mode is primarily about tags and resource location. Puesto que no es necesario limitar la evaluación a los recursos que admiten etiquetas, se usará el valor all para mode.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

Aunque no se ha usado un parámetro para cambiar la evaluación, no queremos usar un parámetro para permitir cambiar el efecto para la solución 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. Se definirá un parámetro effectType y se limitará a solo Deny y Disabled.We'll define an effectType parameter and limit it to only Deny and Disabled. Estas dos opciones coinciden con nuestros requisitos empresariales.These two options match our business requirements. El bloque de parámetros finalizado es similar a este ejemplo: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"
        }
    }
},

Regla de directivaPolicy rule

Elaborar la regla de directiva es el paso final en la creación de la definición de directiva personalizada.Composing the policy rule is the final step in building our custom policy definition. Se han identificado dos instrucciones con las que realizar la prueba:We've identified two statements to test for:

  • Que el tipo de la cuenta de almacenamiento es Microsoft.Storage/storageAccountsThat the storage account type is Microsoft.Storage/storageAccounts
  • Que la propiedad supportsHttpsTrafficOnly de la cuenta de almacenamiento no es trueThat the storage account supportsHttpsTrafficOnly isn't true

Como es necesario que ambas instrucciones sean true, se va a usar el operador lógico allOf.Since we need both of these statements to be true, we'll use the allOf logical operator. Se pasará el parámetro effectType al efecto en lugar de realizar una declaración estática.We'll pass the effectType parameter to the effect instead of making a static declaration. La regla finalizada se parece a la de este ejemplo: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')]"
}

Definición completadaCompleted definition

Con las tres partes de la directiva definidas, esta es la definición completada: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')]"
            }
        }
    }
}

La definición completada se puede usar para crear otra directiva.The completed definition can be used to create a new policy. El portal y cada SDK (la CLI de Azure, Azure PowerShell y API REST) aceptan la definición de diferentes formas, así que revise los comandos de cada una para validar el uso correcto.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. A continuación, asígnela, con el efecto parametrizado, a los recursos adecuados para administrar la seguridad de sus cuentas de almacenamiento.Then assign it, using the parameterized effect, to appropriate resources to manage the security of your storage accounts.

Limpieza de recursosClean up resources

Si terminó de trabajar con los recursos de este tutorial, use los pasos siguientes para eliminar todas las asignaciones y definiciones creadas anteriormente: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. Seleccione Definiciones (o Asignaciones si trata de eliminar una asignación) en Creación en el lado izquierdo de la página de Azure Policy.Select Definitions (or Assignments if you're trying to delete an assignment) under Authoring in the left side of the Azure Policy page.

  2. Busque la nueva definición de iniciativa o directiva (o asignación) que quiere quitar.Search for the new initiative or policy definition (or assignment) you want to remove.

  3. Haga clic con el botón derecho en la fila o seleccione los puntos suspensivos al final de la definición (o asignación) y elija Eliminar definición (o Eliminar asignación ).Right-click the row or select the ellipses at the end of the definition (or assignment), and select Delete definition (or Delete assignment).

RevisarReview

En este tutorial, ha realizado correctamente las tareas siguientes:In this tutorial, you successfully accomplished the following tasks:

  • Ha identificado los requisitos empresarialesIdentified your business requirements
  • Ha asignado a cada requisito una propiedad de recurso de AzureMapped each requirement to an Azure resource property
  • Ha asignado a la propiedad un aliasMapped the property to an alias
  • Ha determinado el efecto que se usaráDetermined the effect to use
  • Ha elaborado la definición de directivaComposed the policy definition

Pasos siguientesNext steps

A continuación, usará su definición de directiva personalizada para crear y asignar una directiva:Next, use your custom policy definition to create and assign a policy: