Delen via


Azure Policy implementeren voor gedelegeerde abonnementen op schaal

Als serviceprovider hebt u mogelijk meerdere klanttenants toegevoegd aan Azure Lighthouse. Met Azure Lighthouse kunnen serviceproviders bewerkingen op schaal in meerdere tenants tegelijk uitvoeren, wat beheertaken efficiënter maakt.

In dit onderwerp wordt uitgelegd hoe u Azure Policy gebruikt voor het implementeren van een beleidsdefinitie en beleidstoewijzing voor meerdere tenants met behulp van PowerShell-opdrachten. In dit voorbeeld zorgt de beleidsdefinitie ervoor dat opslagaccounts worden beveiligd door alleen HTTPS-verkeer toe te staan. U kunt hetzelfde algemene proces gebruiken voor elk beleid dat u wilt implementeren.

Tip

Hoewel we in dit onderwerp verwijzen naar serviceproviders en klanten, kunnen ondernemingen die meerdere tenants beheren dezelfde processen gebruiken.

Azure Resource Graph gebruiken om query's uit te voeren op tenants van klanten

U kunt Azure Resource Graph gebruiken om query's uit te voeren op alle abonnementen in klanttenants die u beheert. In dit voorbeeld identificeren we alle opslagaccounts in deze abonnementen waarvoor momenteel geen HTTPS-verkeer is vereist.

$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

Een beleid implementeren voor meerdere tenants van klanten

In het volgende voorbeeld ziet u hoe u een Azure Resource Manager-sjabloon gebruikt om een beleidsdefinitie en beleidstoewijzing te implementeren voor gedelegeerde abonnementen in meerdere tenants van klanten. Voor deze beleidsdefinitie moeten alle opslagaccounts HTTPS-verkeer gebruiken. Hiermee voorkomt u dat er nieuwe opslagaccounts worden gemaakt die niet voldoen. Bestaande opslagaccounts zonder de instelling worden gemarkeerd als niet-compatibel.

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
}

Notitie

Hoewel u beleidsregels voor meerdere tenants kunt implementeren, kunt u momenteel geen nalevingsdetails weergeven voor niet-compatibele resources in deze tenants.

De beleidsimplementatie valideren

Nadat u de Azure Resource Manager-sjabloon hebt geïmplementeerd, controleert u of de beleidsdefinitie is toegepast door een opslagaccount te maken met EnableHttpsTrafficOnly ingesteld op false in een van uw gedelegeerde abonnementen. Vanwege de beleidstoewijzing kunt u dit opslagaccount niet maken.

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

Resources opschonen

Wanneer u klaar bent, kunt u de beleidsdefinitie en toewijzing verwijderen die door de implementatie zijn gemaakt.

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

Volgende stappen