Secrets – Como configurar? E para que serve?

Você já deve ter visto em arquivos de configuração do home assistant de outras pessoas algo como !secret senha_email , ou !secret token_google , ou algo semelhante. Então, é isso que vamos explicar nesse artigo, vamos mostrar para que serve e como configurar o Secrets .

Para que serve?

O arquivo configuration.yaml é um arquivo de texto simples, portanto, é legível por qualquer pessoa que tenha acesso ao arquivo. Muitas vezes esse arquivo contém senhas e tokens de API que precisam ser inserido para poder funcionar algum componente. Se você quiser compartilhar sua configuração, tirar algum print, você sempre precisará esconder a parte onde contém senha ou tokens. Ao usar a tag !secret você pode remover qualquer informação privada de seus arquivos de configuração. Essa separação também pode ajudar você a manter um controle mais fácil de suas senhas e chaves de API tudo num só lugar, já que elas são armazenadas em um único local e não ficam espalhadas pelo arquivo configuration.yaml ou até mesmo em outros arquivos yaml dependendo da sua configuração.

Então é para isso que serve, para organizar suas senhas, keys, tokens em um só lugar, e por questão de segurança. Muitas vezes você acaba compartilhando parte do seu código com alguém e manda sem querer a parte onde contém a senha. Com essa configuração você não irá mais correr esse risco.

Como configurar?

Para você unificar as informações particulares (senhas, keys) em um único lugar, você irá utilizar o arquivo secrets.yaml . Esse arquivo deve ficar dentro da pasta config, se não existir esse arquivo, crie um arquivo secrets.yaml no diretório de configuração do Home Assistant.

Como falamos no início desse arquivo, as configurações de senhas e keys no arquivo configuration.yaml geralmente se parecem com o exemplo abaixo.

http:
  api_password: AQUI_VAI_A_SENHA

Essas “entradas” de senhas, precisam ser substituídas por um um identificador (variável) !secret como no exemplo a seguir, então ao invés de ficar como o exemplo acima, deve ficar como o exemplo abaixo:

arquivo: configuration.yaml

http:
  api_password: !secret http_password

O arquivo secrets.yaml deve conter a senha correspondente atribuída ao identificador (variável). Então dentro do arquivo secrets.yaml você adiciona todas as suas senhas, API configuradas por um identificador (variável) para cada senha.
Exemplo:

arquivo: secrets.yaml

# configuração de variáveis da API http
http_password: aquivo_coloco_a_senha

# configuração de variáveis do google assistant
google_assistant_project_id: nome-doprojeto1234
google_assistant_api_key: XXXXYYYYUYWIUQW(*@U(JSAIJWALKJLKSA

# configuração de variáveis do gmail
gmail_user: meu-email@home-assistant.wiki.br
gmail_senha: MinhaSenha

# configuração de variáveis do telegram
tg_api_key: XUKAUHSJW984905
tg_chat_id_meunome: 0000000000
tg_chat_id_outronome: 0000000000

O nome que você define para cada variável é de sua escolha. Normalmente são nome objetivos que você consegue facilmente identificar do que se trata, mas não existe uma regra para definir.

Dessa forma você precisa sempre tomar cuidado para não compartilhar seu arquivo secrets.yaml . Além disso se você alterar o arquivo configuration.yaml e não atualizar o arquivo secrets.yaml , ao subir o Home Assistant você pode ter problemas caso o identificador (variável) não estar definido no arquivo secrets.yaml . E para corrigir você precisará atualizar o arquivo secrets.yaml e reiniciar novamente seu HA.

Exemplo de como configurar uma variável “!secret” e aplicar no arquivo de configuração

Para saber mais detalhes sobre as configurações você pode acessar página da documentação do secrets no Home Assistant

2 Curtidas

Bom dia. Inicialmente quero parabenizar @douglas e comunidade.
Já aprendi muito nos tópicos.

Minha dúvida não exatamente sobre o !secret, mas sobre sua utilização na situação abaixo:

camera:
  - platform: ffmpeg
    name: Lateral
    input: rtsp://admin:senha@host:554/cam/realmonitor?channel=1&subtype=0

Gostaria de implementar substituindo usuario, senha e host, separadamente por varios !secret.
Atualmente substituo tudo, assim:

input: !secret camera_1

Seria algo como:

camera:
  - platform: ffmpeg
    name: Piscina
    input: rtsp://!secret cftv_username:!secret cftv_password@!secret cftv_ip:554/cam/realmonitor?channel=1&subtype=0

Abraços.

Seria mais facil você fazer de cada um:

Configuration.yaml

input: !secret camera_1
input: !secret camera_10

Secret.yaml

camera_1: rtsp://admin:senha@host:554/cam/realmonitor?channel=1&subtype=0
camera_10: input: rtsp://admin:senha@host:554/cam/realmonitor?channel=1&subtype=0