Implementación de Azure Policy en suscripciones delegadas a escalaDeploy Azure Policy to delegated subscriptions at scale

Como proveedor de servicios, es posible que haya incorporado varios inquilinos de cliente para Azure Lighthouse.As a service provider, you may have onboarded multiple customer tenants to Azure Lighthouse. Azure Lighthouse permite a los proveedores de servicios realizar operaciones a escala a través de varios inquilinos a la vez, lo que hace que las tareas de administración sean más eficaces.Azure Lighthouse allows service providers to perform operations at scale across several tenants at once, making management tasks more efficient.

En este tema se muestra cómo usar Azure Policy para implementar una definición de directivas y una asignación de directivas en varios inquilinos mediante comandos de PowerShell.This topic shows you how to use Azure Policy to deploy a policy definition and policy assignment across multiple tenants using PowerShell commands. En este ejemplo, la definición de directivas garantiza que las cuentas de almacenamiento estén protegidas al permitir solo el tráfico HTTPS.In this example, the policy definition ensures that storage accounts are secured by allowing only HTTPS traffic.

Sugerencia

Aunque en este tema hacemos referencia a los proveedores de servicios y clientes, las empresas que administran varios inquilinos pueden usar los mismos procesos.Though we refer to service providers and customers in this topic, enterprises managing multiple tenants can use the same processes.

Uso de Azure Resource Graph para consultar entre inquilinos de clienteUse Azure Resource Graph to query across customer tenants

Puede usar Azure Resource Graph para realizar consultas en todas las suscripciones de los inquilinos de cliente que administra.You can use Azure Resource Graph to query across all subscriptions in the customer tenants that you manage. En este ejemplo, se identificarán todas las cuentas de almacenamiento de estas suscripciones que no requieran actualmente tráfico 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

Implementación de una directiva en varios inquilinos de clienteDeploy a policy across multiple customer tenants

En el ejemplo siguiente se muestra cómo usar una plantilla de Azure Resource Manager para implementar una definición de directivas y una asignación de directivas entre las suscripciones delegadas en varios inquilinos de cliente.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 definición de directivas requiere que todas las cuentas de almacenamiento usen tráfico HTTPS, lo que impide la creación de nuevas cuentas de almacenamiento que no cumplan con la especificación, y hace que las cuentas de almacenamiento existentes que no tengan esta configuración se marquen como no conformes.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

Si bien puede implementar directivas en varios inquilinos, actualmente no puede ver los detalles de cumplimiento de los recursos no compatibles en estos inquilinos.While you can deploy policies across multiple tenants, currently you can't view compliance details for non-compliant resources in these tenants.

Validación de la implementación de directivasValidate the policy deployment

Una vez que haya implementado la plantilla de Azure Resource Manager, puede confirmar que la definición de directivas se ha aplicado correctamente; para ello, intente crear una cuenta de almacenamiento con EnableHttpsTrafficOnly establecido en false en una de las suscripciones 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. Debido a la asignación de directivas, no debería ser capaz de crear esta cuenta de almacenamiento.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                  

Limpieza de recursosClean up resources

Cuando haya terminado, elimine la definición y la asignación de directivas que creó la implementación.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"
    }
}

Pasos siguientesNext steps