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 Linter
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 nie jest dostępny 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@2023-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 wskazujące, ż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óre mogą być używane 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 ta reguła wysyła alerty dotyczące danych wyjściowych szablonu, które nie zawierają w rzeczywistości wpisów tajnych. Na przykład nie wszystkie list*
funkcje zwracają dane poufne. 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 lintera, zobacz Use Bicep linter (Używanie lintera Bicep).