Reguła lintera — dane wyjściowe nie powinny zawierać wpisów tajnych
Ta reguła znajduje możliwe ujawnienie wpisów tajnych w danych wyjściowych szablonu.
Kod reguły lintera
Użyj następującej wartości w pliku konfiguracji Bicep , aby dostosować ustawienia reguły: outputs-should-not-contain-secrets
Rozwiązanie
Nie uwzględniaj żadnych wartości w danych wyjściowych, które mogą potencjalnie uwidaczniać wpisy tajne. Na przykład bezpieczne parametry typu secureString lub secureObject lub list*
funkcje, takie jak listKeys.
Dane wyjściowe z szablonu są przechowywane w historii wdrażania, więc użytkownik z uprawnieniami tylko do odczytu może uzyskać dostęp do informacji, w przeciwnym razie niedostępne z uprawnieniami tylko do odczytu.
Poniższy przykład kończy się niepowodzeniem, ponieważ zawiera bezpieczny parametr w wartości wyjściowej.
@secure()
param secureParam string
output badResult string = 'this is the value ${secureParam}'
Poniższy przykład kończy się niepowodzeniem list*
, ponieważ używa funkcji w danych wyjściowych.
param storageName string
resource stg 'Microsoft.Storage/storageAccounts@2021-04-01' existing = {
name: storageName
}
output badResult object = {
value: stg.listKeys().keys[0].value
}
Poniższy przykład kończy się niepowodzeniem, ponieważ nazwa danych wyjściowych zawiera hasło, co oznacza, że może zawierać wpis tajny
output accountPassword string = '...'
Aby rozwiązać ten problem, należy usunąć dane tajne z danych wyjściowych. Zalecaną praktyką jest wyprowadzenie identyfikatora resourceId zasobu zawierającego wpis tajny i pobranie wpisu tajnego podczas tworzenia lub aktualizowania zasobu wymagającego informacji. Wpisy tajne mogą być również przechowywane w usłudze KeyVault w przypadku bardziej złożonych scenariuszy wdrażania.
Poniższy przykład przedstawia bezpieczny wzorzec pobierania klucza storageAccount z modułu.
output storageId string = stg.id
Którego można użyć w kolejnym wdrożeniu, jak pokazano w poniższym przykładzie
someProperty: listKeys(myStorageModule.outputs.storageId.value, '2021-09-01').keys[0].value
Wyciszanie wyników fałszywie dodatnich
Czasami te alerty reguły dotyczące danych wyjściowych szablonu, które w rzeczywistości nie zawierają wpisów tajnych. Na przykład nie wszystkie list*
funkcje rzeczywiście zwracają poufne dane. W takich przypadkach można wyłączyć ostrzeżenie dla tego wiersza, dodając #disable-next-line outputs-should-not-contain-secrets
przed wierszem z ostrzeżeniem.
#disable-next-line outputs-should-not-contain-secrets // Doesn't contain a password
output notAPassword string = '...'
Dobrym rozwiązaniem jest dodanie komentarza wyjaśniającego, dlaczego reguła nie ma zastosowania do tego wiersza.
Następne kroki
Aby uzyskać więcej informacji na temat linter, zobacz Use Bicep linter (Używanie lintera Bicep).