Compartilhar via


Implantar o Azure Policy em assinaturas delegadas em escala

Como um provedor de serviços, é provável que você tenha integrado vários locatários ao Azure Lighthouse. O Azure Lighthouse permite que os provedores de serviços realizem operações em escala em vários locatários ao mesmo tempo, tornando as tarefas de gerenciamento mais eficientes.

Este tópico explica como usar o Azure Policy para implantar uma definição de política e uma atribuição de política para vários locatários usando comandos do PowerShell. Neste exemplo, a definição de política garante que as contas de armazenamento estejam protegidas permitindo apenas o tráfego HTTPS. Você pode usar o mesmo processo geral para qualquer política que queira implantar.

Dica

Embora estejamos nos referindo a provedores de serviços e clientes neste tópico, as empresas que gerenciam vários locatários podem usar os mesmos processos.

Usar o Azure Resource Graph para fazer consultas em locatários do cliente

Você pode usar o Azure Resource Graph para consultar todas as assinaturas nos locatários do cliente que você gerencia. Neste exemplo, identificaremos todas as contas de armazenamento nessas assinaturas que atualmente não exigem o 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

Implantar uma política em vários locatários do cliente

O exemplo a seguir mostra como usar um modelo do Azure Resource Manager para implantar uma definição de política e atribuição de política entre assinaturas delegadas em vários locatários do cliente. Esta definição de política de exemplo exige que as contas de armazenamento usem o tráfego HTTPS. Ela impede a criação de novas contas de armazenamento que não estejam em conformidade. Todas as contas de armazenamento existentes sem a configuração são marcadas como fora de conformidade.

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
}

Observação

Embora você possa implantar políticas em vários locatários, atualmente não é possível exibir os detalhes de conformidade para recursos fora de conformidade nesses locatários.

Validar a implantação da política

Depois de implantar o modelo do Azure Resource Manager, confirme se a definição de política foi aplicada com êxito durante a tentativa de criação de uma conta de armazenamento com EnableHttpsTrafficOnly definido como false em uma das assinaturas delegadas. Devido à atribuição de política, não será possível criar essa 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 terminar, você poderá remover a definição de política e a atribuição criadas pela implantaçã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"
    }
}

Próximas etapas