Kelola rahasia menggunakan Bicep
Penyebaran sering kali memerlukan rahasia untuk disimpan dan disebarkan dengan aman di seluruh lingkungan Azure Anda. Bicep dan Azure menyediakan banyak fitur untuk membantu mengelola rahasia dalam penyebaran Anda.
Hindari rahasia jika Anda bisa
Dalam banyak situasi, Anda dapat menghindari penggunaan rahasia sama sekali. Banyak sumber daya Azure mendukung identitas terkelola, yang memungkinkan mereka untuk mengautentikasi dan diotorisasi untuk mengakses sumber daya lain dalam Azure, tanpa Anda perlu menangani atau mengelola info masuk apa pun. Selain itu, beberapa layanan Azure dapat membuat sertifikat HTTPS untuk Anda secara otomatis, sehingga Anda tidak perlu menangani sertifikat dan kunci privat. Gunakan identitas terkelola dan sertifikat terkelola layanan jika memungkinkan.
Menggunakan parameter aman
Ketika Anda perlu memberikan rahasia untuk penyebaran Bicep Anda sebagai parameter gunakan @secure()
dekorator. Ketika Anda menandai parameter sebagai aman, Azure Resource Manager menghindari pengelogan nilai atau menampilkannya di portal Microsoft Azure, Azure CLI, atau Azure PowerShell.
Menghindari output untuk rahasia
Jangan gunakan output Bicep untuk mengamankan data. Output dicatat ke riwayat penyebaran, dan siapa pun yang memiliki akses ke penyebaran dapat melihat nilai output penyebaran.
Jika Anda perlu membuat rahasia dalam penyebaran Bicep dan membuatnya tersedia untuk pemanggil atau sumber daya lain, pertimbangkan untuk menggunakan salah satu pendekatan berikut.
Mencari rahasia secara dinamis
Terkadang, Anda perlu mengakses rahasia dari satu sumber daya untuk mengonfigurasi sumber daya lain.
Misalnya, Anda mungkin telah membuat akun penyimpanan di penyebaran lain, dan perlu mengakses kunci primernya untuk mengonfigurasi aplikasi Azure Functions. Anda dapat menggunakan kata kunci existing
untuk mendapatkan referensi yang diketik dengan jelas ke akun penyimpanan yang dibuat sebelumnya, lalu menggunakan metode listKeys()
akun penyimpanan untuk membuat string koneksi dengan kunci primer:
Contoh berikut adalah bagian dari contoh yang lebih besar. Untuk file Bicep yang dapat Anda gunakan, lihat file lengkapnya.
param location string = resourceGroup().location
param storageAccountName string
param functionAppName string = 'fn-${uniqueString(resourceGroup().id)}'
var appServicePlanName = 'MyPlan'
var applicationInsightsName = 'MyApplicationInsights'
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@2023-12-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
}
]
}
}
}
resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
name: appServicePlanName
location: location
sku: {
name: 'Y1'
tier: 'Dynamic'
}
}
resource applicationInsights 'Microsoft.Insights/components@2020-02-02' = {
name: applicationInsightsName
location: location
kind: 'web'
properties: {
Application_Type: 'web'
publicNetworkAccessForIngestion: 'Enabled'
publicNetworkAccessForQuery: 'Enabled'
}
}
Dengan menggunakan pendekatan ini, Anda menghindari melewatkan rahasia ke dalam atau keluar dari file Bicep Anda.
Anda juga dapat menggunakan pendekatan ini untuk menyimpan rahasia di brankas kunci.
Menggunakan Key Vault
Azure Key Vault dirancang untuk menyimpan dan mengelola data yang aman. Gunakan brankas kunci untuk mengelola rahasia, sertifikat, kunci, dan data lain yang perlu dilindungi dan dibagikan.
Anda dapat membuat dan mengelola brankas serta rahasia dengan menggunakan Bicep. Tentukan brankas Anda dengan membuat sumber daya dengan jenis Microsoft.KeyVault/vaults
.
Ketika membuat brankas, Anda perlu menentukan siapa dan apa yang dapat mengakses datanya. Jika Anda berencana untuk membaca rahasia brankas dari dalam file Bicep, setel properti enabledForTemplateDeployment
ke true
.
Menambahkan rahasia ke brankas kunci
Rahasia adalah sumber daya anak dan dapat dibuat dengan menggunakan jenis Microsoft.KeyVault/vaults/secrets
. Contoh berikut menunjukkan cara membuat brankas dan rahasia:
Contoh berikut adalah bagian dari contoh yang lebih besar. Untuk file Bicep yang dapat Anda gunakan, lihat file lengkapnya.
param location string = resourceGroup().location
param keyVaultName string = 'mykv${uniqueString(resourceGroup().id)}'
resource keyVault 'Microsoft.KeyVault/vaults@2023-07-01' = {
name: keyVaultName
location: location
properties: {
enabledForTemplateDeployment: true
tenantId: tenant().tenantId
accessPolicies: [
]
sku: {
name: 'standard'
family: 'A'
}
}
}
resource keyVaultSecret 'Microsoft.KeyVault/vaults/secrets@2023-07-01' = {
parent: keyVault
name: 'MySecretName'
properties: {
value: 'MyVerySecretValue'
}
}
Tip
Ketika Anda menggunakan alur penyebaran otomatis, terkadang sulit untuk menentukan cara mem-bootstrap rahasia brankas kunci untuk penyebaran Anda. Misalnya, jika Anda telah diberikan kunci API untuk digunakan saat berkomunikasi dengan API eksternal, maka rahasia tersebut perlu ditambahkan ke brankas sebelum dapat digunakan dalam penyebaran Anda.
Ketika bekerja dengan rahasia yang berasal dari pihak ketiga, Anda mungkin perlu menambahkannya secara manual ke brankas, lalu Anda dapat merujuk rahasia tersebut untuk semua penggunaan berikutnya.
Menggunakan brankas kunci dengan modul
Ketika Anda menggunakan modul Bicep, Anda dapat memberikan parameter aman dengan menggunakan getSecret
fungsi.
Anda juga dapat mereferensikan brankas kunci yang ditentukan dalam grup sumber daya lain dengan menggunakan kata kunci existing
dan scope
bersama-sama. Dalam contoh berikut, file Bicep disebarkan ke grup sumber daya bernama Jaringan. Nilai untuk parameter modul mySecret didefinisikan di brankas kunci bernama contosonetworkingsecrets yang terletak di grup sumber daya Rahasia:
resource networkingSecretsKeyVault 'Microsoft.KeyVault/vaults@2023-07-01' existing = {
scope: resourceGroup('Secrets')
name: 'contosonetworkingsecrets'
}
module exampleModule 'module.bicep' = {
name: 'exampleModule'
params: {
mySecret: networkingSecretsKeyVault.getSecret('mySecret')
}
}
Menggunakan brankas kunci dalam file .bicepparam
Saat menggunakan .bicepparam
format file, Anda dapat memberikan nilai aman ke parameter dengan menggunakan fungsi .getSecret
Referensikan KeyVault dengan memberikan ID langganan, nama grup sumber daya, dan nama brankas kunci. Anda bisa mendapatkan nilai rahasia dengan memberikan nama rahasia. Anda dapat secara opsional memberikan versi rahasia. Jika Anda tidak menyediakan versi rahasia, versi terbaru akan digunakan.
using './main.bicep'
param secureUserName = az.getSecret('<subscriptionId>', '<resourceGroupName>', '<keyVaultName>', '<secretName>', '<secretVersion>')
param securePassword = az.getSecret('<subscriptionId>', '<resourceGroupName>', '<keyVaultName>', '<secretName>')
Bekerja dengan rahasia dalam alur
Ketika menyebarkan sumber daya Azure dengan menggunakan alur, Anda harus berhati-hati untuk menangani rahasia Anda dengan tepat.
- Hindari menyimpan rahasia dalam repositori kode Anda. Misalnya, jangan tambahkan rahasia ke file parameter, atau ke file YAML definisi alur Anda.
- Di Tindakan GitHub, gunakan rahasia terenkripsi untuk menyimpan data yang aman. Gunakan pemindaian rahasia untuk mendeteksi setiap penerapan rahasia yang tidak disengaja.
- Di Azure Pipelines, gunakan variabel rahasia untuk menyimpan data yang aman.
Sumber daya terkait
- Dokumentasi sumber daya
- Fitur Azure
- Fitur Bicep
- Templat mulai cepat
- Azure Pipelines
- Tindakan GitHub