Zabezpečení parametrů

Dokončeno

Někdy potřebujete do nasazení předat citlivé hodnoty, jako jsou hesla a klíče rozhraní API. Musíte ale zajistit, aby tyto hodnoty byly chráněné. V některých situacích nechcete, aby osoba, která vytváří nasazení, znala tajné hodnoty. Jindy někdo zadá hodnotu parametru při vytváření nasazení, ale musíte se ujistit, že tajné hodnoty nejsou zaprotokolovány. V této lekci se dozvíte o způsobech ochrany parametrů.

Tip

Nejlepším přístupem je vyhnout se použití přihlašovacích údajů zcela. Spravované identity pro prostředky Azure umožňují komponentám vašeho řešení bezpečně komunikovat bez jakýchkoli přihlašovacích údajů. Spravované identity nejsou dostupné pro každý prostředek, ale je vhodné je používat všude, kde je můžete. Tam, kde nemůžete, můžete použít zde popsané přístupy.

Poznámka:

Příkazy v této lekci jsou znázorněny pro ilustraci konceptů. Zatím nespouštět příkazy. Brzy si procvičíte, co se tady naučíte.

Definování zabezpečených parametrů

Dekorátor @secure lze použít na parametry řetězce a objektu, které mohou obsahovat tajné hodnoty. Když definujete parametr jako @secure, Azure nepřístupní hodnoty parametrů v protokolech nasazení. Pokud také vytvoříte nasazení interaktivně pomocí Azure CLI nebo Azure PowerShellu a potřebujete zadat hodnoty během nasazení, terminál text na obrazovce nezobrazí.

V rámci migrace aplikace personálního oddělení je potřeba nasadit logický server a databázi Azure SQL. Logický server zřídíte pomocí přihlašovacího jména správce a hesla. Protože jsou citlivé, potřebujete tyto hodnoty zabezpečit. Tady je příklad deklarace, která vytvoří dva parametry řetězce pro podrobnosti správce SQL Serveru:

@secure()
param sqlServerAdministratorLogin string

@secure()
param sqlServerAdministratorPassword string

Všimněte si, že žádný parametr nemá zadanou výchozí hodnotu. Je vhodné se vyhnout zadávání výchozích hodnot pro uživatelská jména, hesla a další tajné kódy. Jinak pokud někdo nasadí vaši šablonu a neuvědomí si, že by měl hodnotu přepsat, oslabí zabezpečení, protože místo toho, co si sami zvolili, získá výchozí hodnotu.

Tip

Ujistěte se, že nevytvoříte výstupy pro citlivá data. K výstupním hodnotám může přistupovat každý, kdo má přístup k historii nasazení. Nejsou vhodné pro zpracování tajných kódů.

Vyhněte se používání souborů parametrů pro tajné kódy

Jak jste se dozvěděli v předchozí lekci, soubory parametrů představují skvělý způsob, jak určit sadu hodnot parametrů. Soubory parametrů často vytváříte pro každé prostředí, do které nasazujete. Obecně byste se měli vyhnout použití souborů parametrů k zadání tajných hodnot. Soubory parametrů se často ukládají do centralizovaného systému správy verzí, jako je Git. V budoucnu k němu může mít přístup mnoho lidí. Neukládat citlivá data do systémů správy verzí, protože nejsou navržené tak, aby ukládaly tyto informace.

Integrace se službou Azure Key Vault

Azure Key Vault je služba navržená k ukládání a poskytování přístupu k tajným kódům. Šablony Bicep můžete integrovat se službou Key Vault pomocí souboru parametrů s odkazem na tajný klíč služby Key Vault.

Tuto funkci můžete použít odkazem na trezor klíčů a tajný klíč v souboru parametrů. Hodnota není nikdy vystavena, protože odkazujete pouze na jeho identifikátor, který sám o sobě není nic tajného. Když šablonu nasadíte, Azure Resource Manager kontaktuje trezor klíčů a načte data.

Tip

Na tajné kódy můžete odkazovat v trezorech klíčů, které jsou umístěné v jiné skupině prostředků nebo předplatném, než do kterého nasazujete.

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

Tady je soubor parametrů, který používá odkazy služby Key Vault k vyhledání přihlašovacího jména a hesla správce logického serveru SQL, které se mají použít:

{
  "$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"
      }
    }
  }
}

Všimněte si, že místo zadání value jednotlivých parametrů má reference tento soubor objekt, který obsahuje podrobnosti o trezoru klíčů a tajném kódu.

Důležité

Trezor klíčů musí být nakonfigurovaný tak, aby Resource Manageru umožnil přístup k datům v trezoru klíčů během nasazení šablony. Uživatel, který šablonu nasadí, musí mít také oprávnění pro přístup k trezoru klíčů. V další lekci se dozvíte, jak tyto úkoly provést.

Použití služby Key Vault s moduly

Moduly umožňují vytvářet opakovaně použitelné soubory Bicep, které zapouzdřují sadu prostředků. K nasazení částí vašeho řešení se běžně používají moduly. Moduly můžou mít parametry, které přijímají tajné hodnoty, a k bezpečnému poskytnutí těchto hodnot můžete použít integraci služby Key Vault s Bicepem. Tady je příklad souboru Bicep, který nasadí modul a poskytuje hodnotu parametru ApiKey tajného kódu tak, že ho vezme přímo ze služby 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')
  }
}

Všimněte si, že v tomto souboru Bicep se na prostředek key Vault odkazuje pomocí klíčového existing slova. Klíčové slovo říká Bicep, že key Vault již existuje, a tento kód je odkazem na tento trezor. Bicep ho znovu nasadí. Všimněte si také, že kód modulu používá getSecret() funkci v hodnotě parametru apiKey modulu. Jedná se o speciální funkci Bicep, která se dá použít pouze s parametry zabezpečeného modulu. Bicep interně překládá tento výraz na stejný druh odkazu služby Key Vault, který jste se dozvěděli dříve.