Параметры Azure CLI ARM json, используя переменные для получения секретов keyvault - PullRequest
0 голосов
/ 17 января 2019

Мы создали сценарий bash для развертывания нашей инфраструктуры Azure на основе шаблонов Azure CLI и ARM.

Мы также используем keyvault для хранения наших секретов, и мы нуждаемся в нем для ссылок при развертывании ресурсов.

Пример (это работает со статическими значениями в параметрах json):

templateUri="armdeploymysql.json"
az group deployment create \
    --name $Environment \
    --resource-group $RSGName \
    --template-file $templateUri \
    --parameters @armdeploymysql-parameters.json

В armdeploymysql-parameters.json вы найдете это:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "administratorLogin": {
            "value": "termysqladmin"
        },
        "administratorLoginPassword": {
            "reference": {
              "keyVault": {
                "id": "/subscriptions/xxx-xxx-xxx-xxx--xx/resourceGroups/resourcegroupname/providers/Microsoft.KeyVault/vaults/keyvaultname"
              },
              "secretName": "WORDPRESSDBPASSWORD"
            }
        },

Как видите, мы используем статические значения. Но нам нужно развернуть этот шаблон для нескольких сред (Test, Acc & Prod), поэтому мы хотели бы использовать переменные вместо статических значений.

Он работает для большинства параметров ARM, и мы использовали его для настройки следующим образом:

templateUri="armdeploymysql.json"
az group deployment create \
    --name $Environment \
    --resource-group $RSGName \
    --template-file $templateUri \
    --parameters "version=$version" \
                 "location=$location" \
                 "administratorLogin=$SQLAdmin" \
                 "administratorLoginPassword=$SQLPass"

Итак, вопрос:

  1. Можем ли мы сделать ссылку на параметр, как в последнем примере, чтобы указать на keyvault?
  2. Как мы можем разобрать переменные в параметрах json?

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Окончательное исправление для этого конкретного случая (кредиты @Murray Foxcroft), фрагмент из кода:

keyVaultName="keyvaultname-$Environment"
keyVaultsecret="WORDPRESSDBPASSWORD"
SQLPass=$(az keyvault secret show --vault-name $keyVaultName --name $keyVaultsecret --query value -o tsv)

az group deployment create \
    --name $Environment \
    --resource-group $RSGName \
    --template-file $templateUri \
    --parameters "version=$version" \
                 "location=$location" \
                 "administratorLogin=$SQLAdmin" \
                 "administratorLoginPassword=$SQLPass" \

-o tsv был важен, чтобы избежать добавления дополнительных символов, которые обычная команда передает в переменную.

Спасибо за помощь!

0 голосов
/ 17 января 2019

Почему бы вам не использовать az, чтобы получить секрет, а затем передать его в свой шаблон.

WpPwd = az keyvault secret show --vault-name "keyvaultname" --name "WORDPRESSDBPASSWORD"

templateUri="armdeploymysql.json"
az group deployment create \
    --name $Environment \
    --resource-group $RSGName \
    --template-file $templateUri \
    --parameters "version=$version" \
                 "location=$location" \
                 "administratorLogin=$SQLAdmin" \
                 "administratorLoginPassword=$SQLPass"
                 "wordpresspassword=$WpPwd"
...