練習 - 將資源部署至管理群組
Project Teddybear 成功,而且現在在您的玩具公司進行的秘密 R&D 開發準備好研究更多新的玩具。 該小組開始近乎每天都會像您要求新訂用帳戶,且需要在所有訂用帳戶上套用他們的原則。
您已決定將該小組所有的訂用帳戶放在管理群組內,而不是在每個訂用帳戶中複製原則定義和指派。 然後,您便可以將原則套用至整個管理群組,而不是個別套用至每個訂用帳戶。
在此練習中,您將建立新的 Bicep 範本,以將原則定義和指派套用至管理群組。
在此過程中,您將會:
- 建立新的管理群組。
- 建立以管理群組作為範圍的新 Bicep 檔案。
- 將 Azure 原則資源新增至該檔案。
- 手動建構資源識別碼,來將原則指派連結至原則定義。
- 部署範本並驗證結果。
此練習需要下列先決條件:
- 必須在您的 Azure 租用戶上啟用管理群組。
- 您需要在階層內建立新管理群組的權限。
- 您需要將 Azure 原則資源部署到管理群組的權限。
如果您無法使用目前的 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 原則定義:
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
請注意,如同訂用帳戶部署,您會明確指定部署中繼資料的名稱和位置。 然後,您會使用今天的日期,來降低使用現有部署名稱的機會。
部署可能需要一到兩分鐘的時間才能完成,然後您會看到成功的部署。
檢查部署
如同訂用帳戶範圍部署,您可以在 Azure 入口網站中檢視管理群組範圍部署。
前往 Azure 入口網站。
在左窗格中,選取 [所有服務]。
在 [ 搜尋 ] 方塊中,輸入 管理群組,然後在結果清單中選取 [管理群組 ]。
選取 [ 秘密 R&D 專案 ] 管理群組。
在左窗格的 [搜尋] 方塊中,輸入 [部署],然後選取 [治理] 下的 [部署]。
選取以 [mg-scope] 開頭的部署,來查看已部署哪些資源。
在所選部署的 [概觀] 窗格上,選取 [部署詳細資料] 以將其展開。 即會列出兩個 Azure 原則資源。
清除資源
您已成功部署管理群組範圍資源。 您可以移除您已建立的原則資源和管理群組。
az account management-group delete --name SecretRND
Remove-AzManagementGroup -GroupId SecretRND