Ćwiczenia — zarządzanie wpisami tajnymi w szablonie usługi ARM
W poprzednim ćwiczeniu uruchomiono podstawowy szablon usługi Azure Resource Manager (ARM), który aprowiduje maszynę wirtualną z systemem Linux. W tej części zaobserwujesz podobny proces.
Tym razem zamiast przekazywania hasła jako parametru przechowasz je w usłudze Azure Key Vault. Aby włączyć szablon usługi ARM w celu uzyskania dostępu do hasła, utworzysz plik parametrów, który odwołuje się do wpisu tajnego magazynu kluczy w subskrypcji.
Wdrażanie usługi Azure Key Vault
Uwaga
Ze względu na ograniczenia piaskownicy w tym miejscu utworzysz magazyn kluczy w usłudze Azure Key Vault z poziomu portalu Azure Portal. Zwykle magazyn kluczy w programie Azure PowerShell tworzy się za pomocą polecenia cmdlet New-AzKeyVault
.
Tworzenie magazynu kluczy i zezwalanie na dostęp do czasu wdrażania. Aby to zrobić:
Utwórz zmienną programu PowerShell, która zawiera nazwę magazynu kluczy:
$KVNAME="tailwind-secrets" + (Get-Random -Count 1 -Maximum 9999999)
Uruchom
$KVNAME
, aby wydrukować jego wartość:$KVNAME
Dane wyjściowe wyglądają tak (wyświetlona będzie inna liczba):
tailwind-secrets5978564
Skopiuj wartość do wygodnego miejsca na potrzeby następnego kroku.
Zaloguj się do witryny Azure Portal przy użyciu tego samego konta, za pomocą którego aktywowano piaskownicę.
W menu witryny Azure Portal lub na stronie głównej wybierz pozycję Utwórz zasób.
W polu wyszukiwania wprowadź magazyn kluczy.
Wybierz z listy pozycję Key Vault i wybierz pozycję Utwórz, aby rozpocząć konfigurowanie magazynu kluczy.
W okienku tworzenia określ następujące wartości:
- Grupa zasobów:
nazwa grupy zasobów . - Nazwa magazynu kluczy: Wartość
$KVNAME
, na przykład tailwind-secrets5978564.
- Grupa zasobów:
Wybierz pozycję Przejrzyj i utwórz.
Wybierz pozycję Utwórz. Powinno to zająć około minutę. Po utworzeniu zasobu wybierz pozycję Przejdź do zasobu.
Wybierz pozycję Konfiguracja dostępu w obszarze Ustawienia. Włącz opcję Azure Resource Manager na potrzeby wdrażania szablonu i wybierz pozycję Zastosuj.
W sesji programu PowerShell uruchom polecenie
ConvertTo-SecureString
cmdlet i przypisz wynik do zmiennejsecretSecureString
:$secretSecureString = ConvertTo-SecureString 'insecurepassword123!' -AsPlainText -Force
Uruchom następujące polecenie
Set-AzKeyVaultSecret
, aby utworzyć wpis tajny w magazynie kluczy. Wpis tajny ma nazwęvmPassword
, którego wartością jestinsecurepassword123!
:$secret = Set-AzKeyVaultSecret -VaultName $KVNAME -Name vmPassword -SecretValue $secretSecureString
Tworzenie pliku parametrów
Tutaj utworzysz plik parametrów, który zawiera nazwę maszyny wirtualnej, nazwę użytkownika administratora oraz odwołanie do hasła maszyny wirtualnej w magazynie kluczy.
Parametry można przekazać do szablonów z wiersza polecenia. Przypomnij sobie, że plik parametrów jest alternatywnym sposobem przekazywania parametrów do szablonu usługi ARM podczas wdrażania. Plik parametrów pozwala uzyskać dostęp do tajnych wpisów magazynu kluczy z szablonu.
Uruchom następujące polecenie
Get-AzKeyVault
w celu wydrukowania identyfikatora magazynu kluczy:Get-AzKeyVault -VaultName $KVNAME | Select-Object -ExpandProperty ResourceId
Dane wyjściowe będą wyglądać mniej więcej tak:
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
Zwróć uwagę na dane wyjściowe w przypadku następnego kroku.
W programie Visual Studio Code utwórz plik o nazwie azuredeploy.parameters.json w tym samym katalogu, który zawiera plik azuredeploy.json.
Dodaj tę zawartość do pliku azuredeploy.parameters.json:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "adminUsername": { "value": "azureuser" }, "vmName": { "value": "vm2" }, "adminPasswordOrKey": { "reference": { "keyVault": { "id": "" }, "secretName": "vmPassword" } } } }
Zastąp wartość
id
(pusty ciąg) wartością skopiowaną w poprzednim kroku. Następnie zapisz plik.
Wdrażanie maszyny wirtualnej z systemem Linux
Tutaj możesz wdrożyć ten sam szablon usługi ARM, który wdrożono w poprzednim ćwiczeniu. Tym razem podajesz plik parametrów odwołujący się do hasła maszyny wirtualnej w magazynie kluczy.
Uruchom następujące polecenie
New-AzResourceGroupDeployment
:New-AzResourceGroupDeployment ` -TemplateFile "./azuredeploy.json" ` -TemplateParameterFile "./azuredeploy.parameters.json" ` -dnsLabelPrefix ("vm2-" + (Get-Random -Count 1 -Maximum 9999999))
W poprzednim ćwiczeniu każdą parę klucz-wartość podano bezpośrednio z wiersza polecenia. Tutaj określasz
"./azuredeploy.parameters.json"
, aby podać plik parametrów.Parametr
dnsLabelPrefix
ma wartośćvm2-
, po której następuje losowa liczba. Jest to wymagane w celu upewnienia się, że nazwa DNS różni się od nazwy DNS użytej w poprzednim ćwiczeniu.
Weryfikowanie wdrożenia
Sprawdź, czy maszyna wirtualna została ustanowiona i czy można połączyć się z nią za pośrednictwem protokołu SSH. Aby to zrobić:
Uruchom polecenie
Invoke-Expression
, aby uzyskać połączenie z maszyną wirtualną za pośrednictwem protokołu SSH:Invoke-Expression (Get-AzResourceGroupDeployment -Name azuredeploy -ResourceGroupName <rgn>your resource group</rgn>).outputs.sshCommand.value
Po wyświetleniu monitu wprowadź ,
yes
aby kontynuować nawiązywanie połączenia. Następnie wprowadź hasło administratora.insecurepassword123!
Ważne
W praktyce stosuj bezpieczne hasła. Ponadto można użyć uwierzytelniania przy użyciu klucza publicznego, które jest zwykle bezpieczniejsze niż używanie haseł.
Z poziomu połączenia SSH z maszyną wirtualną uruchom polecenie
hostname
, aby wyświetlić nazwę hosta maszyny wirtualnej:hostname
Zostanie wyświetlona wewnętrzna nazwa hosta maszyny wirtualnej:
vm1
vm2
Uruchom polecenie
exit
, aby opuścić sesję SSH.exit
Świetnie! Wdrożenie zostało rozszerzone tak, aby zawierało plik parametrów, który odczytuje tajne informacje z magazynu kluczy.
Wdrażanie usługi Azure Key Vault
W usłudze Azure Key Vault utwórz magazyn kluczy i dodaj hasło maszyny wirtualnej jako bezpieczny wpis tajny. Aby to zrobić:
Utwórz zmienną Bash, która zawiera nazwę magazynu kluczy.
KVNAME=tailwind-secrets$RANDOM
Nazwy magazynów kluczy muszą być unikatowe. Część
$RANDOM
gwarantuje, że nazwa wystąpienia magazynu kluczy zostanie zakończona losową serią liczb.Uruchom następujące polecenie
az keyvault create
, aby utworzyć magazyn kluczy:az keyvault create \ --name $KVNAME \ --enabled-for-template-deployment true
Argument
--enabled-for-template-deployment
zezwala szablonowi usługi Azure Resource Manager (ARM) na pobieranie wpisów tajnych z magazynu kluczy.Uruchom następujące polecenie
az keyvault secret set
, aby utworzyć wpis tajny w magazynie kluczy. Wpis tajny ma nazwęvmPassword
, którego wartością jestinsecurepassword123!
:az keyvault secret set \ --vault-name $KVNAME \ --name vmPassword \ --value 'insecurepassword123!'
Tworzenie pliku parametrów
Tutaj utworzysz plik parametrów, który zawiera nazwę maszyny wirtualnej, nazwę użytkownika administratora oraz odwołanie do hasła maszyny wirtualnej w magazynie kluczy.
Parametry można przekazać do szablonów z wiersza polecenia. Przypomnij sobie, że plik parametrów jest alternatywnym sposobem przekazywania parametrów do szablonu usługi ARM podczas wdrażania. Plik parametrów pozwala uzyskać dostęp do tajnych wpisów magazynu kluczy z szablonu.
Uruchom następujące polecenie
az keyvault show
w celu wydrukowania identyfikatora magazynu kluczy:az keyvault show \ --name $KVNAME \ --query id \ --output tsv
Dane wyjściowe będą wyglądać mniej więcej tak:
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
Zwróć uwagę na dane wyjściowe w przypadku następnego kroku.
W programie Visual Studio Code utwórz plik o nazwie azuredeploy.parameters.json w tym samym katalogu, który zawiera plik azuredeploy.json.
Dodaj tę zawartość do pliku azuredeploy.parameters.json:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "adminUsername": { "value": "azureuser" }, "vmName": { "value": "vm2" }, "adminPasswordOrKey": { "reference": { "keyVault": { "id": "" }, "secretName": "vmPassword" } } } }
Zastąp wartość
id
(pusty ciąg) wartością skopiowaną w poprzednim kroku. Następnie zapisz plik.
Wdrażanie maszyny wirtualnej z systemem Linux
Tutaj możesz wdrożyć ten sam szablon usługi ARM, który wdrożono w poprzednim ćwiczeniu. Tym razem podajesz plik parametrów odwołujący się do hasła maszyny wirtualnej w magazynie kluczy.
Uruchom następujące polecenie az deployment group create
w celu wdrożenia szablonu:
az deployment group create \
--template-file azuredeploy.json \
--parameters @azuredeploy.parameters.json dnsLabelPrefix="vm2-$RANDOM"
W poprzednim ćwiczeniu każdą parę klucz-wartość podano w argumencie --parameters
. Tutaj określasz @azuredeploy.parameters.json
, aby podać plik parametrów.
Parametr dnsLabelPrefix
ma wartość vm2-
, po której następuje losowa liczba. Jest to wymagane w celu upewnienia się, że nazwa DNS różni się od nazwy DNS użytej w poprzednim ćwiczeniu.
Weryfikowanie wdrożenia
Tak jak w poprzednim ćwiczeniu, sprawdź, czy maszyna wirtualna została ustanowiona i czy można połączyć się z nią za pośrednictwem protokołu SSH. Dla zwięzłości tym razem pominiesz kilka kroków pośrednich.
W celu nawiązania połączenia z maszyną wirtualną za pośrednictwem protokołu SSH wykonaj następujące czynności:
$(az deployment group show \ --name azuredeploy \ --query properties.outputs.sshCommand.value \ --output tsv)
Po wyświetleniu monitu wprowadź ,
yes
aby kontynuować nawiązywanie połączenia. Następnie wprowadź hasło administratora.insecurepassword123!
Z poziomu połączenia SSH z maszyną wirtualną uruchom polecenie
hostname
, aby wyświetlić nazwę hosta maszyny wirtualnej:hostname
Zostanie wyświetlona wewnętrzna nazwa hosta maszyny wirtualnej:
vm2
vm2
Uruchom polecenie
exit
, aby opuścić sesję SSH.exit
Świetnie! Wdrożenie zostało rozszerzone tak, aby zawierało plik parametrów, który odczytuje tajne informacje z magazynu kluczy.