# Armazenar Segredos de Aplicação para um Site

Source: https://support.kapsulehost.com/pt-pt/site-secrets

A tab **Segredos** é um repositório encriptado para os valores de configuração sensíveis de que uma aplicação Node.js necessita, tais como chaves de API, segredos de assinatura e tokens de terceiros, mantidos por ambiente para que as suas credenciais de produção e as suas credenciais de pré-visualização nunca se misturem.

## Onde Vivem os Segredos

Abra **Websites**, clique no site, abra o grupo **Environment** no menu lateral esquerdo do site e escolha **Segredos**. O separador tem o nome **Segredos**.

O separador só aparece em sites Node.js. Os sites WordPress, PHP e estáticos não o mostram, porque a sua configuração reside em ficheiros no disco: `wp-config.php` para WordPress, e o que quer que a sua framework leia para uma aplicação PHP simples.

![Separador Secrets para um site Node.js no KPanel](https://support.kapsulehost.com/help/screenshots/site-secrets.812e0706.webp)

## Como os Valores São Protegidos

Cada valor é encriptado antes de tocar na base de dados. Nada é guardado como texto legível, e a vista de lista nunca mostra um valor completo: mostra uma máscara com apenas os últimos quatro caracteres, para que possa distinguir duas chaves semelhantes sem expor nenhuma delas.

Cada linha tem um emblema **Encrypted** como lembrete disso. Ler um valor de volta é uma ação separada e deliberada, e não algo que acontece apenas ao abrir a página.

> **Note:** Definir, revelar e eliminar um segredo exigem todos a permissão **sites:write**. Um membro da equipa com acesso apenas de leitura consegue ver quais as chaves que existem e as suas máscaras, mas não os seus valores.

## Os Dois Ambientes

Um controlo segmentado no topo da página alterna entre **production** e **preview**. São conjuntos de chaves completamente separados. Definir `STRIPE_SECRET_KEY` em produção não o cria em pré-visualização, e eliminá-lo de pré-visualização não afeta a produção.

Essa separação é o objetivo da funcionalidade. As compilações de pré-visualização são ambientes descartáveis que qualquer pessoa com acesso ao repositório pode despoletar, pelo que devem transportar credenciais de teste, não credenciais reais. Consulte [Implementações de Pré-visualização Para Pull Requests](https://support.kapsulehost.com/pt-pt/site-preview) para saber como os ambientes de pré-visualização são criados.

## Adicionar ou Atualizar um Segredo

1. Escolha o ambiente com o controlo segmentado.
2. Digite o nome no campo **KEY_NAME**. O campo força maiúsculas à medida que escreve.
3. Coloque o valor no segundo campo. É mascarado à medida que escreve.
4. Clique em **Set**.

Definir uma chave que já existe sobrepõe-se a ela. Não existe uma ação de edição separada nem um passo de confirmação para uma sobreposição, por isso verifique o separador do ambiente antes de clicar em **Set**.

### Regras de Nomenclatura de Chaves

Uma chave deve começar com uma letra maiúscula e pode depois conter letras maiúsculas, dígitos e underscores, até 128 caracteres. `DATABASE_URL`, `API_KEY_V2` e `SENTRY_DSN` são todos válidos. Qualquer outra coisa é rejeitada com a mensagem **Key deve estar em UPPER_SNAKE_CASE com letras/números/underscore**.

Vale a pena conhecer mais dois limites:

- Um valor não pode estar vazio. Submeter um valor em branco devolve **value obrigatório**.
- Um valor não pode exceder 16 KB. Isso é generoso para um token, mas não é suficiente para, por exemplo, uma cadeia de certificados completa, que pertence a um ficheiro e não a um segredo.

## Ler um Valor de Volta

Clique em **Copy** na linha. O KPanel desencripta o valor no lado do servidor e coloca-o diretamente na sua área de transferência, com uma confirmação **Valor copiado para a área de transferência**. O valor não é apresentado no ecrã, pelo que uma partilha de ecrã ou alguém a espreitar por cima do ombro não o consegue captar.

Cada revelação é registada no registo de auditoria do site, juntamente com quem o fez e qual a chave, e aparece no [Registo de Atividade do Site](https://support.kapsulehost.com/pt-pt/site-activity-log).

> **Tip:** Se precisar de verificar que um valor está correto sem o expor, compare a máscara em vez disso. Os últimos quatro caracteres são suficientes para confirmar que tem o token certo, e já estão no ecrã.

## Usar um Segredo na Sua Aplicação

Copie o valor para onde quer que a sua aplicação leia a sua configuração no servidor. Para uma aplicação Node.js, isso é normalmente uma variável de ambiente definida pelo seu gestor de processos, ou um ficheiro `.env` na raiz da aplicação que o seu código carrega no arranque.

> **Warning:** Não envie esse ficheiro para o seu repositório. Adicione `.env` a `.gitignore` antes de o criar. Um segredo que tenha sido enviado para um repositório git remoto tem de ser tratado como comprometido e rodado junto do fornecedor, porque permanece no histórico mesmo depois de eliminar o ficheiro.

O separador Secrets é o seu registo do que é o valor, mantido encriptado e auditado, em vez de uma nota num gestor de palavras-passe ou numa conversa de mensagens. Mantenha-o como a fonte de verdade: quando rodar uma chave junto do fornecedor, atualize-a aqui ao mesmo tempo, para que a próxima pessoa a implementar tenha o valor atual.

## Eliminar um Segredo

Clique em **Delete** na linha. O KPanel pede-lhe para confirmar com **Delete API_TOKEN?** e avisa que a aplicação perderá o acesso a este valor no seu próximo reinício. Não há desfazer nem cópia guardada, por isso, se puder precisar do valor novamente, copie-o primeiro.

Elimine um segredo quando a credencial subjacente tiver sido revogada junto do fornecedor, ou quando o código que a usava tiver sido removido. Deixar chaves obsoletas por aí torna mais difícil perceber, mais tarde, quais delas realmente importam.

## Rodar uma Credencial em Segurança

A ordem segura é sempre: criar a nova credencial junto do fornecedor, atualizá-la aqui, implementar, confirmar que a aplicação funciona e só depois revogar a credencial antiga junto do fornecedor.

Fazê-lo pela ordem inversa, revogando primeiro, dá-lhe uma janela em que a aplicação em execução fica com uma credencial morta e todos os pedidos que precisam dela falham. Se a alteração for arriscada, faça primeiro uma cópia de segurança para poder voltar a um estado conhecido e funcional: consulte [Fazer uma Cópia de Segurança](https://support.kapsulehost.com/pt-pt/taking-a-backup).

## Resolução de Problemas

**O separador Secrets não aparece no menu.** O site não é um site Node.js. Verifique o emblema da stack junto ao nome do site no topo da página.

**O botão Set não faz nada.** Ambos os campos são obrigatórios. O botão mostra **Chave + valor obrigatórios** se algum deles estiver vazio.

**A chave foi rejeitada.** Letras minúsculas, hífenes, pontos e espaços não são permitidos. `api-key` e `Api_Key` falham ambos; `API_KEY` passa.

**O Copy não colocou nada na área de transferência.** Alguns browsers bloqueiam as escritas na área de transferência num separador inativo. Clique primeiro na página e depois clique novamente em **Copy**.

## Para Onde Ir a Seguir

- [Implementações de Pré-visualização Para Pull Requests](https://support.kapsulehost.com/pt-pt/site-preview), a outra metade da divisão entre produção e pré-visualização.
- [Implementação Git Para um Site](https://support.kapsulehost.com/pt-pt/site-git-deploy) para enviar o código que lê estes valores.
- [Registo de Atividade do Site](https://support.kapsulehost.com/pt-pt/site-activity-log) para ver quem definiu, revelou ou eliminou um segredo.
