Nasazení služby Azure Policy do delegovaných předplatných ve velkém měřítku

Jako poskytovatel služeb jste možná do služby Azure Lighthouse onboardovali tenanty několika zákazníků. Azure Lighthouse umožňuje poskytovatelům služeb provádět operace ve velkém měřítku v několika tenantech najednou, což usnadňuje úlohy správy.

Toto téma vysvětluje, jak pomocí Azure Policy nasadit definici zásad a přiřazení zásad napříč více tenanty pomocí příkazů PowerShellu. V tomto příkladu definice zásady zajišťuje, že účty úložiště jsou zabezpečené povolením pouze provozu HTTPS. Stejný obecný postup můžete použít pro všechny zásady, které chcete nasadit.

Tip

Přestože v tomto tématu odkazujeme na poskytovatele služeb a zákazníky, podniky spravující více tenantů můžou používat stejné procesy.

Použití Azure Resource Graphu k dotazování napříč tenanty zákazníků

Azure Resource Graph můžete použít k dotazování na všechna předplatná ve spravovaných tenantech zákazníků. V tomto příkladu identifikujeme všechny účty úložiště v těchto předplatných, které aktuálně nevyžadují provoz 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

Nasazení zásady napříč několika tenanty zákazníků

Následující příklad ukazuje, jak pomocí šablony Azure Resource Manageru nasadit definici zásad a přiřazení zásad napříč delegovanými předplatnými ve více tenantech zákazníků. Tato definice zásad vyžaduje, aby všechny účty úložiště používaly provoz HTTPS. Zabrání vytvoření nových účtů úložiště, které nevyhovují. Všechny existující účty úložiště bez nastavení se označí jako nevyhovující.

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
}

Poznámka:

Zásady můžete nasadit napříč více tenanty, v současné době ale nemůžete zobrazit podrobnosti o dodržování předpisů pro nevyhovující prostředky v těchto tenantech.

Ověření nasazení zásad

Po nasazení šablony Azure Resource Manageru ověřte, že se definice zásady úspěšně použila, a to pokusem o vytvoření účtu úložiště s nastavením EnableHttpsTrafficOnly na false v jednom z delegovaných předplatných. Kvůli přiřazení zásad byste neměli tento účet úložiště vytvořit.

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

Vyčištění prostředků

Až budete hotovi, můžete definici zásady a přiřazení vytvořené nasazením odebrat.

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

Další kroky