Zarządzanie wpisami tajnymi w szablonie usługi ARM przez odczyt z usługi Azure Key Vault

Ukończone

Infrastruktura jako kod (IaC) odnosi się do opisywania wymagań dotyczących infrastruktury w postaci plików tekstowych czytelnych dla człowieka. Szablony usługi Azure Resource Manager (ARM) są formą IaC.

Kodem infrastruktury można zarządzać, podobnie jak kodem aplikacji, w systemie kontroli wersji, takim jak Git. Pozwala to współpracować z innymi osobami i śledzić zmiany w ewoluujących wymaganiach dotyczących infrastruktury.

Podobnie jak w przypadku kodu aplikacji, nie należy zapisywać ważnych informacji poufnych, takich jak hasła i klucze interfejsu API, w szablonach usługi ARM. W przeciwnym razie każda osoba mająca dostęp do odczytu do repozytorium będzie miała dostęp do tych tajnych informacji.

Mimo że tylko autoryzowane osoby w organizacji powinny mieć dostęp do poufnych informacji, szablony usługi ARM również wymagają tych danych. Azure Key Vault jest jednym ze sposobów ochrony poufnych informacji.

Usługa Azure Key Vault pomaga chronić poufne informacje

Azure Key Vault to usługa w chmurze, która działa jako bezpieczny magazyn wpisów tajnych. Usługa Key Vault umożliwia utworzenie wielu zabezpieczonych kontenerów nazywanych magazynami. Te magazyny są wspierane przez sprzętowe moduły zabezpieczeń. Magazyny zmniejszają prawdopodobieństwo przypadkowej utraty danych zabezpieczeń dzięki centralizacji przechowywania wpisów tajnych aplikacji. Magazyny umożliwiają także kontrolowanie i rejestrowanie dostępu do wszelkich elementów, które są w nich przechowywane.

Usługa Key Vault jest w stanie przechowywać klucze i wpisy tajne. Jej liczne funkcje stanową dobry wybór do zarządzania wpisami tajnymi, a także dobry wybór do użycia w procesie wdrożenia.

  • Kontrola dostępu na podstawie ról. Można zarządzać magazynem kluczy przy użyciu różnych ról, co pozwala zapewnić, że będzie można go używać w aplikacjach, a także na różnych poziomach administrowania.

  • Zezwalanie użytkownikom i aplikacjom. Magazyn kluczy można skonfigurować tak, aby udostępniać go zarówno określonym użytkownikom, jak i aplikacjom. W przypadku aplikacji należy utworzyć jednostkę usługi. W zasadzie można skonfigurować magazyn kluczy tak, aby tylko jednostki usługi miały do niego dostęp.

    Uwaga

    Jednostka usługi jest tożsamością utworzoną do użycia z aplikacjami, usługami hostowanymi i zautomatyzowanymi narzędziami w celu uzyskiwania dostępu do zasobów platformy Azure. Należy ograniczyć dostęp do zasobów przez przypisanie podmiotu zabezpieczeń do roli lub podzbioru ról z ograniczonymi prawami dostępu. Takie podejście zapewnia bardziej szczegółową kontrolę nad tym, co i w jakim zakresie może uzyskać dostęp do zasobów.

  • Możliwość wchodzenia w interakcje szablonem usługi ARM. Podczas wdrażania szablonu usługi ARM można odczytywać informacje z magazynu kluczy. Potrzebna jest do tego niewielka konfiguracja. Następna sekcja zawiera dodatkowe szczegóły.

Konfiguracja uprawnień

Wybrano Key Vault jako usługę, w której będą przechowywane poświadczenia. Z tego miejsca chcesz mieć możliwość odczytu wpisów tajnych podczas wdrażania, aby można było na przykład ustawić hasło maszyny wirtualnej.

Istnieje kilka kroków konfiguracji, które należy wykonać w celu skonfigurowania usługi Key Vault tak, aby można było z niej odczytywać podczas wdrażania. Kroki to:

  1. Usługa Key Vault na potrzeby wdrożenia. Usługa Key Vault potrzebuje uprawnień do odczytu podczas wdrażania. To ustawienie można przekazać podczas tworzenia lub zmodyfikować je później.

  2. Użytkownik potrzebuje uprawnienia do wdrażania w grupie zasobów. Nie różni się to od innych wdrożeń. Jeśli jednak nie utworzono grupy zasobów, można przypisać rolę, aby zapewnić możliwość wdrożenia.

  3. Użytkownik potrzebuje właściwego dostępu do magazynu kluczy. Trzeba zapewnić odpowiedni dostęp do magazynu kluczy podczas odczytywania z niego w trakcie wdrażania. Podczas tworzenia usługi magazynu kluczy tworzone są zasady dostępu dające użytkownikowi prawa do zarządzania wszystkimi wpisami tajnymi, kluczami i certyfikatami.

Konfigurowanie usługi Key Vault na potrzeby wdrożenia

Skonfiguruj wystąpienie usługi Key Vault, aby można było z niego odczytywać poświadczenia podczas wdrażania szablonu usługi ARM.

W celu włączenia usługi Key Vault na potrzeby wdrożenia używane jest ustawienie, które albo można przekazać podczas tworzenia wystąpienia usługi Key Vault, albo można zmodyfikować w późniejszym czasie. W programie PowerShell jest to przełącznik o nazwie -EnabledForTemplateDeployment. W interfejsie wiersza polecenia platformy Azure jest to argument o nazwie --enabled-for-template-deployment, który wymaga również przekazania wartości true.

Uwaga

Interfejs wiersza polecenia platformy Azure wymaga dodatkowo przekazania wartości logicznej true.

Użytkownik potrzebuje uprawnienia do wdrażania w usłudze Key Vault i grupie zasobów

Przed podjęciem próby wdrożenia i odczytania wpisów tajnych z magazynu kluczy należy upewnić się, że masz uprawnienie do wdrożenia. Istnieją dwie role, które dają te uprawnienie:

  • Owner: Jeśli utworzono magazyn kluczy, masz tę rolę automatycznie.
  • Contributor: Ta rola zapewnia dostęp do zarządzania wszystkimi wpisami tajnymi. W przypadku użytkownika, który nie utworzył magazynu kluczy, najprostszym podejściem jest nadanie mu roli Contributor.

Innym rozwiązaniem jest utworzenie i przypisanie roli niestandardowej i upewnienie się, że rola zawiera uprawnienie Microsoft.KeyVault/vaults/deploy/action.

Konfigurowanie pliku parametrów wdrożenia

Zamiast określać każdy parametr i odpowiednie wartości jako pary klucz-wartość podczas wdrażania, można użyć pliku parametrów.

W tym pliku parametrów należy określić interesujący Cię magazyn kluczy i wpis tajny w tym magazynie kluczy. W tym celu należy zmodyfikować parametr, a następnie zaktualizować szablon wdrożenia, aby używać tego parametru.

Uwaga

Szablon nie zawiera żadnych zapisów dotyczących magazynu kluczy ani jego wpisu tajnego. Konfiguracja, którą tworzysz, ma miejsce w pliku parametrów.

Konfigurowanie magazynu kluczy i wpisu tajnego dla parametru

W pliku parametrów, dla konkretnego parametru wskaż magazyn kluczy, do którego masz uprawnienia do wdrożenia. Następnie określ interesujący Cię wpis tajny. Wpis tajny wskazuje się przy użyciu nazwy. Podczas wdrażania ta konfiguracja zostanie rozpoznana jako wartość wpisu tajnego. Oto parametr o nazwie myPassword skonfigurowany do używania określonego magazynu kluczy i używania wpisu tajnego o nazwie databaseSecret.

"myPassword" : {
  "reference": {
    "keyVault": {
      "id": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.KeyVault/vaults/<vault-name>",
      "secretName": "databaseSecret"
    }
  }
}

W powyższym kodzie JSON określ pełny identyfikator magazynu kluczy i przejdź do pytania o wpis tajny databaseSecret. Wartość tego wpisu tajnego jest następnie wyodrębniana i przypisana do parametru myPassword.

Przypisywanie parametru do hasła zasobu

Ten krok nie jest powiązany z magazynem kluczy. Ma na celu upewnienie się, że przeznaczony zasób wykorzystuje parametr skonfigurowany do odczytywania wartości wpisu tajnego z magazynu kluczy. Poniżej znajduje się skrócona wstawka kodu z maszyny wirtualnej, zawarta w pliku szablonu, która pokazuje odczytywanie elementu adminPassword z parametru myPassword. Wartość wpisu tajnego zostanie następnie odczytana z magazynu kluczy w czasie wdrażania i przypisana do elementu adminPassword.

{
  "osProfile": {
    "adminPassword": "[parameters('myPassword')]"
  }
}