Partilhar via


Implantar a Política do Azure em assinaturas 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 desempenhem operações em escala em vários inquilinos de uma vez, o que torna as tarefas de gestão mais eficientes.

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

Gorjeta

Embora nos referimos 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 Gráfico de Recursos do Azure para consultar locatários de clientes

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

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 em assinaturas delegadas em vários locatários de clientes. Esta definição de política requer que todas as contas de armazenamento usem 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 configuração são marcadas como não compatíveis.

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 você possa implantar políticas em vários locatários, atualmente não é possível exibir detalhes de conformidade para recursos não compatíveis 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 tentando criar uma conta de armazenamento com EnableHttpsTrafficOnly definido como false em uma de suas assinaturas delegadas. Devido à atribuição de política, você não poderá 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                  

Clean up resources (Limpar recursos)

Quando terminar, você poderá remover a definição e a atribuição de política 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óximos passos