演習 - リソースを管理グループにデプロイする
プロジェクト Teddybear は成功しましたが、今度は、おもちゃ会社の秘密の研究開発で、さらに新しいおもちゃを研究しようとしています。 このチームからは、ほぼ毎日のように新しいサブスクリプションが依頼されるようになりました。そのすべてにポリシーを適用する必要があります。
あなたは、各サブスクリプションにポリシーの定義と割り当てを重複して行うのではなく、チームのすべてのサブスクリプションを管理グループ内に含めることにしました。 そうすれば、各サブスクリプションに個別にポリシーを適用するのではなく、管理グループ全体にポリシーを適用することができます。
この演習では、新しい Bicep テンプレートを作成して、管理グループにポリシーの定義と割り当てを適用します。
このプロセスでは、次のことを行います。
- 新しい管理グループを作成します。
- 新しい管理グループスコープの Bicep ファイルを作成します。
- このファイルに Azure Policy リソースを追加します。
- リソース ID を手動で作成して、ポリシーの割り当てをポリシー定義にリンクします。
- テンプレートをデプロイし、結果を確認します。
この演習には、次の前提条件が必要です。
- Azure テナントで管理グループが有効になっている必要があります。
- 階層内に新しい管理グループを作成するためのアクセス許可が必要です。
- 管理グループに Azure Policy リソースをデプロイするためのアクセス許可が必要です。
現在の Azure アカウントでこれらの要件を満たすことができない場合は、無料試用版を取得し、新しい Azure サブスクリプションとテナントを作成することができます。 または、この演習のデプロイ手順をスキップできます。
管理グループの作成
この演習では、新しい管理グループを作成して、Azure 環境の別の部分のリソースに誤って影響を与えないようにします。
Visual Studio Code ターミナルで次の Azure CLI コマンドを実行します。
az account management-group create \
--name SecretRND \
--display-name "Secret R&D Projects"
既定で、新しい管理グループは、テナント ルート管理グループの直接の子として作成されます。 既存の管理グループ階層内の特定の場所に管理グループを配置する必要がある場合は、--parent-id
パラメーターを使用して、親として使用する管理グループの名前を指定します。
Visual Studio Code ターミナルで次の Azure PowerShell コマンドを実行します。
New-AzManagementGroup `
-GroupId 'SecretRND' `
-DisplayName 'Secret R&D Projects'
既定で、新しい管理グループは、テナント ルート管理グループの子として作成されます。 既存の管理グループ階層内の特定の場所に管理グループを配置する必要がある場合は、-ParentId
パラメーターを使用して、親として使用する管理グループの名前を指定します。
実際のデプロイでは、R&D チームのサブスクリプションを管理グループに移動します。 この演習では、管理グループにサブスクリプションが含まれていなくても、ポリシーをデプロイします。 管理グループが空であっても、サブスクリプションが含まれていても、同じデプロイ プロセスが適用されます。
管理グループにデプロイする Bicep ファイルを作成する
Visual Studio Code を開きます。
main.bicep ファイルを削除して、同じ名前の空のファイルを新規に作成します。
空のファイルを保存します。
次のコンテンツをファイルに追加します。
targetScope = 'managementGroup'
このコード行によって、テンプレートが管理グループ スコープにデプロイされることが Bicep に伝えられることに注意してください。
ポリシー定義を追加する
前に行ったときと同様に、Bicep ファイルにポリシー定義を作成します。
先ほど追加した行の下に、次の変数定義を追加します。
var policyDefinitionName = 'DenyFandGSeriesVMs'
ファイルの末尾に、次の Azure Policy 定義を追加します。
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2024-05-01' = { name: policyDefinitionName properties: { policyType: 'Custom' mode: 'All' parameters: {} policyRule: { if: { allOf: [ { field: 'type' equals: 'Microsoft.Compute/virtualMachines' } { anyOf: [ { field: 'Microsoft.Compute/virtualMachines/sku.name' like: 'Standard_F*' } { field: 'Microsoft.Compute/virtualMachines/sku.name' like: 'Standard_G*' } ] } ] } then: { effect: 'deny' } } } }
このポリシー定義は、前にサブスクリプションに適用したものと同じです。 ただし、今回は管理グループにデプロイします。
ポリシー割り当てを追加する
次は、ポリシーを管理グループに適用します。 つまり、この管理グループの子であるすべてのサブスクリプションにポリシーが適用されます。
policyDefinitionName
の変数定義の下に、次の変数を追加します。var policyAssignmentName = 'DenyFandGSeriesVMs'
ファイルの末尾にあるポリシー定義リソースの下に、次のポリシー割り当てを追加します。
resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-05-01' = { name: policyAssignmentName properties: { policyDefinitionId: policyDefinition.id } }
変更をファイルに保存します。
テンプレートを確認する
テンプレートは次のようになります。
targetScope = 'managementGroup'
var policyDefinitionName = 'DenyFandGSeriesVMs'
var policyAssignmentName = 'DenyFandGSeriesVMs'
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2024-05-01' = {
name: policyDefinitionName
properties: {
policyType: 'Custom'
mode: 'All'
parameters: {}
policyRule: {
if: {
allOf: [
{
field: 'type'
equals: 'Microsoft.Compute/virtualMachines'
}
{
anyOf: [
{
field: 'Microsoft.Compute/virtualMachines/sku.name'
like: 'Standard_F*'
}
{
field: 'Microsoft.Compute/virtualMachines/sku.name'
like: 'Standard_G*'
}
]
}
]
}
then: {
effect: 'deny'
}
}
}
}
resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-05-01' = {
name: policyAssignmentName
properties: {
policyDefinitionId: policyDefinition.id
}
}
そうではない場合は、例をコピーするか、例に合わせてテンプレートを調整してください。
テンプレートを Azure にデプロイする
Visual Studio Code ターミナルで、次の Azure CLI コマンドを使用してテンプレートをデプロイします。
managementGroupId="SecretRND"
templateFile="main.bicep"
today=$(date +"%d-%b-%Y")
deploymentName="mg-scope-"$today
az deployment mg create \
--management-group-id $managementGroupId \
--name $deploymentName \
--location westus \
--template-file $templateFile
ターミナルで、Azure PowerShell コマンドを使用してテンプレートをデプロイします。
$managementGroupId = 'SecretRND'
$templateFile = 'main.bicep'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "mg-scope-$today"
New-AzManagementGroupDeployment `
-ManagementGroupId $managementGroupId `
-Name $deploymentName `
-Location westus `
-TemplateFile $templateFile
サブスクリプションのデプロイと同様に、デプロイのメタデータの名前と場所を明示的に指定していることに注目してください。 また、既存のデプロイの名前を使用する可能性を減らすために、今日の日付を使用しています。
デプロイの完了には 1、2 分かかる可能性があります。その後、デプロイが成功したことがわかります。
デプロイを検証する
サブスクリプションスコープのデプロイと同様に、管理グループスコープのデプロイも Azure portal で確認することができます。
Azure ポータルにアクセスします。
左側のペインで、[すべてのサービス] を選択します。
[検索] ボックスに「管理グループ」と入力した後、結果リストの [管理グループ] を選択します。
Secret R&D Projects 管理グループを選びます。
左側のペインの [検索] ボックスに、「デプロイ」と入力した後、[ガバナンス] の下にある [デプロイ] を選択します。
mg-scope で始まるデプロイを選択し、デプロイされたリソースを確認します。
選択したデプロイの [概要] ペインで、[デプロイの詳細] を選択してデプロイします。 2 つの Azure Policy リソースが一覧表示されます。
リソースのクリーンアップ
管理グループスコープのリソースを正常にデプロイしました。 作成したポリシー リソースと管理グループを削除することができます。
az account management-group delete --name SecretRND
Remove-AzManagementGroup -GroupId SecretRND