ARM模板的Azure密钥保管库访问

时间:2016-11-14 21:14:22

标签: azure automation azure-keyvault azure-resource-manager

我尝试将Azure密钥保管库集成添加到我们的ARM部署中,因此我们可以将所有密码保存在Azure Key-Vault中。

我正在关注this尝试访问我在Azure KeyVault(dSentienceAnalytics)中创建的秘密(adminPassword)。 Here是我的模板

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

你看到我在这里失踪了吗?有谁可以帮我这个?

3 个答案:

答案 0 :(得分:1)

您不能在模板本身中使用KeyVault参考,只能在参数文件中使用。因此,如果您使用KeyVault,您的模板看起来会有所不同,adminPassword参数将被简单地定义为secureString。模板对密码的使用看起来完全如下:

https://github.com/Azure/azure-quickstart-templates/blob/master/101-vm-simple-linux/azuredeploy.json

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

https://azure.microsoft.com/en-us/documentation/articles/resource-manager-keyvault-parameter/#reference-a-secret-with-static-id

显示参数文件,而不是模板文件的参数对象(这有点令人困惑)。

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

https://github.com/rjmax/ArmExamples/tree/master/keyvaultexamples

请注意,KeyVaultUse.json," key"没有任何独特或不同之处。在参数文件中。

那有帮助吗?

答案 1 :(得分:0)

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

        "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"
                    }
                },

您将需要密钥库的ID,例如在此,假定它位于根据顶层模板上的参数构造的变量中,其中用户指定密钥库的资源组和名称:

    "deploymentKeyVaultId" : "[resourceid(subscription().subscriptionId,
      parameters('keyVaultResourceGroup'), 'Microsoft.KeyVault/vaults',
      parameters('keyVaultName'))]",

答案 2 :(得分:0)

您要部署什么?如果它是一项应用程序服务,则可以结合使用托管服务标识和Key Vault上的访问策略,从Key Vault检索机密。 turn on MSI authentication for App Service and add access policy

的方法如下

在App Service中可以添加以下内容:

@Component
class ContainerCustomizer {

    public ContainerCustomizer(AbstractRabbitListenerContainerFactory<?> factory) {
        factory.setMessageConverter(...);
    }

}