Öğretici: özel bir ilke tanımı oluşturmaTutorial: Create a custom policy definition

Özel bir ilke tanımı, müşterilerin Azure kullanımı için kendi kurallarını tanımlamasına olanak tanır.A custom policy definition allows customers to define their own rules for using Azure. Bu kurallar genellikle zorlanır:These rules often enforce:

  • Güvenlik uygulamalarıSecurity practices
  • Maliyet yönetimiCost management
  • Kuruluşa özgü kurallar (adlandırma veya konumlar gibi)Organization-specific rules (like naming or locations)

Özel bir ilke oluşturmak için iş sürücüsü ne olursa olsun, adımlar yeni özel ilkeyi tanımlamak için aynıdır.Whatever the business driver for creating a custom policy, the steps are the same for defining the new custom policy.

Özel bir ilke oluşturmadan önce, gereksinimlerinize uyan bir ilkenin zaten var olup olmadığını görmek için ilke örneklerine bakın.Before creating a custom policy, check the policy samples to see if a policy that matches your needs already exists.

Özel bir ilke oluşturmaya yönelik yaklaşım şu adımları izler:The approach to creating a custom policy follows these steps:

  • İş gereksinimlerinizi belirlemekIdentify your business requirements
  • Her gereksinimi bir Azure Kaynak özelliği ile eşleyinMap each requirement to an Azure resource property
  • Özelliği bir diğer ada eşleyinMap the property to an alias
  • Hangi etkiyi kullanacağınızı belirlemeDetermine which effect to use
  • İlke tanımını oluşturmaCompose the policy definition

Ön koşullarPrerequisites

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.If you don't have an Azure subscription, create a free account before you begin.

Gereksinimleri tanımlaIdentify requirements

İlke tanımını oluşturmadan önce, ilkenin amacını anlamak önemlidir.Before creating the policy definition, it's important to understand the intent of the policy. Bu öğreticide, ilgili adımları göstermek için hedef olarak ortak bir kurumsal güvenlik gereksinimi kullanacağız:For this tutorial, we'll use a common enterprise security requirement as the goal to illustrate the steps involved:

  • Her depolama hesabının HTTPS için etkinleştirilmesi gerekirEach storage account must be enabled for HTTPS
  • Her depolama hesabının HTTP için devre dışı bırakılması gerekirEach storage account must be disabled for HTTP

Gereksinimleriniz hem "yapılacak" hem de "değil" kaynak durumlarını açıkça tanımlamalıdır.Your requirements should clearly identify both the "to be" and the "not to be" resource states.

Kaynağın beklenen durumunu tanımladığımızda, uyumlu olmayan kaynaklarla yapıldığımız şeyleri henüz tanımlamadık.While we've defined the expected state of the resource, we've not yet defined what we want done with non-compliant resources. Azure Ilkesi, bir dizi efektidestekler.Azure Policy supports a number of effects. Bu öğreticide, iş kurallarıyla uyumlu olmadıkları takdirde kaynak oluşturulmasını önleyecek şekilde iş gereksinimini tanımlayacağız.For this tutorial, we'll define the business requirement as preventing the creation of resources if they aren't compliant with the business rules. Bu hedefi karşılamak için reddetme efektini kullanacağız.To meet this goal, we'll use the Deny effect. Ayrıca, belirli atamalar için ilkeyi askıya alma seçeneğini de istiyoruz.We also want the option to suspend the policy for specific assignments. Bu nedenle, devre dışı efekti kullanacağız ve ilke tanımında efekti bir parametre haline getirir.As such, we'll use the Disabled effect and make the effect a parameter in the policy definition.

Kaynak özelliklerini belirlemeDetermine resource properties

Azure Ilkesiyle denetlenecek Azure kaynağı, iş gereksinimine bağlı olarak bir depolama hesabıdır.Based on the business requirement, the Azure resource to audit with Azure Policy is a storage account. Ancak, ilke tanımında kullanılacak özellikleri bilmiyorum.However, we don't know the properties to use in the policy definition. Azure Ilkesi kaynağın JSON gösterimine göre değerlendirilir, bu nedenle söz konusu kaynakta kullanılabilen özellikleri anladık.Azure Policy evaluates against the JSON representation of the resource, so we'll need to understand the properties available on that resource.

Bir Azure kaynağı için özellikleri belirlemenin birçok yolu vardır.There are many ways to determine the properties for an Azure resource. Bu öğretici için her birine bakacağız:We'll look at each for this tutorial:

  • VS Code için Azure İlkesi uzantısıAzure Policy extension for VS Code
  • Azure Resource Manager şablonları (ARM şablonları)Azure Resource Manager templates (ARM templates)
    • Mevcut kaynağı dışarı aktarExport existing resource
    • Oluşturma deneyimiCreation experience
    • Hızlı başlangıç şablonları (GitHub)Quickstart templates (GitHub)
    • Şablon başvuru belgeleriTemplate reference docs
  • Azure Resource ManagerAzure Resource Explorer

VS Code uzantılı kaynakları görüntüleView resources in VS Code extension

Vs Code uzantısı , ortamınızdaki kaynaklara gözatıp her kaynak üzerinde Kaynak Yöneticisi özelliklerini görmenizi sağlamak için kullanılabilir.The VS Code extension can be used to browse resources in your environment and see the Resource Manager properties on each resource.

ARM şablonlarıARM templates

Yönetmek istediğiniz özelliği içeren bir ARM 'ye bakmak için birkaç yol vardır.There are several ways to look at an ARM that includes the property you're looking to manage.

Portalda mevcut kaynakExisting resource in the portal

Özellikleri bulmanın en kolay yolu, aynı türdeki mevcut bir kaynağa bakmanız.The simplest way to find properties is to look at an existing resource of the same type. Zorlamak istediğiniz ayarla önceden yapılandırılmış kaynaklar, karşılaştırılacak değeri de sağlar.Resources already configured with the setting you want to enforce also provide the value to compare against. Söz konusu kaynak için Azure portal şablonu dışarı aktar sayfasına ( Ayarlaraltında) bakın.Look at the Export template page (under Settings) in the Azure portal for that specific resource.

Uyarı

Azure portal tarafından dışarıya alınan ARM şablonu, deployment bir Deployifnotexists Ilke tanımındaki bir ARM şablonunun özelliğine doğrudan takılıdır.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.

Azure portal içindeki mevcut bir kaynaktaki şablonu dışarı aktar sayfasının ekran görüntüsü.

Bunu bir depolama hesabı için yapmak, bu örneğe benzer bir şablonu ortaya çıkarır: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": []
}]
...

Özellikler altında, supportsHttpsTrafficOnly adlı bir değer falseolarak ayarlanır.Under properties is a value named supportsHttpsTrafficOnly set to false. Bu özellik, aradığınız özellik gibi görünüyor.This property looks like it may be the property we're looking for. Ayrıca, kaynağın türü Microsoft. Storage/storageaccountsolur.Also, the type of the resource is Microsoft.Storage/storageAccounts. Tür, ilkeyi yalnızca bu türdeki kaynaklarla sınırlandırmamızı sağlar.The type lets us limit the policy to only resources of this type.

Portalda kaynak oluşturmaCreate a resource in the portal

Portal aracılığıyla başka bir yöntem de kaynak oluşturma deneyimidir.Another way through the portal is the resource creation experience. Portal aracılığıyla bir depolama hesabı oluştururken, Gelişmiş sekmesinde güvenlik aktarımı gereklideğildir.While creating a storage account through the portal, an option under the Advanced tab is Security transfer required. Bu özellik devre dışı ve etkin seçeneklere sahiptir.This property has Disabled and Enabled options. Bilgi simgesi, bu seçeneği doğrulayan ek metnin büyük olasılıkla istediğiniz özelliği olduğunu onaylar.The info icon has additional text that confirms this option is likely the property we want. Ancak, Portal bu ekrandaki özellik adını bize söylemez.However, the portal doesn't tell us the property name on this screen.

Gözden geçir + oluştur sekmelerinde, Otomasyon Için bir şablon indirmekiçin sayfanın alt kısmında bir bağlantı bulunur.On the Review + create tab, a link is at the bottom of the page to Download a template for automation. Bağlantıyı seçmek, yapılandırdığımız kaynağı oluşturan şablonu açar.Selecting the link opens the template that creates the resource we configured. Bu durumda, iki temel bilgi parçası görüyoruz:In this case, we see two key pieces of information:

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

Bu bilgiler bize Özellik türünü söyler ve ayrıca supportsHttpsTrafficOnly , ardığımız özelliktir.This information tells us the property type and also confirms supportsHttpsTrafficOnly is the property we're looking for.

GitHub 'daki hızlı başlangıç şablonlarıQuickstart templates on GitHub

GitHub 'daki Azure hızlı başlangıç şablonlarında , farklı kaynaklar için oluşturulmuş yüzlerce ARM şablonu vardır.The Azure quickstart templates on GitHub has hundreds of ARM templates built for different resources. Bu şablonlar, Aradığınız kaynak özelliğini bulmanın harika bir yolu olabilir.These templates can be a great way to find the resource property you're looking for. Bazı özellikler aradığınız şey gibi görünebilir, ancak başka bir şeyi de kontrol edebilirsiniz.Some properties may appear to be what you're looking for, but control something else.

Kaynak başvuru belgeleriResource reference docs

SupportsHttpsTrafficOnly 'ın doğru olduğunu doğrulamak için depolama sağlayıcısı üzerindeki depolama HESABı kaynağı için ARM şablonu başvurusunu kontrol edin.To validate supportsHttpsTrafficOnly is correct property, check the ARM template reference for the storage account resource on the storage provider. Properties nesnesi geçerli parametrelerin bir listesini içerir.The properties object has a list of valid parameters. Storageaccountpropertiescreateparameters-Object bağlantısına seçilirse, kabul edilebilir özelliklerden oluşan bir tablo gösterilir.Selecting the StorageAccountPropertiesCreateParameters-object link shows a table of acceptable properties. supportsHttpsTrafficOnly mevcuttur ve açıklama, iş gereksinimlerini karşılayacak şekilde aradığımızda eşleşir.supportsHttpsTrafficOnly is present and the description matches what we are looking for to meet the business requirements.

Azure Resource ManagerAzure Resource Explorer

Azure kaynaklarınızı keşfetmeye yönelik başka bir yol da Azure Kaynak Gezgini (Önizleme).Another way to explore your Azure resources is through the Azure Resource Explorer (Preview). Bu araç, aboneliğinizin bağlamını kullanır, bu nedenle web sitesinde Azure kimlik bilgilerinizle kimlik doğrulaması yapmanız gerekir.This tool uses the context of your subscription, so you need to authenticate to the website with your Azure credentials. Kimliği doğrulandıktan sonra, sağlayıcılara, aboneliklere, kaynak gruplarına ve kaynaklara göre gezinebilirsiniz.Once authenticated, you can browse by providers, subscriptions, resource groups, and resources.

Bir depolama hesabı kaynağı bulun ve özelliklerine bakın.Locate a storage account resource and look at the properties. Burada supportsHttpsTrafficOnly özelliği de görüyoruz.We see the supportsHttpsTrafficOnly property here as well. Belge sekmesini seçtiğinizde, özellik açıklamasının daha önce başvuru belgelerinde bulduğumuz ile eşleştiğini görüyoruz.Selecting the Documentation tab, we see that the property description matches what we found in the reference docs earlier.

Özellik diğer adını bulFind the property alias

Kaynak özelliği tanımlandık, ancak bu özelliği bir diğer adlaeşleştirmemiz gerekiyor.We've identified the resource property, but we need to map that property to an alias.

Bir Azure kaynağı için diğer adları belirlemenin birkaç yolu vardır.There are a few ways to determine the aliases for an Azure resource. Bu öğretici için her birine bakacağız:We'll look at each for this tutorial:

  • VS Code için Azure İlkesi uzantısıAzure Policy extension for VS Code
  • Azure CLIAzure CLI
  • Azure PowerShellAzure PowerShell
  • Azure Kaynak GrafiğiAzure Resource Graph

VS Code uzantılı diğer adları alGet aliases in VS Code extension

VS Code uzantısının Azure Ilke uzantısı, kaynaklarınıza gözatmayı ve diğer adları bulmayıkolaylaştırır.The Azure Policy extension for VS Code extension makes it easy to browse your resources and discover aliases.

Not

VS Code uzantısı yalnızca Kaynak Yöneticisi modu özelliklerini gösterir ve herhangi bir kaynak sağlayıcısı modu özelliği görüntülemez.The VS Code extension only exposes Resource Manager mode properties and doesn't display any Resource Provider mode properties.

Azure CLIAzure CLI

Azure CLı 'da, az provider komut grubu kaynak diğer adlarını aramak için kullanılır.In Azure CLI, the az provider command group is used to search for resource aliases. Daha önce Azure kaynağı hakkında aldık ayrıntıları temel alarak Microsoft. Storage ad alanını filtreleyeceğiz.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"

Sonuçlarda, supportsHttpsTrafficOnlyadlı depolama hesapları tarafından desteklenen bir diğer ad görüyoruz.In the results, we see an alias supported by the storage accounts named supportsHttpsTrafficOnly. Bu diğer adın varlığı, iş gereksinimlerinizi zorlayabilmemiz için ilkeyi yazabildiğimiz anlamına gelir!This existence of this alias means we can write the policy to enforce our business requirements!

Azure PowerShellAzure PowerShell

Azure PowerShell, cmdlet, Get-AzPolicyAlias kaynak diğer adlarını aramak için kullanılır.In Azure PowerShell, the Get-AzPolicyAlias cmdlet is used to search for resource aliases. Daha önce Azure kaynağı hakkında aldık ayrıntıları temel alarak Microsoft. Storage ad alanını filtreleyeceğiz.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

Azure CLı gibi sonuçlar, supportsHttpsTrafficOnlyadlı depolama hesapları tarafından desteklenen bir diğer ad gösterir.Like Azure CLI, the results show an alias supported by the storage accounts named supportsHttpsTrafficOnly.

Azure Kaynak GrafiğiAzure Resource Graph

Azure Kaynak Grafiği , Azure kaynaklarının özelliklerini bulmak için başka bir yöntem sağlayan bir hizmettir.Azure Resource Graph is a service that provides another method to find properties of Azure resources. Kaynak grafiğine sahip tek bir depolama hesabına bakmak için örnek bir sorgu aşağıda verilmiştir: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"

Sonuçlar, ARM şablonlarında görtiğimiz ve Azure Kaynak Gezgini aracılığıyla benzer şekilde görünür.The results look similar to what we see in the ARM templates and through the Azure Resource Explorer. Bununla birlikte, Azure Kaynak Grafiği sonuçları, diğer adlar dizisinin yansıtılasında diğer ad ayrıntıları da içerebilir: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"

Diğer adlar için bir depolama hesabından örnek çıktı aşağıda verilmiştir: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 Kaynak Grafiği Cloud Shellaracılığıyla kullanılabilir, bu sayede kaynaklarınızın özelliklerini keşfetmeye yönelik hızlı ve kolay bir yol haline gelir.Azure Resource Graph can be used through Cloud Shell, making it a fast and easy way to explore the properties of your resources.

Kullanılacak etkiyi belirlemeDetermine the effect to use

Uyumlu olmayan kaynaklarınız için ne olacağına karar vermek, ilk yerde değerlendirileceğine karar verirken neredeyse önemli bir şeydir.Deciding what to do with your non-compliant resources is nearly as important as deciding what to evaluate in the first place. Uyumlu olmayan bir kaynağa yönelik olası her yanıta bir efektdenir.Each possible response to a non-compliant resource is called an effect. Bu efekt, uyumlu olmayan kaynağın günlüğe kaydedilmesini, engellenip engellenmediğini, verilerin eklenmiş olduğunu veya kaynağın uyumlu duruma geri yerleştirilmesi için kendisiyle ilişkili bir dağıtıma sahip olup olmadığını denetler.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.

Bizim örneğimizde, reddetme, Azure ortamımızda uyumlu olmayan kaynaklar oluşturulmasını istemediğimiz için, istiyoruz.For our example, Deny is the effect we want as we don't want non-compliant resources created in our Azure environment. Denetim, ilke efektinin, bir ilkenin ne kadar etkili olduğunu belirlemek için ne kadar etkili olduğunu belirlemek için iyi bir seçenektir.Audit is a good first choice for a policy effect to determine what the impact of a policy is before setting it to Deny. Atama başına etkiyi değiştirmenin bir yolu, etkiyi parametreleştirmek olacaktır.One way to make changing the effect per assignment easier is to parameterize the effect. Ayrıntıları hakkında daha fazla bilgi için aşağıdaki parametrelere bakın.See parameters below for the details on how.

Tanımı oluşturCompose the definition

Artık, yönetmeyi planladığımız özellikler için özellik ayrıntıları ve diğer ad vardır.We now have the property details and alias for what we plan to manage. Ardından, ilke kuralının kendisini oluşturacağız.Next, we'll compose the policy rule itself. İlke dilini henüz bilmiyorsanız, ilke tanımını nasıl yapılandıracağınıza yönelik başvuru ilke tanımı yapısı .If you aren't yet familiar with the policy language, reference policy definition structure for how to structure the policy definition. Aşağıda, ilke tanımının neye benzediklerine ait boş bir şablon verilmiştir: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>"
            }
        }
    }
}

Meta veriMetadata

İlk üç bileşen ilke meta verilersidir.The first three components are policy metadata. Bu bileşenlerin, için kural oluşturduğumuz öğrendiğimiz için değerleri sağlaması kolaydır.These components are easy to provide values for since we know what we are creating the rule for. Mod öncelikli olarak Etiketler ve kaynak konumu ile ilgilidir.Mode is primarily about tags and resource location. Etiketleri destekleyen kaynaklarla değerlendirmeyi sınırlandırmaya gerek olmadığı için, modiçin Tüm değeri kullanacağız.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",

ParametrelerParameters

Değerlendirmeyi değiştirmek için bir parametre kullanmadığımızda, sorun giderme için etkiyi değiştirmeye izin vermek üzere bir parametre kullanmak istiyoruz.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. Bir bir bir bir bir bir bir bir bir bir bir bir bir Deny parametre tanımlayacağız DisabledWe'll define an effectType parameter and limit it to only Deny and Disabled. Bu iki seçenek iş gereksinimlerimizle eşleşir.These two options match our business requirements. Tamamlanan parametreler bloğu Şu örneğe benzer şekilde görünür: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"
        }
    }
},

İlke kuralıPolicy rule

İlke kuralını oluşturma işlemi, özel ilke tanımımızı oluşturmanın son adımıdır.Composing the policy rule is the final step in building our custom policy definition. Test etmek için iki deyim belirledik:We've identified two statements to test for:

  • Depolama hesabı türü Microsoft. Storage/storageaccountsThat the storage account type is Microsoft.Storage/storageAccounts
  • SupportsHttpsTrafficOnly depolama hesabı doğru değilThat the storage account supportsHttpsTrafficOnly isn't true

Bu deyimlerin her ikisinin de doğru olması gerektiğinden, allof Logical işlecinikullanacağız.Since we need both of these statements to be true, we'll use the allOf logical operator. Bir statik bildirim yapmak yerine, etkikiz parametresini etkiye geçireceğiz.We'll pass the effectType parameter to the effect instead of making a static declaration. Tamamlanan kuralımız Şu örneğe benzer şekilde görünür: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')]"
}

Tamamlandı tanımıCompleted definition

İlkenin üç bölümü tanımlanmış olarak, tamamlanma tanımımız şu şekildedir: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')]"
            }
        }
    }
}

Tamamlanan tanım yeni bir ilke oluşturmak için kullanılabilir.The completed definition can be used to create a new policy. Portal ve her SDK (Azure CLı, Azure PowerShell ve REST API) tanımı farklı yollarla kabul eder, bu nedenle doğru kullanımı doğrulamak için her birine yönelik komutları gözden geçirin.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. Daha sonra, depolama hesaplarınızın güvenliğini yönetmek için parametreli etkiyi kullanarak uygun kaynaklara göre atayın.Then assign it, using the parameterized effect, to appropriate resources to manage the security of your storage accounts.

Kaynakları temizlemeClean up resources

Bu öğreticideki kaynaklarla çalışmayı bitirdiğinizde, yukarıda oluşturulan atamalardan veya tanımlardan birini silmek için aşağıdaki adımları kullanın: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. Azure Ilkesi sayfasının sol tarafında yazma ' nın altında tanımlar (veya atamayı silmeye çalışıyorsanız atamalar ) ' ı seçin.Select Definitions (or Assignments if you're trying to delete an assignment) under Authoring in the left side of the Azure Policy page.

  2. Kaldırmak istediğiniz yeni girişim veya tanımını (ya da atamayı) arayın.Search for the new initiative or policy definition (or assignment) you want to remove.

  3. Satıra sağ tıklayın ya da tanımın (veya atamanın) sonundaki üç noktayı seçip Tanımı sil (veya Atamayı sil) öğesini seçin.Right-click the row or select the ellipses at the end of the definition (or assignment), and select Delete definition (or Delete assignment).

Gözden geçirmeReview

Bu öğreticide, aşağıdaki görevleri başarıyla gerçekleştirdiniz:In this tutorial, you successfully accomplished the following tasks:

  • İş gereksinimlerinizi tanımladıIdentified your business requirements
  • Her gereksinimi bir Azure Kaynak özelliği ile eşlendiMapped each requirement to an Azure resource property
  • Özelliği bir diğer ada eşlendiMapped the property to an alias
  • Kullanım efektinin belirlenmesiDetermined the effect to use
  • İlke tanımı oluşturulmuşComposed the policy definition

Sonraki adımlarNext steps

Ardından, ilke oluşturmak ve atamak için özel ilke tanımınızı kullanın:Next, use your custom policy definition to create and assign a policy: