前两篇讲到了terraform,做为跨平台的IAC工具绝对是没话说的,很很是好用,今天再讲回Azure原生的ARM Template,ARM Template好处就是做为微软的亲儿子,兼容性啥的绝对没话说,可是JSON对于非开发者来讲实在用着别扭,繁琐的{}[]这些能搞懵很多人。二者之间各有优劣,用哪一种方式都不奇怪,因此今天也来谈一谈ARM Template里的一些小技巧,首先来谈下ARM Template和Key Valut的结合linux
在部署Azure资源时,常常会涉及到一些机密信息的问题,好比在建立VM时候要指定password或者key值,在建立数据库的时候也要指定帐号密码,若是做为明文输入的话确定是不行的,可是指定为securestring又显得比较麻烦,每次都要手动输入,由于这东西不接受默认值,因此二者都不方便,比较理想的方式实际上是结合Azure Key Vault来作
数据库
Key Vault是Azure中专门用来管理一些机密信息的服务,像一些加密的字符串,证书之类的均可以用key vault来管理,至关于就是个保险柜同样,能够把敏感的东西锁在里边,须要的时候再取出来,详细的介绍能够参考官方的文档json
https://docs.microsoft.com/zh-cn/azure/key-vault/general/overview?WT.mc_id=AZ-MVP-5001235 安全
下边来演示下具体怎么来用,以一个例子为背景
ide
咱们在建立Windows VM的时候须要指定password,而这个password就能够首先先存储在key vault中,而后在ARM Template里引用这个值,这样既保护了密码的安全,又不须要手动指定
工具
下边看下具体怎么实现,首先从建立key vault开始,这一步没啥特殊的,指定好key vault的名称和位置便可加密
下一步必定要注意,这里必须勾选用于模板部署的Azure资源管理器rest
接下来建立一个secret做为密码orm
输入这个secret的名称以及对应的值blog
这样,这个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/<SubscriptionID>/resourceGroups/mykeyvaultdeploymentrg/providers/Microsoft.KeyVault/vaults/<KeyVaultName>" }, "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链接