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).