Развертывание службы "Политика Azure" для делегированных подписок в масштабе

Как поставщик услуг вы можете подключить несколько клиентов к Azure Lighthouse. Azure Lighthouse позволяет поставщикам служб выполнять операции одновременно в нескольких клиентах, что делает задачи управления более эффективными.

В этом разделе описано, как с помощью Политики Azure развернуть определение и назначение политики в нескольких арендаторах с использованием команд PowerShell. В этом примере определение политики обеспечивает защиту учетных записей хранения, разрешая только HTTPS-трафик.

Совет

Хотя в этом разделе мы будем упоминать поставщиков услуг и их заказчиков, предприятия, управляющие несколькими клиентами, могут использовать такие же процессы.

Отправка запросов между клиентами с помощью Azure Resource Graph

Azure Resource Graph позволяет отправлять запросы во всех подписках арендаторов клиентов, которыми вы управляете. Приведенный ниже пример выявляет учетные записи хранения в этих подписках, которые в настоящее время не требуют трафика 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

Развертывание политики для нескольких клиентов

В приведенном ниже примере показано, как с помощью шаблона Azure Resource Manager развернуть определение и назначения политики между делегированными подписками в нескольких клиентах. Это определение политики требует, чтобы все учетные записи хранения использовали трафик HTTPS. Это предотвращает создание новых учетных записей хранения, которые не соответствуют требованиям. Все существующие учетные записи хранения без этого параметра помечаются как несоответствующие.

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
}

Примечание

Хотя вы можете развертывать политики для нескольких клиентов, в настоящее время вы не можете просматривать сведения о соответствии для несоответствующих ресурсов в этих клиентах.

Проверка развертывания политики

Развернув шаблон Azure Resource Manager, убедитесь, что определение политики успешно применено, попытавшись создать учетную запись хранения с параметром EnableHttpsTrafficOnly в одной из делегированных подписок. Из-за назначения политики вы не сможете создать эту учетную запись хранения.

New-AzStorageAccount -ResourceGroupName (New-AzResourceGroup -name policy-test -Location eastus -Force).ResourceGroupName `
                     -Name (get-random) `
                     -Location eastus `
                     -EnableHttpsTrafficOnly $false `
                     -SkuName Standard_LRS `
                     -Verbose                  

Очистка ресурсов

По завершении удалите определение и назначение политики, созданные при развертывании.

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"
    }
}

Дальнейшие действия