Implementar Azure Policy em subscrições delegadas em escala

Como fornecedor de serviços, pode ter integrado vários inquilinos de clientes no Azure Lighthouse. O Azure Lighthouse permite que os fornecedores de serviços realizem operações em escala em vários inquilinos ao mesmo tempo, tornando as tarefas de gestão mais eficientes.

Este tópico explica como utilizar Azure Policy para implementar uma definição de política e atribuição de política em vários inquilinos com comandos do PowerShell. Neste exemplo, a definição de política garante que as contas de armazenamento são protegidas ao permitir apenas tráfego HTTPS.

Dica

Apesar de nos referirmos a fornecedores de serviços e clientes neste tópico, as empresas que gerem vários inquilinos podem utilizar os mesmos processos.

Utilizar o Azure Resource Graph para consultar entre inquilinos de clientes

Pode utilizar o Azure Resource Graph para consultar todas as subscrições nos inquilinos dos clientes que gere. Neste exemplo, vamos identificar todas as contas de armazenamento nestas subscrições que não necessitam atualmente de tráfego 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

Implementar uma política em vários inquilinos do cliente

O exemplo abaixo mostra como utilizar um modelo do Azure Resource Manager para implementar uma definição de política e atribuição de política em subscrições delegadas em vários inquilinos de clientes. Esta definição de política requer que todas as contas de armazenamento utilizem tráfego HTTPS. Impede a criação de novas contas de armazenamento que não estejam em conformidade. Todas as contas de armazenamento existentes sem a definição são marcadas como não 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
}

Nota

Embora possa implementar políticas em vários inquilinos, atualmente não pode ver detalhes de conformidade para recursos não conformes nestes inquilinos.

Validar a implementação da política

Depois de implementar o modelo de Resource Manager do Azure, confirme que a definição de política foi aplicada com êxito ao tentar criar uma conta de armazenamento com EnableHttpsTrafficOnly definido como falso numa das suas subscrições delegadas. Devido à atribuição de política, não deverá conseguir criar esta conta de armazenamento.

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

Limpar os recursos

Quando tiver terminado, remova a definição de política e a atribuição criadas pela implementação.

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

Passos seguintes