Linter-Regel - Ausgaben dürfen keine Geheimnisse enthalten
Diese Regel findet eine mögliche Offenlegung von Geheimnissen in den Ausgaben einer Vorlage.
Linter-Regelcode
Verwenden Sie den folgenden Wert in der Bicep-Konfigurationsdatei, um die Regeleinstellungen anzupassen: outputs-should-not-contain-secrets
Lösung
Fügen Sie in einer Ausgabe keine Werte hinzu, durch die möglicherweise Geheimnisse offengelegt werden. Zum Beispiel sichere Parameter vom Typ secureString oder secureObject oder list*
Funktionen wie listKeys.
Die Ausgabe einer Vorlage wird im Bereitstellungsverlauf gespeichert, sodass ein Benutzer mit Nur-Lese-Berechtigungen Zugriff auf Informationen erhalten könnte, die andernfalls mit Nur-Lese-Berechtigung nicht verfügbar wären.
Das folgende Beispiel schlägt fehl, da es einen sicheren Parameter in einem Ausgabewert enthält.
@secure()
param secureParam string
output badResult string = 'this is the value ${secureParam}'
Das folgende Beispiel schlägt fehl, weil es eine list*
-Funktion in einer Ausgabe enthält.
param storageName string
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' existing = {
name: storageName
}
output badResult object = {
value: stg.listKeys().keys[0].value
}
Das folgende Beispiel schlägt fehl, weil der Name der Ausgabe „Kennwort“ enthält, was darauf hinweist, dass sie ein Geheimnis enthält
output accountPassword string = '...'
Um diesen Fehler zu beheben, müssen Sie die geheimen Daten aus der Ausgabe entfernen. Die empfohlene Vorgehensweise besteht darin, die resourceId der Ressource auszugeben, die das Geheimnis enthält, und das Geheimnis abzurufen, wenn die Ressource, die die Informationen benötigt, erstellt oder aktualisiert wird. Geheimnisse können für komplexere Bereitstellungsszenarien auch in KeyVault gespeichert werden.
Das folgende Beispiel zeigt ein sicheres Muster zum Abrufen eines storageAccount-Schlüssels von einem Modul.
output storageId string = stg.id
Dies kann in einer nachfolgenden Bereitstellung verwendet werden, wie im folgenden Beispiel gezeigt:
someProperty: listKeys(myStorageModule.outputs.storageId.value, '2021-09-01').keys[0].value
Stummschalten von False Positives
Manchmal warnt diese Regel bei Vorlagenausgaben, die tatsächlich gar keine Geheimnisse enthalten. Beispielsweise geben nicht alle list*
-Funktionen tatsächlich sensible Daten zurück. In diesen Fällen können Sie die Warnung für diese Linie deaktivieren, indem Sie #disable-next-line outputs-should-not-contain-secrets
vor der Linie mit der Warnung hinzufügen.
#disable-next-line outputs-should-not-contain-secrets // Doesn't contain a password
output notAPassword string = '...'
Es ist eine bewährte Praxis, einen Kommentar hinzuzufügen, der erklärt, warum die Regel nicht für diese Zeile gilt.
Nächste Schritte
Weitere Informationen über den Linter finden Sie unter Verwendung des Bicep-Linters.