Sdílet prostřednictvím


Použití služby Azure Key Vault k předání tajného kódu jako parametru během nasazení Bicep

Tento článek vysvětluje, jak pomocí služby Azure Key Vault předat tajný kód jako parametr během nasazení Bicep. Místo zadání zabezpečené hodnoty, jako je heslo přímo do souboru nebo souboru parametrů Bicep, můžete během nasazení načíst hodnotu ze služby Azure Key Vault .

Pokud modul očekává parametr řetězce s použitým modifikátoremsecure:true, můžete pomocí getSecret funkce získat tajný klíč trezoru klíčů. Hodnotu nezpřístupňujete, 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 pro tento scénář najdete v tématu WinRM na virtuálním počítači s Windows.

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"

Vlastník trezoru klíčů má 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íčů, můžete přístup udělit takto:

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 vlastní soubor JSON s 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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
      ]
    }
    

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

  2. Pomocí souboru JSON vytvořte novou roli:

    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>
    

    Předchozí příklady přiřazují uživateli vlastní roli na úrovni skupiny prostředků.

Pokud používáte trezor 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

Pomocí funkce v souboru Bicep můžete getSecret získat tajný klíč trezoru klíčů. Funkci getSecret lze použít pouze s prostředkem Microsoft.KeyVault/vaults . Kromě toho se dá použít pouze v params rámci oddílu modulu a pouze s parametry, které mají @secure() dekorátor.

K načtení tajných kódů trezoru klíčů můžete použít jinou funkci volanou az.getSecret() v souboru parametrů Bicep. 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, vytvořte soubor 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'
  }
}

Parametr adminPassword@secure() dekorátor v předchozím souboru.

Následující soubor Bicep využívá sql.bicep jako modul. Soubor Bicep odkazuje na existující trezor klíčů, 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 Bicep.

Následující soubor Bicep nasadí SQL server, který obsahuje heslo správce. Zatímco parametr password je nastavený na zabezpečený řetězec, Bicep nezadá původ této hodnoty:

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'
  }
}

Dále vytvořte soubor parametrů pro předchozí soubor Bicep.

Soubor parametrů Bicep

Funkci az.getSecret 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íčů. Předejte identifikátor prostředku trezoru klíčů a název tajného klíče. V následujícím souboru parametrů musí tajný klíč trezoru klíčů již existovat. Zadáte statickou hodnotu pro ID prostředku.

{
  "$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ž je aktuální, zadejte secretVersion vlastnost:

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