대규모로 위임된 구독에 Azure Policy 배포Deploy Azure Policy to delegated subscriptions at scale

서비스 공급자로 서 Azure Lighthouse에 여러 고객 테 넌 트를 등록 했을 수 있습니다.As a service provider, you may have onboarded multiple customer tenants to Azure Lighthouse. Azure Lighthouse를 사용하여 서비스 공급자는 여러 테넌트에 걸쳐 대규모로 작업을 한 번에 수행할 수 있으므로 관리 작업을 보다 효율적으로 수행할 수 있습니다.Azure Lighthouse allows service providers to perform operations at scale across several tenants at once, making management tasks more efficient.

이 항목에서는 Azure Policy를 사용하여 PowerShell 명령을 통해 여러 테넌트에서 정책 정의 및 정책 할당을 배포하는 방법을 보여 줍니다.This topic shows you how to use Azure Policy to deploy a policy definition and policy assignment across multiple tenants using PowerShell commands. 이 예제에서는 정책 정의를 통해 HTTPS 트래픽만 허용하여 스토리지 계정을 보호합니다.In this example, the policy definition ensures that storage accounts are secured by allowing only HTTPS traffic.

이 항목의 서비스 공급자 및 고객을 참조 하지만 여러 테 넌 트를 관리 하는 기업은 동일한 프로세스를 사용할 수 있습니다.Though we refer to service providers and customers in this topic, enterprises managing multiple tenants can use the same processes.

Azure Resource Graph를 사용하여 고객 테넌트에서 쿼리Use Azure Resource Graph to query across customer tenants

Azure Resource Graph를 사용하여 관리하는 고객 테넌트의 모든 구독에서 쿼리를 수행할 수 있습니다.You can use Azure Resource Graph to query across all subscriptions in the customer tenants that you manage. 이 예제에서는 현재 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

여러 고객 테넌트 간에 정책 배포Deploy a policy across multiple customer tenants

아래 예제에서는 Azure Resource Manager 템플릿을 사용하여 여러 고객 테넌트의 위임된 구독에서 정책 정의 및 정책 할당을 배포하는 방법을 보여 줍니다.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. 이 정책 정의에서는 모든 저장소 계정이 HTTPS 트래픽을 사용 해야 하므로 설정 없이 기존 저장소 계정을 준수 하지 않는 새 저장소 계정 만들기를 방해 하지 않습니다.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
}

참고

여러 테 넌 트에 정책을 배포할 수 있지만, 현재는이 테 넌 트에서 비규격 리소스에 대 한 호환성 세부 정보를 볼 수 없습니다.While you can deploy policies across multiple tenants, currently you can't view compliance details for non-compliant resources in these tenants.

정책 배포의 유효성 검사Validate the policy deployment

Azure Resource Manager 템플릿을 배포한 후에는 위임 된 구독 중 하나에서 EnableHttpsTrafficOnlyfalse 로 설정 된 저장소 계정을 만들어 정책 정의가 성공적으로 적용 되었는지 확인할 수 있습니다.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. 정책 할당으로 인해 이 스토리지 계정을 만들 수 없습니다.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                  

리소스 정리Clean up resources

작업이 완료 되 면 배포에 의해 생성 된 정책 정의 및 할당을 제거 합니다.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"
    }
}

다음 단계Next steps