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
. 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 Parameter | Description |
---|---|
clustercontroller.zookeeper.password | Password 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.password | Password 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.password | Password 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.password | Password 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_secret | Client secret of the Google Cloud Platform account. |
oauth.quickbooks.consumer_secret | Consumer secret of the Intuit developer account. |
oauth.salesforce.client_secret | Client 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_password | Password for the readonly Postgres user. |
pgsql.remote_password | Password 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_password | Password for custom proxy server used to upload crash reports. |
service.runas.password | Password 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_bytes | Key file(s) for the certificates uploaded by the administrator for external SSL. |
ssl.key.passphrase | Optional passphrase used to protect the external SSL key. |
svcmonitor.notification.smtp.password | SMTP Server password supplied by the administrator through TabConfig.exe. |
tabadminservice.password | Password for the service that allows server admins to download log files through the web interface. |
vizportal.openid.client_secret | This 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.password | Password used to bind to Active Directory. |
wgserver.saml.key.passphrase | Passphrase used to access the PKCS#8 SAML key file. |
zookeeper.tsm.password | Password that TSM uses to connect to Zookeeper coordination service |