Distribuire Criteri di Azure nelle sottoscrizioni delegate su larga scala

I provider di servizi potrebbero aver integrato più tenant di clienti in Azure Lighthouse. Azure Lighthouse consente ai provider di servizi di eseguire operazioni su larga scala tra più tenant contemporaneamente, rendendo più efficienti le attività di gestione.

Questo argomento illustra come usare Criteri di Azure per distribuire una definizione dei criteri e un'assegnazione di criteri tra più tenant usando i comandi di PowerShell. In questo esempio, la definizione dei criteri garantisce che gli account di archiviazione siano protetti consentendo solo il traffico HTTPS.

Suggerimento

Anche se in questo argomento si fa riferimento a provider di servizi e clienti, le aziende che gestiscono più tenant possono usare gli stessi processi.

Usare Azure Resource Graph per eseguire query tra tenant di clienti

È possibile usare Azure Resource Graph per eseguire query su tutte le sottoscrizioni nei tenant dei clienti gestiti. In questo esempio verranno identificati gli account di archiviazione in queste sottoscrizioni che attualmente non richiedono traffico 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

Distribuire criteri tra più tenant di clienti

L'esempio seguente illustra come usare un modello di Azure Resource Manager per distribuire una definizione e un'assegnazione dei criteri tra sottoscrizioni delegate in più tenant di clienti. Questa definizione di criteri richiede che tutti gli account di archiviazione usino il traffico HTTPS. Impedisce la creazione di nuovi account di archiviazione non conformi. Tutti gli account di archiviazione esistenti senza l'impostazione vengono contrassegnati come non conformi.

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
}

Nota

Sebbene sia possibile distribuire criteri in più tenant, attualmente non è possibile visualizzare i dettagli di conformità per le risorse non conformi in questi tenant.

Convalidare la distribuzione dei criteri

Dopo aver distribuito il modello di Azure Resource Manager, verificare che la definizione dei criteri sia stata applicata correttamente provando a creare un account di archiviazione con EnableHttpsTrafficOnly impostato su false in una delle sottoscrizioni delegate. Per via dell'assegnazione dei criteri, non è possibile creare questo account di archiviazione.

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

Pulire le risorse

Al termine, rimuovere la definizione e l'assegnazione dei criteri creati dalla distribuzione.

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

Passaggi successivi