Udostępnij za pośrednictwem


Samouczek: integrowanie usługi Azure Key Vault we wdrożeniu 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 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 dostarczać hasło, możesz wstępnie zapisać hasło w magazynie kluczy platformy Azure, a następnie dostosować szablon, aby pobrać hasło z magazynu kluczy podczas wdrażania.

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

Ten samouczek obejmuje następujące zadania:

  • Przygotowanie magazynu kluczy
  • Otwieranie szablonu szybkiego startu
  • Edytowanie pliku parametrów
  • Wdrażanie 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 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 programu 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 być prawdziwa , 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 magazynu kluczy lub współautorem, 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 Używanie usługi Azure Key Vault do przekazywania wartości bezpiecznego parametru podczas wdrażania.

Aby uruchomić następujący skrypt programu Azure PowerShell, wybierz pozycję Wypróbuj , aby otworzyć usługę 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 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 wdrożenia 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 $keyVaultName, która jest zdefiniowana w poprzednim skry skryptzie 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 programie 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:

    Przed dostosowaniem szablonu warto mieć podstawową wiedzę na temat szablonu.

  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 programie Visual Studio Code otwórz 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 jako vmAdminPassword. Zobacz Przygotowywanie magazynu kluczy.

    Integrowanie magazynu kluczy i pliku parametrów wdrożenia maszyny wirtualnej szablonu usługi 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.

Wdrażanie szablonu

  1. Zaloguj się do usługi Cloud Shell.

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

    Plik przekazywania usługi Cloud Shell w witrynie Azure Portal

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

  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 portal Azure Portal.

  2. Wybierz pozycję Grupy><zasobów YourResourceGroupName>>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: