Bicep kullanarak gizli dizileri yönetme

Dağıtımlar genellikle gizli dizilerin Azure ortamınızda güvenli bir şekilde depolanmasını ve yayılmasını gerektirir. Bicep ve Azure, dağıtımlarınızdaki gizli dizileri yönetmenize yardımcı olacak birçok özellik sağlar.

Kullanabileceğiniz gizli dizilerden kaçının

Birçok durumda gizli dizileri kullanmaktan kaçınmak mümkündür. Birçok Azure kaynağı, kimlik doğrulaması yapmalarını ve kimlik bilgilerini işlemenize veya yönetmenize gerek kalmadan Azure içindeki diğer kaynaklara erişme yetkisine sahip olmalarını sağlayan yönetilen kimlikleri destekler. Ayrıca, bazı Azure hizmetleri sizin için otomatik olarak HTTPS sertifikaları oluşturabilir ve sertifikaları ve özel anahtarları işlemenizi önler. Mümkün olduğunca yönetilen kimlikleri ve hizmet tarafından yönetilen sertifikaları kullanın.

Güvenli parametreleri kullanma

Bicep dağıtımlarınıza parametre olarak gizli diziler sağlamanız gerektiğinde dekoratör kullanın@secure(). Bir parametreyi güvenli olarak işaretlediğinizde, Azure Resource Manager değeri günlüğe kaydetmeyi veya Azure portal, Azure CLI veya Azure PowerShell görüntülemeyi önler.

Gizli diziler için çıkışlardan kaçının

Güvenli veriler için Bicep çıkışlarını kullanmayın. Çıkışlar dağıtım geçmişine kaydedilir ve dağıtıma erişimi olan herkes dağıtım çıkışlarının değerlerini görüntüleyebilir.

Bicep dağıtımında bir gizli dizi oluşturmanız ve bunu çağıranın veya diğer kaynakların kullanımına açmanız gerekiyorsa, aşağıdaki yaklaşımlardan birini kullanmayı göz önünde bulundurun.

Gizli dizileri dinamik olarak arama

Bazen, başka bir kaynağı yapılandırmak için bir kaynaktan gizli diziye erişmeniz gerekir.

Örneğin, başka bir dağıtımda bir depolama hesabı oluşturmuş ve bir Azure İşlevleri uygulamasını yapılandırmak için birincil anahtarına erişmeniz gerekebilir. Önceden oluşturulmuş depolama hesabına kesin olarak belirlenmiş bir başvuru almak için anahtar sözcüğünü kullanabilir existing ve ardından depolama hesabının listKeys() yöntemini kullanarak birincil anahtarla bir bağlantı dizesi oluşturabilirsiniz:

Aşağıdaki örnek, daha büyük bir örneğin parçasıdır. Dağıtabileceğiniz bir Bicep dosyası için dosyanın tamamına bakın.

resource storageAccount 'Microsoft.Storage/storageAccounts@2021-06-01' existing = {
  name: storageAccountName
}

var storageAccountConnectionString = 'DefaultEndpointsProtocol=https;AccountName=${storageAccount.name};EndpointSuffix=${environment().suffixes.storage};AccountKey=${listKeys(storageAccount.id, storageAccount.apiVersion).keys[0].value}'

resource functionApp 'Microsoft.Web/sites@2021-02-01' = {
  name: functionAppName
  location: location
  kind: 'functionapp'
  properties: {
    httpsOnly: true
    serverFarmId: appServicePlan.id
    siteConfig: {
      appSettings: [
        {
          name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
          value: applicationInsights.properties.InstrumentationKey
        }
        {
          name: 'AzureWebJobsStorage'
          value: storageAccountConnectionString
        }
        {
          name: 'FUNCTIONS_EXTENSION_VERSION'
          value: '~3'
        }
        {
          name: 'FUNCTIONS_WORKER_RUNTIME'
          value: 'dotnet'
        }
        {
          name: 'WEBSITE_CONTENTAZUREFILECONNECTIONSTRING'
          value: storageAccountConnectionString
        }
      ]
    }
  }
}

Bu yaklaşımı kullanarak, gizli dizileri Bicep dosyanıza geçirmekten veya dosyanızdan çıkarmaktan kaçınmış olursunuz.

Gizli dizileri bir anahtar kasasında depolamak için de bu yaklaşımı kullanabilirsiniz.

Key Vault kullanma

Azure Key Vault, güvenli verileri depolamak ve yönetmek için tasarlanmıştır. Gizli dizilerinizi, sertifikalarınızı, anahtarlarınızı ve korunması ve paylaşılması gereken diğer verileri yönetmek için bir anahtar kasası kullanın.

Bicep kullanarak kasalar ve gizli diziler oluşturabilir ve yönetebilirsiniz. türünde Microsoft.KeyVault/vaultsbir kaynak oluşturarak kasalarınızı tanımlayın.

Kasa oluştururken verilerine kimlerin ve nelerin erişebileceğini belirlemeniz gerekir. Kasanın gizli dizilerini bir Bicep dosyasından okumayı planlıyorsanız özelliğini olarak trueayarlayınenabledForTemplateDeployment.

Anahtar kasasına gizli dizi ekleme

Gizli diziler bir alt kaynaktır ve türü Microsoft.KeyVault/vaults/secretskullanılarak oluşturulabilir. Aşağıdaki örnekte kasa ve gizli dizi oluşturma adımları gösterilmektedir:

Aşağıdaki örnek, daha büyük bir örneğin parçasıdır. Dağıtabileceğiniz bir Bicep dosyası için dosyanın tamamına bakın.

resource keyVault 'Microsoft.KeyVault/vaults@2019-09-01' = {
  name: keyVaultName
  location: location
  properties: {
    enabledForTemplateDeployment: true
    tenantId: tenant().tenantId
    accessPolicies: [
    ]
    sku: {
      name: 'standard'
      family: 'A'
    }
  }
}

resource keyVaultSecret 'Microsoft.KeyVault/vaults/secrets@2019-09-01' = {
  parent: keyVault
  name: 'MySecretName'
  properties: {
    value: 'MyVerySecretValue'
  }
}

İpucu

Otomatik dağıtım işlem hatlarını kullandığınızda, dağıtımlarınız için anahtar kasası gizli dizilerinin nasıl önyükleneceğini belirlemek bazen zor olabilir. Örneğin, bir dış API ile iletişim kurarken kullanmanız için size bir API anahtarı sağlandıysa, gizli dizinin dağıtımlarınızda kullanılabilmesi için önce bir kasaya eklenmesi gerekir.

Üçüncü taraflardan gelen gizli dizilerle çalışırken bunları kasanıza el ile eklemeniz gerekebilir ve ardından sonraki tüm kullanımlar için gizli diziye başvurabilirsiniz.

Modüllerle anahtar kasası kullanma

Bicep modüllerini kullandığınızda, işlevini kullanarak getSecretgüvenli parametreler sağlayabilirsiniz.

Ve scope anahtar sözcüklerini birlikte kullanarak başka bir kaynak grubunda tanımlanan bir anahtar kasasına existing da başvurabilirsiniz. Aşağıdaki örnekte, Bicep dosyası adlı bir kaynak grubuna dağıtılır. Modülün mySecret parametresinin değeri, Gizli Diziler kaynak grubunda bulunan contosonetworkingsecrets adlı bir anahtar kasasında tanımlanır:

resource networkingSecretsKeyVault 'Microsoft.KeyVault/vaults@2019-09-01' existing = {
  scope: resourceGroup('Secrets')
  name: 'contosonetworkingsecrets'
}

module exampleModule 'module.bicep' = {
  name: 'exampleModule'
  params: {
    mySecret: networkingSecretsKeyVault.getSecret('mySecret')
  }
}

.bicepparam dosyasında anahtar kasası kullanma

Dosya biçimini kullandığınızda .bicepparam, işlevini kullanarak getSecretparametrelere güvenli değerler sağlayabilirsiniz.

Abonelik kimliğini, kaynak grubu adını ve anahtar kasası adını sağlayarak KeyVault'a başvurun. Gizli dizi adını sağlayarak gizli dizinin değerini alabilirsiniz. İsteğe bağlı olarak gizli sürüm sağlayabilirsiniz. Gizli sürümü sağlamazsanız en son sürüm kullanılır.

using './main.bicep'

param secureUserName = az.getSecret('<subscriptionId>', '<resourceGroupName>', '<keyVaultName>', '<secretName>', '<secretVersion>')
param securePassword = az.getSecret('<subscriptionId>', '<resourceGroupName>', '<keyVaultName>', '<secretName>')

İşlem hatlarında gizli dizilerle çalışma

Azure kaynaklarınızı bir işlem hattı kullanarak dağıtırken gizli dizilerinizi uygun şekilde işlemeye dikkat etmeniz gerekir.

  • Gizli dizileri kod deponuzda depolamaktan kaçının. Örneğin, parametre dosyalarına veya işlem hattı tanımı YAML dosyalarınıza gizli dizi eklemeyin.
  • GitHub Actions güvenli verileri depolamak için şifrelenmiş gizli dizileri kullanın. Gizli dizilerin yanlışlıkla işlenmesini algılamak için gizli dizi taramasını kullanın.
  • Azure Pipelines'da güvenli verileri depolamak için gizli dizi değişkenlerini kullanın.