Aturan linter - output tidak boleh berisi rahasia
Aturan ini menemukan kemungkinan paparan rahasia dalam output templat.
Kode aturan Linter
Gunakan nilai berikut pada file konfigurasi Bicep untuk menyesuaikan pengaturan aturan: outputs-should-not-contain-secrets
Solusi
Jangan sertakan nilai apa pun dalam output yang berpotensi mengekspos rahasia. Misalnya, parameter aman jenis secureString atau secureObject, atau fungsi list*
seperti listKeys.
Output dari template disimpan dalam riwayat penyebaran, sehingga pengguna dengan izin baca-saja dapat memperoleh akses ke informasi jika tidak tersedia dengan izin baca-saja.
Contoh berikut gagal karena menyertakan parameter aman dalam nilai output.
@secure()
param secureParam string
output badResult string = 'this is the value ${secureParam}'
Contoh berikut gagal karena menggunakan fungsi list*
dalam output.
param storageName string
resource stg 'Microsoft.Storage/storageAccounts@2021-04-01' existing = {
name: storageName
}
output badResult object = {
value: stg.listKeys().keys[0].value
}
Contoh berikut gagal karena nama output berisi 'kata sandi', yang menandakan bahwa nama output mungkin berisi rahasia
output accountPassword string = '...'
Untuk memperbaikinya, Anda perlu menghapus data rahasia dari output. Praktik yang disarankan adalah mengeluarkan resourceId dari sumber daya yang berisi rahasia dan mengambil rahasia saat sumber daya yang membutuhkan informasi dibuat atau diperbarui. Rahasia juga dapat disimpan di KeyVault untuk skenario penyebaran yang lebih kompleks.
Contoh berikut menunjukkan pola aman untuk mengambil kunci storageAccount dari modul.
output storageId string = stg.id
Yang dapat digunakan dalam penyebaran berikutnya seperti yang ditunjukkan dalam contoh berikut
someProperty: listKeys(myStorageModule.outputs.storageId.value, '2021-09-01').keys[0].value
Membisukan positif palsu
Terkadang aturan ini memperingatkan output templat yang sebenarnya tidak berisi rahasia. Misalnya, tidak semua fungsi list*
benar-benar menampilkan data sensitif. Dalam kasus ini, Anda dapat menonaktifkan peringatan untuk baris ini dengan menambahkan #disable-next-line outputs-should-not-contain-secrets
sebelum baris dengan peringatan tersebut.
#disable-next-line outputs-should-not-contain-secrets // Doesn't contain a password
output notAPassword string = '...'
Sebaiknya tambahkan komentar yang menjelaskan mengapa aturan tidak berlaku untuk baris ini.
Langkah berikutnya
Untuk informasi selengkapnya tentang linter, lihat Menggunakan linter Bicep.