Ćwiczenie — wdrażanie zasobu objętego zakresem subskrypcji
Ważne
Do wykonania tego ćwiczenia potrzebna jest własna subskrypcja platformy Azure. Ponadto mogą zostać naliczone opłaty. Jeśli nie masz jeszcze subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
Projekt Teddybear jest w pełnym rozkwicie, a zespół badawczy czeka na udzielenie mu dostępu do nowej subskrypcji platformy Azure. Subskrypcja została już utworzona, ale przed udzieleniem zespołowi dostępu należy upewnić się, że wdraża tylko maszyny wirtualne zgodne z zasadami zespołu. Zespół powiedział, że nie chce wdrażać maszyn wirtualnych serii F ani G.
W tym ćwiczeniu utworzysz szablon Bicep, który konfiguruje subskrypcję na podstawie zasad zespołu.
Podczas tego procesu wykonasz następujące czynności:
- Utwórz szablon Bicep, który ma zostać wdrożony w zakresie subskrypcji.
- Dodaj definicję i przypisanie usługi Azure Policy.
- Wdróż szablon i sprawdź wynik.
To ćwiczenie wymaga uprawnień do wdrażania zasobów w zakresie subskrypcji. Jeśli nie możesz spełnić tego wymagania przy użyciu bieżącego konta platformy Azure, możesz uzyskać bezpłatną wersję próbną i utworzyć nową subskrypcję i dzierżawę platformy Azure. Możesz też pominąć kroki wdrażania w tym ćwiczeniu.
W tym ćwiczeniu jest używane rozszerzenie Bicep dla programu Visual Studio Code. Pamiętaj, aby zainstalować to rozszerzenie w programie Visual Studio Code.
Tworzenie szablonu o zakresie subskrypcji
Otwórz Visual Studio Code.
Utwórz nowy plik o nazwie main.bicep.
Zapisz pusty plik, aby program Visual Studio Code ładował narzędzia Bicep.
Możesz wybrać pozycję Plik>Zapisz jako lub wybrać Ctrl+S w systemie Windows (⌘+S w systemie macOS). Pamiętaj, gdzie został zapisany plik. Na przykład możesz utworzyć folder scripts , aby go zapisać.
Dodaj następującą zawartość do pliku main.bicep . Szablon zostanie wdrożony wkrótce. Dobrym pomysłem jest wpisanie go ręcznie zamiast kopiowania i wklejania, dzięki czemu można zobaczyć, jak narzędzie pomaga w pisaniu plików Bicep.
targetScope = 'subscription'
Ten wiersz kodu informuje Bicep, że szablon zostanie wdrożony w zakresie subskrypcji.
Dodawanie definicji zasad
Poniżej dodanego wiersza dodaj następującą definicję zmiennej:
var policyDefinitionName = 'DenyFandGSeriesVMs'
W dolnej części pliku dodaj następującą definicję usługi 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' } } } }
Zwróć uwagę, że definicja zasad ma zastosowanie tylko do zasobów, w których:
- Typ zasobu jest równy
Microsoft.Compute/virtualMachines
. - Właściwość
sku.name
zaczyna się odStandard_F
lubStandard_G
.
Podczas próby utworzenia zasobu zgodnego z tymi warunkami platforma Azure odmówi utworzenia zasobu.
Ostrzeżenie
Należy zachować ostrożność w przypadku używania efektu zasad odmowy dla definicji zasad, szczególnie w szerokim zakresie, takim jak subskrypcje i grupy zarządzania. Jeśli definicja nie została utworzona poprawnie, może mieć nieoczekiwane skutki, które mogą prowadzić do awarii. Lepiej zacząć od efektu zasad inspekcji , a następnie przełączyć się na efekt odmowy dopiero po tym, jak widziałeś, że działa dobrze w danym okresie.
Tworzysz definicję zasad w zakresie subskrypcji. Oznacza to, że po wdrożeniu definicji będzie ona dostępna we wszystkich grupach zasobów w subskrypcji.
- Typ zasobu jest równy
Przypisywanie zasad
Definicja zasad nie ma wpływu, dopóki nie zostanie zastosowana. W tym kroku wdrożysz drugi zasób o zakresie subskrypcji, który stosuje definicję zasad do subskrypcji.
Poniżej definicji zmiennej
policyDefinitionName
dodaj następującą definicję zmiennej:var policyAssignmentName = 'DenyFandGSeriesVMs'
W dolnej części pliku w obszarze zasobu definicji zasad dodaj następujące przypisanie zasad:
resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-05-01' = { name: policyAssignmentName properties: { policyDefinitionId: policyDefinition.id } }
Zwróć uwagę, że nie konfigurujesz jawnie przypisania zasad do zastosowania do całej subskrypcji. Bicep rozumie to, ponieważ szablon zostanie wdrożony w zakresie subskrypcji.
Zapisz zmiany w pliku.
Weryfikowanie szablonu
Szablon powinien wyglądać następująco:
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
}
}
Jeśli tak nie jest, skopiuj przykład lub dostosuj szablon tak, aby był zgodny z przykładem.
Wdrażanie szablonu
Aby wdrożyć ten szablon na platformie Azure, musisz zalogować się na konto platformy Azure z poziomu terminalu programu Visual Studio Code. Upewnij się, że zainstalowano narzędzia interfejsu wiersza polecenia platformy Azure.
W menu Terminal wybierz polecenie New Terminal (Nowy terminal). Okno terminalu zwykle otwiera się w dolnej połowie ekranu.
Jeśli powłoka wyświetlana po prawej stronie okna terminalu jest powłoka bash, prawidłowa powłoka jest otwarta i możesz przejść do następnej sekcji.
Jeśli zostanie wyświetlona powłoka inna niż powłoka bash , wybierz strzałkę listy rozwijanej powłoki, a następnie wybierz pozycję Azure Cloud Shell (Bash).
Na liście powłok terminali wybierz pozycję bash.
W terminalu przejdź do katalogu, w którym zapisano szablon. Jeśli na przykład szablon został zapisany w folderze templates , możesz użyć następującego polecenia:
cd templates
Instalowanie aplikacji Bicep
Uruchom następujące polecenie, aby upewnić się, że masz najnowszą wersję aplikacji Bicep:
az bicep install && az bicep upgrade
Logowanie się do platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure
W terminalu programu Visual Studio Code zaloguj się do platformy Azure, uruchamiając następujące polecenie:
az login
W przeglądarce, która zostanie otwarta, zaloguj się do konta platformy Azure.
W terminalu programu Visual Studio Code zostanie wyświetlona lista subskrypcji skojarzonych z tym kontem.
Na liście znajdź subskrypcję, której chcesz użyć w tym ćwiczeniu.
Jeśli pominięto listę z logowania, możesz użyć poniższego fragmentu kodu, aby ponownie wyświetlić listę subskrypcji.
az account list --output table
Ustaw domyślną subskrypcję dla wszystkich poleceń interfejsu wiersza polecenia platformy Azure uruchamianych w tej sesji.
az account set --subscription "Your Subscription Name or ID"
Aby wdrożyć ten szablon na platformie Azure, zaloguj się do konta platformy Azure z poziomu terminalu programu Visual Studio Code. Upewnij się, że zainstalowano program Azure PowerShell.
W menu Terminal wybierz polecenie New Terminal (Nowy terminal). Okno terminalu zwykle otwiera się w dolnej połowie ekranu.
Jeśli powłoka wyświetlana po prawej stronie okna terminalu to powershell lub pwsh, prawidłowa powłoka jest otwarta i możesz przejść do następnej sekcji.
Jeśli zostanie wyświetlona powłoka inna niż powershell lub pwsh , wybierz strzałkę listy rozwijanej powłoki, a następnie wybierz pozycję PowerShell.
Na liście powłok terminali wybierz pozycję powershell lub pwsh.
W terminalu przejdź do katalogu, w którym zapisano szablon. Jeśli na przykład szablon został zapisany w folderze templates , możesz użyć tego polecenia:
Set-Location -Path templates
Instalowanie interfejsu wiersza polecenia Bicep
Aby użyć aplikacji Bicep z poziomu programu Azure PowerShell, zainstaluj interfejs wiersza polecenia Bicep.
Logowanie się na platformie Azure przy użyciu programu Azure PowerShell
W terminalu programu Visual Studio Code zaloguj się do platformy Azure, uruchamiając następujące polecenie:
Connect-AzAccount
W przeglądarce, która zostanie otwarta, zaloguj się do konta platformy Azure.
Pobierz identyfikator subskrypcji, której chcesz użyć w tym ćwiczeniu, uruchamiając następujące polecenie:
Get-AzSubscription
Identyfikatory subskrypcji znajdują się w drugiej kolumnie. Skopiuj drugą kolumnę. Wygląda to jak aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e4e.
Ustaw domyślną subskrypcję dla wszystkich poleceń programu Azure PowerShell uruchamianych w tej sesji.
Set-AzContext -SubscriptionId {Your subscription ID}
Wdrażanie szablonu na platformie Azure
W terminalu programu Visual Studio Code wdróż szablon przy użyciu następujących poleceń interfejsu wiersza polecenia platformy Azure:
templateFile="main.bicep"
today=$(date +"%d-%b-%Y")
deploymentName="sub-scope-"$today
az deployment sub create \
--name $deploymentName \
--location westus \
--template-file $templateFile
Zwróć uwagę, że tworzysz wdrożenie w zakresie subskrypcji przy użyciu az deployment sub create
polecenia , a nie az deployment group create
polecenia, do którego można użyć polecenia .
W terminalu programu Visual Studio Code wdróż szablon przy użyciu następujących poleceń programu Azure PowerShell:
$templateFile = 'main.bicep'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "sub-scope-$today"
New-AzSubscriptionDeployment `
-Name $deploymentName `
-Location westus `
-TemplateFile $templateFile
Zwróć uwagę, że zamiast polecenia cmdlet , do którego można użyć polecenia cmdlet, zamiast New-AzResourceGroupDeployment
polecenia cmdlet, które można użyć do tworzenia wdrożenia New-AzSubscriptionDeployment
w zakresie subskrypcji.
Należy również zauważyć, że jawnie określasz nazwę i lokalizację wdrożenia. Platforma Azure używa tych informacji do przechowywania metadanych wdrożenia.
Napiwek
Nazwa wdrożenia zawiera bieżącą datę. Dzięki temu będzie mniej prawdopodobne, że przypadkowo użyjesz tej samej nazwy co inne wdrożenie.
Wdrożenie może potrwać minutę lub dwie, a następnie zobaczysz pomyślne wdrożenie.
Uwaga
Jeśli zostanie wyświetlony komunikat o błędzie z kodem AuthorizationFailed, prawdopodobnie nie masz uprawnień do wdrażania zasobów w zakresie subskrypcji. Poproś administratora platformy Azure o przyznanie Ci uprawnień. Alternatywnie, jeśli nie możesz spełnić tego wymagania przy użyciu bieżącego konta platformy Azure, możesz uzyskać bezpłatną wersję próbną i utworzyć nową subskrypcję i dzierżawę platformy Azure.
Weryfikowanie wdrożenia
Wdrożenia w zakresie subskrypcji można wyświetlić w witrynie Azure Portal. Może to być przydatne, aby sprawdzić, czy wdrożenie zakończyło się pomyślnie i sprawdzić wyniki.
Przejdź do portalu Azure Portal.
W okienku po lewej stronie wybierz pozycję Subskrypcje.
Wybierz subskrypcję.
W polu Wyszukaj wprowadź ciąg Wdrożenia, a następnie wybierz element menu Wdrożenia.
W kolumnie Nazwa wdrożenia wybierz wdrożenie rozpoczynające się od zakresu podrzędnego, aby zobaczyć, jakie zasoby zostały wdrożone.
Wybierz pozycję Szczegóły wdrożenia, aby ją rozwinąć. W tym przypadku są wyświetlane dwa zasoby usługi Azure Policy.
Oczyszczanie zasobów
Pomyślnie wdrożono zasoby o zakresie subskrypcji. Możesz usunąć utworzone zasoby zasad, uruchamiając następujące polecenia:
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
W następnej lekcji ćwiczenia ponownie wdrożysz te same zasoby zasad. Zostaną one utworzone ponownie, ale można je wyczyścić ponownie później.