Nasazení 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 napříč několika tenanty najednou, což zefektivňuje úlohy správy.

Toto téma vysvětluje, jak pomocí Azure Policy nasadit definici a přiřazení zásad napříč několika tenanty pomocí příkazů PowerShellu. V tomto příkladu definice zásady zajišťuje zabezpečení účtů úložiště tím, že povoluje pouze provoz HTTPS.

Tip

I když 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 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 a přiřazení zásad napříč delegovanými předplatnými ve více tenantech zákazníků. Tato definice zásady vyžaduje, aby všechny účty úložiště používaly provoz HTTPS. Brání vytváření nových účtů úložiště, které nedodržují předpisy. Všechny existující účty úložiště bez nastavení se označí 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 zásady nasadit napříč několika tenanty, v současné době v těchto tenantech nemůžete zobrazit podrobnosti o dodržování předpisů pro prostředky, které nedodržují předpisy.

Ověření nasazení zásad

Po nasazení šablony Azure Resource Manager ověřte, že se definice zásady úspěšně použila, a to tak, že se pokusíte vytvořit účet úložiště s nastavením EnableHttpsTrafficOnly na hodnotu false v jednom z vašich delegovaných předplatných. Kvůli přiřazení zásad byste neměli být schopni 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ů

Po dokončení odeberte definici a přiřazení zásad 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