委任されたサブスクリプションに Azure Policy を大規模にデプロイする
サービス プロバイダーは、Azure Lighthouse に複数の顧客テナントをオンボードしている場合があります。 Azure Lighthouse を使用すると、サービス プロバイダーは一度に複数のテナントにわたって大規模に操作を実行できるため、管理タスクがより効率的になります。
このトピックでは、PowerShell コマンドを介して Azure Policy を使用し、複数のテナントにわたってポリシー定義とポリシー割り当てをデプロイする方法について説明します。 この例では、ポリシー定義によって 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
}
Note
複数のテナントにポリシーをデプロイすることはできますが、現時点では、これらのテナント内の非準拠リソースに関するコンプライアンスの詳細を表示することはできません。
ポリシーのデプロイを検証する
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"
}
}
次のステップ
- Azure Policy の詳細を確認する。
- テナント間の管理エクスペリエンスについて学習します。
- 委任されたサブスクリプション内で修復が可能なポリシーをデプロイする方法について学習します。