Zabezpieczanie parametrów

Ukończone

Czasami trzeba przekazać poufne wartości do wdrożeń, takich jak hasła i klucze interfejsu API. Należy jednak upewnić się, że te wartości są chronione. W niektórych sytuacjach nie chcesz, aby osoba tworząca wdrożenie znała wartości wpisów tajnych. Innym razem ktoś wprowadzi wartość parametru podczas tworzenia wdrożenia, ale musisz upewnić się, że wartości wpisów tajnych nie są rejestrowane. W tej lekcji poznasz sposoby ochrony parametrów.

Napiwek

Najlepszym rozwiązaniem jest całkowite unikanie używania poświadczeń. Tożsamości zarządzane dla zasobów platformy Azure mogą umożliwić składnikom rozwiązania bezpieczne komunikowanie się ze sobą bez żadnych poświadczeń. Tożsamości zarządzane nie są dostępne dla każdego zasobu, ale warto używać ich wszędzie tam, gdzie to możliwe. Gdzie nie możesz, możesz użyć metod opisanych tutaj.

Uwaga

Polecenia w tej lekcji są wyświetlane w celu zilustrowania pojęć. Nie uruchamiaj jeszcze poleceń. Będziesz ćwiczyć to, czego nauczysz się tutaj wkrótce.

Definiowanie bezpiecznych parametrów

Dekorator @secure można zastosować do parametrów ciągu i obiektu, które mogą zawierać wartości wpisów tajnych. Podczas definiowania parametru jako @secureplatforma Azure nie będzie udostępniać wartości parametrów w dziennikach wdrażania. Ponadto jeśli wdrożenie zostanie utworzone interaktywnie przy użyciu interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell i musisz wprowadzić wartości podczas wdrażania, terminal nie wyświetli tekstu na ekranie.

W ramach migracji aplikacji HR należy wdrożyć serwer logiczny i bazę danych usługi Azure SQL. Zaaprowizujesz serwer logiczny przy użyciu identyfikatora logowania administratora i hasła. Ponieważ są one wrażliwe, należy zabezpieczyć te wartości. Oto przykładowa deklaracja tworzenia dwóch parametrów ciągu dla szczegółów administratora programu SQL Server:

@secure()
param sqlServerAdministratorLogin string

@secure()
param sqlServerAdministratorPassword string

Zwróć uwagę, że żaden parametr nie ma określonej wartości domyślnej. Dobrym rozwiązaniem jest unikanie określania wartości domyślnych nazw użytkowników, haseł i innych wpisów tajnych. W przeciwnym razie, jeśli ktoś wdroży szablon i nie zdaje sobie sprawy, że powinien zastąpić wartość, osłabi swoje zabezpieczenia, ponieważ uzyska wartość domyślną zamiast wybranej przez siebie wartości.

Napiwek

Upewnij się, że nie tworzysz danych wyjściowych dla poufnych danych. Do wartości wyjściowych mogą uzyskiwać dostęp każdy, kto ma dostęp do historii wdrożenia. Nie są one odpowiednie do obsługi wpisów tajnych.

Unikaj używania plików parametrów dla wpisów tajnych

Jak pokazano w poprzedniej lekcji, pliki parametrów są doskonałym sposobem na określenie zestawu wartości parametrów. Pliki parametrów są często tworzone dla każdego środowiska, w którym wdrażasz. Ogólnie rzecz biorąc, należy unikać używania plików parametrów do określania wartości wpisów tajnych. Pliki parametrów są często zapisywane w scentralizowanym systemie kontroli wersji, na przykład Git. Wiele osób może mieć dostęp do niego w przyszłości. Nie zapisuj poufnych danych w systemach kontroli wersji, ponieważ nie są one przeznaczone do przechowywania tego rodzaju informacji.

Integrowanie usługi Azure Key Vault

Azure Key Vault to usługa przeznaczona do przechowywania i zapewniania dostępu do wpisów tajnych. Szablony Bicep można zintegrować z usługą Key Vault przy użyciu pliku parametrów z odwołaniem do wpisu tajnego usługi Key Vault.

Tej funkcji można użyć, odwołując się do magazynu kluczy i wpisu tajnego w pliku parametrów. Wartość nigdy nie jest ujawniana, ponieważ odwołujesz się tylko do jego identyfikatora, który sam w sobie nie jest wpisem tajnym. Podczas wdrażania szablonu usługa Azure Resource Manager skontaktuje się z magazynem kluczy i pobierze dane.

Napiwek

Możesz odwoływać się do wpisów tajnych w magazynach kluczy znajdujących się w innej grupie zasobów lub subskrypcji od wdrażanej w usłudze .

Diagram that shows a parameter file reference Azure Key Vault and pass secret to Bicep template to deploy Azure resources.

Oto plik parametrów, który używa odwołań usługi Key Vault do wyszukiwania identyfikatora logowania administratora serwera logicznego SQL i hasła do użycia:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "sqlServerAdministratorLogin": {
      "reference": {
        "keyVault": {
          "id": "/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/PlatformResources/providers/Microsoft.KeyVault/vaults/toysecrets"
        },
        "secretName": "sqlAdminLogin"
      }
    },
    "sqlServerAdministratorPassword": {
      "reference": {
        "keyVault": {
          "id": "/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/PlatformResources/providers/Microsoft.KeyVault/vaults/toysecrets"
        },
        "secretName": "sqlAdminLoginPassword"
      }
    }
  }
}

Zwróć uwagę, że zamiast określać value dla każdego z parametrów ten plik ma reference obiekt zawierający szczegóły magazynu kluczy i wpisu tajnego.

Ważne

Magazyn kluczy należy skonfigurować tak, aby umożliwić usłudze Resource Manager dostęp do danych w magazynie kluczy podczas wdrażania szablonu. Ponadto użytkownik wdrażający szablon musi mieć uprawnienia dostępu do magazynu kluczy. W następnej lekcji dowiesz się, jak wykonywać te zadania.

Używanie usługi Key Vault z modułami

Moduły umożliwiają tworzenie plików Bicep wielokrotnego użytku, które hermetyzują zestaw zasobów. Często używa się modułów do wdrażania części rozwiązania. Moduły mogą mieć parametry, które akceptują wartości wpisów tajnych, i można bezpiecznie zapewnić te wartości za pomocą integracji usługi Key Vault firmy Bicep. Oto przykładowy plik Bicep, który wdraża moduł i udostępnia wartość parametru wpisu tajnego ApiKey przez pobranie go bezpośrednio z usługi Key Vault:

resource keyVault 'Microsoft.KeyVault/vaults@2022-07-01' existing = {
  name: keyVaultName
}

module applicationModule 'application.bicep' = {
  name: 'application-module'
  params: {
    apiKey: keyVault.getSecret('ApiKey')
  }
}

Zwróć uwagę, że w tym pliku Bicep zasób usługi Key Vault jest przywołyny przy użyciu słowa kluczowego existing . Słowo kluczowe informuje Bicep, że usługa Key Vault już istnieje, a ten kod jest odwołaniem do tego magazynu. Bicep nie wdroży go ponownie. Zwróć również uwagę, że kod modułu używa getSecret() funkcji w wartości parametru modułu apiKey . Jest to specjalna funkcja Bicep, która może być używana tylko z bezpiecznymi parametrami modułu. Wewnętrznie Bicep tłumaczy to wyrażenie na tego samego rodzaju odwołanie do usługi Key Vault poznane wcześniej.