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.