ARM(Azure Resource Manager)模板是用于定义和部署Azure资源的JSON文件。customData
是 ARM 模板中的一个部分,用于传递自定义数据到虚拟机。cloud-init
是一个用于初始化云实例的配置工具,支持多种云平台,包括 Azure。
customData
和 cloud-init
,可以在虚拟机启动时执行自定义脚本和配置。customData
可以包含多种类型的数据,包括脚本、配置文件和其他初始化数据。cloud-init
支持多种数据源和模块,如 user-data
、meta-data
等。
在 ARM 模板中,可以通过 keyVault
资源来引用密钥库中的密钥。以下是一个示例:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"keyVaultName": {
"type": "string",
"metadata": {
"description": "The name of the key vault"
}
},
"keyName": {
"type": "string",
"metadata": {
"description": "The name of the key in the key vault"
}
}
},
"resources": [
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2021-03-01",
"name": "[variables('vmName')]",
"properties": {
"hardwareProfile": {
"vmSize": "[variables('vmSize')]"
},
"storageProfile": {
"imageReference": {
"publisher": "Canonical",
"offer": "UbuntuServer",
"sku": "18.04-LTS",
"version": "latest"
},
"osDisk": {
"createOption": "FromImage"
}
},
"osProfile": {
"computerName": "[variables('vmName')]",
"adminUsername": "[parameters('adminUsername')]",
"adminPassword": "[parameters('adminPassword')]",
"customData": "[base64(concat('#cloud-config\n', 'runcmd:\n', '- echo \"', parameters('keyVaultId'), '/secrets/', parameters('keyName'), '=$(az keyvault secret show --vault-name ', parameters('keyVaultName'), ' --name ', parameters('keyName'), ' --query value -o tsv)\", >> /etc/environment\n'))]"
},
"networkProfile": {
"networkInterfaces": [
{
"id": "[resourceId('Microsoft.Network/networkInterfaces', variables('nicName'))]"
}
]
}
}
},
{
"type": "Microsoft.KeyVault/vaults",
"apiVersion": "2019-09-01",
"name": "[parameters('keyVaultName')]",
"properties": {
"tenantId": "[subscription().tenantId]",
"sku": {
"family": "A",
"name": "standard"
},
"enabledForDeployment": true
}
}
]
}
原因:
解决方法:
enabledForDeployment
属性设置为 true
。通过以上步骤,您可以在 ARM 模板中通过 customData
和 cloud-init
访问密钥库中的密钥,并解决相关问题。
领取专属 10元无门槛券
手把手带您无忧上云