Samouczek: Integracja z usługą Azure Key Vault podczas wdrażania szablonu usługi ARM

Dowiedz się, jak pobierać wpisy tajne z magazynu kluczy platformy Azure i przekazywać wpisy tajne jako parametry podczas wdrażania szablonu usługi Azure Resource Manager (szablon usługi ARM). Wartość parametru nigdy nie jest uwidoczniona, ponieważ odwołujesz się tylko do jego identyfikatora magazynu kluczy. Wpis tajny magazynu kluczy można odwoływać się przy użyciu identyfikatora statycznego lub identyfikatora dynamicznego. W tym samouczku jest używany statyczny identyfikator. Podejście do statycznego identyfikatora oznacza odwołanie do magazynu kluczy w pliku parametrów szablonu, a nie pliku szablonu. Aby uzyskać więcej informacji na temat obu podejść, zobacz Use Azure Key Vault to pass secure parameter value during deployment (Używanie usługi Azure Key Vault do przekazywania bezpiecznej wartości parametru podczas wdrażania).

W samouczku Ustawianie kolejności wdrażania zasobów utworzysz maszynę wirtualną. Musisz podać nazwę użytkownika i hasło administratora maszyny wirtualnej. Zamiast po podaniu hasła można wstępnie zapisać hasło w magazynie kluczy platformy Azure, a następnie dostosować szablon w celu pobrania hasła z magazynu kluczy podczas wdrażania.

Diagram przedstawiający integrację szablonu Resource Manager z magazynem kluczy

Ten samouczek obejmuje następujące zadania:

  • Przygotowanie magazynu kluczy
  • Otwieranie szablonu szybkiego startu
  • Edytowanie pliku parametrów
  • Wdrożenie szablonu
  • Weryfikowanie wdrożenia
  • Czyszczenie zasobów

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

Aby zapoznać się z modułem Learn korzystającym z bezpiecznej wartości z magazynu kluczy, zobacz Manage complex cloud deployments by using advanced ARM template features (Zarządzanie złożonymi wdrożeniami w chmurze przy użyciu zaawansowanych funkcji szablonu usługi ARM).

Wymagania wstępne

Aby ukończyć pracę z tym artykułem, potrzebne są następujące zasoby:

Przygotowanie magazynu kluczy

W tej sekcji utworzysz magazyn kluczy i dodasz do niego wpis tajny, aby można było pobrać wpis tajny podczas wdrażania szablonu. Istnieje wiele sposobów tworzenia magazynu kluczy. W tym samouczku użyjesz Azure PowerShell do wdrożenia szablonu usługi ARM. Ten szablon wykonuje dwie czynności:

  • Tworzy magazyn kluczy z włączoną właściwością enabledForTemplateDeployment . Ta właściwość musi mieć wartość true , zanim proces wdrażania szablonu będzie mógł uzyskać dostęp do wpisów tajnych zdefiniowanych w magazynie kluczy.
  • Dodaje wpis tajny do magazynu kluczy. Wpis tajny przechowuje hasło administratora maszyny wirtualnej.

Uwaga

Jako użytkownik wdrażający szablon maszyny wirtualnej, jeśli nie jesteś właścicielem lub współautorem magazynu kluczy, właściciel lub współautor musi udzielić Ci dostępu do Microsoft.KeyVault/vaults/deploy/action uprawnienia magazynu kluczy. Aby uzyskać więcej informacji, zobacz Use Azure Key Vault to pass a secure parameter value during deployment (Używanie usługi Azure Key Vault do przekazywania bezpiecznej wartości parametru podczas wdrażania).

Aby uruchomić następujący skrypt Azure PowerShell, wybierz pozycję Wypróbuj, aby otworzyć Cloud Shell. Aby wkleić skrypt, kliknij prawym przyciskiem myszy okienko powłoki, a następnie wybierz polecenie Wklej.

$projectName = Read-Host -Prompt "Enter a project name that is used for generating resource names"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"
$upn = Read-Host -Prompt "Enter your user principal name (email address) used to sign in to Azure"
$secretValue = Read-Host -Prompt "Enter the virtual machine administrator password" -AsSecureString

$resourceGroupName = "${projectName}rg"
$keyVaultName = $projectName
$adUserId = (Get-AzADUser -UserPrincipalName $upn).Id
$templateUri = "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/tutorials-use-key-vault/CreateKeyVault.json"

New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri $templateUri -keyVaultName $keyVaultName -adUserId $adUserId -secretValue $secretValue

Write-Host "Press [ENTER] to continue ..."

Ważne

  • Nazwa grupy zasobów to nazwa projektu, ale z dołączonym elementem rg . Aby ułatwić czyszczenie zasobów utworzonych w tym samouczku, użyj tej samej nazwy projektu i nazwy grupy zasobów podczas wdrażania następnego szablonu.
  • Domyślną nazwą wpisu tajnego jest vmAdminPassword. Jest on zakodowany na stałe w szablonie.
  • Aby umożliwić szablonowi pobranie wpisu tajnego, należy włączyć zasady dostępu o nazwie Włącz dostęp do usługi Azure Resource Manager na potrzeby wdrażania szablonu dla magazynu kluczy. Te zasady są włączone w szablonie. Aby uzyskać więcej informacji na temat zasad dostępu, zobacz Wdrażanie magazynów kluczy i wpisów tajnych.

Szablon ma jedną wartość wyjściową o nazwie keyVaultId. Użyjesz tego identyfikatora wraz z nazwą wpisu tajnego, aby pobrać wartość wpisu tajnego w dalszej części samouczka. Format identyfikatora zasobu to:

/subscriptions/<SubscriptionID>/resourceGroups/mykeyvaultdeploymentrg/providers/Microsoft.KeyVault/vaults/<KeyVaultName>

Podczas kopiowania i wklejania identyfikatora może on zostać podzielony na wiele wierszy. Scal wiersze i przycina dodatkowe spacje.

Aby zweryfikować wdrożenie, uruchom następujące polecenie programu PowerShell w tym samym okienku powłoki, aby pobrać wpis tajny w postaci zwykłego tekstu. Polecenie działa tylko w tej samej sesji powłoki, ponieważ używa zmiennej , która jest zdefiniowana w poprzednim skry $keyVaultNameskryptzie programu PowerShell.

$secret = Get-AzKeyVaultSecret -VaultName $keyVaultName -Name "vmAdminPassword"
$ssPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secret.SecretValue)
try {
   $secretValueText = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ssPtr)
} finally {
   [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)
}
Write-Output $secretValueText

Teraz przygotowano magazyn kluczy i wpis tajny. W poniższych sekcjach pokazano, jak dostosować istniejący szablon w celu pobrania wpisu tajnego podczas wdrażania.

Otwieranie szablonu szybkiego startu

Szablony szybkiego startu platformy Azure to repozytorium szablonów usługi ARM. Zamiast tworzyć szablon od podstaw, możesz znaleźć szablon przykładowy i zmodyfikować go. Szablon używany w tym samouczku nosi nazwę Deploy a simple Windows VM (Wdrażanie prostej maszyny wirtualnej z systemem Windows).

  1. W Visual Studio Code wybierz pozycję Plik>Otwórz plik.

  2. W polu Nazwa pliku wklej następujący adres URL:

    https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.json
    
  3. Wybierz pozycję Open (Otwórz), aby otworzyć plik. Scenariusz jest taki sam jak scenariusz używany w artykule Samouczek: tworzenie szablonów usługi ARM z zasobami zależnymi. Szablon definiuje sześć zasobów:

    Warto mieć podstawową wiedzę na temat szablonu przed jego dostosowaniem.

  4. Wybierz pozycję Plik>Zapisz jako, a następnie zapisz kopię pliku na komputerze lokalnym o nazwie azuredeploy.json.

  5. Powtórz kroki od 1 do 3, aby otworzyć następujący adres URL, a następnie zapisz plik jako azuredeploy.parameters.json.

    https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.parameters.json
    

Edytowanie pliku parametrów

Korzystając z metody statycznego identyfikatora, nie trzeba wprowadzać żadnych zmian w pliku szablonu. Pobieranie wartości wpisu tajnego odbywa się przez skonfigurowanie pliku parametrów szablonu.

  1. W Visual Studio Code otwórz plik azuredeploy.parameters.json, jeśli jeszcze nie jest otwarty.

  2. Zaktualizuj parametr na adminPassword :

    "adminPassword": {
      "reference": {
        "keyVault": {
          "id": "/subscriptions/<SubscriptionID>/resourceGroups/mykeyvaultdeploymentrg/providers/Microsoft.KeyVault/vaults/<KeyVaultName>"
        },
        "secretName": "vmAdminPassword"
      }
    },
    

    Ważne

    Zastąp wartość parametru id identyfikatorem zasobu magazynu kluczy utworzonego w poprzedniej procedurze. Element secretName jest zakodowany na stałe jako vmAdminPassword. Zobacz Przygotowywanie magazynu kluczy.

    Integrowanie magazynu kluczy i pliku parametrów wdrażania maszyny wirtualnej szablonu Resource Manager

  3. Zaktualizuj następujące wartości:

    • adminUsername: nazwa konta administratora maszyny wirtualnej.
    • dnsLabelPrefix: Nadaj nazwę dnsLabelPrefix wartości.

    Przykłady nazw można znaleźć na powyższym obrazie.

  4. Zapisz zmiany.

Wdrożenie szablonu

  1. Zaloguj się do Cloud Shell.

  2. Wybierz preferowane środowisko, wybierając program PowerShell lub powłokę Bash (dla interfejsu wiersza polecenia) w lewym górnym rogu. Po przełączeniu wymagane jest ponowne uruchomienie powłoki.

    Azure Portal Cloud Shell przekazać plik

  3. Wybierz pozycję Przekaż/pobierz pliki, a następnie wybierz pozycję Przekaż. Przekaż pliki azuredeploy.json i azuredeploy.parameters.json do Cloud Shell. Po przekazaniu pliku możesz użyć ls polecenia i cat polecenia , aby sprawdzić, czy plik został przekazany pomyślnie.

  4. Uruchom następujący skrypt programu PowerShell, aby wdrożyć szablon.

    $projectName = Read-Host -Prompt "Enter the same project name that is used for creating the key vault"
    $location = Read-Host -Prompt "Enter the same location that is used for creating the key vault (i.e. centralus)"
    $resourceGroupName = "${projectName}rg"
    
    New-AzResourceGroupDeployment `
        -ResourceGroupName $resourceGroupName `
        -TemplateFile "$HOME/azuredeploy.json" `
        -TemplateParameterFile "$HOME/azuredeploy.parameters.json"
    
    Write-Host "Press [ENTER] to continue ..."
    

    Podczas wdrażania szablonu użyj tej samej grupy zasobów, która została użyta w magazynie kluczy. Takie podejście ułatwia czyszczenie zasobów, ponieważ trzeba usunąć tylko jedną grupę zasobów zamiast dwóch.

Weryfikowanie wdrożenia

Po pomyślnym wdrożeniu maszyny wirtualnej przetestuj poświadczenia logowania przy użyciu hasła przechowywanego w magazynie kluczy.

  1. Otwórz witrynę Azure Portal.

  2. Wybierz pozycję Grupy>< zasobówYourResourceGroupName>>simpleWinVM.

  3. Wybierz pozycję Połącz u góry.

  4. Wybierz pozycję Pobierz plik RDP, a następnie postępuj zgodnie z instrukcjami, aby zalogować się do maszyny wirtualnej przy użyciu hasła przechowywanego w magazynie kluczy.

Czyszczenie zasobów

Jeśli zasoby platformy Azure nie są już potrzebne, wyczyść wdrożone zasoby, usuwając grupę zasobów.

$projectName = Read-Host -Prompt "Enter the same project name that is used for creating the key vault"
$resourceGroupName = "${projectName}rg"

Remove-AzResourceGroup -Name $resourceGroupName

Write-Host "Press [ENTER] to continue ..."

Następne kroki

W tym samouczku pobrano wpis tajny z usługi Azure Key Vault. Następnie użyto wpisu tajnego we wdrożeniu szablonu. Aby dowiedzieć się, jak wykonać zadania po wdrożeniu przy użyciu rozszerzenia maszyny wirtualnej, zobacz: