azure - 如何使用 ARM 模板中没有值的 secret 来管理 Azure Key Vault?

标签 azure azure-pipelines azure-resource-manager azure-keyvault azure-rm-template

所以我想创建一个 Azure Key Vault 来管理和版本化我的 secret ,所有这些都在一个地方。我使用arm模板来部署我的所有资源,并编写了一个这样的资源:

 {
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "keyVaultName": {
        "type": "string",
        "defaultValue": "mykeyvaultname",
        "metadata": {
            "description": "The name of the Key Vault to create."
        }
        },
        "secret1Name": {
        "type": "string",
        "defaultValue": "secret1Name",
        "metadata": {
            "description": "The name of the first secret to create."
        }
        },
        "secret1Value": {
        "type": "securestring",
        "defaultValue": "xxx",
        "metadata": {
            "description": "The value of the first secret."
        }
        },
        "secret2Name": {
        "type": "string",
        "defaultValue": "secret2Name",
        "metadata": {
            "description": "The name of the second secret to create."
        }
        },
        "secret2Value": {
        "type": "securestring",
       "defaultValue": "xxx",
        "metadata": {
            "description": "The value of the second secret."
        }
        }
    },
    "variables": {},
    "resources": [
        {
        "type": "Microsoft.KeyVault/vaults",
        "apiVersion": "2019-09-01",
        "name": "[parameters('keyVaultName')]",
        "location": "[resourceGroup().location]",
        "properties": {
            "sku": {
            "family": "A",
            "name": "standard"
            },
            "tenantId": "[subscription().tenantId]",
            "accessPolicies": []
        },
        "resources": [
            {
            "type": "secrets",
            "apiVersion": "2019-09-01",
            "name": "[concat(parameters('keyVaultName'), '/', parameters('secret1Name'))]",
            "location": "[resourceGroup().location]",
            "properties": {
                "value": "[parameters('secret1Value')]"
            }
            },
            {
            "type": "secrets",
            "apiVersion": "2019-09-01",
            "name": "[concat(parameters('keyVaultName'), '/', parameters('secret2Name'))]",
            "location": "[resourceGroup().location]",
            "properties": {
                "value": "[parameters('secret2Value')]"
            }
            }
        ]
        }
    ],
    "outputs": {}
    }

期望

我的 key 保管库与我的 secret 一起部署,但没有值。然后,我将能够在我的 Vault 门户中或通过 cli 手动指定值,从而不必在 Arm 模板中指定我的 secret 。

现实 看来你不能使用没有值(value)的武器来部署 secret 。对于模板来说这是强制性的。如果我设置默认虚拟值,该值将替换我的 key 保管库中的更新值。

研究 我一直无法找到任何合理的解决方案。

KeyVault ARM template overrides secrets when re-deploying

这个答案建议您可以使用条件标签,这听起来像是一个糟糕的解决方法,只会为一个非常简单的用例增加更多的复杂性。

Creating an azure keyvault secret without value?

这个建议在 azure 管道变量库中定义我的 secret ,并在部署时覆盖它们,除了强制我在两个地方指定我的 secret 值之外,实际上意味着将我的 secret 放回到我的库变量中,这正是我想通过使用 azure 的 secret 来避免的事情。

在其他地方,我看到它建议使用 key 保管库中的 secret 填充我的arm模板参数,这会产生一个奇怪的问题22,我需要一个 key 保管库才能获取部署 key 保管库所需的 secret 值。

我确实无法继续。我该如何解决这个问题?

最佳答案

如果使用空值填充 keyvault 的目的是为了节省稍后手动输入它们的时间,我会引用在 Azure CLI 中使用 az keyvault Secret

这样您就可以使用arm模板进行部署,并在稍后自动填充。这是一个使用 DevOps 中的版本的简单任务。

关于azure - 如何使用 ARM 模板中没有值的 secret 来管理 Azure Key Vault?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75611932/

相关文章:

C# 使用 Ajax 在登录到 Azure AD 后从后端获取数据

c# - 从 Azure C# 应用程序到远程 MySQL 服务器的随机连接问题

azure - ARM 模板将多个证书指纹分配给 WEBSITES_LOAD_CERTIFICATES

powershell - 将标签应用到资源模板文件中的 Azure 资源组

azure - 在单个 ARM 脚本中创建批量帐户和 Key Vault

Azure 辅助角色中通过 HTTP 提供的 WCF 服务?

azure - 如何通过Azure AD API快速递归获取多个Azure AD组的成员?

azure - 对 Azure Pipelines 使用 GitHub 应用程序身份验证(而不是 OAuth 或 PAT)的实际好处是什么?

azure - 如何从 azure 发布管道查询当前部署到应用程序服务的 docker 镜像?

azure - 如何将 python 单元测试结果发布到 azure pipeline