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.