Öğretici: Özel ilke tanımı oluşturma

Özel ilke tanımı, müşterilerin Azure'ı kullanmak için kendi kurallarını tanımlamalarına olanak sağlar. Bu kurallar genellikle şunları zorunlu kılın:

  • Güvenlik uygulamaları
  • Maliyet yönetimi
  • Kuruluşa özgü kurallar (adlandırma veya konumlar gibi)

Özel ilke oluşturmak için iş sürücüsü ne olursa olsun, yeni özel ilkeyi tanımlamak için adımlar aynıdır.

Özel ilke oluşturmadan önce, ihtiyaçlarınıza uygun bir ilkenin zaten mevcut olup olmadığını görmek için ilke örneklerini kontrol edin.

Özel ilke oluşturma yaklaşımı şu adımları izler:

  • İş gereksinimlerinizi belirleme
  • Her gereksinimi bir Azure kaynak özelliğiyle eşleme
  • Özelliği diğer adla eşleme
  • Hangi etkinin kullanılamayacaklarını belirleme
  • İlke tanımını oluşturma

Ön koşullar

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Gereksinimleri tanımlama

İlke tanımını oluşturmadan önce ilkenin amacını anlamak önemlidir. Bu öğreticide, söz konusu adımları gösterme hedefi olarak ortak bir kurumsal güvenlik gereksinimi kullanacağız:

  • Her depolama hesabının HTTPS için etkinleştirilmesi gerekir
  • HTTP için her depolama hesabının devre dışı bırakılmıştır

Gereksinimleriniz hem "olmak" hem de "olmak değil" kaynak durumlarını net bir şekilde tanımlamalıdır.

Kaynağın beklenen durumunu tanımladık ancak uyumlu olmayan kaynaklarla yapmak istediğiniz şeyi henüz tanımladık. Azure İlkesi birçok etkiyi destekler. Bu öğreticide iş gereksinimini, iş kurallarıyla uyumlu olmayan kaynakların oluşturulmasını önleyen olarak tanımlayacağız. Bu hedefi karşılamak için Reddet etkisini kullan kullanıriz. Ayrıca, ilkeyi belirli atamalar için askıya alma seçeneğini de kullanabilirsiniz. Bu nedenle Devre Dışı etkisini kullanarak etkiyi ilke tanımında bir parametre olarak kullan edeceğiz.

Kaynak özelliklerini belirleme

İş gereksinimine bağlı olarak, Azure İlkesi azure kaynağı bir depolama hesabıdır. Ancak, ilke tanımında kullanmak için özellikleri bilmiyorum. Azure İlkesi, kaynağın JSON gösterimine göre değerlendirilir, bu nedenle bu kaynakta kullanılabilen özellikleri anlamamız gerekir.

Azure kaynağının özelliklerini belirlemenin birçok yolu vardır. Bu öğretici için her bire bir göz atarak:

  • VS Code için Azure İlkesi uzantısı
  • Azure Resource Manager şablonları (ARM şablonları)
    • Mevcut kaynağı dışarı aktarma
    • Oluşturma deneyimi
    • Hızlı başlangıç şablonları (GitHub)
    • Şablon başvuru belgeleri
  • Azure Resource Manager

Kaynak uzantısında VS Code görüntüleme

VS Code uzantısı, ortamınız içinde kaynaklara göz atmak ve her bir kaynakta Resource Manager özelliklerini görmek için kullanılabilir.

ARM şablonları

Yönetmek istediğiniz özelliği içeren bir ARM şablonuna bakmanın birkaç yolu vardır.

Portalda mevcut kaynak

Özellikleri bulmanın en basit yolu, aynı türde mevcut bir kaynağa bakmaktır. Uygulamak istediğiniz ayarla zaten yapılandırılmış olan kaynaklar, karşılaştırılan değeri de sağlar. Şablonu dışarı aktar sayfasındaki (Ayarlar altında) Azure portal ilgili kaynağa bakın.

Uyarı

Uygulama tarafından dışarı Azure portal ARM şablonu, deployment deployIfNotExists ilke tanımında arm şablonunun özelliğine doğrudan eklanamaz.

Azure portal'de var olan bir kaynakta yer alan Şablonu dışarı Azure portal.

Depolama hesabı için bunu yapmak, aşağıdaki örnektekine benzer bir şablon ortaya çıkar:

...
"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 olarak false olarak ayarlanmış adlı bir değer yer alır. Bu özellik, bizim için bir özellik gibi görünüyor. Ayrıca kaynağın türü Microsoft.Depolama/storageAccounts'tır. Türü, ilkeyi yalnızca bu tür kaynaklarıyla sınırlamamıza olanak sağlar.

Portalda kaynak oluşturma

Portalın bir diğer yolu da kaynak oluşturma deneyimidir. Portal üzerinden bir depolama hesabı oluştururken Gelişmiş sekmesinin altındaki bir seçenek, Güvenlik aktarımı gereklidir. Bu özellik Devre Dışı ve Etkin seçeneklerine sahiptir. Bilgi simgesinde, bu seçeneğin muhtemelen bizim için uygun olduğunu onaylayan ek bir metin vardır. Ancak portal bu ekranda özellik adını bize söylememektedir.

Gözden geçir ve oluştur sekmesinde, sayfanın alt kısmında Otomasyon için şablon indirme bağlantısı yer alıyor. Bağlantıyı seçmek, yapılandırılan kaynağı oluşturan şablonu açar. Bu durumda iki önemli bilgi parçası görüyoruz:

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

Bu bilgiler bize özellik türünü söyler ve ayrıca supportsHttpsTrafficOnly özelliğinin bizim için uygun olduğunu onaylar.

GitHub'da hızlı başlangıç şablonları

Azure hızlı başlangıç şablonlarının GitHub kaynaklar için yüzlerce ARM şablonu vardır. Bu şablonlar, istediğiniz kaynak özelliğini bulmanın harika bir yolu olabilir. Bazı özellikler, istediğiniz gibi görünebilir, ancak başka bir şeyi kontrol altında bulundurabilirsiniz.

Kaynak başvurusu belgeleri

supportsHttpsTrafficOnly özelliğinin doğru olduğunu doğrulamak için, depolama sağlayıcısında depolama hesabı kaynağı için ARM şablonu başvurusuna bakın. Properties nesnesinin geçerli parametrelerin listesi vardır. StorageAccountPropertiesCreateParameters-object bağlantısı seçerek kabul edilebilir özellikler tablosu gösterir. supportsHttpsTrafficOnly mevcuttur ve açıklama, iş gereksinimlerini karşılamak için sunduğumuzla eştir.

Azure Resource Manager

Azure kaynaklarınızı keşfetmenin bir diğer yolu da Azure Kaynak Gezgini (Önizleme) hizmetidir. Bu araç aboneliğinizin bağlamını kullandığı için Azure kimlik bilgilerinizle web sitesinde kimlik doğrulamanız gerekir. Kimlik doğrulaması yapıldıktan sonra sağlayıcılara, aboneliklere, kaynak gruplarına ve kaynaklara göre göz atabilirsiniz.

Depolama hesabı kaynağını bulun ve özelliklere bakın. supportsHttpsTrafficOnly özelliğini de burada görüyoruz. Belgeler sekmesini seçerek özellik açıklamasının daha önce başvuru belgelerinde bulduğumuz bilgilerle eş olduğunu görüyoruz.

Özellik diğer adını bulma

Kaynak özelliğini belirledik, ancak bu özelliği diğer adıyla eşlememiz gerekiyor.

Bir Azure kaynağının diğer adlarını belirlemenin birkaç yolu vardır. Bu öğretici için her bire bir göz atarak:

  • VS Code için Azure İlkesi uzantısı
  • Azure CLI
  • Azure PowerShell

Uzantıda diğer VS Code al

Uzantının Azure İlkesi uzantısı VS Code kaynaklarınıza göz atmanızı ve diğer adları bulmanızı kolaylaştırır.

Not

VS Code uzantısı yalnızca Resource Manager modu özelliklerini gösterir ve Kaynak Sağlayıcısı modu özelliklerini görüntülemez.

Azure CLI

Azure CLI'de, az provider kaynak diğer adlarını aramak için komut grubu kullanılır. Daha önce Azure kaynağıyla ilgili Depolama microsoft.Depolama ad alanını filtreleyebilirsiniz.

# 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 supportsHttpsTrafficOnly adlı depolama hesapları tarafından desteklenen bir diğer ad görüyoruz. Bu diğer adın varlığı, iş gereksinimlerimizi uygulamak için ilke yazabiliriz!

Azure PowerShell

Azure PowerShell, cmdlet, Get-AzPolicyAlias kaynak diğer adlarını aramak için kullanılır. daha önce Azure kaynağı hakkında aldık ayrıntıları temel alarak Microsoft. Depolama ad alanını filtreleyeceğiz.

# 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, supportsHttpsTrafficOnly adlı depolama hesapları tarafından desteklenen bir diğer ad gösterir.

Kullanılacak etkiyi belirleme

Uyumlu olmayan kaynaklarınız için ne olacağına karar vermek, ilk yerde değerlendirileceğine karar verirken neredeyse önemli bir şeydir. Uyumlu olmayan bir kaynağa yönelik olası her yanıta bir efektdenir. 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.

Bizim örneğimizde, reddetme, Azure ortamımızda uyumlu olmayan kaynaklar oluşturulmasını istemediğimiz için, istiyoruz. 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. Atama başına etkiyi değiştirmenin bir yolu, etkiyi parametreleştirmek olacaktır. Ayrıntıları hakkında daha fazla bilgi için aşağıdaki parametrelere bakın.

Tanımı oluştur

Artık, yönetmeyi planladığımız özellikler için özellik ayrıntıları ve diğer ad vardır. Ardından, ilke kuralının kendisini oluşturacağız. İ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ı . Aşağıda, ilke tanımının neye benzediklerine ait boş bir şablon verilmiştir:

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

Meta veri

İlk üç bileşen ilke meta verilersidir. Bu bileşenlerin, için kural oluşturduğumuz öğrendiğimiz için değerleri sağlaması kolaydır. Mod öncelikli olarak Etiketler ve kaynak konumu ile ilgilidir. Etiketleri destekleyen kaynaklarla değerlendirmeyi sınırlandırmaya gerek olmadığı için, mod için Tüm değeri kullanacağız.

"displayName": "Deny storage accounts not using only HTTPS",
"description": "Deny storage accounts not using only HTTPS. Checks the supportsHttpsTrafficOnly property on StorageAccounts.",
"mode": "all",

Parametreler

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. Bir bir bir bir bir bir bir bir bir bir bir bir bir parametre tanımlayacağız Bu iki seçenek iş gereksinimlerimizle eşleşir. Tamamlanan parametreler bloğu Şu örneğe benzer şekilde görünür:

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

İlke kuralı

İlke kuralını oluşturma işlemi, özel ilke tanımımızı oluşturmanın son adımıdır. Test etmek için iki deyim belirledik:

  • depolama hesabı türü Microsoft. Depolama/storageaccounts
  • SupportsHttpsTrafficOnly depolama hesabı doğru değil

Bu deyimlerin her ikisinin de doğru olması gerektiğinden, allof Logical işlecinikullanacağız. Bir statik bildirim yapmak yerine, etkikiz parametresini etkiye geçireceğiz. Tamamlanan kuralımız Şu örneğe benzer şekilde görünür:

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

Tamamlandı tanımı

İlkenin üç bölümü tanımlanmış olarak, tamamlanma tanımımız şu şekildedir:

{
    "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. 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. Daha sonra, depolama hesaplarınızın güvenliğini yönetmek için parametreli etkiyi kullanarak uygun kaynaklara göre atayın.

Kaynakları temizleme

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:

  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.

  2. Kaldırmak istediğiniz yeni girişim veya tanımını (ya da atamayı) arayın.

  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.

Gözden geçirme

Bu öğreticide, aşağıdaki görevleri başarıyla gerçekleştirdiniz:

  • İş gereksinimlerinizi tanımladı
  • Her gereksinimi bir Azure Kaynak özelliği ile eşlendi
  • Özelliği bir diğer ada eşlendi
  • Kullanım efektinin belirlenmesi
  • İlke tanımı oluşturulmuş

Sonraki adımlar

Ardından, ilke oluşturmak ve atamak için özel ilke tanımınızı kullanın: