检索ARM模板中的当前版本以获取机密

时间:2019-01-02 21:02:56

标签: azure azure-functions azure-keyvault

我得到了一个名为“ StorageConnectionString”的秘密,它已从ARM插入到我的Key Vault中:

{
  "type": "Microsoft.KeyVault/vaults/secrets",
  "name": "[concat(variables('keyVaultName-v'),'/','StorageConnectionString')]",
  "apiVersion": "2018-02-14",
  "properties": {
    "contentType": "text/plain",
    "value": "OmittedStorageConntionString"
  },
  "dependsOn": [
    "[resourceId('Microsoft.KeyVault/vaults', variables('keyVaultName-v'))]"
  ]
}

有什么方法可以参考并从ARM获取插入的机密的当前版本(或只是版本ID)的url?我想从如下环境变量中引用它:https://azure.microsoft.com/en-us/blog/simplifying-security-for-serverless-and-web-apps-with-azure-functions-and-app-service/在“从Key Vault采购应用程序设置”部分下。我想在Azure函数中设置环境设置@Microsoft.KeyVault(SecretUri=secret_uri_with_version)

如果这不可能,是否还有另一种设置连接字符串的方法?

1 个答案:

答案 0 :(得分:1)

问题是我的不得已,在我发布这个问题后,我在这里找到了答案:https://docs.microsoft.com/en-us/azure/app-service/app-service-key-vault-references#reference-syntax(在文档中)"[concat('@Microsoft.KeyVault(SecretUri=', reference(variables('storageConnectionStringResourceId')).secretUriWithVersion, ')')]"

编辑 通过遵循前面提到的i,您实际上可以在ARM模板中引用该秘密,并获得包含该版本的秘密的URL。

创建一个秘密:

{
  "type": "Microsoft.KeyVault/vaults/secrets",
  "name": "[concat(variables('keyVaultName-v'),'/', variables('queueStorageConnectionStringSecretName-v'))]",
  "apiVersion": "2018-02-14",
  "properties": {
    "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('queueStorageName-v'), ';AccountKey=', listKeys(variables('storageAccountResourceId'),'2015-05-01-preview').key1)]"
  }

然后您可以在函数应用程序中引用它

    {
      "name": "StorageQueueConnectionString",
      "value": "[concat('@Microsoft.KeyVault(SecretUri=', reference(variables('queueStorageConnectionStringSecretNameResourceId-v')).secretUriWithVersion, ')')]"
    }

然后,在您的函数中,可以在绑定中引用StorageQueueConnectionString

[Queue("queueName", Connection ="StorageQueueConnectionString")]
            ICollector<string> outputQueueItem

通过这种方式,您不必在环境变量(或代码)中引用连接字符串,从而使您的应用程序更加安全。此示例要求在功能应用程序和库之间由系统分配(或用户分配)身份。我目前正在尝试使用Vault,已经编写了一些代码,可以在这里找到:https://github.com/mslot/Microservices。代码不漂亮!我正在尝试很多与不同的Azure实体之间的密钥库和绑定有关的事情。