从ARM模板访问Azure密钥保险库

从ARM模板访问Azure密钥保险库,azure,automation,azure-keyvault,azure-resource-manager,Azure,Automation,Azure Keyvault,Azure Resource Manager,我试图将Azure key vault与我们的ARM部署进行集成,以便我们可以在Azure key vault中保留所有密码 我跟随尝试访问我在Azure KeyVault(dSentienceAnalytics)中创建的机密(adminPassword)。这是我的模板 我试图通过Powershell部署此模板,但它要求我输入变量“adminPassword”的值,它应该从Azure密钥库检索该变量 您看到我在这里缺少什么了吗?您不能在模板本身中使用KeyVault引用,只能在参数文件中使用。因

我试图将Azure key vault与我们的ARM部署进行集成,以便我们可以在Azure key vault中保留所有密码

我跟随尝试访问我在Azure KeyVault(dSentienceAnalytics)中创建的机密(adminPassword)。这是我的模板

我试图通过Powershell部署此模板,但它要求我输入变量“adminPassword”的值,它应该从Azure密钥库检索该变量


您看到我在这里缺少什么了吗?

您不能在模板本身中使用KeyVault引用,只能在参数文件中使用。因此,如果使用KeyVault,模板的外观不会有任何不同,adminPassword参数将简单地定义为secureString。模板对密码的使用可以如下所示:

参数文件是使用引用的位置。这里的第一个代码示例:

显示的是参数文件,而不是模板文件的参数对象(有点混乱)

有关一个非常简单的示例,请参见此处的KeyVaultUse.json和KeyVaultUse.parameters.json:

请注意,KeyVaultUse.json没有什么独特或不同之处,“key”在参数文件中


是否有帮助?

您可以创建链接模板,并将keyvault机密作为参数传递给该模板。Azure需要在某个uri上访问您的链接模板

        "name": "linked-template",
        "type": "Microsoft.Resources/deployments",
        "properties": {
            "mode": "Incremental",
            "templateLink": {
                "uri":"<your linked template uri, e.g. a blob-store file with a sas token>"
            },
            "parameters": {

                "password": {
                    "reference": {
                        "keyVault": {
                            "id": "[variables('keyVaultId')]"
                        },
                    "secretName": "password"
                    }
                },

您试图部署什么?如果是应用程序服务,您可以利用密钥库上的托管服务标识和访问策略,从密钥库检索机密。下面是如何

在应用程序中,服务可以添加如下内容:

   {
          "apiVersion": "2018-11-01",
          "name": "appsettings",
          "type": "config",
          "dependsOn": [
            "[resourceId('Microsoft.Web/Sites', WEBSITE NAME))]",
            "Microsoft.ApplicationInsights.AzureWebSites",
            "[resourceId('Microsoft.KeyVault/vaults/', variables('keyVaultName'))]",
            "[resourceId('Microsoft.KeyVault/vaults/secrets', variables('keyVaultName'), variables('secretName'))]"

          ],
          "properties": {
            "ConnectionSecret": "[concat('@Microsoft.KeyVault(SecretUri=', reference(SECRET NAME).secretUriWithVersion, ')')]"


          }

为什么不呢?您完全可以,因为平台不支持在模板中使用KeyVault引用[尚未]。。。仅在参数文件中。嗯。。。你能分享那个模板吗?是的,那些是参数引用。。。后者不在模板中使用,而是作为参数传递给嵌套部署。
   {
          "apiVersion": "2018-11-01",
          "name": "appsettings",
          "type": "config",
          "dependsOn": [
            "[resourceId('Microsoft.Web/Sites', WEBSITE NAME))]",
            "Microsoft.ApplicationInsights.AzureWebSites",
            "[resourceId('Microsoft.KeyVault/vaults/', variables('keyVaultName'))]",
            "[resourceId('Microsoft.KeyVault/vaults/secrets', variables('keyVaultName'), variables('secretName'))]"

          ],
          "properties": {
            "ConnectionSecret": "[concat('@Microsoft.KeyVault(SecretUri=', reference(SECRET NAME).secretUriWithVersion, ')')]"


          }