Použití služby Azure Key Vault k předání tajného kódu jako parametru během nasazení Bicep
Tento článek vysvětluje, jak pomocí služby Azure Key Vault předat tajný kód jako parametr během nasazení Bicep. Místo zadání zabezpečené hodnoty, jako je heslo přímo do souboru nebo souboru parametrů Bicep, můžete během nasazení načíst hodnotu ze služby Azure Key Vault .
Pokud modul očekává parametr řetězce s použitým modifikátoremsecure:true
, můžete pomocí getSecret
funkce získat tajný klíč trezoru klíčů. Hodnotu nezpřístupňujete, 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 pro tento scénář najdete v tématu WinRM na virtuálním počítači s Windows.
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"
Vlastník trezoru klíčů má 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íčů, můžete přístup udělit takto:
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í Azure CLI
- Nastavení a načtení tajného kódu pomocí Azure PowerShellu
- Nastavení a načtení tajného kódu pomocí webu Azure Portal
- 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 vlastní soubor JSON s 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.
Pomocí souboru JSON vytvořte novou roli:
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>
Předchozí příklady přiřazují uživateli vlastní roli na úrovni skupiny prostředků.
Pokud používáte trezor 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
Pomocí funkce v souboru Bicep můžete getSecret
získat tajný klíč trezoru klíčů. Funkci getSecret
lze použít pouze s prostředkem Microsoft.KeyVault/vaults
. Kromě toho se dá použít pouze v params
rámci oddílu modulu a pouze s parametry, které mají @secure()
dekorátor.
K načtení tajných kódů trezoru klíčů můžete použít jinou funkci volanou az.getSecret()
v souboru parametrů Bicep. 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, vytvořte soubor 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'
}
}
Parametr adminPassword
má @secure()
dekorátor v předchozím souboru.
Následující soubor Bicep využívá sql.bicep jako modul. Soubor Bicep odkazuje na existující trezor klíčů, 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 Bicep.
Následující soubor Bicep nasadí SQL server, který obsahuje heslo správce. Zatímco parametr password je nastavený na zabezpečený řetězec, Bicep nezadá původ této hodnoty:
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'
}
}
Dále vytvořte soubor parametrů pro předchozí soubor Bicep.
Soubor parametrů Bicep
Funkci az.getSecret
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íčů. Předejte identifikátor prostředku trezoru klíčů a název tajného klíče. V následujícím souboru parametrů musí tajný klíč trezoru klíčů již existovat. Zadáte statickou hodnotu pro ID prostředku.
{
"$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ž je aktuální, zadejte secretVersion
vlastnost:
"secretName": "ExamplePassword",
"secretVersion": "cd91b2b7e10e492ebb870a6ee0591b68"
Související obsah
- Obecné informace o trezorech klíčů najdete v tématu o službě Azure Key Vault.
- Kompletní příklady GitHubu, které ukazují, jak odkazovat na tajné kódy trezoru klíčů, najdete v příkladech trezoru klíčů.
- Modul Learn, který popisuje, jak pomocí trezoru klíčů předat zabezpečenou hodnotu, najdete v tématu Správa složitých cloudových nasazení pomocí pokročilých funkcí šablony JSON ARM.