Regra de Linter - as saídas não devem conter segredos
Esta regra encontra a possível exposição de segredos nas saídas de um modelo.
Código da regra de linha
Use o seguinte valor no arquivo de configuração do Bicep para personalizar as configurações da regra:outputs-should-not-contain-secrets
Solução
Não inclua valores em uma saída que possam expor segredos. Por exemplo, parâmetros seguros do tipo secureString ou secureObject, ou list*
funções como listKeys.
A saída de um modelo é armazenada no histórico de implantação, de modo que um usuário com permissões somente leitura pode obter acesso a informações que, de outra forma, não estariam disponíveis com permissão somente leitura.
O exemplo a seguir falha porque inclui um parâmetro seguro em um valor de saída.
@secure()
param secureParam string
output badResult string = 'this is the value ${secureParam}'
O exemplo a seguir falha porque usa uma list*
função em uma saída.
param storageName string
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' existing = {
name: storageName
}
output badResult object = {
value: stg.listKeys().keys[0].value
}
O exemplo a seguir falha porque o nome de saída contém 'senha', indicando que ele pode conter um segredo
output accountPassword string = '...'
Para corrigi-lo, você precisa remover os dados secretos da saída. A prática recomendada é produzir o resourceId do recurso que contém o segredo e recuperá-lo quando o recurso que precisa das informações for criado ou atualizado. Os segredos também podem ser armazenados no KeyVault para cenários de implantação mais complexos.
O exemplo a seguir mostra um padrão seguro para recuperar uma chave storageAccount de um módulo.
output storageId string = stg.id
Que pode ser usado em uma implantação subsequente, conforme mostrado no exemplo a seguir
someProperty: listKeys(myStorageModule.outputs.storageId.value, '2021-09-01').keys[0].value
Silenciar falsos positivos
Às vezes, essa regra alerta sobre saídas de modelo que não contêm segredos. Por exemplo, nem todas as list*
funções realmente retornam dados confidenciais. Nesses casos, você pode desativar o aviso para essa linha adicionando #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 a regra não se aplica a essa linha.
Próximos passos
Para obter mais informações sobre o linter, consulte Usar binter linter.