Regra do Linter – as saídas não devem conter segredos
Esta regra encontra uma possível exposição de segredos nas saídas de um modelo.
Código de regra do Linter
Utilize o seguinte valor no ficheiro de configuração do Bicep para personalizar as definições de regras: outputs-should-not-contain-secrets
Solução
Não inclua quaisquer valores numa saída que possam potencialmente expor segredos. Por exemplo, parâmetros seguros do tipo secureString ou secureObject, ou list*
funções como listKeys.
O resultado de um modelo é armazenado no histórico de implementações, pelo que um utilizador com permissões só de leitura pode obter acesso a informações que, caso contrário, não estão disponíveis com permissão só de leitura.
O exemplo seguinte falha porque inclui um parâmetro seguro num valor de saída.
@secure()
param secureParam string
output badResult string = 'this is the value ${secureParam}'
O exemplo seguinte falha porque utiliza uma list*
função numa saída.
param storageName string
resource stg 'Microsoft.Storage/storageAccounts@2021-04-01' existing = {
name: storageName
}
output badResult object = {
value: stg.listKeys().keys[0].value
}
O exemplo seguinte falha porque o nome de saída contém "palavra-passe", que indica que pode conter um segredo
output accountPassword string = '...'
Para o corrigir, tem de remover os dados secretos da saída. A prática recomendada é exportar o resourceId do recurso que contém o segredo e obter o segredo quando o recurso que precisa das informações é criado ou atualizado. Os segredos também podem ser armazenados no KeyVault para cenários de implementação mais complexos.
O exemplo seguinte mostra um padrão seguro para obter uma chave storageAccount de um módulo.
output storageId string = stg.id
Que pode ser utilizada numa implementação subsequente, conforme mostrado no exemplo seguinte
someProperty: listKeys(myStorageModule.outputs.storageId.value, '2021-09-01').keys[0].value
Silenciar falsos positivos
Por vezes, esta regra alerta em saídas de modelo que não contêm segredos. Por exemplo, nem todas as list*
funções devolvem dados confidenciais. Nestes casos, pode desativar o aviso para esta linha ao adicionar #disable-next-line outputs-should-not-contain-secrets
antes da linha com o aviso.
#disable-next-line outputs-should-not-contain-secrets // Doesn't contain a password
output notAPassword string = '...'
É uma boa prática adicionar um comentário explicando por que motivo a regra não se aplica a esta linha.
Passos seguintes
Para obter mais informações sobre o linter, veja Utilizar o linter Bicep.