Linter kuralı - çıkışlar gizli diziler içermemelidir

Bu kural, şablonun çıkışlarında gizli dizilerin olası açığa çıkışlarını bulur.

Linter kural kodu

Kural ayarlarını özelleştirmek için Bicep yapılandırma dosyasında aşağıdaki değeri kullanın:outputs-should-not-contain-secrets

Çözüm

Çıkışa gizli dizileri açığa çıkarabilecek hiçbir değer eklemeyin. Örneğin secureString veya secureObject türünde güvenli parametreler ya da list* listKeys gibi işlevler. Bir şablonun çıktısı dağıtım geçmişinde depolanır, bu nedenle salt okunur izinlere sahip bir kullanıcı salt okunur izinle kullanılamayan bilgilere erişim elde edebilir. Aşağıdaki örnek, çıkış değerinde güvenli bir parametre içerdiğinden başarısız olur.

@secure()
param secureParam string

output badResult string = 'this is the value ${secureParam}'

Aşağıdaki örnek, bir çıkışta işlev list* kullandığından başarısız olur.

param storageName string
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' existing = {
  name: storageName
}

output badResult object = {
  value: stg.listKeys().keys[0].value
}

Çıkış adı bir gizli dizi içerebileceğini belirten 'password' içerdiğinden aşağıdaki örnek başarısız oluyor

output accountPassword string = '...'

Bunu düzeltmek için çıkıştan gizli verileri kaldırmanız gerekir. Önerilen uygulama, gizli diziyi içeren kaynağın resourceId değerinin çıktısını almak ve bilgiye ihtiyaç duyan kaynak oluşturulduğunda veya güncelleştirildiğinde gizli diziyi almaktır. Gizli diziler, daha karmaşık dağıtım senaryoları için KeyVault'ta da depolanabilir.

Aşağıdaki örnekte, bir modülden storageAccount anahtarı almak için güvenli bir desen gösterilmektedir.

output storageId string = stg.id

Aşağıdaki örnekte gösterildiği gibi sonraki bir dağıtımda kullanılabilir

someProperty: listKeys(myStorageModule.outputs.storageId.value, '2021-09-01').keys[0].value

Hatalı pozitifleri susturma

Bazen bu kural, aslında gizli dizi içermeyen şablon çıkışlarında uyarır. Örneğin, tüm list* işlevler aslında hassas verileri döndürmez. Böyle durumlarda, uyarıyla birlikte satırın önüne ekleyerek #disable-next-line outputs-should-not-contain-secrets bu satır için uyarıyı devre dışı bırakabilirsiniz.

#disable-next-line outputs-should-not-contain-secrets // Doesn't contain a password
output notAPassword string = '...'

Kuralın neden bu satır için geçerli olmadığını açıklayan bir açıklama eklemek iyi bir uygulamadır.

Sonraki adımlar

Lint hakkında daha fazla bilgi için bkz . Bicep linter'i kullanma.