Administrar secretos del servidor
Tableau Server necesita almacenar varios secretos que usa para realizar diferentes funciones, como proteger las comunicaciones internas, comunicarse con otras aplicaciones o con el sistema operativo, o proporcionar una comunicación segura con los clientes. En este contexto, el término secreto puede hacer referencia a una contraseña, un token u otra cadena que se use para autenticar una entidad en otra.
Hay dos categorías de secretos que se necesitan para ejecutar Tableau Server. Se diferencian en la forma en que se generan los secretos:
- Secretos generados por los administradores. Son credenciales y secretos asociados de la cuenta Ejecutar como usuario y las credenciales SMTP usadas por Tableau Server.
- Secretos generados automáticamente por diferentes procesos en el sistema. Por ejemplo, se necesita un secreto para proteger la comunicación entre los procesos de ZooKeeper y el controlador del clúster. También pueden ser diferentes contraseñas necesarias para cada servicio y usuario de programación que se comunica con PostgreSQL.
La mayoría de los secretos están cifrados mientras están en reposo. Cuando se necesita un secreto, se descifra en tiempo de ejecución.
En este tema se describe cómo funciona el almacenamiento de los secretos y lo que necesita realizar para administrar correctamente el almacenamiento de los secretos en Tableau Server.
Información sobre el funcionamiento del almacenamiento de secretos
Durante la instalación, Tableau Server genera y almacena una clave maestra en un almacén de claves de Java. La clave maestra se usa para cifrar una clave de cifrado de configuración que se usa en todo el sistema.
Al crear o actualizar un secreto, este se cifra con la clave de cifrado de configuración. A continuación, el valor cifrado se almacena con el parámetro de configuración correspondiente en un archivo YAML en el servidor. Los parámetros que contienen un valor cifrado están en el formato ENC(<encrypted string>)
, donde <encrypted string>
es una cadena cifrada con codificación Base64.
En tiempo de ejecución, cuando se necesita obtener acceso a un secreto específico, los valores cifrados se leen en la memoria y se descifran con la clave de cifrado de configuración.
Si hubiera cambios pendientes, en los que los secretos se introducen durante un cambio de configuración, toda la transacción se cifra. En este caso, después de introducir un secreto y guardar el cambio pendiente, el secreto se transmite al Servicio de coordinación (mediante SSL cifrado). El Servicio de coordinación cifra el secreto y lo almacena hasta que se aplican los cambios pendientes. Cuando se aplican los cambios, el secreto (aún cifrado) se promueve a la versión de configuración actual.
Tableau Server cifra los secretos con AES de 256 bits en el modo GCM. Las claves usadas para el almacenamiento seguro son distintas de las claves de activos que se usan para cifrar las credenciales de bases de datos incrustadas antes de almacenarlas en el repositorio.
¿Quién tiene acceso a la clave maestra?
En una instalación predeterminada, el almacén de claves Java de Tableau Server se replicará en la carpeta /tabsvc/keystores
para cada servicio de dicho nodo en /var/opt/tableau/tableau_server/data/tabsvc/config
.
Por ejemplo:
/var/opt/tableau/tableau_server/data/tabsvc/config/tabadminagent_<version_number>/tabsvc/keystores/tableauserver.jks
.
Si utiliza un directorio de instalación personalizado, los archivos del almacén de claves estarán en
<install directory>/tableau_server/data/tabsvc/config/<service name_#.version_number>/tabsvc/keystores
De forma predeterminada, los siguientes usuarios y grupos tienen acceso a este directorio:
- root
- tableau (usuario)
- miembros del grupo "tableau"
Información de configuración de la importación y la exportación
Tableau Services Manager introduce la capacidad de importar y exportar información de configuración con tsm settings export.
Nota: Esta versión de Tableau Server no admite la restauración de la información de configuración a partir de una copia de seguridad. Se recomienda utilizar los comandos de configuración de exportación e importación para hacer una copia de seguridad de la información de configuración y restaurarla.
Mientras los secretos de configuración se cifran cuando se almacenan en el disco de manera interna, al exportar la configuración a un archivo, los secretos se escriben en el archivo con texto plano. Es decisión del administrador tomar medidas para proteger este archivo. Hay una serie de opciones disponibles:
- Escribir el archivo en un sistema de archivos cifrados.
- Escribir el archivo en un directorio restringido a determinados usuarios o grupos por permisos del sistema de archivos.
- Cifre el archivo de salida.
Proteger los secretos para las operaciones de importación y exportación
En esta sección se describe cómo cifrar mediante PGP la copia de seguridad de salida. De esta forma, creará una canalización con nombre y deberá proporcionarla como argumento del archivo que luego utilizará como entrada para cifrarlo mediante GPG. La ventaja reside en que los secretos nunca se escriben en el disco con texto plano. GPG debe estar disponible, así como también una clave privada. En la siguiente sección se muestra un ejemplo de este método.
En el ejemplo de esta sección se describe un método para manipular los secretos para almacenarlos en un equipo aparte.
Consulte las siguientes referencias externas para obtener más información:
- File encryption on the command line (Cifrado de archivos en la línea de comandos)
- mkfifo(1) - Linux man page
Ejemplo: cifrado y exportación
A continuación se muestra un ejemplo de cómo proteger el archivo al exportar la configuración.
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
Los detalles de esta operación son:
Cree una canalización con nombre que tenga acceso limitado mediante permisos de archivo de rw para el usuario actual.
mkfifo -m 600 /tmp/secure1
Llame a gpg para cifrar los datos enviados a la canalización, colocándola en segundo plano en un proceso independiente. Quedará bloqueada mientras esté pendiente de recibir datos. El resultado será un archivo que contendrá los datos cifrados.
gpg --symmetric --batch --yes --passphrase-file ~/.secrets/pgppassphrase.txt --cipher-algo AES256 --output encrypted.enc < /tmp/secure1 &
Llame a tsm para exportar la configuración, indicando la canalización como argumento del archivo.
tsm settings export -f /tmp/secure1
Elimine la canalización con nombre.
rm /tmp/secure1
Los datos cifrados están en el archivo "encrypted.enc".
Ejemplo: descifrado e importación
A continuación se muestra un ejemplo de cómo descifrar e importar la configuración.
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
Los detalles de esta operación son:
Cree una canalización con nombre que tenga acceso limitado mediante permisos de archivo de rw para el usuario actual.
mkfifo -m 600 /tmp/secure2
Descifre la configuración y envíela a la canalización. Colóquela en segundo plano en un proceso independiente; quedará bloqueada mientras esté pendiente de leer.
gpg --decrypt --batch --yes --passphrase-file ~/.secrets/pgppassphrase.txt encrypted.enc > /tmp/secret2 &
Ejecute el comando de importación tsm configuration (inicie la sesión si es necesario).
tsm settings import -f /tmp/secret2
Elimine la canalización con nombre.
rm /tmp/secure1
La configuración pendiente contiene la configuración importada.
Ejecute tsm pending-changes apply para confirmar los cambios. Si los cambios pendientes requieren un reinicio del servidor, el comando pending-changes apply
mostrará un mensaje para informarle de que se producirá un reinicio. Este mensaje aparece aunque el servidor esté detenido, pero en ese caso no se reiniciará. Puede suprimir el mensaje con la opción --ignore-prompt
, pero no se modificará el comportamiento de reinicio. Si los cambios no requieren un reinicio, se aplicarán sin ningún mensaje. Para obtener más información, consulte tsm pending-changes apply.
Nodos de clúster
Al añadir un nodo nuevo al clúster de Tableau Server, primero deberá generar el archivo de configuración del nodo (tsm topology). El archivo de configuración de nodo contiene una copia del archivo de almacén de claves maestro empleado para cifrar los secretos de configuración.
Importante: Se recomienda encarecidamente que tome medidas adicionales para proteger el archivo de configuración del nodo para exportar un archivo de configuración con secretos.
Al instalar y configurar Tableau Server en el nodo nuevo, deberá proporcionar el archivo de configuración del nodo en el comando initialize-tsm
. initialize-tsm
a través de una canalización.
Registro de eventos del almacenamiento de secretos
Quedan registrados los siguientes eventos relacionados con el almacenamiento de secretos:
- Generar nuevas claves de cifrado
- La clave de cifrado se implementa o cambia
- Cifrar un nuevo valor en el archivo de configuración
Para obtener más información sobre los archivos de registro y dónde se almacenan, consulte Trabajar con archivos de registro.
Administración de secretos
Como administrador de Tableau Server, la tarea más importante relacionada con el almacenamiento de secretos es actualizar los secretos de forma periódica. En algunos casos (como la solución de problemas del servidor o auditorías), puede que necesite recuperar una contraseña.
Para otras operaciones, como actualizar versiones, realizar copias de seguridad y restauración, o añadir nodos a un clúster (como se indicó anteriormente), Tableau Server administra automáticamente el almacenamiento de secretos y los procesos relacionados.
Actualización de secretos
Debe actualizar los secretos de forma periódica, según la directiva de seguridad de su empresa.
Para actualizar la clave maestra y los secretos generados automáticamente, ejecute tsm security regenerate-internal-tokens.
Recuperar contraseñas
En algunos casos, puede que necesite recuperar una contraseña para solucionar un problema o realizar otras operaciones. Por ejemplo, puede que necesite las credenciales de usuario readonly de PostgreSQL generadas y cifradas por Tableau Server. En estos casos, puede ejecutar un comando tsm que recuperará y descifrará la contraseña automáticamente.
Para recuperar una contraseña, abra un símbolo del sistema y ejecute el comando tsm configuration get
para uno de los parámetros que se indican en la tabla siguiente.
Por ejemplo, para recuperar una contraseña para el usuario readonly de PostgreSQL, escriba el comando siguiente:
tsm configuration get -k pgsql.readonly_password
El comando indicará la contraseña en texto no cifrado:
$ 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 | Contraseña para el usuario de Postgres tblwgadmin. Nota: Aunque el parámetro de configuración esté cifrado en los archivos de configuración de Tableau (tabsvc.yml y workgroup.yml), esta contraseña se almacena en texto sin formato en otros archivos utilizados por SAML. |
pgsql.readonly_password | Password for the readonly Postgres user. |
pgsql.remote_password | Password for the tableau Postgres user. |
redis.password | Contraseña de Redis. Nota: Aunque el parámetro de configuración esté cifrado en los archivos de configuración de Tableau (tabsvc.yml y workgroup.yml), la configuración se mantendrá en formato de texto plano en el archivo redis.conf utilizado por la aplicación Redis. Redis no admite las contraseñas cifradas ni 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 |