Implementar a Política Azure para delegar subscrições em escalaDeploy Azure Policy to delegated subscriptions at scale

Como prestador de serviços, pode ter a bordo vários inquilinos de clientes para o Farol de Azure.As a service provider, you may have onboarded multiple customer tenants to Azure Lighthouse. O Azure Lighthouse permite que os prestadores de serviços realizem operações em escala em vários inquilinos ao mesmo tempo, tornando as tarefas de gestão mais eficientes.Azure Lighthouse allows service providers to perform operations at scale across several tenants at once, making management tasks more efficient.

Este tópico mostra-lhe como usar a Política Azure para implementar uma definição de política e atribuição de políticas em vários inquilinos usando comandos PowerShell.This topic shows you how to use Azure Policy to deploy a policy definition and policy assignment across multiple tenants using PowerShell commands. Neste exemplo, a definição de política garante que as contas de armazenamento são asseguradas permitindo apenas o tráfego HTTPS.In this example, the policy definition ensures that storage accounts are secured by allowing only HTTPS traffic.

Dica

Embora nos refiramos a prestadores de serviços e clientes neste tópico, as empresas que gerem vários inquilinos podem usar os mesmos processos.Though we refer to service providers and customers in this topic, enterprises managing multiple tenants can use the same processes.

Use o Gráfico de Recursos Azure para consultar os inquilinos do clienteUse Azure Resource Graph to query across customer tenants

Você pode usar o Azure Resource Graph para consultar todas as subscrições nos inquilinos do cliente que você gere.You can use Azure Resource Graph to query across all subscriptions in the customer tenants that you manage. Neste exemplo, identificaremos quaisquer contas de armazenamento nestas subscrições que não necessitem atualmente de tráfego HTTPS.In this example, we'll identify any storage accounts in these subscriptions that do not currently require HTTPS traffic.

$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 de clientesDeploy a policy across multiple customer tenants

O exemplo abaixo mostra como usar um modelo de Gestor de Recursos Azure para implementar uma definição de política e atribuição de políticas em assinaturas delegadas em vários inquilinos de clientes.The example below shows how to use an Azure Resource Manager template to deploy a policy definition and policy assignment across delegated subscriptions in multiple customer tenants. Esta definição de política requer que todas as contas de armazenamento utilizem o tráfego HTTPS, impedindo a criação de novas contas de armazenamento que não cumpram e marquem as contas de armazenamento existentes sem a configuração como não conforme.This policy definition requires all storage accounts to use HTTPS traffic, preventing the creation of any new storage accounts that don't comply and marking existing storage accounts without the setting as non-compliant.

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

Enquanto você pode implementar políticas em vários inquilinos, atualmente você não pode ver detalhes de conformidade para recursos não conformes nestes inquilinos.While you can deploy policies across multiple tenants, currently you can't view compliance details for non-compliant resources in these tenants.

Validar a implementação da políticaValidate the policy deployment

Depois de ter implementado o modelo Azure Resource Manager, pode confirmar que a definição de política foi aplicada com sucesso ao tentar criar uma conta de armazenamento com EnableHttpsTrafficOnly definida como falsa numa das suas subscrições delegadas.After you've deployed the Azure Resource Manager template, you can confirm that the policy definition was successfully applied by attempting to create a storage account with EnableHttpsTrafficOnly set to false in one of your delegated subscriptions. Por causa da atribuição de políticas, não poderá criar esta conta de armazenamento.Because of the policy assignment, you should be unable to create this storage account.

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 recursosClean up resources

Quando terminar, remova a definição de política e a atribuição criada pela implementação.When you're finished, remove the policy definition and assignment created by the deployment.

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 seguintesNext steps