Implementación de Azure Policy en suscripciones delegadas a escala
Como proveedor de servicios, es posible que haya incorporado varios inquilinos de cliente para 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.
En este tema se explica 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. En este ejemplo, la definición de directivas garantiza que las cuentas de almacenamiento estén protegidas al permitir solo el tráfico HTTPS. Puede usar el mismo proceso general para cualquier directiva que quiera implementar.
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.
Uso de Azure Resource Graph para consultar entre inquilinos de cliente
Puede usar Azure Resource Graph para realizar consultas en todas las suscripciones de los inquilinos de cliente que administre. En este ejemplo, identificaremos cualquier cuenta de almacenamiento en estas suscripciones que no requiera actualmente tráfico 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
Implementación de una directiva en varios inquilinos de cliente
El siguiente ejemplo muestra cómo usar una plantilla de Azure Resource Manager para implementar una definición de directiva y una asignación de directiva en las suscripciones delegadas de varios inquilinos clientes. Esta definición de directiva requiere que todas las cuentas de almacenamiento usen el tráfico HTTPS. Esto impide la creación de cuentas de almacenamiento nuevas que no lo cumplan. Todas las cuentas de almacenamiento existentes sin la configuración se marcan como no 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:
Si bien puede implementar directivas en varios inquilinos, actualmente no puede ver los detalles de cumplimiento de los recursos no compatibles en estos inquilinos.
Validación de la implementación de directivas
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. Debido a la asignación de directivas, no debería ser capaz de crear esta cuenta de almacenamiento.
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 recursos
Cuando haya terminado, puede eliminar la definición de directiva y la asignación creadas por la implementación.
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 siguientes
- Más información acerca de Azure Policy.
- Más información sobre las experiencias de administración entre inquilinos.
- Obtenga información sobre cómo implementar una directiva que se pueda corregir dentro de una suscripción delegada.