Předání hodnoty zabezpečených parametrů během nasazení Bicep pomocí služby Azure Key Vault

Místo vložení zabezpečené hodnoty (například hesla) přímo do souboru nebo souboru parametrů Bicep můžete hodnotu načíst z Azure Key Vaultu během nasazení. Pokud modul očekává string parametr s modifikátoremsecure:true, můžete k získání tajného klíče trezoru klíčů použít funkci getSecret. Tato hodnota se nikdy nezostavuje, protože odkazujete pouze na JEHO ID trezoru klíčů.

Důležité

Tento článek se zaměřuje na to, jak předat citlivou hodnotu jako parametr šablony. Když se tajný klíč předá jako parametr, může trezor klíčů existovat v jiném předplatném než ve skupině prostředků, do které nasazujete.

Tento článek se nezabývá nastavením vlastnosti virtuálního počítače na adresu URL certifikátu v trezoru klíčů. Šablonu rychlého startu tohoto scénáře najdete v tématu Instalace certifikátu ze služby Azure Key Vault na virtuálním počítači.

Nasazení trezorů klíčů a tajných kódů

Pokud chcete získat přístup k trezoru klíčů během nasazení Bicep, nastavte enabledForTemplateDeployment ho na true.

Pokud už trezor klíčů máte, ujistěte se, že umožňuje nasazení šablon.

az keyvault update  --name ExampleVault --enabled-for-template-deployment true

Pokud chcete vytvořit nový trezor klíčů a přidat tajný klíč, použijte:

az group create --name ExampleGroup --location centralus
az keyvault create \
  --name ExampleVault \
  --resource-group ExampleGroup \
  --location centralus \
  --enabled-for-template-deployment true
az keyvault secret set --vault-name ExampleVault --name "ExamplePassword" --value "hVFkk965BuUv"

Jako vlastník trezoru klíčů máte automaticky přístup k vytváření tajných kódů. Pokud uživatel, který pracuje s tajnými klíči, není vlastníkem trezoru klíčů, udělte přístup pomocí:

az keyvault set-policy \
  --upn <user-principal-name> \
  --name ExampleVault \
  --secret-permissions set delete get list

Další informace o vytváření trezorů klíčů a přidávání tajných kódů najdete v tématech:

Udělení přístupu k tajným kódům

Uživatel, který nasadí soubor Bicep, musí mít Microsoft.KeyVault/vaults/deploy/action oprávnění pro obor skupiny prostředků a trezoru klíčů. Role Vlastník i Přispěvatel udělí tento přístup. Pokud jste vytvořili trezor klíčů, jste vlastníkem a máte oprávnění.

Následující postup ukazuje, jak vytvořit roli s minimálním oprávněním a jak přiřadit uživatele.

  1. Vytvořte soubor JSON s vlastní definicí role:

    {
      "Name": "Key Vault Bicep deployment operator",
      "IsCustom": true,
      "Description": "Lets you deploy a Bicep file with the access to the secrets in the Key Vault.",
      "Actions": [
        "Microsoft.KeyVault/vaults/deploy/action"
      ],
      "NotActions": [],
      "DataActions": [],
      "NotDataActions": [],
      "AssignableScopes": [
        "/subscriptions/00000000-0000-0000-0000-000000000000"
      ]
    }
    

    Nahraďte "0000000-0000-0000-0000-000000000000" ID předplatného.

  2. Vytvořte novou roli pomocí souboru JSON:

    az role definition create --role-definition "<path-to-role-file>"
    az role assignment create \
      --role "Key Vault Bicep deployment operator" \
      --scope /subscriptions/<Subscription-id>/resourceGroups/<resource-group-name> \
      --assignee <user-principal-name>
    

    Ukázky přiřadí uživateli vlastní roli na úrovni skupiny prostředků.

Při použití trezoru klíčů se souborem Bicep pro spravovanou aplikaci musíte udělit přístup k instančnímu objektu poskytovatele prostředků zařízení. Další informace najdete v tématu Přístup k tajnému kódu služby Key Vault při nasazování spravovaných aplikací Azure.

Načtení tajných kódů v souboru Bicep

K získání tajného klíče trezoru klíčů můžete použít funkci getSecret v souborech Bicep. Všimněte si, že getSecret funkce se vztahuje výhradně na Microsoft.KeyVault/vaults prostředek. Kromě toho je omezeno na použití v params rámci oddílu modulu a lze ho použít pouze s parametry s dekorátorem @secure() .

K načtení tajných kódů trezoru klíčů lze v souborech parametrů Bicep použít další funkci s názvem az.getSecret() funkce. Další informace naleznete v tématu Načtení tajných kódů v souboru parametrů.

Vzhledem k tomu, že getSecret funkci lze použít pouze v params části modulu. Pojďme vytvořit sql.bicep ve stejném adresáři jako soubor main.bicep s následujícím obsahem:

param sqlServerName string
param location string = resourceGroup().location
param adminLogin string

@secure()
param adminPassword string

resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = {
  name: sqlServerName
  location: location
  properties: {
    administratorLogin: adminLogin
    administratorLoginPassword: adminPassword
    version: '12.0'
  }
}

Všimněte si, že v předchozím souboru adminPassword Bicep má @secure() parametr dekorátor.

Následující soubor Bicep využívá sql.bicep jako modul. Soubor Bicep odkazuje na existující trezor klíčů a zavolá getSecret funkci, která načte tajný klíč trezoru klíčů, a pak předá hodnotu jako parametr modulu.

param sqlServerName string
param adminLogin string

param subscriptionId string
param kvResourceGroup string
param kvName string

resource kv 'Microsoft.KeyVault/vaults@2023-07-01' existing = {
  name: kvName
  scope: resourceGroup(subscriptionId, kvResourceGroup )
}

module sql './sql.bicep' = {
  name: 'deploySQL'
  params: {
    sqlServerName: sqlServerName
    adminLogin: adminLogin
    adminPassword: kv.getSecret('vmAdminPassword')
  }
}

Načtení tajných kódů v souboru parametrů

Pokud nechcete používat modul, můžete v souboru parametrů načíst tajné kódy trezoru klíčů. Přístup se ale liší v závislosti na tom, jestli používáte soubor parametrů JSON nebo soubor parametrů Bicep.

Následující soubor Bicep nasadí SQL server, který obsahuje heslo správce. Parametr hesla je nastavený na zabezpečený řetězec. Bicep ale neurčí, odkud tato hodnota pochází.

param sqlServerName string
param location string = resourceGroup().location
param adminLogin string

@secure()
param adminPassword string

resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = {
  name: sqlServerName
  location: location
  properties: {
    administratorLogin: adminLogin
    administratorLoginPassword: adminPassword
    version: '12.0'
  }
}

Teď vytvořte soubor parametrů pro předchozí soubor Bicep.

Soubor parametrů Bicep

az.getSecret funkci lze použít v .bicepparam souboru k načtení hodnoty tajného klíče z trezoru klíčů.

using './main.bicep'

param sqlServerName = '<your-server-name>'
param adminLogin = '<your-admin-login>'
param adminPassword = az.getSecret('<subscription-id>', '<rg-name>', '<key-vault-name>', '<secret-name>', '<secret-version>')

Soubor parametrů JSON

V souboru parametrů JSON zadejte parametr, který odpovídá názvu parametru v souboru Bicep. Pro hodnotu parametru odkazujte na tajný klíč z trezoru klíčů. Na tajný kód odkazujete předáním identifikátoru prostředku trezoru klíčů a názvu tajného kódu:

V následujícím souboru parametrů už musí tajný klíč trezoru klíčů existovat a pro ID prostředku zadáte statickou hodnotu.

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

Pokud potřebujete použít jinou verzi tajného kódu než aktuální verzi, uveďte secretVersion vlastnost.

"secretName": "ExamplePassword",
"secretVersion": "cd91b2b7e10e492ebb870a6ee0591b68"

Další kroky