Předání hodnoty zabezpečených parametrů během nasazení Bicep pomocí služby Azure Key Vault
Místo vložení zabezpečené hodnoty (například hesla) přímo do souboru nebo souboru parametrů Bicep můžete hodnotu načíst z Azure Key Vaultu během nasazení. Pokud modul očekává string
parametr s modifikátoremsecure:true
, můžete k získání tajného klíče trezoru klíčů použít funkci getSecret. Tato hodnota se nikdy nezostavuje, protože odkazujete pouze na JEHO ID trezoru klíčů.
Důležité
Tento článek se zaměřuje na to, jak předat citlivou hodnotu jako parametr šablony. Když se tajný klíč předá jako parametr, může trezor klíčů existovat v jiném předplatném než ve skupině prostředků, do které nasazujete.
Tento článek se nezabývá nastavením vlastnosti virtuálního počítače na adresu URL certifikátu v trezoru klíčů. Šablonu rychlého startu tohoto scénáře najdete v tématu Instalace certifikátu ze služby Azure Key Vault na virtuálním počítači.
Nasazení trezorů klíčů a tajných kódů
Pokud chcete získat přístup k trezoru klíčů během nasazení Bicep, nastavte enabledForTemplateDeployment
ho na true
.
Pokud už trezor klíčů máte, ujistěte se, že umožňuje nasazení šablon.
az keyvault update --name ExampleVault --enabled-for-template-deployment true
Pokud chcete vytvořit nový trezor klíčů a přidat tajný klíč, použijte:
az group create --name ExampleGroup --location centralus
az keyvault create \
--name ExampleVault \
--resource-group ExampleGroup \
--location centralus \
--enabled-for-template-deployment true
az keyvault secret set --vault-name ExampleVault --name "ExamplePassword" --value "hVFkk965BuUv"
Jako vlastník trezoru klíčů máte automaticky přístup k vytváření tajných kódů. Pokud uživatel, který pracuje s tajnými klíči, není vlastníkem trezoru klíčů, udělte přístup pomocí:
az keyvault set-policy \
--upn <user-principal-name> \
--name ExampleVault \
--secret-permissions set delete get list
Další informace o vytváření trezorů klíčů a přidávání tajných kódů najdete v tématech:
- Nastavení a načtení tajného kódu pomocí rozhraní příkazového řádku
- Nastavení a načtení tajného kódu pomocí PowerShellu
- Nastavení a načtení tajného kódu pomocí portálu
- Nastavení a načtení tajného kódu pomocí .NET
- Nastavení a načtení tajného kódu pomocí Node.js
Udělení přístupu k tajným kódům
Uživatel, který nasadí soubor Bicep, musí mít Microsoft.KeyVault/vaults/deploy/action
oprávnění pro obor skupiny prostředků a trezoru klíčů. Role Vlastník i Přispěvatel udělí tento přístup. Pokud jste vytvořili trezor klíčů, jste vlastníkem a máte oprávnění.
Následující postup ukazuje, jak vytvořit roli s minimálním oprávněním a jak přiřadit uživatele.
Vytvořte soubor JSON s vlastní definicí role:
{ "Name": "Key Vault Bicep deployment operator", "IsCustom": true, "Description": "Lets you deploy a Bicep file with the access to the secrets in the Key Vault.", "Actions": [ "Microsoft.KeyVault/vaults/deploy/action" ], "NotActions": [], "DataActions": [], "NotDataActions": [], "AssignableScopes": [ "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e" ] }
Nahraďte "0000000-0000-0000-0000-000000000000" ID předplatného.
Vytvořte novou roli pomocí souboru JSON:
az role definition create --role-definition "<path-to-role-file>" az role assignment create \ --role "Key Vault Bicep deployment operator" \ --scope /subscriptions/<Subscription-id>/resourceGroups/<resource-group-name> \ --assignee <user-principal-name>
Ukázky přiřadí uživateli vlastní roli na úrovni skupiny prostředků.
Při použití trezoru klíčů se souborem Bicep pro spravovanou aplikaci musíte udělit přístup k instančnímu objektu poskytovatele prostředků zařízení. Další informace najdete v tématu Přístup k tajnému kódu služby Key Vault při nasazování spravovaných aplikací Azure.
Načtení tajných kódů v souboru Bicep
K získání tajného klíče trezoru klíčů můžete použít funkci getSecret v souborech Bicep. Všimněte si, že getSecret
funkce se vztahuje výhradně na Microsoft.KeyVault/vaults
prostředek. Kromě toho je omezeno na použití v params
rámci oddílu modulu a lze ho použít pouze s parametry s dekorátorem @secure()
.
K načtení tajných kódů trezoru klíčů lze v souborech parametrů Bicep použít jinou funkci s názvem az.getSecret()
funkce. Další informace naleznete v tématu Načtení tajných kódů v souboru parametrů.
Vzhledem k tomu, že getSecret
funkci lze použít pouze v params
části modulu. Pojďme vytvořit sql.bicep ve stejném adresáři jako soubor main.bicep s následujícím obsahem:
param sqlServerName string
param location string = resourceGroup().location
param adminLogin string
@secure()
param adminPassword string
resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = {
name: sqlServerName
location: location
properties: {
administratorLogin: adminLogin
administratorLoginPassword: adminPassword
version: '12.0'
}
}
Všimněte si, že v předchozím souboru adminPassword
Bicep má @secure()
parametr dekorátor.
Následující soubor Bicep využívá sql.bicep jako modul. Soubor Bicep odkazuje na existující trezor klíčů a zavolá getSecret
funkci, která načte tajný klíč trezoru klíčů, a pak předá hodnotu jako parametr modulu.
param sqlServerName string
param adminLogin string
param subscriptionId string
param kvResourceGroup string
param kvName string
resource kv 'Microsoft.KeyVault/vaults@2023-07-01' existing = {
name: kvName
scope: resourceGroup(subscriptionId, kvResourceGroup )
}
module sql './sql.bicep' = {
name: 'deploySQL'
params: {
sqlServerName: sqlServerName
adminLogin: adminLogin
adminPassword: kv.getSecret('vmAdminPassword')
}
}
Načtení tajných kódů v souboru parametrů
Pokud nechcete používat modul, můžete v souboru parametrů načíst tajné kódy trezoru klíčů. Přístup se ale liší v závislosti na tom, jestli používáte soubor parametrů JSON nebo soubor parametrů Bicep.
Následující soubor Bicep nasadí SQL server, který obsahuje heslo správce. Parametr hesla je nastavený na zabezpečený řetězec. Bicep ale neurčí, odkud tato hodnota pochází.
param sqlServerName string
param location string = resourceGroup().location
param adminLogin string
@secure()
param adminPassword string
resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = {
name: sqlServerName
location: location
properties: {
administratorLogin: adminLogin
administratorLoginPassword: adminPassword
version: '12.0'
}
}
Teď vytvořte soubor parametrů pro předchozí soubor Bicep.
Soubor parametrů Bicep
az.getSecret
funkci lze použít v .bicepparam
souboru k načtení hodnoty tajného klíče z trezoru klíčů.
using './main.bicep'
param sqlServerName = '<your-server-name>'
param adminLogin = '<your-admin-login>'
param adminPassword = az.getSecret('<subscription-id>', '<rg-name>', '<key-vault-name>', '<secret-name>', '<secret-version>')
Soubor parametrů JSON
V souboru parametrů JSON zadejte parametr, který odpovídá názvu parametru v souboru Bicep. Pro hodnotu parametru odkazujte na tajný klíč z trezoru klíčů. Na tajný kód odkazujete předáním identifikátoru prostředku trezoru klíčů a názvu tajného kódu:
V následujícím souboru parametrů už musí tajný klíč trezoru klíčů existovat a pro ID prostředku zadáte statickou hodnotu.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"adminLogin": {
"value": "<your-admin-login>"
},
"adminPassword": {
"reference": {
"keyVault": {
"id": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.KeyVault/vaults/<key-vault-name>"
},
"secretName": "ExamplePassword"
}
},
"sqlServerName": {
"value": "<your-server-name>"
}
}
}
Pokud potřebujete použít jinou verzi tajného kódu než aktuální verzi, uveďte secretVersion
vlastnost.
"secretName": "ExamplePassword",
"secretVersion": "cd91b2b7e10e492ebb870a6ee0591b68"
Další kroky
- Obecné informace o trezorech klíčů najdete v tématu Co je Azure Key Vault?
- Kompletní příklady odkazů na tajné klíče najdete v příkladech trezoru klíčů na GitHubu.
- Modul Learn, který se zabývá předáváním zabezpečené hodnoty z trezoru klíčů, najdete v tématu Správa složitých cloudových nasazení pomocí pokročilých funkcí šablon ARM.