Zabezpečení parametrů
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.
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@2023-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.