Gerenciar segredos do servidor

O Tableau Server precisa armazenar vários segredos que usa para realizar inúmeras funções, normalmente a proteção da comunicação interna, a comunicação com outros aplicativos ou o sistema operacional, bem como a comunicação segura com os clientes. Neste contexto, o termo segredo pode se referir a uma senha, a uma chave de segurança ou outra cadeia de caracteres usada para autenticar uma entidade a outra.

Há duas categorias de segredos necessárias para executar o Tableau Server. Elas diferem de acordo com o modo de geração dos segredos:

  • Segredos gerados por administradores. Incluem as credenciais e segredos associados à conta de usuário Run As e às credenciais SMTP usadas pelo Tableau Server.
  • Segredos automaticamente gerados por vários processos no sistema. Por exemplo, um segredo necessário para proteger a comunicação entre o Controlador de cluster e os processos do ZooKeeper. Além disso, várias senhas diferentes são necessárias para cada usuário de serviço e programático que se comunica com o Postgres.

A maioria dos segredos é criptografada enquanto em repouso. Quando um segredo for necessário, ele será descriptografado no tempo de execução.

Este tópico descreve como funciona o armazenamento de segredos e o que é necessário para gerenciar corretamente o armazenamento de segredos no Tableau Server.

Compreensão de como funciona o armazenamento de segredos

Durante a instalação, o Tableau Server gera e armazena uma chave mestra no repositório de chaves do Java. A chave mestra é usada para criptografar uma chave de criptografia de configuração usada em todo o sistema.

Sempre que um novo segredo é criado ou atualizado, o segredo é criptografado com a chave de criptografia de configuração. O valor criptografado é, em seguida, armazenado com o seu parâmetro de configuração correspondente em um arquivo YAML no servidor. Os parâmetros com um valor criptografado usam o formato, ENC(<encrypted string>), em que <encrypted string> é uma cadeia de caracteres criptografada com codificação Base64.

No tempo de execução, quando um determinado segredo precisa ser acessado, os valores criptografados são lidos na memória e descriptografados com a chave de criptografia de configuração.

No caso de alterações pendentes, em que os segredos são inseridos durante uma alteração de configuração, toda a transação é criptografada. Nesse cenário, após inserir um segredo e salvar a alteração pendente, ele será transmitido ao Serviço de coordenação (por meio de SSL criptografado). O Serviço de coordenação criptografa o segredo e o armazena até que as alterações pendentes sejam aplicadas. Quando as alterações são aplicadas, o segredo (ainda criptografado) é promovido à versão de configuração atual.

O Tableau Server criptografa segredos com o AES de 256 bits no modo GCM. As chaves usadas para armazenamento seguro são diferentes das chave de recurso usadas para criptografar as credenciais de banco de dados inseridas antes que sejam armazenadas no repositório.

Quem tem acesso à chave mestra?

Em uma instalação padrão, o repositório de chaves do Java para o Tableau Server será replicado na pasta /tabsvc/keystores para cada serviço nesse nó em /var/opt/tableau/tableau_server/data/tabsvc/config.

Por exemplo,

/var/opt/tableau/tableau_server/data/tabsvc/config/tabadminagent_<version_number>/tabsvc/keystores/tableauserver.jks.

Se usar um diretório de instalação personalizado, então os arquivos do repositório de chaves serão encontrados em

<install directory>/tableau_server/data/tabsvc/config/<service name_#.version_number>/tabsvc/keystores

Por padrão, os usuários e grupos a seguir têm acesso a esse diretório:

  • root
  • tableau (usuário)
  • membros do grupo 'tableau'

Importar e exportar informações de configuração

O Tableau Services Manager apresenta o recurso para importar e exportar informações de configuração por meio do tsm settings export.

Observação: esta versão do Tableau Server não suporta a restauração das informações de configuração a partir de um backup. Em vez disso, é recomendável usar os comandos de configuração de exportação e importação para fazer backup das informações de configuração e restaurá-las.

Embora os segredos de configuração sejam criptografados quando armazenados em disco internamente, ao exportar a configuração para um arquivo, os segredos são gravados no arquivo em texto simples. O administrador é responsável pela proteção desse arquivo. Há várias opções disponíveis:

  • Gravar o arquivo em um sistema de arquivos criptografado.
  • Gravar o arquivo em um diretório restrito a grupos ou usuários específicos por permissões do sistema de arquivos.
  • Codifique o arquivo de saída.

Proteção de segredos para operações de importação e exportação

Esta seção descreve como criptografar a saída de backup por PGP. Com este método, você vai criar um pipe nomeado e fornecê-lo como o argumento de arquivo; depois, usá-lo como a entrada para que o gpg possa criptografá-lo. A vantagem é que os segredos nunca são gravados no disco em texto simples. O gpg e uma chave privada devem estar disponíveis. Um exemplo deste método é mostrado na seção a seguir.

O exemplo desta seção descreve uma forma de lidar com segredos para armazená-los em um computador separado.

Consulte as referências externas a seguir para obter mais informações:

Exemplo: criptografar e exportar

O exemplo a seguir mostra como proteger o arquivo ao exportar a configuração.

mkfifo -m 600 /tmp/secure1 && (gpg --symmetric --batch --yes --passphrase-file ~/.secrets/pgppassphrase.txt --cipher-algo AES256 --output encrypted.enc < /tmp/secure1 &) && tsm settings export -f /tmp/secure1 && rm /tmp/secure1

Os detalhes desta operação são:

  • Crie um pipe nomeado com acesso limitado pelas permissões de arquivo a rw para o usuário atual.

    mkfifo -m 600 /tmp/secure1

  • Chame a gpg para criptografar os dados enviados para o pipe nomeado, colocando-os em segundo plano como um processo separado. Isso impedirá a espera por dados. O resultado será um arquivo com os dados criptografados.

    gpg --symmetric --batch --yes --passphrase-file ~/.secrets/pgppassphrase.txt --cipher-algo AES256 --output encrypted.enc < /tmp/secure1 &

  • Chame o tsm para exportar a configuração ao fornecer o pipe nomeado como o argumento de arquivo.

    tsm settings export -f /tmp/secure1

  • Exclua o pipe nomeado.

    rm /tmp/secure1

Os dados criptografados estão no arquivo "encrypted.enc".

Exemplo: descriptografar e importar

O exemplo a seguir mostra como descriptografar e importar a configuração.

mkfifo -m 600 /tmp/secret2 && (gpg --decrypt --batch --yes --passphrase-file ~/.secrets/pgppassphrase.txt encrypted.enc > /tmp/secret2 &) && tsm settings import -f /tmp/secret2 && rm /tmp/secret2

Os detalhes desta operação são:

  • Crie um pipe nomeado com acesso limitado pelas permissões de arquivo a rw para o usuário atual.

    mkfifo -m 600 /tmp/secure2

  • Descriptografe a configuração e envie-a para o pipe nomeado. Coloque isso em segundo plano em um processo separado; isso impedirá a espera da leitura.

    gpg --decrypt --batch --yes --passphrase-file ~/.secrets/pgppassphrase.txt encrypted.enc > /tmp/secret2 &

  • Execute o comando de importação tsm configuration, fazendo logon conforme necessário.

    tsm settings import -f /tmp/secret2

  • Exclua o pipe nomeado.

    rm /tmp/secure1

A configuração pendente contém a configuração importada.

Execute tsm pending-changes apply para confirmar as alterações. Se as alterações pendentes exigirem uma reinicialização do servidor, o comando pending-changes apply exibirá um prompt para que você saiba que ocorrerá uma reinicialização. Esse prompt será exibido mesmo que o servidor esteja parado, porém, nesse caso, não há reinicialização. Cancele o prompt com a opção --ignore-prompt, mas isso não altera o comportamento de reinicialização. Se as alterações não exigirem uma reinicialização, elas serão aplicadas sem um prompt. Para obter mais informações, consulte tsm pending-changes apply.

Nós do cluster

Ao adicionar um novo nó ao cluster do Tableau Server, primeiro é necessário gerar o arquivo de configuração do nó (tsm topology). O arquivo de configuração de nó contém uma cópia do arquivo principal do repositório de chaves, usado para criptografar os segredos da configuração.

Importante: é altamente recomendável tomar medidas adicionais para proteger o arquivo de configuração de nó ao exportar um arquivo de configuração com segredos.

Ao instalar e configurar o Tableau Server no novo nó, será necessário fornecer o arquivo de configuração do nó para o comando initialize-tsm. Use uma técnica semelhante, conforme descrito acima, para descriptografar o conteúdo do arquivo que foi anteriormente criptografado e enviá-lo por um pipe nomeado para o comando initialize-tsm.

Registro de evento de armazenamento de segredos

Os eventos a seguir relacionados ao armazenamento de segredos são registrados:

  • Geração de novas chaves de criptografia
  • A chave de criptografia é movida ou alterada
  • Criptografia de um novo valor no arquivo de configuração

Para obter mais informações sobre os arquivos de registro e o local em que são armazenados, consulte Trabalhar com arquivos de log.

Gerenciar segredos

Como administrador do Tableau Server, a tarefa mais importante relacionada ao armazenamento de segredos é atualizá-los periodicamente. Em alguns casos (solução de problemas ou auditoria de servidor), pode ser necessário recuperar uma senha.

Para outras operações, como atualização de versões, backup e restauração, ou adição de novos nós a um cluster, conforme observado acima, o Tableau Server gerencia o armazenamento de segredos e os processos relacionados automaticamente.

Atualizar segredos

É aconselhável atualizar os segredos periodicamente de acordo com a política de segurança da sua empresa.

Para atualizar a chave mestra e gerar segredos automaticamente, execute o tsm security regenerate-internal-tokens.

Recuperar senhas

Em alguns casos, será necessário recuperar uma senha para solução de problemas ou outras operações. Por exemplo, pode-se precisar das credenciais do usuário Postgres somente leitura geradas e criptografadas pelo Tableau Server. Nesses casos, é possível usar um comando tsm que recuperará e descriptografará a senha.

Para recuperar uma senha, abra o prompt de comando e emita um comando tsm configuration get para um dos parâmetros listados na tabela abaixo.

Por exemplo, para recuperar uma senha para o usuário Postgres somente leitura, digite o comando a seguir:

tsm configuration get -k pgsql.readonly_password

O comando retornará a senha em texto simples:

$ tsm configuration get -k pgsql.readonly_password

password

Configuration ParameterDescription
clustercontroller.zookeeper.passwordPassword for cluster controller to connect to zookeeper.
indexandsearchserver.client.password Password for logging into Index and Search Server.
indexandsearchserver.ssl.admin.cert.bytes Admin certificate that is used for administrative access to the Index and Search Server. The admin certificate is used to generate the node certificate.
indexandsearchserver.ssl.admin.key.file_bytes Certificate key for administrative access to the Index and Search Server.
indexandsearchserver.ssl.node.cert.bytes Certificate that is used for Index and Search Server node-to-node communication.
indexandsearchserver.ssl.node.key.file_bytes Certificate key that is used for Index and Search Server node-to-node communication.
indexandsearchserver.ssl.root.cert.bytes Certificate that is used to sign the admin and node certificates . This certificate is used by TSM for health check and by NLP to connect to Index and Search Server.
indexandsearchserver.ssl.root.key.file_bytes Certificate key for root certificate.
filestore.zookeeper.passwordPassword for filestore to connect to zookeeper.
hyper.connection.init_password Password used to initialize the Hyper database for user tableau_internal_user and is then used for connecting to Hyper.
jdbc.passwordPassword for the rails Postgres user.
kms.persistent_store A collection of master encryption keys (MEKs) used by the Key Management System.
maestro.rserve.password Password for connecting to an external Rserve instance used by Tableau Prep Conductor for running flows that have nodes with R scripts.
maestro.tabpy.passwordPassword for connecting to an external TabPy (Python server) instance used by Tableau Prep Conductor for running flows that have nodes with Python scripts.
oauth.google.client_secretClient secret of the Google Cloud Platform account.
oauth.quickbooks.consumer_secretConsumer secret of the Intuit developer account.
oauth.salesforce.client_secretClient secret of the Salesforce developer account.
pgsql.adminpassword

Senha para o usuário do Postgres tblwgadmin.

Observação: embora o parâmetro de configuração esteja criptografado nos arquivos de configuração do Tableau (tabsvc.yml, workgroup.yml), esta senha é armazenada em texto simples nos arquivos usados pelo SAML.

pgsql.readonly_passwordPassword for the readonly Postgres user.
pgsql.remote_passwordPassword for the tableau Postgres user.
redis.password

Senha para o Redis.

Observação: embora o parâmetro de configuração esteja criptografado nos arquivos de configuração do Tableau (tabsvc.yml, workgroup.yml), a configuração ainda seria em texto simples no arquivo redis.conf consumido pelo aplicativo Redis. O Redis não dá aceita senhas criptografadas/protegidas.

servercrashupload.proxy_server_passwordPassword for custom proxy server used to upload crash reports.
service.runas.passwordPassword of the Run As users. Stored temporarily.
ssl.cert.file_bytes The content of one of the three SSL certificate files uploaded by the administrator. The certificate files are required to enable secure external connections to Tableau Server.
ssl.chain.file_bytes The chain file(s) for the certificates uploaded by the administrator for external SSL.
ssl.key.file_bytesKey file(s) for the certificates uploaded by the administrator for external SSL.
ssl.key.passphraseOptional passphrase used to protect the external SSL key.
svcmonitor.notification.smtp.passwordSMTP Server password supplied by the administrator through TabConfig.exe.
tabadminservice.passwordPassword for the service that allows server admins to download log files through the web interface.
vizportal.openid.client_secretThis is the password ("provider client secret") used for OpenID Connect SSO.
vizqlserver.external_proxy_password Password used to authenticate to an external proxy.
wgserver.domain.passwordPassword used to bind to Active Directory.
wgserver.saml.key.passphrasePassphrase used to access the PKCS#8 SAML key file.
zookeeper.tsm.passwordPassword that TSM uses to connect to Zookeeper coordination service
Agradecemos seu feedback!Seu feedback foi enviado. Obrigado!