Biztonságos paraméterérték átadása az Azure Key Vault használatával a Bicep üzembe helyezése során

Ahelyett, hogy közvetlenül a Bicep-fájlba vagy paraméterfájlba helyezné a biztonságos értéket (például egy jelszót), lekérheti az értéket egy Azure-Key Vault az üzembe helyezés során. Ha egy modul módosítóval secure:true rendelkező paramétert várstring, a getSecret függvénnyel lekérhet egy kulcstartó titkos kulcsát. Az érték soha nem lesz közzétéve, mert csak a kulcstartó azonosítójára hivatkozik.

Fontos

Ez a cikk a bizalmas értékek sablonparaméterként való átadását ismerteti. Ha a titkos kulcs paraméterként van átadva, a kulcstartó egy másik előfizetésben is létezhet, mint a központilag üzembe helyezendő erőforráscsoport.

Ez a cikk nem ismerteti, hogyan állíthat be egy virtuálisgép-tulajdonságot egy tanúsítvány URL-címére egy kulcstartóban. A forgatókönyv rövid útmutatósablonját lásd: Tanúsítvány telepítése az Azure Key Vault-ból virtuális gépen.

Kulcstartók és titkos kódok üzembe helyezése

Ha a Bicep üzembe helyezése során szeretne hozzáférni egy kulcstartóhoz, állítsa enabledForTemplateDeployment a kulcstartón a következőre: true.

Ha már rendelkezik kulcstartóval, győződjön meg arról, hogy engedélyezi a sablontelepítéseket.

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

Új kulcstartó létrehozásához és titkos kulcs hozzáadásához használja a következőt:

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"

A kulcstartó tulajdonosaként automatikusan rendelkezik hozzáféréssel a titkos kódok létrehozásához. Ha a titkos kódokkal dolgozó felhasználó nem a kulcstartó tulajdonosa, adjon hozzáférést a következőkkel:

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

További információ a kulcstartók létrehozásáról és a titkos kódok hozzáadásáról:

Hozzáférés biztosítása a titkos kódokhoz

A Bicep-fájlt üzembe helyező felhasználónak rendelkeznie kell az Microsoft.KeyVault/vaults/deploy/action erőforráscsoport és a kulcstartó hatókörére vonatkozó engedéllyel. A Tulajdonos és a Közreműködő szerepkör egyaránt biztosítja ezt a hozzáférést. Ha létrehozta a kulcstartót, ön a tulajdonos, és rendelkezik az engedéllyel.

Az alábbi eljárás bemutatja, hogyan hozhat létre szerepkört a minimális engedéllyel, és hogyan rendelheti hozzá a felhasználót.

  1. Egyéni szerepkördefiníciós JSON-fájl létrehozása:

    {
      "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"
      ]
    }
    

    Cserélje le a "00000000-0000-0000-0000-000000000000" értéket az előfizetés-azonosítóra.

  2. Hozza létre az új szerepkört a JSON-fájl használatával:

    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>
    

    A minták hozzárendelik az egyéni szerepkört a felhasználóhoz az erőforráscsoport szintjén.

Ha kulcstartót használ egy felügyelt alkalmazás Bicep-fájljával, hozzáférést kell adnia a berendezés erőforrás-szolgáltató szolgáltatásnévéhez. További információ: Hozzáférés Key Vault titkos kód az Azure Managed Applications üzembe helyezésekor.

GetSecret függvény használata

A getSecret függvénnyel lekérheti a kulcstartó titkos kulcsát, és átadhatja az értéket egy modul paraméterének string . A getSecret függvény csak egy Microsoft.KeyVault/vaults erőforráson hívható meg, és csak dekoratorral rendelkező paraméterrel @secure() használható.

A következő Bicep-fájl létrehoz egy Azure SQL kiszolgálót. A adminPassword paraméter rendelkezik dekorátorsal @secure() .

param sqlServerName string
param adminLogin string

@secure()
param adminPassword string

resource sqlServer 'Microsoft.Sql/servers@2020-11-01-preview' = {
  name: sqlServerName
  location: resourceGroup().location
  properties: {
    administratorLogin: adminLogin
    administratorLoginPassword: adminPassword
    version: '12.0'
  }
}

Használjuk az előző Bicep-fájlt modulként, mivel a fájl neve sql.bicep ugyanabban a könyvtárban van, mint a fő Bicep-fájl.

A következő Bicep-fájl az sql.bicep-et használja modulként. A Bicep-fájl hivatkozik egy meglévő kulcstartóra, és meghívja a függvényt a getSecret kulcstartó titkos kulcsának lekéréséhez, majd paraméterként átadja az értéket a modulnak.

param sqlServerName string
param adminLogin string

param subscriptionId string
param kvResourceGroup string
param kvName string

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

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

getSecret A függvény (vagy a névtér minősítőjeaz.getSecret) is használható egy .bicepparam fájlban egy titkos kód értékének lekéréséhez egy kulcstartóból.

using './main.bicep'

param secureUserName = getSecret('exampleSubscription', 'exampleResourceGroup', 'exampleKeyVault', 'exampleSecretUserName', 'exampleSecretVersion')
param securePassword = az.getSecret('exampleSubscription', 'exampleResourceGroup', 'exampleKeyVault', 'exampleSecretPassword')

Titkos kulcsok hivatkozása a paraméterfájlban

Ha nem kíván modult használni, közvetlenül a paraméterfájlban hivatkozhat a kulcstartóra. Az alábbi képen látható, hogy a paraméterfájl hogyan hivatkozik a titkos kódra, és hogyan továbbítja ezt az értéket a Bicep-fájlnak.

Resource Manager Key Vault integrációs diagramja

Megjegyzés

Jelenleg csak a JSON-paraméterek fájljaiban hivatkozhat a kulcstartóra. A Bicep paraméterfájlban nem hivatkozhat a kulcstartóra.

A következő Bicep-fájl egy rendszergazdai jelszót tartalmazó SQL-kiszolgálót helyez üzembe. A jelszóparaméter biztonságos sztringre van állítva. A Bicep azonban nem határozza meg, hogy az érték honnan származik.

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

@secure()
param adminPassword string

param sqlServerName string

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

Most hozzon létre egy paraméterfájlt az előző Bicep-fájlhoz. A paraméterfájlban adjon meg egy paramétert, amely megfelel a Bicep-fájlban található paraméter nevének. A paraméterértékhez hivatkozzon a kulcstartó titkos kódjára. A titkos kódra a kulcstartó erőforrás-azonosítójának és a titkos kód nevének megadásával hivatkozhat:

A következő paraméterfájlban a kulcstartó titkos kódjának már léteznie kell, és statikus értéket kell megadnia az erőforrás-azonosítóhoz.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-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>"
    }
  }
}

Ha a titkos kódnak az aktuális verziótól eltérő verzióját kell használnia, adja meg a tulajdonságot secretVersion .

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

Helyezze üzembe a sablont, és adja meg a paraméterfájlt:

az group create --name SqlGroup --location westus2
az deployment group create \
  --resource-group SqlGroup \
  --template-file <Bicep-file> \
  --parameters <parameters-file>

További lépések