Freigeben über


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.