Linter-regel: uitvoer mag geen geheimen bevatten

Met deze regel vindt u 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. Bijvoorbeeld beveiligde 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 die anders niet beschikbaar is met de machtiging Alleen-lezen. 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@2021-04-01' existing = {
  name: storageName
}
​
output badResult object = {
  value: stg.listKeys().keys[0].value
}

Het volgende voorbeeld mislukt omdat de uitvoernaam 'wachtwoord' bevat, wat aangeeft dat deze mogelijk een geheim bevat

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 veilig patroon voor het ophalen van een storageAccount-sleutel uit een module.

output storageId string = stg.id

Deze kunnen 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 uitschakelen

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

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

Het is raadzaam om 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.