Używanie usługi Azure Key Vault do przekazywania wpisu tajnego z magazynu kluczy jako parametru podczas wdrażania Bicep
Zamiast wprowadzać bezpieczną wartość, np. hasło bezpośrednio do pliku lub pliku parametrów Bicep, możesz pobrać wartość z usługi Azure Key Vault podczas wdrażania. Gdy moduł oczekuje parametru string
z modyfikatorem, możesz użyćgetSecret
funkcji w celu uzyskania wpisu tajnego secure:true
magazynu kluczy. Wartość nigdy nie jest uwidoczniana, ponieważ używane jest tylko odwołanie do jej identyfikatora magazynu kluczy.
Ważne
W tym artykule opisano sposób przekazywania poufnej wartości jako parametru szablonu. Po przekazaniu wpisu tajnego jako parametru magazyn kluczy może istnieć w innej subskrypcji niż grupa zasobów, do której wdrażasz.
W tym artykule nie opisano sposobu ustawiania właściwości maszyny wirtualnej na adres URL certyfikatu w magazynie kluczy. Aby zapoznać się z szablonem szybkiego startu tego scenariusza, zobacz WinRM na maszynie wirtualnej z systemem Windows.
Wdrażanie magazynów kluczy i wpisów tajnych
Aby uzyskać dostęp do magazynu kluczy podczas wdrażania Bicep, ustaw dla enabledForTemplateDeployment
magazynu kluczy wartość true
.
Jeśli masz już magazyn kluczy, upewnij się, że zezwala na wdrożenia szablonów.
az keyvault update --name ExampleVault --enabled-for-template-deployment true
Aby utworzyć nowy magazyn kluczy i dodać wpis tajny, użyj:
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 właściciel magazynu kluczy masz automatycznie dostęp do tworzenia wpisów tajnych. Jeśli użytkownik pracujący z wpisami tajnymi nie jest właścicielem magazynu kluczy, udziel dostępu:
az keyvault set-policy \
--upn <user-principal-name> \
--name ExampleVault \
--secret-permissions set delete get list
Aby uzyskać więcej informacji na temat tworzenia magazynów kluczy i dodawania wpisów tajnych, zobacz:
- Ustawianie i pobieranie wpisu tajnego przy użyciu interfejsu wiersza polecenia
- Ustawianie i pobieranie wpisu tajnego przy użyciu programu PowerShell
- Ustawianie i pobieranie wpisu tajnego przy użyciu witryny Azure Portal
- Ustawianie i pobieranie wpisu tajnego przy użyciu platformy .NET
- Ustawianie i pobieranie wpisu tajnego przy użyciu Node.js
Udzielanie dostępu do wpisów tajnych
Użytkownik, który wdraża plik Bicep, musi mieć Microsoft.KeyVault/vaults/deploy/action
uprawnienie do zakresu grupy zasobów i magazynu kluczy. Role Właściciel i Współautor przyznają ten dostęp. Jeśli utworzono magazyn kluczy, jesteś właścicielem i masz uprawnienie.
Poniższa procedura pokazuje, jak utworzyć rolę z minimalnym uprawnieniem i jak przypisać użytkownika.
Utwórz niestandardowy plik JSON z definicją roli:
{ "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" ] }
Zastąp wartość "00000000-0000-0000-0000-000000000000" identyfikatorem subskrypcji.
USe pliku JSON w celu utworzenia nowej 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>
Przykłady przypisują rolę niestandardową do użytkownika na poziomie grupy zasobów.
W przypadku korzystania z magazynu kluczy z plikiem Bicep dla aplikacji zarządzanej należy udzielić dostępu do jednostki usługi dostawcy zasobów urządzenia. Aby uzyskać więcej informacji, zobacz Access Key Vault secret when deploying Azure Managed Applications (Uzyskiwanie dostępu do wpisu tajnego usługi Key Vault podczas wdrażania aplikacji zarządzanych platformy Azure).
Pobieranie wpisów tajnych w pliku Bicep
Funkcja w plikach Bicep umożliwia getSecret
uzyskanie wpisu tajnego magazynu kluczy. Należy pamiętać, że getSecret
funkcja ma zastosowanie wyłącznie do Microsoft.KeyVault/vaults
zasobu. Ponadto jest on ograniczony do użycia w params
sekcji modułu i może być używany tylko z parametrami z dekoratorem @secure()
.
Inna funkcja o nazwie az.getSecret()
function może służyć w plikach parametrów Bicep do pobierania wpisów tajnych magazynu kluczy. Aby uzyskać więcej informacji, zobacz Pobieranie wpisów tajnych w pliku parametrów.
getSecret
Ponieważ funkcja może być używana tylko w params
sekcji modułu, utwórz plik sql.bicep w tym samym katalogu co plik main.bicep o następującej zawartości:
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
ma @secure()
dekorator w poprzednim pliku.
Poniższy plik Bicep używa pliku sql.bicep jako modułu. Plik Bicep odwołuje się do istniejącego magazynu kluczy, wywołuje getSecret
funkcję w celu pobrania wpisu tajnego magazynu kluczy, a następnie przekazuje wartość jako parametr do modułu:
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')
}
}
Pobieranie wpisów tajnych w pliku parametrów
Jeśli nie chcesz używać modułu, możesz pobrać wpisy tajne magazynu kluczy w pliku parametrów. Jednak podejście różni się w zależności od tego, czy używasz pliku parametrów JSON, czy Bicep.
Poniższy plik Bicep wdraża serwer SQL zawierający hasło administratora. Chociaż parametr hasła jest ustawiony na bezpieczny ciąg, Bicep nie określa źródła tej wartości:
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'
}
}
Następnie utwórz plik parametrów dla poprzedniego pliku Bicep.
Plik parametrów Bicep
Funkcja az.getSecret
może służyć w .bicepparam
pliku do pobierania wartości wpisu tajnego z magazynu kluczy:
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>')
Plik parametrów JSON
W pliku parametrów JSON określ parametr zgodny z nazwą parametru w pliku Bicep. W przypadku wartości parametru należy odwołać się do wpisu tajnego z magazynu kluczy; W tym celu należy przekazać identyfikator zasobu magazynu kluczy i nazwę wpisu tajnego. W następującym pliku parametrów wpis tajny magazynu kluczy musi już istnieć i należy podać wartość statyczną dla jego identyfikatora zasobu:
{
"$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>"
}
}
}
Jeśli musisz użyć wersji wpisu tajnego innej niż bieżąca secretVersion
, dołącz właściwość:
"secretName": "ExamplePassword",
"secretVersion": "cd91b2b7e10e492ebb870a6ee0591b68"
Następne kroki
- Aby uzyskać ogólne informacje o magazynach kluczy, zobacz About Azure Key Vault (Informacje o usłudze Azure Key Vault)
- Aby uzyskać pełne przykłady użycia wpisów tajnych magazynu kluczy w usłudze GitHub, zobacz keyvaultexamples.
- Aby zapoznać się z modułem Learn, w którym opisano sposób używania magazynu kluczy do przekazywania bezpiecznej wartości, zobacz Manage complex cloud deployments by using advanced JSON ARM template features (Zarządzanie złożonymi wdrożeniami w chmurze przy użyciu zaawansowanych funkcji szablonu usługi ARM JSON).