如何将 DevOps 发布机密传递给 ARM 以进行 Key Vault 部署

How to pass DevOps release secrets to ARM for Key Vault Deployment

我正在尝试使用 secretNamesecretValue 部署密钥保管库,并且我在 azure devops 中创建了一个包含所有机密的变量组,并且我在参数文件中使用了以下参数,但是当它被部署时,秘密值被存储为 $(secret) 而不是实际存储在 Azure DevOps 任务组中的密码。

  "secretsObject": {

    "value": {

      "secrets": [

        {

          "secretName": "App012",

          "secretValue": "$(mysecret)"

        },

这是我在密钥保管库模板中得到的:

  {

    "type": "Microsoft.KeyVault/vaults/secrets",

    "name": "[concat(parameters('keyVaultName'), '/', parameters('secretsObject').secrets[copyIndex()].secretName)]",

    "apiVersion": "2018-02-14",

    "dependsOn": [

      "[concat('Microsoft.KeyVault/vaults/', parameters('keyVaultName'))]"

    ],

    "copy": {

      "name": "secretsCopy",

      "count": "[length(parameters('secretsObject').secrets)]"

    },

    "properties": {

      "value": "[parameters('secretsObject').secrets[copyIndex()].secretValue]"

    }

  }

]

}

知道如何将 "secretvalue" 作为变量传递吗?

您需要为 Key Vault 创建一个包含密钥 / link 的参数文件。

这是一个示例:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "adminLogin": {
            "value": "exampleadmin"
        },
        "adminPassword": {
            "reference": {
              "keyVault": {
                "id": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.KeyVault/vaults/<vault-name>"
              },
              "secretName": "ExamplePassword"
            }
        },
        "sqlServerName": {
            "value": "<your-server-name>"
        }
    }
}

更多信息:

https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/parameter-files

https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/add-template-to-azure-pipelines

我相信你问的是如何利用存储为变量组的秘密,通过 Azure DevOps 使用 ARM 模板安全部署。如果是这种情况,请考虑在发布任务中使用 Override Template Parameters

格式为 -NameOfARMParameter $(NameofDevOpsVariable)

在你的情况下,它将是 -mysecret $(NameOfDevOpsVariable)

部署 .json 参数声明应如下所示:

 "secretValue": {
      "type": "string",
      "metadata": {
        "description": "This is for receiving a value from DevOps releases of the secret to be stored in the key vault"
      }
    },
"secretName": {
          "type": "string",
          "metadata": {
            "description": "Name of the Secret"
          }
        },

对于实际部署

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

如果这些值将从 Dev Ops 提供,则参数文件中不需要包含任何内容