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@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 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).
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla