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

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

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

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

Özel bir politika oluşturmadan önce, ihtiyaçlarınızı karşılayan bir ilkenin mevcut olup olmadığını görmek için ilke örneklerini denetleyin.

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

  • İş gereksinimlerinizi tanımlama
  • Her gereksinimi bir Azure kaynak özelliğiyle eşleme
  • Özelliği diğer adla eşleme
  • Hangi etkinini kullanılacağına karar verme
  • İ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, ilgili adımları göstermek için ortak bir kurumsal güvenlik gereksinimi kullanacağız:

  • Https için her depolama hesabının etkinleştirilmesi gerekir
  • HTTP için her depolama hesabı devre dışı bırakılmalıdır

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

Kaynağın beklenen durumunu tanımlamış olsak da uyumlu olmayan kaynaklarla ne yapmak istediğimizi henüz tanımlamadık. Azure İlkesi birçok efekti destekler. Bu öğreticide iş gereksinimini, iş kurallarıyla uyumlu olmayan kaynakların oluşturulmasını engellemek olarak tanımlayacağız. Bu hedefe gitmek için Reddet efektini kullanacağız. Ayrıca, belirli atamalar için ilkeyi askıya alma seçeneğinin de olmasını istiyoruz. Bu nedenle, Devre dışı efektini kullanacağız ve etkiyi ilke tanımında bir parametre yapacağız.

Kaynak özelliklerini belirleme

İş gereksinimine bağlı olarak, Azure İlkesi ile denetlenecek Azure kaynağı, bir depolama hesabıdır. Ancak, ilke tanımında kullanılacak özellikleri bilmiyoruz. Azure İlkesi kaynağın JSON gösterimine göre değerlendirme yapar, 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 birine göz atacağız:

  • 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

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

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

ARM şablonları

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

Portalda var olan kaynak

Özellikleri bulmanın en basit yolu, aynı türdeki mevcut bir kaynağa bakmaktır. Zorlamak istediğiniz ayar ile zaten yapılandırılmış kaynaklar, karşılaştıracak değeri de sağlar. İlgili kaynağın Azure portal şablonu dışarı aktar sayfasına (Ayarlar'ın altında) bakın.

Uyarı

Azure portal tarafından dışarı aktarılan ARM şablonu, deployIfNotExists ilke tanımındaki ARM şablonunun özelliğine deployment doğrudan eklenemez.

Azure portal'da var olan bir kaynakta şablonu dışarı aktar sayfasının ekran görüntüsü.

Bunu bir depolama hesabı için yaptığınızda şu örneğe benzer bir şablon gösterilir:

...
"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ı değer false olarak ayarlanmıştır. Bu özellik, aradığımız özellik olabilir. Ayrıca kaynağın türüMicrosoft.Storage/storageAccounts'tır. türü, ilkeyi yalnızca bu türdeki kaynaklarda sınırlamamıza olanak tanır.

Portalda kaynak oluşturma

Portalın bir başka yolu da kaynak yaratma deneyimidir. Portal aracılığıyla bir depolama hesabı oluşturulurken, Gelişmiş sekmesinin altındaki bir seçenek Güvenlik aktarımı gerekli seçeneğidir. Bu özellik, Devre Dışı ve Etkin seçeneklerine sahiptir. Bilgi simgesi, bu seçeneğin büyük olasılıkla istediğimiz özellik olduğunu onaylayan ek bir metine sahiptir. Ancak portal bize bu ekrandaki özellik adını söylemez.

Gözden geçir ve oluştur sekmesinde, sayfanın en altında Otomasyon için şablon indirme bağlantısı bulunur. Bağlantıyı seçtiğinizde yapılandırdığımız kaynağı oluşturan şablon açılır. Bu örnekte iki önemli bilgi parçası görürüz:

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

Bu bilgiler bize özellik türünü bildirir ve ayrıcahttpsTrafficOnly'nin aradığımız özellik olduğunu onaylar.

GitHub’da Hızlı Başlangıç şablonları

GitHub'da Azure hızlı başlangıç şablonları, farklı kaynaklar için oluşturulmuş yüzlerce ARM şablonuna sahiptir. Bu şablonlar, aradığınız kaynak özelliğini bulmanın harika bir yolu olabilir. Bazı özellikler aradığınız gibi görünebilir, ancak başka bir şeyi denetleyebilirsiniz.

Kaynak başvurusu belgeleri

DesteklerinHttpsTrafficOnly'nin doğru olduğunu doğrulamak için depolama sağlayıcısındaki depolama hesabı kaynağının ARM şablonu başvurularını denetleyin. Properties nesnesinin geçerli parametrelerin bir listesi vardır. StorageAccountPropertiesCreateParameters-object bağlantısı seçildiğinde kabul edilebilir özellikler tablosu gösterilir. destekleniyorHttpsTrafficOnly mevcut ve açıklama, iş gereksinimlerini karşılamak için aradığımız açıklamayla eşleşir.

Azure Resource Manager

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

Bir depolama hesabı kaynağı bulun ve özelliklere bakın. BuradahttpsTrafficOnly desteği özelliğini de görüyoruz. Belgeler sekmesini seçtiğinizde, özellik açıklamasının daha önce başvuru belgelerinde bulduklarımız ile eşleşdiğini görüyoruz.

Özellik diğer adını bulma

Kaynak özelliğini belirledik, ancak bu özelliği bir diğer adla eşlememiz gerekiyor.

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

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

VS Code uzantısında diğer adları alma

VS Code uzantısı için Azure İlkesi uzantısı, kaynaklarınıza göz atmayı ve diğer adları bulmayı kolaylaştırır.

Not

VS Code uzantısı yalnızca Resource Manager modu özelliklerini kullanıma sunar ve Hiçbir Kaynak Sağlayıcısı modu özelliğini görüntülemez.

Azure CLI

Azure CLI'da az provider, kaynak diğer adlarını aramak için komut grubu kullanılır. Daha önce Azure kaynağı hakkında aldığımız ayrıntılara göre Microsoft.Storage ad alanını filtreleyeceğiz.

# 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 zorunlu kılmak için ilkeyi yazacağımız anlamına gelir!

Azure PowerShell

Azure PowerShell Get-AzPolicyAlias cmdlet'i kaynak diğer adlarını aramak için kullanılır. Daha önce Azure kaynağı hakkında aldığımız ayrıntılara göre Microsoft.Storage 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 CLI gibi sonuçlar da supportsHttpsTrafficOnly adlı depolama hesapları tarafından desteklenen bir diğer ad gösterir.

Kullanılacak etkiyi belirleme

Uyumlu olmayan kaynaklarınızla ne yapacağınıza karar vermek, en başta neleri değerlendireceklerine karar vermek kadar önemlidir. Uyumlu olmayan bir kaynağa verilen her olası yanıta efekt adı verilir. Etki, uyumlu olmayan kaynağın günlüğe kaydedilip kaydedilmediğini, engellenip engellenmediğini, verilerin eklenip eklenmediğini veya kaynağı yeniden uyumlu duruma getirmek için kendisiyle ilişkilendirilmiş bir dağıtımın olup olmadığını denetler.

Örneğimizde, Azure ortamımızda uyumlu olmayan kaynakların oluşturulmasını istemediğimiz için reddetmek istediğimiz etkidir. Denetim, ilkeyi Reddet olarak ayarlamadan önce ilke etkisini belirlemek için iyi bir ilk seçenektir. Atama başına efekti değiştirmeyi kolaylaştırma yollarından biri, efekti parametreleştirmektir. Nasıl yapılacağının ayrıntıları için aşağıdaki parametrelere bakın.

Tanımı oluşturma

Artık yönetmeyi planladığımız özelliklerin ayrıntılarına ve diğer adlarına sahibiz. Ardından ilke kuralının kendisini oluşturacağız. İlke dili hakkında henüz bilginiz yoksa, ilke tanımının nasıl yapılandırılacağına ilişkin ilke tanımı yapısına başvurun. İlke tanımının nasıl göründüğüne yönelik boş bir şablon aşağıdadır:

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

Meta veri

İlk üç bileşen ilke meta verileridir. Kuralı ne için oluşturduğumuz bilindiğinden, bu bileşenlere değer sağlamak kolaydır. Mod öncelikli olarak etiketler ve kaynak konumuyla ilgili. Değerlendirmeyi etiketleri destekleyen kaynaklarda sınırlamamız gerekmediğinden mod içintü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 parametre kullanmasak da, sorun giderme etkisini değiştirmek için bir parametre kullanmak istiyoruz. Bir effectType parametresi tanımlayacak ve bunu yalnızca Reddet ve Devre Dışı ile sınırlayacağız. Bu iki seçenek iş gereksinimlerimizle eşleşmektedir. Tamamlanmış parametreler bloğu şu örneğe benzer:

"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şturmak, ö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.Storage/storageAccounts'tır
  • Depolama hesabı tarafından desteklenenHttpsTrafficOnlydoğru değil

Bu deyimlerin ikisinin de doğru olması gerektiğinden allOfmantıksal işlecini kullanacağız. Statik bildirim yapmak yerine effectType parametresini efekte geçireceğiz. Tamamlanmış kuralımız şu örneğe benzer:

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

Tamamlanan tanım

İlkenin üç bölümü de tanımlandığında tamamlanmış tanımımız aşağıdadır:

{
    "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 CLI, Azure PowerShell ve REST API) tanımı farklı şekillerde kabul ediyor, bu nedenle doğru kullanımı doğrulamak için her birinin komutlarını gözden geçirin. Ardından, depolama hesaplarınızın güvenliğini yönetmek için parametreli hale getirilmiş etkiyi kullanarak uygun kaynaklara atayın.

Kaynakları temizleme

Bu öğreticideki kaynaklarla çalışmayı bitirdiyseniz, yukarıda oluşturulan atamaları veya tanımları silmek için aşağıdaki adımları kullanın:

  1. Azure İlkesi sayfasının sol tarafındaki Yazma'nın altında Tanımlar'ı (veya ödevi 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ğine eşlendi
  • Özelliği diğer adla eşle
  • Kullanılacak etkiyi belirleme
  • İlke tanımını oluşturm

Sonraki adımlar

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