Share via


Distribuera Azure Policy till delegerade prenumerationer i stor skala

Som tjänstleverantör kan du ha registrerat flera kundklientorganisationer hos Azure Lighthouse. Med Azure Lighthouse kan tjänstleverantörer utföra åtgärder i stor skala över flera klienter samtidigt, vilket gör hanteringsuppgifterna mer effektiva.

Det här avsnittet beskriver hur du använder Azure Policy för att distribuera en principdefinition och principtilldelning mellan flera klienter med hjälp av PowerShell-kommandon. I det här exemplet säkerställer principdefinitionen att lagringskonton skyddas genom att endast tillåta HTTPS-trafik.

Tips

Även om vi refererar till tjänsteleverantörer och kunder i det här avsnittet kan företag som hanterar flera klienter använda samma processer.

Använd Azure Resource Graph för att fråga mellan kundklientorganisationer

Du kan använda Azure Resource Graph för att köra frågor mot alla prenumerationer i kundklientorganisationer som du hanterar. I det här exemplet identifierar vi alla lagringskonton i dessa prenumerationer som för närvarande inte kräver HTTPS-trafik.

$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

Distribuera en princip över flera kundklientorganisationer

Exemplet nedan visar hur du använder en Azure Resource Manager-mall för att distribuera en principdefinition och principtilldelning mellan delegerade prenumerationer i flera kundklientorganisationer. Den här principdefinitionen kräver att alla lagringskonton använder HTTPS-trafik. Det förhindrar att nya lagringskonton skapas som inte uppfyller kraven. Alla befintliga lagringskonton utan inställningen markeras som icke-kompatibla.

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
}

Anteckning

Du kan distribuera principer mellan flera klienter, men för närvarande kan du inte visa efterlevnadsinformation för icke-kompatibla resurser i dessa klientorganisationer.

Verifiera principdistributionen

När du har distribuerat Azure Resource Manager-mallen bekräftar du att principdefinitionen har tillämpats genom att försöka skapa ett lagringskonto med EnableHttpsTrafficOnly inställt på false i någon av dina delegerade prenumerationer. På grund av principtilldelningen bör du inte kunna skapa det här lagringskontot.

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

Rensa resurser

När du är klar tar du bort principdefinitionen och tilldelningen som skapades av distributionen.

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

Nästa steg