Menerapkan Azure Policy kepada langganan yang didelegasikan dalam skala

Sebagai penyedia layanan, Anda mungkin telah melakukan onboarding beberapa penyewa pelanggan ke Azure Lighthouse. Azure Lighthouse memungkinkan penyedia layanan melakukan operasi dalam skala besar di beberapa penyewa sekaligus, membuat tugas manajemen menjadi lebih efisien.

Topik ini memperlihatkan kepada Anda cara menggunakan Azure Policy untuk menyebar definisi kebijakan dan penetapan kebijakan di banyak penyewa menggunakan perintah PowerShell. Dalam contoh ini, definisi kebijakan memastikan bahwa akun penyimpanan diamankan dengan hanya mengizinkan lalu lintas HTTPS.

Tip

Meskipun kami mengacu pada penyedia layanan dan pelanggan dalam topik ini, perusahaan yang mengelola banyak penyewa dapat menggunakan proses yang sama.

Menggunakan Azure Resource Graph untuk membuat kueri di penyewa pelanggan

Anda bisa menggunakan Azure Resource Graph untuk mengkueri semua langganan di penyewa pelanggan yang Anda kelola. Dalam contoh ini, kami akan mengidentifikasi akun penyimpanan apa pun dalam langganan ini yang saat ini tidak memerlukan lalu lintas HTTPS.

$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

Menyebar kebijakan di banyak penyewa pelanggan

Contoh di bawah ini memperlihatkan cara menggunakan templat Azure Resource Manager untuk menyebar definisi kebijakan dan penetapan kebijakan pada banyak langganan yang didelegasikan di banyak penyewa pelanggan. Definisi kebijakan ini mengharuskan semua akun penyimpanan untuk menggunakan lalu lintas HTTPS. Ini mencegah pembuatan akun penyimpanan baru yang tidak mematuhinya. Setiap akun penyimpanan yang ada tanpa pengaturan ditandai sebagai tidak patuh.

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
}

Catatan

Meskipun Anda dapat menyebar kebijakan di banyak penyewa, saat ini Anda tidak dapat melihat detail kepatuhan untuk sumber daya yang tidak mematuhi di penyewa ini.

Memvalidasi penyebaran kebijakan

Setelah Anda menyebarkan templat Azure Resource Manager, konfirmasikan bahwa definisi kebijakan berhasil diterapkan dengan mencoba membuat akun penyimpanan dengan EnableHttpsTrafficOnly diatur ke false di salah satu langganan yang didelegasikan. Karena penetapan kebijakan, Anda seharusnya tidak dapat membuat akun penyimpanan ini.

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

Membersihkan sumber daya

Setelah selesai, hapus definisi kebijakan dan penetapan yang dibuat oleh penyebaran itu.

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"
    }
}

Langkah berikutnya