Delen via


Linter-regel: uitvoer mag geen geheimen bevatten

Deze regel vindt mogelijke blootstelling van geheimen in de uitvoer van een sjabloon.

Linter-regelcode

Gebruik de volgende waarde in het Bicep-configuratiebestand om regelinstellingen aan te passen: outputs-should-not-contain-secrets

Oplossing

Neem geen waarden op in een uitvoer die mogelijk geheimen beschikbaar kan maken. Beveilig bijvoorbeeld parameters van het type secureString of secureObject, of list* functies zoals listKeys. De uitvoer van een sjabloon wordt opgeslagen in de implementatiegeschiedenis, zodat een gebruiker met alleen-lezenmachtigingen toegang kan krijgen tot informatie, anders niet beschikbaar met alleen-lezenmachtigingen. Het volgende voorbeeld mislukt omdat deze een beveiligde parameter in een uitvoerwaarde bevat.

@secure()
param secureParam string

output badResult string = 'this is the value ${secureParam}'

Het volgende voorbeeld mislukt omdat er een list* functie in een uitvoer wordt gebruikt.

param storageName string
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' existing = {
  name: storageName
}

output badResult object = {
  value: stg.listKeys().keys[0].value
}

Het volgende voorbeeld mislukt omdat de uitvoernaam 'wachtwoord' bevat, waarmee wordt aangegeven dat deze een geheim kan bevatten

output accountPassword string = '...'

U kunt dit oplossen door de geheime gegevens uit de uitvoer te verwijderen. De aanbevolen procedure is om de resourceId van de resource met het geheim uit te voeren en het geheim op te halen wanneer de resource die de informatie nodig heeft, wordt gemaakt of bijgewerkt. Geheimen kunnen ook worden opgeslagen in KeyVault voor complexere implementatiescenario's.

In het volgende voorbeeld ziet u een beveiligd patroon voor het ophalen van een storageAccount-sleutel uit een module.

output storageId string = stg.id

Dit kan worden gebruikt in een volgende implementatie, zoals wordt weergegeven in het volgende voorbeeld

someProperty: listKeys(myStorageModule.outputs.storageId.value, '2021-09-01').keys[0].value

Fout-positieven silencing

Soms wordt deze regel gewaarschuwd voor sjabloonuitvoer die geen geheimen bevatten. Niet alle list* functies retourneren bijvoorbeeld gevoelige gegevens. In deze gevallen kunt u de waarschuwing voor deze regel uitschakelen door deze toe te voegen #disable-next-line outputs-should-not-contain-secrets vóór de regel met de waarschuwing.

#disable-next-line outputs-should-not-contain-secrets // Doesn't contain a password
output notAPassword string = '...'

Het is raadzaam een opmerking toe te voegen waarin wordt uitgelegd waarom de regel niet van toepassing is op deze regel.

Volgende stappen

Zie Bicep linter gebruiken voor meer informatie over de linter.