Déployer à grande échelle Azure Policy vers des abonnements délégués

En tant que fournisseur de services, vous avez peut-être intégré les locataires de plusieurs clients à Azure Lighthouse. Azure Lighthouse permet aux fournisseurs de services d’effectuer des opérations à grande échelle sur plusieurs locataires à la fois, améliorant ainsi l’efficacité des tâches de gestion.

Cette rubrique explique comment utiliser Azure Policy pour déployer une définition et une affectation de stratégie sur plusieurs locataires à l’aide de commandes PowerShell. Dans cet exemple, la définition de stratégie veille à ce que les comptes de stockage soient sécurisés en n'autorisant que le trafic HTTPS.

Conseil

Même si nous faisons référence aux fournisseurs de services et aux clients dans cette rubrique, les entreprises gérant plusieurs locataires peuvent utiliser les mêmes processus.

Utiliser Azure Resource Graph pour interroger plusieurs locataires clients

Vous pouvez utiliser Azure Resource Graph pour interroger tous les abonnements des locataires clients que vous gérez. Dans cet exemple, nous allons identifier tous les comptes de stockage de ces abonnements qui n'exigent pas encore le trafic 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

Déployer une stratégie sur plusieurs locataires clients

L’exemple ci-dessous illustre comment utiliser un modèle Azure Resource Manager pour déployer une définition de stratégie et une affectation de stratégie sur des abonnements délégués dans plusieurs locataires clients. Pour cette définition de stratégie, tous les comptes de stockage doivent utiliser le trafic HTTPS. Il empêche la création de comptes de stockage non conformes. Tous les comptes de stockage existants sans le paramètre sont marqués comme non conformes.

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
}

Notes

Bien que vous puissiez déployer des stratégies sur plusieurs locataires, vous ne pouvez pas actuellement afficher les détails de conformité pour les ressources non conformes dans ces locataires.

Valider le déploiement de la stratégie

Une fois que vous avez déployé le modèle Azure Resource Manager, vérifiez la réussite de l’application de la définition de stratégie en tentant de créer un compte de stockage avec EnableHttpsTrafficOnly défini sur false (faux) dans l’un de vos abonnements délégués. En raison de l’affectation de la stratégie, vous ne devriez pas pouvoir créer ce compte de stockage.

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

Nettoyer les ressources

Lorsque vous avez terminé, supprimez la définition et l’affectation de stratégie créées par le déploiement.

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

Étapes suivantes