Aracılığıyla paylaş


Bicep dağıtımı sırasında bir gizli bilgiyi parametre olarak geçirmek için Azure Key Vault'u kullanın

Bu makalede, Bicep dağıtımı sırasında bir gizliyi parametre olarak geçirmek için Azure Key Vault'un nasıl kullanılacağı açıklanmaktadır. Parola gibi güvenli bir değeri doğrudan Bicep dosyanıza veya parametreler dosyanıza girmek yerine, dağıtım sırasında Azure Key Vault'tan değeri alabilirsiniz.

Bir modül, değiştirici uygulanmış bir dize parametresi beklediğinde, bir anahtar kasası sırrını elde etmek için secure:true kullanabilirsiniz. Yalnızca anahtar kasası kimliğine atıfta bulunarak değeri açıklamazsınız.

Önemli

Bu makalede, hassas bir değeri şablon parametresi olarak geçirme konusuna odaklanmaktadır. Gizli dizi parametre olarak geçirildiğinde, anahtar kasası dağıttığınız kaynak grubundan farklı bir abonelikte bulunabilir.

Bu makalede, bir sanal makine (VM) özelliğinin bir anahtar kasasında bir sertifikanın URL'sine nasıl ayarlanacağı ele alınmıyor. Bu senaryonun hızlı başlangıç şablonu için Windows VM'de WinRM sayfasına bakın.

Anahtar kasalarını ve gizli bilgileri dağıtın

Bicep dağıtımı sırasında bir anahtar kasasına erişmek için anahtar kasasını enabledForTemplateDeploymenttrue olarak ayarlayın.

Zaten bir anahtar kasanız varsa şablon dağıtımlarına izin verdiğinden emin olun.

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

Yeni bir anahtar kasası oluşturmak ve bir gizli eklemek için şunu kullanın:

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"

Anahtar kasasının sahibi otomatik olarak sır oluşturma erişimine sahiptir. Gizli bilgilerle çalışan kullanıcı anahtar kasasının sahibi değilse, aşağıdakilerle erişim verebilirsiniz:

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

Anahtar kasası oluşturma ve gizli ekleme hakkında daha fazla bilgi için bkz:

Sırlara erişim izni verme

Kaynak grubu ve anahtar kasası kapsamı için Microsoft.KeyVault/vaults/deploy/action iznine sahip olması gereken kullanıcı, Bicep dosyasını dağıtan kişidir. Sahip ve Katkıda Bulunan rolleri bu erişimi verir. Anahtar kasasını oluşturduysanız, sahibi sizsiniz ve izinlere sahipsiniz.

Aşağıdaki yordamda, en düşük izinle bir rolün nasıl oluşturulacağı ve kullanıcının nasıl atanacağı gösterilmektedir:

  1. Rol tanımıyla özel bir JSON dosyası oluşturun:

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

    "00000000-0000-0000-0000-0000000000000000000" değerini abonelik kimliğiyle değiştirin.

  2. Yeni rolü oluşturmak için JSON dosyasını kullanın:

    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>
    

    Yukarıdaki örneklerde özel rol kullanıcıya kaynak grubu düzeyinde atanır.

Yönetilen bir uygulama için Bicep dosyasıyla anahtar kasası kullanıyorsanız Alet Kaynak Sağlayıcısı hizmet sorumlusuna erişim vermelisiniz. Daha fazla bilgi için bkz. Azure yönetilen uygulamaları dağıtırken Key Vault gizli anahtarına erişme.

Bicep dosyasındaki gizli bilgileri elde etme

Bicep dosyasında bir anahtar kasası sırrı elde etmek için getSecret işlevini kullanabilirsiniz. getSecret İşlev yalnızca bir Microsoft.KeyVault/vaults kaynakla kullanılabilir. Ayrıca, yalnızca modülün params bölümü içinde ve yalnızca dekoratöre sahip @secure() parametrelerle kullanılabilir.

Anahtar kasası sırlarını almak için Bicep parametre dosyasında adı az.getSecret() olan başka bir işlevi kullanabilirsiniz. Daha fazla bilgi için Bir parametre dosyasında sırları alma kısmına bakın.

getSecret İşlev yalnızca modülün params bölümünde kullanılabildiğinden, main.bicep dosyasıyla aynı dizinde aşağıdaki içeriğe sahip bir sql.bicep dosyası oluşturun:

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

@secure()
param adminPassword string

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

adminPassword parametresi, önceki dosyada bir @secure() dekoratöre sahiptir.

Aşağıdaki Bicep dosyası sql.bicep dosyasını modül olarak kullanır. Bicep dosyası mevcut bir anahtar kasasına referans verir, anahtar kasasındaki sırrı almak için işlevi çağırır ve ardından değeri modüle bir parametre olarak geçirir.

param sqlServerName string
param adminLogin string

param subscriptionId string
param kvResourceGroup string
param kvName string

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

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

Parametre dosyasındaki gizli bilgileri al

Modül kullanmak istemiyorsanız, anahtar kasası gizli anahtarlarını bir parametre dosyasında alabilirsiniz. Ancak yaklaşım, JSON veya Bicep parametre dosyası kullanmanıza bağlı olarak değişir.

Aşağıdaki Bicep dosyası, yönetici parolası içeren bir SQL sunucusu dağıtır. Parola parametresi güvenli bir dize olarak ayarlanmış olsa da Bicep bu değerin kaynağını belirtmez:

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

@secure()
param adminPassword string

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

Ardından, önceki Bicep dosyası için bir parametre dosyası oluşturun.

Bicep parametreler dosyası

az.getSecret işlevi, bir anahtar kasasından bir gizli değeri almak için bir .bicepparam dosyada kullanılabilir.

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

JSON parametre dosyası

JSON parametre dosyasında, Bicep dosyasındaki parametrenin adıyla eşleşen bir parametre belirtin. Parametre değeri için anahtar kasasından gizli bilgiye referans verin. Anahtar kasasının kaynak tanımlayıcısını ve gizli değerin adını iletin. Aşağıdaki parametre dosyasında anahtar kasası sırrının zaten mevcut olması gerekir. Kaynak kimliği için statik bir değer sağlarsınız.

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

Geçerli olanın dışında bir gizli bilgi sürümünü kullanmanız gerekiyorsa bir secretVersion özelliği ekleyin:

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