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'tan değeri alabilirsiniz. Modül değiştiricisi olan secure:true
bir string
parametre beklediğinde, anahtar kasası gizli dizisini 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, 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'tan 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şturmaya otomatik olarak erişebilirsiniz. Gizli dizilerle çalışan kullanıcı anahtar kasasının sahibi değilse aşağıdakilerle 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.js kullanarak 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 izniniz olur.
Aşağıdaki yordamda, en düşük izinle 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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e" ] }
"00000000-0000-0000-0000-0000000000000000000" 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 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 Key Vault gizli dizisine erişme.
Bicep dosyasında gizli dizileri alma
Anahtar kasası gizli dizisini almak için Bicep dosyalarında getSecret işlevini kullanabilirsiniz. İşlevin getSecret
yalnızca bir Microsoft.KeyVault/vaults
kaynak için geçerli olduğunu unutmayın. Ayrıca, modülün params
bölümü içindeki kullanımla sınırlıdır ve yalnızca dekoratör ile parametrelerle @secure()
kullanılabilir.
anahtar kasası gizli dizilerini almak için Bicep parametre dosyalarında işlev olarak adlandırılan az.getSecret()
başka bir işlev kullanılabilir. Daha fazla bilgi için bkz . Parametreler dosyasında gizli dizileri alma.
getSecret
çünkü işlevi yalnızca modülün params
bölümünde kullanılabilir. Aşağıdaki içeriğe sahip main.bicep dosyasıyla aynı dizinde bir sql.bicep oluşturalım:
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'
}
}
Yukarıdaki Bicep dosyasında parametresinin adminPassword
bir @secure()
dekoratöre sahip olduğunu fark edin.
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-07-01' existing = {
name: kvName
scope: resourceGroup(subscriptionId, kvResourceGroup )
}
module sql './sql.bicep' = {
name: 'deploySQL'
params: {
sqlServerName: sqlServerName
adminLogin: adminLogin
adminPassword: kv.getSecret('vmAdminPassword')
}
}
Parametreler dosyasında gizli dizileri alma
Modül kullanmak istemiyorsanız, anahtar kasası gizli dizilerini parametre dosyasından alabilirsiniz. Ancak yaklaşım, JSON parametre dosyası mı yoksa Bicep parametre dosyası mı kullandığınıza bağlı olarak değişir.
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 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'
}
}
Şimdi, önceki Bicep dosyası için bir parametre dosyası oluşturun.
Bicep parametre dosyası
az.getSecret
işlevi bir anahtar kasasından gizli .bicepparam
dizi değerini almak için bir dosyada kullanılabilir.
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>')
JSON parametre dosyası
JSON parametreleri 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": "<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>"
}
}
}
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"
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.