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.