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

Jako poskytovatel služeb jste možná nasedli do několika tenantů zákazníků, kteří Azure Lighthouse. Azure Lighthouse umožňuje poskytovatelům služeb provádět operace ve velkém měřítku napříč několika tenanty najednou, takže úlohy správy jsou efektivnější.

Toto téma ukazuje, jak pomocí Azure Policy nasadit definici a přiřazení zásad mezi více tenantů pomocí příkazů PowerShellu. V tomto příkladu definice zásady zajišťuje zabezpečení účtů úložiště povolením pouze provozu HTTPS.

Tip

I když se v tomto tématu odkazujeme na poskytovatele služeb a zákazníky, podniky, které spravují více tenantů, mohou používat stejné procesy.

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

Azure Resource Graph můžete použít k dotazování na všechna předplatná v tenantech zákazníků, které spravujete. 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ásad napříč několika tenanty zákazníků

Následující příklad ukazuje, jak pomocí šablony Azure Resource Manager nasadit definici zásady a přiřazení zásad mezi delegovaná předplatná ve více tenantech zákazníků. Tato definice zásady vyžaduje, aby všechny účty úložiště používejte provoz HTTPS, což brání vytvoření nových účtů úložiště, které nevyhovují, a označení existujících účtů úložiště bez nastavení jako nedodržující předpisy.

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

I když můžete nasadit zásady napříč více tenanty, v současné době nemůžete zobrazit podrobnosti o dodržování předpisů pro prostředky, které v těchto tenantech nedodržuje předpisy.

Ověření nasazení zásad

Po nasazení šablony Azure Resource Manager můžete ověřit úspěšné použití definice zásady tím, že v jednom z delegovaných předplatných vytvoříte účet úložiště s vlastností EnableHttpsTrafficOnly nastavenou na hodnotu false. Kvůli přiřazení zásad byste neměli být schopni vytvořit tento účet úložiště.

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, odeberte definici a přiřazení zásady vytvořené nasazením.

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