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.