如何将 DevOps 发布机密传递给 ARM 以进行 Key Vault 部署
How to pass DevOps release secrets to ARM for Key Vault Deployment
我正在尝试使用 secretName
和 secretValue
部署密钥保管库,并且我在 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
我相信你问的是如何利用存储为变量组的秘密,通过 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 提供,则参数文件中不需要包含任何内容
我正在尝试使用 secretName
和 secretValue
部署密钥保管库,并且我在 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
我相信你问的是如何利用存储为变量组的秘密,通过 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 提供,则参数文件中不需要包含任何内容