Упражнение. Развертывание ресурса, входящего в область подписки
Внимание
Для выполнения этого упражнения вам нужна собственная подписка Azure. При этом с вас может взиматься плата. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
Проект Teddybear уже выполняется, и команда исследований и разработок ожидает предоставления доступа к новой подписке Azure. Вы уже создали подписку, но прежде чем предоставлять команде к ней доступ необходимо убедиться, что она развертывает только виртуальные машины, соответствующие политикам команды. Команда сообщила, что развертывание виртуальных машин серии F или G не требуется.
В этом упражнении вы создадите шаблон Bicep, который настраивает подписку на основе политик команды.
В процессе вы:
- Создайте шаблон Bicep для развертывания в области подписки.
- Добавьте определение и назначение политики Azure.
- Разверните шаблон и проверьте результат.
Для выполнения этого упражнения требуется разрешение на развертывание ресурсов с областью действия подписки. Если вы не можете получить это разрешение для своей текущей учетной записи Azure, то можно использовать бесплатную пробную версию и создать новую подписку Azure и клиента. Кроме того, можно пропустить шаги по развертыванию в этом упражнении.
В этом упражнении используется расширение Bicep для Visual Studio Code. Убедитесь, что это расширение установлено в Visual Studio Code.
Создание шаблона, входящего в область подписки
Откройте Visual Studio Code.
Создайте файл с именем main.bicep.
Сохраните пустой файл, куда Visual Studio Code загрузит средства Bicep.
Можно выбрать Файл>Сохранить как или нажать клавиши CTRL+S в Windows (⌘+S в macOS). Обязательно запомните, где сохранен файл. Например, можно создать для него папку scripts.
Добавьте в файл main.bicep указанное ниже содержимое. Скоро вы развернете шаблон. Лучше ввести его вручную, а не копировать. Так вы сможете научиться писать файлы Bicep с помощью инструментов.
targetScope = 'subscription'
Эта строка кода сообщает 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' } } } }
Обратите внимание, что определение политики применяется только к ресурсам, в которых:
- Для типа ресурса задано значение
Microsoft.Compute/virtualMachines
. - Свойство
sku.name
начинается или сStandard_F
, или сStandard_G
.
При попытке создать ресурс, соответствующий этим условиям, Azure запрещает создание ресурсов.
Предупреждение
Будьте внимательны при использовании эффекта политики запрета для определений политик, особенно в широких областях, таких как подписки и группы управления. Если определение не создано должным образом, это может привести к непредвиденным последствиям и простоям. Лучше начать с применения политики аудита, а затем переключиться на политику запрета после того, как вы убедились, что она хорошо работает в течение некоторого периода времени.
Определение политики создается в области действия подписки. Это означает, что после развертывания определения оно будет доступно во всех группах ресурсов в подписке.
- Для типа ресурса задано значение
Назначение политики
Определение политики начинает действовать только после применения. На этом шаге вы развернете второй ресурс с областью действия подписки, который применяет определение политики к подписке.
Под определением переменной
policyDefinitionName
добавьте следующее определение переменной:var policyAssignmentName = 'DenyFandGSeriesVMs'
В нижней части файла под ресурсом определения политики добавьте следующее назначение политики:
resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-05-01' = { name: policyAssignmentName properties: { policyDefinitionId: policyDefinition.id } }
Обратите внимание, что назначение политики не настраивается явно для применения ко всей подписке. Bicep понимает это, так как шаблон будет развернут в области подписки.
Сохраните изменения в файле.
Проверка шаблона
Ваш шаблон должен выглядеть следующим образом:
targetScope = 'subscription'
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, необходимо войти в свою учетную запись Azure из терминала Visual Studio Code. Убедитесь, что средства Azure CLI установлены.
В меню Терминал выберите Новый терминал. Окно терминала обычно открывается в нижней половине экрана.
Если окно терминала отображает bash справа , это означает, что правильная оболочка уже открыта. Кроме того, если вы видите значок оболочки Bash справа, его можно выбрать для запуска оболочки.
Если появится оболочка, отличной от bash , выберите стрелку раскрывающегося списка оболочки и выберите Git Bash.
Перейдите в терминале в каталог, где сохранили свой шаблон. Например, если вы сохранили его в папке templates, можно использовать следующую команду:
cd templates
Установка Bicep
Выполните следующую команду, чтобы убедиться, что у вас установлена последняя версия Bicep:
az bicep install && az bicep upgrade
Вход в Azure с помощью Azure CLI
В окне терминала Visual Studio Code войдите в Azure, выполнив следующую команду:
az login
В открывшемся браузере войдите в свою учетную запись Azure.
Терминал Visual Studio Code отобразит список подписок, связанных с данной учетной записью.
В списке найдите подписку, которую вы хотите использовать для этого упражнения.
Если вы пропустили список при входе, можно использовать следующий фрагмент кода для повторного составления списка подписок.
az account list --output table
Установите подписку по умолчанию для всех команд Azure CLI, которые выполняются во время этого сеанса:
az account set --subscription "Your Subscription Name or ID"
Чтобы развернуть этот шаблон в Azure, войдите в свою учетную запись Azure из терминала Visual Studio Code. Убедитесь, что Azure PowerShell установлено.
В меню Терминал выберите Новый терминал. Окно терминала обычно открывается в нижней половине экрана.
Если окно терминала отображает pwsh или powershell справа, это означает, что правильная оболочка уже открыта. Кроме того, если вы видите значок оболочки PowerShell справа, его можно выбрать для запуска оболочки.
Если появится оболочка, отличной от pwsh или PowerShell , выберите стрелку раскрывающегося списка оболочки и выберите PowerShell.
Перейдите в терминале в каталог, где сохранили свой шаблон. Например, если вы сохранили его в папке templates, можно использовать следующую команду:
Set-Location -Path templates
Установите Bicep CLI
Чтобы использовать Bicep из Azure PowerShell, установите Bicep CLI.
Вход в Azure с помощью Azure PowerShell
В окне терминала Visual Studio Code войдите в Azure, выполнив следующую команду:
Connect-AzAccount
В открывшемся браузере войдите в свою учетную запись Azure.
Получите идентификатор подписки, которую вы хотите использовать для этого упражнения, выполнив следующую команду:
Get-AzSubscription
Идентификатор подписки находится во втором столбце. Скопируйте второй столбец. Он выглядит примерно так, как aaaa0a0a-bb1b-cc2c-dd3d-eeee4e4e4e4e4e4e4e.
Установите подписку по умолчанию для всех команд Azure PowerShell, которые вы выполняете в этом сеансе:
Set-AzContext -SubscriptionId {Your subscription ID}
Развертывание шаблона в Azure
В терминале Visual Studio Code разверните шаблон с помощью следующих команд Azure CLI:
templateFile="main.bicep"
today=$(date +"%d-%b-%Y")
deploymentName="sub-scope-"$today
az deployment sub create \
--name $deploymentName \
--location westus \
--template-file $templateFile
Обратите внимание, что вы создаете развертывание в области подписки с помощью команды az deployment sub create
, а не команды az deployment group create
, которую можно было бы использовать.
В терминале Visual Studio Code разверните шаблон с помощью следующих команд Azure PowerShell:
$templateFile = 'main.bicep'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "sub-scope-$today"
New-AzSubscriptionDeployment `
-Name $deploymentName `
-Location westus `
-TemplateFile $templateFile
Обратите внимание, что вы создаете развертывание в области подписки с помощью командлета New-AzSubscriptionDeployment
, а не командлета New-AzResourceGroupDeployment
, который можно было бы использовать.
Кроме того, обратите внимание, что вы явно указываете имя и расположение для развертывания. Azure использует эти сведения для хранения метаданных развертывания.
Совет
Имя развертывания включает сегодняшнюю дату. Это снижает вероятность случайного использования одного имени в нескольких развертываниях.
Развертывание может занять до двух минут. Затем отобразится сообщение об успешном выполнении.
Примечание.
Если вы получаете сообщение об ошибке с кодом AuthorizationFailed, возможно, у вас отсутствуют разрешения на развертывание ресурсов с областью действия подписки. Попросите администратора Azure предоставить вам разрешения. С другой стороны, если невозможно удовлетворить это требование для своей текущей учетной записи Azure, то можно получить бесплатную пробную версию и создать новую подписку Azure и клиента.
Проверка развертывания
На портале Azure можно просмотреть развертывания в области подписки. Это может быть полезно для проверки успешного завершения развертывания и проверки результатов.
Переход на портал Azure.
В левой области выберите вкладку Подписки.
Выберите свою подписку.
В поле поиска введите Развертывания, а затем выберите пункт меню Развертывания.
В столбце Имя развертывания выберите развертывание, имя которого начинается с sub-scope, чтобы просмотреть развернутые ресурсы.
Выберите пункт Сведения о развертывании, чтобы развернуть его. В этом случае в списке указаны два ресурса Политики Azure.
Очистка ресурсов
Вы успешно развернули ресурсы, входящие в область подписки. Удалить созданные ресурсы политики можно, выполнив следующие команды:
subscriptionId=$(az account show --query 'id' --output tsv)
az policy assignment delete --name 'DenyFandGSeriesVMs' --scope "/subscriptions/$subscriptionId"
az policy definition delete --name 'DenyFandGSeriesVMs' --subscription $subscriptionId
$subscriptionId = (Get-AzContext).Subscription.Id
Remove-AzPolicyAssignment -Name 'DenyFandGSeriesVMs' -Scope "/subscriptions/$subscriptionId"
Remove-AzPolicyDefinition -Name 'DenyFandGSeriesVMs' -SubscriptionId $subscriptionId
В следующем модуле упражнения вы повторно развернете те же ресурсы политики. Они будут созданы повторно, но после этого их можно будет очистить.