Azure İlkesi uygun ölçekteki temsilci aboneliklerine dağıtma

Hizmet sağlayıcısı olarak Azure Lighthouse’a birden çok müşteri kiracısı eklemiş olabilirsiniz. Azure Lighthouse, hizmet sağlayıcılarının aynı anda birden fazla kiracıda büyük ölçekte işlem gerçekleştirerek yönetim görevlerini daha verimli hale getirmelerine imkan tanır.

Bu konuda, PowerShell komutlarını kullanarak birden çok kiracıya ilke tanımı ve ilke ataması dağıtmak için Azure İlkesi nasıl kullanılacağı açıklanmaktadır. Bu örnekte ilke tanımı, depolama hesaplarının yalnızca HTTPS trafiğine izin vererek güvenliğinin sağlanmasını sağlar. Dağıtmak istediğiniz tüm ilkeler için aynı genel işlemi kullanabilirsiniz.

İpucu

Bu konu başlığında hizmet sağlayıcılarına ve müşterilere başvursak da, birden çok kiracıyı yöneten kuruluşlar aynı işlemleri kullanabilir.

Müşteri kiracıları arasında sorgulama yapmak için Azure Kaynak Grafı kullanma

Yönettiğiniz müşteri kiracılarındaki tüm abonelikleri sorgulamak için Azure Kaynak Grafı kullanabilirsiniz. Bu örnekte, bu aboneliklerde şu anda HTTPS trafiği gerektirmeyen tüm depolama hesaplarını tanımlayacağız.

$MspTenant = "insert your managing tenantId here"

$subs = Get-AzSubscription

$ManagedSubscriptions = Search-AzGraph -Query "ResourceContainers | where type == 'microsoft.resources/subscriptions' | where tenantId != '$($mspTenant)' | project name, subscriptionId, tenantId" -subscription $subs.subscriptionId

Search-AzGraph -Query "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | project name, location, subscriptionId, tenantId, properties.supportsHttpsTrafficOnly" -subscription $ManagedSubscriptions.subscriptionId | convertto-json

Birden çok müşteri kiracısı arasında ilke dağıtma

Aşağıdaki örnekte, birden çok müşteri kiracısında temsilci abonelikler arasında ilke tanımı ve ilke ataması dağıtmak için Azure Resource Manager şablonunun nasıl kullanılacağı gösterilmektedir. Bu ilke tanımı, tüm depolama hesaplarının HTTPS trafiğini kullanmasını gerektirir. Uyumlu olmayan yeni depolama hesaplarının oluşturulmasını engeller. Ayarı olmayan tüm mevcut depolama hesapları uyumsuz olarak işaretlenir.

Write-Output "In total, there are $($ManagedSubscriptions.Count) delegated customer subscriptions to be managed"

foreach ($ManagedSub in $ManagedSubscriptions)
{
    Select-AzSubscription -SubscriptionId $ManagedSub.subscriptionId

    New-AzSubscriptionDeployment -Name mgmt `
                     -Location eastus `
                     -TemplateUri "https://raw.githubusercontent.com/Azure/Azure-Lighthouse-samples/master/templates/policy-enforce-https-storage/enforceHttpsStorage.json" `
                     -AsJob
}

Not

İlkeleri birden çok kiracıya dağıtabilirsiniz ancak şu anda bu kiracılardaki uyumlu olmayan kaynakların uyumluluk ayrıntılarını görüntüleyemezsiniz.

İlke dağıtımını doğrulama

Azure Resource Manager şablonunu dağıttıktan sonra, temsilci aboneliklerinizden birinde EnableHttpsTrafficOnly ayarı false olarak ayarlanmış bir depolama hesabı oluşturmayı deneyerek ilke tanımının başarıyla uygulandığını onaylayın. İlke ataması nedeniyle bu depolama hesabını oluşturamamalısınız.

New-AzStorageAccount -ResourceGroupName (New-AzResourceGroup -name policy-test -Location eastus -Force).ResourceGroupName `
                     -Name (get-random) `
                     -Location eastus `
                     -EnableHttpsTrafficOnly $false `
                     -SkuName Standard_LRS `
                     -Verbose                  

Kaynakları temizleme

İşiniz bittiğinde, dağıtım tarafından oluşturulan ilke tanımını ve atamayı kaldırabilirsiniz.

foreach ($ManagedSub in $ManagedSubscriptions)
{
    select-azsubscription -subscriptionId $ManagedSub.subscriptionId

    Remove-AzSubscriptionDeployment -Name mgmt -AsJob

    $Assignment = Get-AzPolicyAssignment | where-object {$_.Name -like "enforce-https-storage-assignment"}

    if ([string]::IsNullOrEmpty($Assignment))
    {
        Write-Output "Nothing to clean up - we're done"
    }
    else
    {

    Remove-AzPolicyAssignment -Name 'enforce-https-storage-assignment' -Scope "/subscriptions/$($ManagedSub.subscriptionId)" -Verbose

    Write-Output "Deployment has been deleted - we're done"
    }
}

Sonraki adımlar