Bicep dağıtımı sırasında güvenli parametre değeri geçirmek için Azure Key Vault kullanma
Güvenli bir değeri (parola gibi) doğrudan Bicep dosyanıza veya parametreler dosyanıza yerleştirmek yerine, dağıtım sırasında azure Key Vault değerini alabilirsiniz. Modül değiştiricili secure:true
bir string
parametre beklediğinde, anahtar kasası gizli dizisi almak için getSecret işlevini kullanabilirsiniz. Değer hiçbir zaman gösterilmez çünkü yalnızca anahtar kasası kimliğine başvurursunuz.
Önemli
Bu makalede, hassas bir değeri şablon parametresi olarak geçirme konusuna odaklanmaktadır. Gizli dizi parametre olarak geçirildiğinde, anahtar kasası dağıttığınız kaynak grubundan farklı bir abonelikte bulunabilir.
Bu makalede, bir sanal makine özelliğinin anahtar kasasında sertifikaNıN URL'sine nasıl ayarlanacağı ele alınmıyor. Bu senaryonun hızlı başlangıç şablonu için bkz. Sanal Makineye Azure Key Vault sertifika yükleme.
Anahtar kasalarını ve gizli dizileri dağıtma
Bicep dağıtımı sırasında bir anahtar kasasına erişmek için anahtar kasasında olarak true
ayarlayınenabledForTemplateDeployment
.
Zaten bir anahtar kasanız varsa şablon dağıtımlarına izin verdiğinden emin olun.
az keyvault update --name ExampleVault --enabled-for-template-deployment true
Yeni bir anahtar kasası oluşturmak ve gizli dizi eklemek için şunu kullanın:
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"
Anahtar kasasının sahibi olarak gizli dizi oluşturma erişiminiz otomatik olarak olur. Gizli dizilerle çalışan kullanıcı anahtar kasasının sahibi değilse, şu şekilde erişim verin:
az keyvault set-policy \
--upn <user-principal-name> \
--name ExampleVault \
--secret-permissions set delete get list
Anahtar kasaları oluşturma ve gizli dizi ekleme hakkında daha fazla bilgi için bkz:
- CLI kullanarak gizli dizi ayarlama ve alma
- PowerShell kullanarak gizli dizi ayarlama ve alma
- Portalı kullanarak gizli dizi ayarlama ve alma
- .NET kullanarak gizli dizi ayarlama ve alma
- Node.jskullanarak gizli dizi ayarlama ve alma
Gizli dizilere erişim izni verme
Bicep dosyasını dağıtan kullanıcının kaynak grubu ve anahtar kasası kapsamı için izni olmalıdır Microsoft.KeyVault/vaults/deploy/action
. Sahip ve Katkıda Bulunan rolleri bu erişimi verir. Anahtar kasasını oluşturduysanız, sahibi siz olursunuz ve izinlere sahip olursunuz.
Aşağıdaki yordamda en düşük izne sahip bir rolün nasıl oluşturulacağı ve kullanıcının nasıl atanacağı gösterilmektedir.
Özel rol tanımı JSON dosyası oluşturun:
{ "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/00000000-0000-0000-0000-000000000000" ] }
"00000000-0000-0000-0000-00000000000000" değerini abonelik kimliğiyle değiştirin.
JSON dosyasını kullanarak yeni rolü oluşturun:
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>
Örnekler, özel rolü kullanıcıya kaynak grubu düzeyinde atar.
Yönetilen Uygulama için Bicep dosyasıyla bir anahtar kasası kullanırken Alet Kaynak Sağlayıcısı hizmet sorumlusuna erişim vermelisiniz. Daha fazla bilgi için bkz. Azure Yönetilen Uygulamaları dağıtırken gizli dizi Key Vault erişme.
getSecret işlevini kullanma
Anahtar kasası gizli dizisini almak ve değeri bir modülün parametresine geçirmek için string
getSecret işlevini kullanabilirsiniz. getSecret
İşlev yalnızca bir Microsoft.KeyVault/vaults
kaynakta çağrılabilir ve yalnızca dekoratörlü parametre ile @secure()
kullanılabilir.
Aşağıdaki Bicep dosyası bir Azure SQL sunucusu oluşturur. parametresinin adminPassword
bir @secure()
dekoratörü vardır.
param sqlServerName string
param adminLogin string
@secure()
param adminPassword string
resource sqlServer 'Microsoft.Sql/servers@2020-11-01-preview' = {
name: sqlServerName
location: resourceGroup().location
properties: {
administratorLogin: adminLogin
administratorLoginPassword: adminPassword
version: '12.0'
}
}
Önceki Bicep dosyasını, ana Bicep dosyasıyla aynı dizindeki sql.bicep dosya adı verilen bir modül olarak kullanalım.
Aşağıdaki Bicep dosyası sql.bicep dosyasını modül olarak kullanır. Bicep dosyası mevcut bir anahtar kasasına getSecret
başvurur ve anahtar kasası gizli dizisini almak için işlevini çağırır ve ardından değeri modüle parametre olarak geçirir.
param sqlServerName string
param adminLogin string
param subscriptionId string
param kvResourceGroup string
param kvName string
resource kv 'Microsoft.KeyVault/vaults@2023-02-01' existing = {
name: kvName
scope: resourceGroup(subscriptionId, kvResourceGroup )
}
module sql './sql.bicep' = {
name: 'deploySQL'
params: {
sqlServerName: sqlServerName
adminLogin: adminLogin
adminPassword: kv.getSecret('vmAdminPassword')
}
}
Ayrıca, getSecret
bir anahtar kasasından gizli dizi değerini almak için bir .bicepparam
dosyada işlev (veya ad alanı niteleyicisi az.getSecret
ile) kullanılabilir.
using './main.bicep'
param secureUserName = getSecret('exampleSubscription', 'exampleResourceGroup', 'exampleKeyVault', 'exampleSecretUserName', 'exampleSecretVersion')
param securePassword = az.getSecret('exampleSubscription', 'exampleResourceGroup', 'exampleKeyVault', 'exampleSecretPassword')
Parametre dosyasındaki gizli dizilere başvurma
Modül kullanmak istemiyorsanız anahtar kasasına doğrudan parametre dosyasından başvurabilirsiniz. Aşağıdaki görüntüde parametre dosyasının gizli diziye nasıl başvurduğunu ve bu değeri Bicep dosyasına nasıl geçirdiği gösterilmektedir.
Not
Şu anda anahtar kasasına yalnızca JSON parametre dosyalarında başvurabilirsiniz. Bicep parametreleri dosyasında anahtar kasasına başvuramazsınız.
Aşağıdaki Bicep dosyası, yönetici parolası içeren bir SQL sunucusu dağıtır. Parola parametresi güvenli bir dizeye ayarlanır. Ancak Bicep bu değerin nereden geldiğini belirtmez.
param location string = resourceGroup().location
param adminLogin string
@secure()
param adminPassword string
param sqlServerName string
resource sqlServer 'Microsoft.Sql/servers@2022-11-01-preview' = {
name: sqlServerName
location: location
properties: {
administratorLogin: adminLogin
administratorLoginPassword: adminPassword
version: '12.0'
}
}
Şimdi, önceki Bicep dosyası için bir parametre dosyası oluşturun. Parametreler dosyasında, Bicep dosyasındaki parametrenin adıyla eşleşen bir parametre belirtin. Parametre değeri için anahtar kasasından gizli diziye başvurun. Anahtar kasasının kaynak tanımlayıcısını ve gizli dizinin adını geçirerek gizli diziye başvurursunuz:
Aşağıdaki parametre dosyasında anahtar kasası gizli dizisinin zaten mevcut olması gerekir ve kaynak kimliği için statik bir değer sağlarsınız.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"adminLogin": {
"value": "exampleadmin"
},
"adminPassword": {
"reference": {
"keyVault": {
"id": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.KeyVault/vaults/<vault-name>"
},
"secretName": "ExamplePassword"
}
},
"sqlServerName": {
"value": "<your-server-name>"
}
}
}
Gizli dizinin geçerli sürüm dışında bir sürümünü kullanmanız gerekiyorsa özelliğini ekleyin secretVersion
.
"secretName": "ExamplePassword",
"secretVersion": "cd91b2b7e10e492ebb870a6ee0591b68"
Şablonu dağıtın ve parametre dosyasını geçirin:
az group create --name SqlGroup --location westus2
az deployment group create \
--resource-group SqlGroup \
--template-file <Bicep-file> \
--parameters <parameters-file>
Sonraki adımlar
- Anahtar kasaları hakkında genel bilgi için bkz. Azure Key Vault nedir?
- Anahtar gizli dizilerine başvurmanın tam örnekleri için bkz. GitHub'da anahtar kasası örnekleri .
- Anahtar kasasından güvenli bir değer geçirmeyi kapsayan bir Learn modülü için bkz. Gelişmiş ARM şablonu özelliklerini kullanarak karmaşık bulut dağıtımlarını yönetme.