Поделиться через


Развертывание службы "Политика 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 значение false в одной из делегированных подписок. Из-за назначения политики вы не сможете создать эту учетную запись хранения.

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

Следующие шаги