用于创建 PostgreSQL 服务器和启用自定义密钥加密的 Azure ARM 模板
Azure ARM template for creating PostgreSQL server and enable custom key encryption
我正在使用 ARM 模板同时创建 PostgreSQL 服务器和一个 Keyvault 密钥来加密服务器,我发现资源名称“Microsoft.DBforPostgreSQL/servers/keys”必须使用这种格式(keyvaultname_keyname_version) 为 PostgreSQL 服务器启用自定义密钥加密。否则会失败。
启用自定义密钥加密的代码块如下:
{
"name": "[concat(parameters('serverName'), '/', variables('serverKeyName'), substring(reference('addAccessPolicy').outputs.keyUri.value, add(lastIndexOf(reference('addAccessPolicy').outputs.keyUri.value,'/'),1)))]",
"type": "Microsoft.DBforPostgreSQL/servers/keys",
"apiVersion": "2020-01-01-preview",
"dependsOn": [
"addAccessPolicy",
"[resourceId('Microsoft.DBforPostgreSQL/servers', parameters('serverName'))]"
],
"properties": {
"serverKeyType": "AzureKeyVault",
"uri": "[reference('addAccessPolicy').outputs.keyUri.value]"
}
}
我在同一个ARM模板中创建key vault key并输出keyUri进行加密,为了遵守命名约定,我需要使用代码块从keyUri中提取version id。但关键是 'Reference' 函数不能用在 'name' 字段中,也不能用在 'variables' 定义中。
问题是:
如何同时创建PostgreSQL、Key Vault密钥和启用自定义密钥加密?
干杯。
关于这个问题,我们没有办法实现。因为如果我们在 arm 模板中创建 Azure 密钥保管库密钥,我们就可以使用 reference
函数来获取密钥 URL。但是,reference
函数只能用于资源定义的属性和模板或部署的输出部分。所以如果你想一次创建这些资源,我建议你使用 Azure CLI 来做到这一点。否则,您需要在部署模板之前创建密钥并提供密钥 URL。
例如
az keyvault create -g <resource_group> -n <vault_name> --enable-soft-delete true --enable-purge-protection true
$keyurl=(az keyvault key create --name <key_name> -p software --vault-name <vault_name> --query "key.kid")
$id =(az postgres server create --name <server_name> -g <resource_group> --location <location> --storage-size <size> -u <user> -p <pwd> --backup-retention <7> --sku-name <sku name> --geo-redundant-backup <Enabled/Disabled> --assign-identity --query "identity.principalId")
az keyvault set-policy --name -g <resource_group> --key-permissions get unwrapKey wrapKey --object-id $id
az postgres server key create --name <server_name> -g <resource_group> --kid $keyurl
在范围内使用“expressionEvaluationOptions”可以解决这个问题。
我正在使用 ARM 模板同时创建 PostgreSQL 服务器和一个 Keyvault 密钥来加密服务器,我发现资源名称“Microsoft.DBforPostgreSQL/servers/keys”必须使用这种格式(keyvaultname_keyname_version) 为 PostgreSQL 服务器启用自定义密钥加密。否则会失败。
启用自定义密钥加密的代码块如下:
{
"name": "[concat(parameters('serverName'), '/', variables('serverKeyName'), substring(reference('addAccessPolicy').outputs.keyUri.value, add(lastIndexOf(reference('addAccessPolicy').outputs.keyUri.value,'/'),1)))]",
"type": "Microsoft.DBforPostgreSQL/servers/keys",
"apiVersion": "2020-01-01-preview",
"dependsOn": [
"addAccessPolicy",
"[resourceId('Microsoft.DBforPostgreSQL/servers', parameters('serverName'))]"
],
"properties": {
"serverKeyType": "AzureKeyVault",
"uri": "[reference('addAccessPolicy').outputs.keyUri.value]"
}
}
我在同一个ARM模板中创建key vault key并输出keyUri进行加密,为了遵守命名约定,我需要使用代码块从keyUri中提取version id。但关键是 'Reference' 函数不能用在 'name' 字段中,也不能用在 'variables' 定义中。
问题是:
如何同时创建PostgreSQL、Key Vault密钥和启用自定义密钥加密?
干杯。
关于这个问题,我们没有办法实现。因为如果我们在 arm 模板中创建 Azure 密钥保管库密钥,我们就可以使用 reference
函数来获取密钥 URL。但是,reference
函数只能用于资源定义的属性和模板或部署的输出部分。所以如果你想一次创建这些资源,我建议你使用 Azure CLI 来做到这一点。否则,您需要在部署模板之前创建密钥并提供密钥 URL。
例如
az keyvault create -g <resource_group> -n <vault_name> --enable-soft-delete true --enable-purge-protection true
$keyurl=(az keyvault key create --name <key_name> -p software --vault-name <vault_name> --query "key.kid")
$id =(az postgres server create --name <server_name> -g <resource_group> --location <location> --storage-size <size> -u <user> -p <pwd> --backup-retention <7> --sku-name <sku name> --geo-redundant-backup <Enabled/Disabled> --assign-identity --query "identity.principalId")
az keyvault set-policy --name -g <resource_group> --key-permissions get unwrapKey wrapKey --object-id $id
az postgres server key create --name <server_name> -g <resource_group> --kid $keyurl
在范围内使用“expressionEvaluationOptions”可以解决这个问题。