我正在寻找一种更好的方法,以将Key Vault集成到Azure DevOps中的ARM部署中。
例如,部署应用程序服务并创建托管服务身份,以便它可以从现有数据库的密钥库中获取机密。
1)在Azure门户中,我已经为访问策略中具有“获取”和“列表”权限的App服务手动创建了新的服务主体。
2)在我的DevOps项目的项目设置下,我创建了服务连接。
3)我已经在DevOps中创建了具有相关密钥库秘密的变量组。
4)在我的App Service ARM模板中,我已参考变量参数引用了服务标识。
这是将Key Vault与DevOps部署集成的正确方法吗?
每当我需要将新服务部署到环境中(例如现在我要部署API)时,是否需要在Azure中为Key Vault Access手动创建另一个托管身份,或者是否可以通过以下方式创建它: API服务的初始部署的一部分?
预先感谢您的帮助。
答案 0 :(得分:1)
如果您使用的是MSI,建议通过放置在ARM模板中进行设置
"identity": {
"type": "SystemAssigned"
},
在定义应用程序服务时。这将在每次部署时重新创建MSI。每次部署后,其名称将相同,但在AD中将具有不同的指纹。出于Key Vault的目的,这很好。
在Key Vault ARM模板中(如果不是全部都在同一模板中),访问策略可以通过以下方式引用MSI:
"tenantID": "[subscription().tenantId]",
"objectId": "[reference(resourceId('Microsoft.Web/sites', INSERT APP SERVICE NAME), '2018-02-01', 'Full').identity.principalId]",
这将引用由App Service部署创建的ID。
如果使用此选项,请确保使App Service配置取决于密钥保管库和机密(如果引用了ARM模板中的机密),则访问策略取决于密钥保管库和App Service的创建以及所创建的任何机密集还要依靠Key Vault来确保分配以正确的顺序进行。