Dağıtım sırasında güvenli parametre geçirmek için Azure Key Vault’u kullanma
Makale
Şablon veya parametre dosyanıza doğrudan güvenli bir değer (parola gibi) yerleştirmek yerine, dağıtım sırasında azure key vault'tan değeri alabilirsiniz. Parametre dosyanızdaki anahtar kasasına ve gizli diziye başvurarak değerini alırsınız. 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
Şablon dağıtımı sırasında anahtar kasasına erişmek için anahtar kasasında olarak trueayarlayınenabledForTemplateDeployment.
Zaten bir anahtar kasanız varsa şablon dağıtımlarına izin verdiğinden emin olun.
Anahtar kasasının sahibi olarak gizli dizi oluşturmaya otomatik olarak erişebilirsiniz. Başka bir kullanıcının gizli dizi oluşturmasına izin vermeniz gerekiyorsa şunu kullanın:
az keyvault set-policy \
--upn<user-principal-name> \
--name ExampleVault \
--secret-permissions set delete get list
Azure PowerShell
$userPrincipalName = "<Email Address of the deployment operator>"Set-AzKeyVaultAccessPolicy `
-VaultName ExampleVault `
-UserPrincipalName <user-principal-name> `
-PermissionsToSecrets set,delete,get,list
Kullanıcı gizli dizi alan bir şablon dağıtıyorsa erişim ilkeleri gerekli değildir. Yalnızca kullanıcının gizli dizilerle doğrudan çalışması gerekiyorsa erişim ilkelerine bir kullanıcı ekleyin. Dağıtım izinleri sonraki bölümde tanımlanmıştır.
Anahtar kasaları oluşturma ve gizli dizi ekleme hakkında daha fazla bilgi için bkz:
Şablonu dağıtan kullanıcının kaynak grubu ve anahtar kasası kapsamı için izni olmalıdır Microsoft.KeyVault/vaults/deploy/action . Azure Resource Manager, bu erişimi denetleyerek onaylanmamış bir kullanıcının anahtar kasasının kaynak kimliğini geçirerek gizli diziye erişmesini engeller. Gizli dizilere yazma erişimi vermeden kullanıcılara dağıtım erişimi vekleyebilirsiniz.
Sahip ve Katkıda Bulunan rolleri bu erişimi verir. Anahtar kasasını oluşturduysanız, sahibi siz olursunuz ve izniniz olur.
Diğer kullanıcılar için izni verin Microsoft.KeyVault/vaults/deploy/action . Aşağıdaki yordamda, en düşük izne sahip bir rolün nasıl oluşturulacağı ve bir kullanıcıya nasıl atanacağı gösterilmektedir.
Özel rol tanımı JSON dosyası oluşturun:
JSON
{
"Name": "Key Vault resource manager template deployment operator",
"IsCustom": true,
"Description": "Lets you deploy a resource manager template 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"
]
}
Bu yaklaşımla, şablona değil parametre dosyasındaki anahtar kasasına başvurursunuz. Aşağıdaki görüntüde parametre dosyasının gizli diziye nasıl başvurduğunu ve bu değeri şablona nasıl geçirdiği gösterilmektedir.
Aşağıdaki şablon, yönetici parolası içeren bir SQL sunucusu dağıtır. Parola parametresi güvenli bir dizeye ayarlanır. Ancak şablon bu değerin nereden geldiğini belirtmez.
Şimdi, önceki şablon için bir parametre dosyası oluşturun. Parametre dosyasında, şablondaki 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.
az group create --name SqlGroup --location westus2
az deployment group create \
--resource-group SqlGroup \
--template-uri<template-file-URI> \
--parameters<parameter-file>
Önceki bölümde anahtar kasası gizli dizisi için parametreden statik kaynak kimliğinin nasıl geçirildi olduğu gösterilmiştir. Bazı senaryolarda, geçerli dağıtıma bağlı olarak değişen bir anahtar kasası gizli dizisine başvurmanız gerekir. Veya parametre dosyasında bir başvuru parametresi oluşturmak yerine parametre değerlerini şablona geçirmek isteyebilirsiniz. Çözüm, bağlantılı bir şablon kullanarak anahtar kasası gizli dizisi için kaynak kimliğini dinamik olarak oluşturmaktır.
Parametre dosyasında şablon ifadelerine izin verilmediğinden kaynak kimliğini parametreler dosyasında dinamik olarak oluşturamazsınız.
Üst şablonda, iç içe şablonu ekler ve dinamik olarak oluşturulan kaynak kimliğini içeren bir parametre geçirirsiniz. Aşağıdaki görüntüde, bağlı şablondaki bir parametrenin gizli diziye nasıl başvur olduğu gösterilmektedir.
Aşağıdaki şablon, anahtar kasası kimliğini dinamik olarak oluşturur ve parametre olarak geçirir.
JSON
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "The location where the resources will be deployed."
}
},
"vaultName": {
"type": "string",
"metadata": {
"description": "The name of the keyvault that contains the secret."
}
},
"secretName": {
"type": "string",
"metadata": {
"description": "The name of the secret."
}
},
"vaultResourceGroupName": {
"type": "string",
"metadata": {
"description": "The name of the resource group that contains the keyvault."
}
},
"vaultSubscription": {
"type": "string",
"defaultValue": "[subscription().subscriptionId]",
"metadata": {
"description": "The name of the subscription that contains the keyvault."
}
}
},
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2020-10-01",
"name": "dynamicSecret",
"properties": {
"mode": "Incremental",
"expressionEvaluationOptions": {
"scope": "inner"
},
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"adminLogin": {
"type": "string"
},
"adminPassword": {
"type": "securestring"
},
"location": {
"type": "string"
}
},
"variables": {
"sqlServerName": "[concat('sql-', uniqueString(resourceGroup().id, 'sql'))]"
},
"resources": [
{
"type": "Microsoft.Sql/servers",
"apiVersion": "2021-11-01",
"name": "[variables('sqlServerName')]",
"location": "[parameters('location')]",
"properties": {
"administratorLogin": "[parameters('adminLogin')]",
"administratorLoginPassword": "[parameters('adminPassword')]"
}
}
],
"outputs": {
"sqlFQDN": {
"type": "string",
"value": "[reference(variables('sqlServerName')).fullyQualifiedDomainName]"
}
}
},
"parameters": {
"location": {
"value": "[parameters('location')]"
},
"adminLogin": {
"value": "ghuser"
},
"adminPassword": {
"reference": {
"keyVault": {
"id": "[resourceId(parameters('vaultSubscription'), parameters('vaultResourceGroupName'), 'Microsoft.KeyVault/vaults', parameters('vaultName'))]"
},
"secretName": "[parameters('secretName')]"
}
}
}
}
}
]
}
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.
Microsoft PaaS ilişkisel veritabanı tekliflerini kullanarak bulut, şirket içi ve karma ilişkisel veritabanları için SQL Server veritabanı altyapısını yönetme.