前两篇讲到了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来管理,相当于就是个保险柜一样,可以把敏感的东西锁在里边,需要的时候再取出来,详细的介绍可以参考官方的文档

https://docs.microsoft.com/zh-cn/azure/key-vault/general/overview?WT.mc_id=AZ-MVP-5001235

下边来演示下具体怎么来用,以一个例子为背景

我们在创建Windows VM的时候需要指定password,而这个password就可以首先先存储在key vault中,然后在ARM Template里引用这个值,这样既保护了密码的安全,又不需要手动指定

下边看下具体怎么实现,首先从创建key vault开始,这一步没啥特殊的,指定好key vault的名称和位置即可

图片1.png

下一步一定要注意,这里必须勾选用于模板部署的Azure资源管理器
图片3.png


接下来创建一个secret作为密码

图片4.png


输入这个secret的名称以及对应的值

图片5.png


这样,这个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"

图片6.png


使用paasword也可以正常进行SSH连接

图片7.png