前两篇讲到了terraform,作为跨平台的IAC工具绝对是没话说的,很非常好用,今天再讲回Azure原生的ARM Template,ARM Template好处就是作为微软的亲儿子,兼容性啥的绝对没话说,但是JSON对于非开发者来说实在用着别扭,繁琐的{}[]这些能搞懵不少人。两者之间各有优劣,用哪种方式都不奇怪,所以今天也来谈一谈ARM Template里的一些小技巧,首先来谈下ARM Template和Key Valut的结合
在部署Azure资源时,经常会涉及到一些机密信息的问题,比如在创建VM时候要指定password或者key值,在创建数据库的时候也要指定账号密码,如果作为明文输入的话肯定是不行的,但是指定为securestring又显得比较麻烦,每次都要手动输入,因为这东西不接受默认值,所以两者都不方便,比较理想的方式其实是结合Azure Key Vault来做
Key Vault是Azure中专门用来管理一些机密信息的服务,像一些加密的字符串,证书之类的都可以用key vault来管理,相当于就是个保险柜一样,可以把敏感的东西锁在里边,需要的时候再取出来,详细的介绍可以参考官方的文档
下边来演示下具体怎么来用,以一个例子为背景
我们在创建Windows VM的时候需要指定password,而这个password就可以首先先存储在key vault中,然后在ARM Template里引用这个值,这样既保护了密码的安全,又不需要手动指定
下边看下具体怎么实现,首先从创建key vault开始,这一步没啥特殊的,指定好key vault的名称和位置即可
下一步一定要注意,这里必须勾选用于模板部署的Azure资源管理器
接下来创建一个secret作为密码
输入这个secret的名称以及对应的值
这样,这个password就在key vault里存在了,接下来就可以在ARM Template里引用了
首先我们可以把password定义成一个parameter,这样这个值就是一个可变得值了,如果需要不同的password的话,也可以在部署的时候重新进行赋值
adminPasswordOrKey": {
"type": "securestring",
"metadata": {
"description": "SSH Key or password for the Virtual Machine. SSH key is recommended."
}
}
接下来可以编辑parameter file,在这里设置一个default值来引用刚才创建的secret
parameters": {
"adminPasswordOrKey": {
"reference": {
"keyVault": {
"id": "/subscriptions//resourceGroups/mykeyvaultdeploymentrg/providers/Microsoft.KeyVault/vaults/"
},
"secretName": "password"
}
其他ARM Template里的内容和正常部署VM都是一样的,部署时指定parameterfile和templatefile即可
New-AzResourceGroupDeployment -ResourceGroupName 'garrickmeng' -TemplateFile "D:\Tech\Cloud\Azure\ARM Template\VM\101-vm-simple-linux - key valut integration\azuredeploy.json" -TemplateParameterFile "D:\Tech\Cloud\Azure\ARM Template\VM\101-vm-simple-linux - key valut integration\azuredeploy.parameters.json"
使用paasword也可以正常进行SSH连接