Programlı olarak ilkeler oluşturmaProgrammatically create policies

Bu makale, ilkeleri programlı olarak oluşturma ve yönetme konusunda size kılavuzluk eder.This article walks you through programmatically creating and managing policies. Azure Ilke tanımları, kaynaklarınız üzerinde farklı kurallar ve etkiler uygular.Azure Policy definitions enforce different rules and effects over your resources. Zorlama, kaynakların kurumsal standartlarınız ve hizmet düzeyi Sözleşmelerinizle uyumlu kalmasını sağlar.Enforcement makes sure that resources stay compliant with your corporate standards and service level agreements.

Uyumluluk hakkında daha fazla bilgi için bkz. Uyumluluk verileri alma.For information about compliance, see getting compliance data.

Ön koşullarPrerequisites

Başlamadan önce, aşağıdaki önkoşulların karşılandığından emin olun:Before you begin, make sure that the following prerequisites are met:

  1. Henüz yapmadıysanız ARMClient’ı yükleyin.If you haven't already, install the ARMClient. Bu, HTTP isteklerini Azure Resource Manager tabanlı API’lere gönderen bir araçtır.It's a tool that sends HTTP requests to Azure Resource Manager-based APIs.

  2. Azure PowerShell modülünüzü en son sürüme güncelleştirin.Update your Azure PowerShell module to the latest version. Ayrıntılı bilgi için bkz. Azure PowerShell modülünü Install .See Install Azure PowerShell module for detailed information. En son sürüm hakkında daha fazla bilgi için bkz. Azure PowerShell.For more information about the latest version, see Azure PowerShell.

  3. Aboneliğinizin kaynak sağlayıcısıyla birlikte çalışıp çalışmadığını doğrulamak için Azure PowerShell kullanarak Azure Policy Insights kaynak sağlayıcısını kaydedin.Register the Azure Policy Insights resource provider using Azure PowerShell to validate that your subscription works with the resource provider. Bir kaynak sağlayıcısını kaydetmek için, kaynak sağlayıcısı için kaydetme eylemi işlemini çalıştırma izninizin olması gerekir.To register a resource provider, you must have permission to run the register action operation for the resource provider. Bu işlem, Katkıda Bulunan ve Sahip rolleriyle birlikte sunulur.This operation is included in the Contributor and Owner roles. Aşağıdaki komutu çalıştırarak kaynak sağlayıcısını kaydedin:Run the following command to register the resource provider:

    Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
    

    Kaynak sağlayıcılarını kaydetme ve görüntüleme hakkında daha fazla bilgi için bkz. kaynak sağlayıcıları ve türleri.For more information about registering and viewing resource providers, see Resource Providers and Types.

  4. Henüz yapmadıysanız Azure CLı 'yı yükleyemezsiniz.If you haven't already, install Azure CLI. Windows 'Da Azure CLI 'Yı yüklemeyeen son sürümü edinebilirsiniz.You can get the latest version at Install Azure CLI on Windows.

İlke tanımı oluşturma ve atamaCreate and assign a policy definition

Kaynaklarınızın daha iyi görünürlüğüne yönelik ilk adım, kaynaklarınız üzerinde ilkeler oluşturmak ve atamak.The first step toward better visibility of your resources is to create and assign policies over your resources. Bir sonraki adım, programlı olarak bir ilke oluşturma ve atamayı öğrenirsiniz.The next step is to learn how to programmatically create and assign a policy. Örnek ilke, PowerShell, Azure CLı ve HTTP istekleri kullanılarak tüm ortak ağlarda açık olan depolama hesaplarını denetler.The example policy audits storage accounts that are open to all public networks using PowerShell, Azure CLI, and HTTP requests.

PowerShell ile ilke tanımı oluşturma ve atamaCreate and assign a policy definition with PowerShell

  1. AuditStorageAccounts.jsadında bir JSON dosyası oluşturmak için aşağıdaki JSON kod parçacığını kullanın.Use the following JSON snippet to create a JSON file with the name AuditStorageAccounts.json.

    {
        "if": {
            "allOf": [{
                    "field": "type",
                    "equals": "Microsoft.Storage/storageAccounts"
                },
                {
                    "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction",
                    "equals": "Allow"
                }
            ]
        },
        "then": {
            "effect": "audit"
        }
    }
    

    İlke tanımı yazma hakkında daha fazla bilgi için bkz. Azure Ilke tanımı yapısı.For more information about authoring a policy definition, see Azure Policy Definition Structure.

  2. AuditStorageAccounts.jsdosyasını kullanarak bir ilke tanımı oluşturmak için aşağıdaki komutu çalıştırın.Run the following command to create a policy definition using the AuditStorageAccounts.json file.

    New-AzPolicyDefinition -Name 'AuditStorageAccounts' -DisplayName 'Audit Storage Accounts Open to Public Networks' -Policy 'AuditStorageAccounts.json'
    

    Komut, ortak ağlarda açık olan denetim depolama hesapları adlı bir ilke tanımı oluşturur.The command creates a policy definition named Audit Storage Accounts Open to Public Networks. Kullanabileceğiniz diğer parametreler hakkında daha fazla bilgi için, bkz. New-AzPolicyDefinition.For more information about other parameters that you can use, see New-AzPolicyDefinition.

    Konum parametreleri olmadan çağrıldığında, New-AzPolicyDefinition Varsayılan olarak ilke tanımını oturum bağlamının seçili aboneliğine kaydetme varsayılan değeri.When called without location parameters, New-AzPolicyDefinition defaults to saving the policy definition in the selected subscription of the sessions context. Tanımı farklı bir konuma kaydetmek için aşağıdaki parametreleri kullanın:To save the definition to a different location, use the following parameters:

    • SubscriptionID -farklı bir aboneliğe kaydedin.SubscriptionId - Save to a different subscription. Bir GUID değeri gerektirir.Requires a GUID value.
    • ManagementGroupName -bir yönetim grubuna kaydedin.ManagementGroupName - Save to a management group. Bir dize değeri gerektirir.Requires a string value.
  3. İlke tanımınızı oluşturduktan sonra, aşağıdaki komutları çalıştırarak bir ilke ataması oluşturabilirsiniz:After you create your policy definition, you can create a policy assignment by running the following commands:

    $rg = Get-AzResourceGroup -Name 'ContosoRG'
    $Policy = Get-AzPolicyDefinition -Name 'AuditStorageAccounts'
    New-AzPolicyAssignment -Name 'AuditStorageAccounts' -PolicyDefinition $Policy -Scope $rg.ResourceId
    

    ContosoRG değerini amaçlanan kaynak grubunuzun adıyla değiştirin.Replace ContosoRG with the name of your intended resource group.

    ' Deki kapsam parametresi, New-AzPolicyAssignment Yönetim grubu, abonelik, kaynak grubu veya tek bir kaynakla birlikte geçerlidir.The Scope parameter on New-AzPolicyAssignment works with management group, subscription, resource group, or a single resource. Parametresi RESOURCEID özelliğinin döndürdüğü tam kaynak yolunu kullanır Get-AzResourceGroup .The parameter uses a full resource path, which the ResourceId property on Get-AzResourceGroup returns. Her kapsayıcının kapsam için olan model aşağıdaki gibidir.The pattern for Scope for each container is as follows. ,,, Ve ' ı {rName} {rgName} {subId} {mgName} kaynak adı, kaynak grubu adı, abonelik kimliği ve yönetim grubu adıyla değiştirin.Replace {rName}, {rgName}, {subId}, and {mgName} with your resource name, resource group name, subscription ID, and management group name, respectively. {rType} kaynağın kaynak türüyle (örneğin, Microsoft.Compute/virtualMachines bir VM için) değiştirilmelidir.{rType} would be replaced with the resource type of the resource, such as Microsoft.Compute/virtualMachines for a VM.

    • Kaynak /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}Resource - /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Kaynak grubu- /subscriptions/{subId}/resourceGroups/{rgName}Resource group - /subscriptions/{subId}/resourceGroups/{rgName}
    • Aboneliğiniz /subscriptions/{subId}Subscription - /subscriptions/{subId}
    • Yönetim grubu- /providers/Microsoft.Management/managementGroups/{mgName}Management group - /providers/Microsoft.Management/managementGroups/{mgName}

Kaynak Yöneticisi PowerShell modülünü kullanarak kaynak ilkelerini yönetme hakkında daha fazla bilgi için bkz. az. resources.For more information about managing resource policies using the Resource Manager PowerShell module, see Az.Resources.

ARMClient kullanarak ilke tanımı oluşturma ve atamaCreate and assign a policy definition using ARMClient

Bir ilke tanımı oluşturmak için aşağıdaki yordamı kullanın.Use the following procedure to create a policy definition.

  1. JSON dosyası oluşturmak için aşağıdaki JSON kod parçacığını kopyalayın.Copy the following JSON snippet to create a JSON file. Sonraki adımda dosyayı çağıracaksınız.You'll call the file in the next step.

    "properties": {
        "displayName": "Audit Storage Accounts Open to Public Networks",
        "policyType": "Custom",
        "mode": "Indexed",
        "description": "This policy ensures that storage accounts with exposure to Public Networks are audited.",
        "parameters": {},
        "policyRule": {
            "if": {
                "allOf": [{
                        "field": "type",
                        "equals": "Microsoft.Storage/storageAccounts"
                    },
                    {
                        "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction",
                        "equals": "Allow"
                    }
                ]
            },
            "then": {
                "effect": "audit"
            }
        }
    }
    
  2. Aşağıdaki çağrılardan birini kullanarak ilke tanımını oluşturun:Create the policy definition using one of the following calls:

    # For defining a policy in a subscription
    armclient PUT "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyDefinitions/AuditStorageAccounts?api-version=2019-09-01" @<path to policy definition JSON file>
    
    # For defining a policy in a management group
    armclient PUT "/providers/Microsoft.Management/managementgroups/{managementGroupId}/providers/Microsoft.Authorization/policyDefinitions/AuditStorageAccounts?api-version=2019-09-01" @<path to policy definition JSON file>
    

    Önceki {SubscriptionID} öğesini aboneliğinizin KIMLIĞIYLE veya {ManagementGroupId} yerine Yönetim GRUBUNUZUNkimliğiyle değiştirin.Replace the preceding {subscriptionId} with the ID of your subscription or {managementGroupId} with the ID of your management group.

    Sorgunun yapısı hakkında daha fazla bilgi için bkz. Azure Ilke tanımları – oluşturma veya güncelleştirme ve Ilke tanımları – Yönetim grubunda Oluştur veya GüncelleştirFor more information about the structure of the query, see Azure Policy Definitions – Create or Update and Policy Definitions – Create or Update At Management Group

Bir ilke ataması oluşturmak ve ilke tanımını kaynak grubu düzeyinde atamak için aşağıdaki yordamı kullanın.Use the following procedure to create a policy assignment and assign the policy definition at the resource group level.

  1. JSON ilke atama dosyası oluşturmak için aşağıdaki JSON kod parçacığını kopyalayın.Copy the following JSON snippet to create a JSON policy assignment file. Semboller içindeki örnek bilgileri < > kendi değerlerinizle değiştirin.Replace example information in <> symbols with your own values.

    {
        "properties": {
            "description": "This policy assignment makes sure that storage accounts with exposure to Public Networks are audited.",
            "displayName": "Audit Storage Accounts Open to Public Networks Assignment",
            "parameters": {},
            "policyDefinitionId": "/subscriptions/<subscriptionId>/providers/Microsoft.Authorization/policyDefinitions/Audit Storage Accounts Open to Public Networks",
            "scope": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>"
        }
    }
    
  2. Aşağıdaki çağrıyı kullanarak ilke atamasını oluşturun:Create the policy assignment using the following call:

    armclient PUT "/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Authorization/policyAssignments/Audit Storage Accounts Open to Public Networks?api-version=2019-09-01" @<path to Assignment JSON file>
    

    Semboller içindeki örnek bilgileri < > kendi değerlerinizle değiştirin.Replace example information in <> symbols with your own values.

    REST API HTTP çağrıları yapma hakkında daha fazla bilgi için bkz. Azure REST API kaynakları.For more information about making HTTP calls to the REST API, see Azure REST API Resources.

Azure CLı ile ilke tanımı oluşturma ve atamaCreate and assign a policy definition with Azure CLI

Bir ilke tanımı oluşturmak için aşağıdaki yordamı kullanın:To create a policy definition, use the following procedure:

  1. JSON ilke atama dosyası oluşturmak için aşağıdaki JSON kod parçacığını kopyalayın.Copy the following JSON snippet to create a JSON policy assignment file.

    {
        "if": {
            "allOf": [{
                    "field": "type",
                    "equals": "Microsoft.Storage/storageAccounts"
                },
                {
                    "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction",
                    "equals": "Allow"
                }
            ]
        },
        "then": {
            "effect": "audit"
        }
    }
    

    İlke tanımı yazma hakkında daha fazla bilgi için bkz. Azure Ilke tanımı yapısı.For more information about authoring a policy definition, see Azure Policy Definition Structure.

  2. Bir ilke tanımı oluşturmak için aşağıdaki komutu çalıştırın:Run the following command to create a policy definition:

    az policy definition create --name 'audit-storage-accounts-open-to-public-networks' --display-name 'Audit Storage Accounts Open to Public Networks' --description 'This policy ensures that storage accounts with exposures to public networks are audited.' --rules '<path to json file>' --mode All
    

    Komut, ortak ağlarda açık olan denetim depolama hesapları adlı bir ilke tanımı oluşturur.The command creates a policy definition named Audit Storage Accounts Open to Public Networks. Kullanabileceğiniz diğer parametreler hakkında daha fazla bilgi için, bkz. az Policy Definition Create.For more information about other parameters that you can use, see az policy definition create.

    Konum parametreleri olmadan çağrıldığında, az policy definition creation Varsayılan olarak ilke tanımını oturum bağlamının seçili aboneliğine kaydetme varsayılan değeri.When called without location parameters, az policy definition creation defaults to saving the policy definition in the selected subscription of the sessions context. Tanımı farklı bir konuma kaydetmek için aşağıdaki parametreleri kullanın:To save the definition to a different location, use the following parameters:

    • abonelik -farklı bir aboneliğe kaydedin.subscription - Save to a different subscription. Abonelik KIMLIĞI için bir GUID değeri veya abonelik adı için bir dize değeri gerektirir.Requires a GUID value for the subscription ID or a string value for the subscription name.
    • Yönetim-grup -bir yönetim grubuna kaydedin.management-group - Save to a management group. Bir dize değeri gerektirir.Requires a string value.
  3. Bir ilke ataması oluşturmak için aşağıdaki komutu kullanın.Use the following command to create a policy assignment. Semboller içindeki örnek bilgileri < > kendi değerlerinizle değiştirin.Replace example information in <> symbols with your own values.

    az policy assignment create --name '<name>' --scope '<scope>' --policy '<policy definition ID>'
    

    ' Deki kapsam parametresi, az policy assignment create Yönetim grubu, abonelik, kaynak grubu veya tek bir kaynakla birlikte geçerlidir.The scope parameter on az policy assignment create works with management group, subscription, resource group, or a single resource. Parametresi tam kaynak yolunu kullanır.The parameter uses a full resource path. Her kapsayıcının kapsam için olan model aşağıdaki gibidir.The pattern for scope for each container is as follows. ,,, Ve ' ı {rName} {rgName} {subId} {mgName} kaynak adı, kaynak grubu adı, abonelik kimliği ve yönetim grubu adıyla değiştirin.Replace {rName}, {rgName}, {subId}, and {mgName} with your resource name, resource group name, subscription ID, and management group name, respectively. {rType} kaynağın kaynak türüyle (örneğin, Microsoft.Compute/virtualMachines bir VM için) değiştirilmelidir.{rType} would be replaced with the resource type of the resource, such as Microsoft.Compute/virtualMachines for a VM.

    • Kaynak /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}Resource - /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Kaynak grubu- /subscriptions/{subID}/resourceGroups/{rgName}Resource group - /subscriptions/{subID}/resourceGroups/{rgName}
    • Aboneliğiniz /subscriptions/{subID}Subscription - /subscriptions/{subID}
    • Yönetim grubu- /providers/Microsoft.Management/managementGroups/{mgName}Management group - /providers/Microsoft.Management/managementGroups/{mgName}

Aşağıdaki komutla PowerShell kullanarak Azure Ilke tanımı KIMLIĞI ' ni edinebilirsiniz:You can get the Azure Policy Definition ID by using PowerShell with the following command:

az policy definition show --name 'Audit Storage Accounts with Open Public Networks'

Oluşturduğunuz ilke tanımının ilke tanımı KIMLIĞI aşağıdaki örneğe benzemelidir:The policy definition ID for the policy definition that you created should resemble the following example:

"/subscription/<subscriptionId>/providers/Microsoft.Authorization/policyDefinitions/Audit Storage Accounts Open to Public Networks"

Azure CLı ile kaynak ilkelerini yönetme hakkında daha fazla bilgi için bkz. Azure CLI kaynak ilkeleri.For more information about how you can manage resource policies with Azure CLI, see Azure CLI Resource Policies.

Sonraki adımlarNext steps

Bu makaledeki komutlar ve sorgular hakkında daha fazla bilgi için aşağıdaki makalelere göz atın.Review the following articles for more information about the commands and queries in this article.