管理服务器密文
Tableau Server 需要存储它使用的一些密文以执行各种功能,通常包括保护内部通信的安全、与其他应用程序或操作系统通信,或实现与客户端的安全通信。在此上下文中,术语密文可能是指密码、令牌或用于向另一个实体验证某个实体身份的其他字符串。
运行 Tableau Server 需要两种类别的密文。这两种密文根据其生成方式而有所不同。
- 管理员生成的密文。这些密文包括用户运行身份帐户的凭据及关联密文,以及 Tableau Server 使用的 SMTP 凭据。
- 由系统中的各种进程自动生成的密文。例如,需要一个密文来保护群集控制器和 ZooKeeper 进程之间的通信。并且,每个与 Postgres 通信的服务和编程用户都需要一些不同的密码。
大多数密文在空闲时将被加密。需要密文时,将会在运行时对其进行解密。
本主题介绍密文存储的工作方式,并介绍了在 Tableau Server 上正确管理密文存储所需执行的操作。
了解密文存储的工作方式
在安装期间,Tableau Server 会在 Java 密钥存储中生成和存储一个主密钥。主密钥用于对系统中使用的配置加密密钥进行加密。
每当创建或更新一个新密文时,将会使用配置加密密钥对该密文进行加密。加密值随后与其对应的配置参数一起存储在服务器上的一个 YAML 文件中。保存加密值的参数使用 ENC(<encrypted string>)
格式,其中 <encrypted string>
是 Base64 编码的加密字符串。
在运行时,当需要访问给定密文时,系统会将加密值读取到内存中,并使用配置加密密钥对其进行解密。
对于待处理的更改(其中的密文是在配置更改过程中输入的),将对整个事务进行加密。在这种情况下,在您输入密文然后保存待处理的更改后,密文将(通过加密的 SSL)传输到协调服务。协调服务对密文进行加密和存储,直到应用待处理的更改为止。应用更改时,密文(仍处于加密状态)将升级为当前配置版本。
Tableau Server 在 GCM 模式下使用 256 位 AES 对密文进行加密。用于保护存储安全的密钥与用于在将嵌入数据库凭据存储在存储库中之前对其进行加密的资产密钥不同。
谁具有主密钥的访问权限?
在默认安装中,会为该节点上的每个服务将 Tableau Server 的 Java 密钥存储复制到 /var/opt/tableau/tableau_server/data/tabsvc/config
下的 /tabsvc/keystores
文件夹中。
例如,
/var/opt/tableau/tableau_server/data/tabsvc/config/tabadminagent_<version_number>/tabsvc/keystores/tableauserver.jks
。
如果使用自定义安装目录,则密钥存储文件将位于
<install directory>/tableau_server/data/tabsvc/config/<service name_#.version_number>/tabsvc/keystores
默认情况下,以下用户和组具有此目录的访问权限:
- 根
- tableau(用户)
- “tableau”组的成员
导入和导出配置信息
Tableau 服务管理器引入了使用 tsm settings export 导入和导出配置信息的功能。
注意:此版本的 Tableau Server 不支持从备份还原配置信息。作为替代,我们建议使用导出和导入配置命令来备份和还原配置信息。
尽管在以内部方式存储在磁盘上时配置密文已加密,但在将配置导出到文件时,密文将以纯文本形式写入文件。管理员负责采取措施来保护此文件。有各种可用选项:
- 将文件写入加密的文件系统。
- 将文件写入由文件系统权限限制为只有特定用户或组才能访问的目录。
- 对输出文件进行加密。
保护用于导入和导出操作的密文
此部分介绍如何对备份输出进行 PGP 加密。利用此方法,您将创建一个命名管道并将其作为 file 参数提供,然后使用该内容作为 gpg 的输入以对其进行加密。优点是,密文决不会以纯文本形式写入磁盘。必须有 gpg 和私钥。以下部分中显示了此方法的示例。
此部分中的示例介绍了一种处理密文以在单独的计算机上存储密文的方式。
有关详细信息,请参见以下外部参考:
示例:加密和导出
下面是一个示例,演示在导出配置时如何保护文件的安全。
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
此操作的详细信息为:
创建一个命名管道,当前用户对其的访问权限由文件权限限制为读写。
mkfifo -m 600 /tmp/secure1
调用 gpg 对发送至命名管道的数据进行加密,并将其作为单独进程在后台运行。它将阻止等待数据。结果将是一个包含加密数据的文件。
gpg --symmetric --batch --yes --passphrase-file ~/.secrets/pgppassphrase.txt --cipher-algo AES256 --output encrypted.enc < /tmp/secure1 &
调用 tsm 以导出配置,同时提供命名管道作为 file 参数。
tsm settings export -f /tmp/secure1
删除命名管道。
rm /tmp/secure1
加密的数据存储在文件“encrypted.enc."
示例:解密和导入
下面是一个示例,演示如何解密和导入配置。
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
此操作的详细信息为:
创建一个命名管道,当前用户对其的访问权限由文件权限限制为读写。
mkfifo -m 600 /tmp/secure2
解密配置并将其发送至命名管道。将此进程作为单独进程在后台执行,它将阻止等待读取操作。
gpg --decrypt --batch --yes --passphrase-file ~/.secrets/pgppassphrase.txt encrypted.enc > /tmp/secret2 &
执行 tsm configuration import 命令,并根据需要登录。
tsm settings import -f /tmp/secret2
删除命名管道。
rm /tmp/secure1
待处理配置包含导入的配置。
运行 tsm pending-changes apply 提交更改。如果待定更改需要重新启动服务器,pending-changes apply
命令将显示一个提示,告知您将进行重新启动。即使服务器已停止,此提示也会显示,但在这种情况下不会重新启动。您可以使用 --ignore-prompt
选项隐藏提示,但这样做不会改变重新启动行为。如果更改不需要重新启动,则会在不提示的情况下应用更改。有关详细信息,请参见tsm pending-changes apply。
群集节点
将新节点添加到 Tableau Server 群集时,您首先将需要生成节点配置文件 (tsm topology)。节点配置文件包含用于对配置密码加密的主密钥存储文件的副本。
重要信息:我们强烈建议您采取额外措施,在导出包含密文的配置文件时保护节点配置文件的安全。
在新节点上安装和配置 Tableau Server 时,您将需要向 initialize-tsm
命令提供节点配置文件。initialize-tsm
命令。
密文存储事件日志记录
将记录与密文存储相关的以下事件:
- 生成新加密密钥
- 加密密钥已回滚或更改
- 对配置文件中的新值进行加密
有关日志文件及其存储位置的详细信息,请参见使用日志文件。
管理密文
作为 Tableau Server 管理员,与密文存储相关的最重要任务是定期更新密文。在某些情况(服务器故障的排除或审计)下,您可能需要检索密码。
对于其他操作,例如升级版本、备份和还原或向群集中添加新节点(如上所述),Tableau Server 会自动管理密文存储和相关过程。
更新密文
您应根据公司的安全策略定期更新密文。
若要更新主密钥和自动生成的密文,请运行 tsm security regenerate-internal-tokens。
检索密码
在某些情况下,您可能需要为故障排除或其他操作检索密码。例如,您可能需要由 Tableau Server 生成并加密的 Postgres readonly 用户凭据。在这些情况下,您可以运行一个 tsm 命令,该命令将为您检索密码并对其进行解密。
若要检索密码,请打开命令提示符,并针对下表中列出的其中一个参数发出 tsm configuration get
命令。
例如,若要检索 readonly Postgres 用户的密码,请键入以下命令:
tsm configuration get -k pgsql.readonly_password
该命令将以明文形式返回密码:
$ 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 | tblwgadmin Postgres 用户的密码。 注意:尽管配置参数在 Tableau 的配置文件(tabsvc.yml、workgroup.yml)中已加密,但此密码将以纯文本形式存储在由 SAML 使用的文件中。 |
pgsql.readonly_password | Password for the readonly Postgres user. |
pgsql.remote_password | Password for the tableau Postgres user. |
redis.password | Redis 的密码。 注意:尽管配置参数在 Tableau 的配置文件(tabsvc.yml、workgroup.yml)中已加密,但配置将以纯文本形式出现在由 Redis 应用程序使用的 redis.conf 文件中。Redis 不支持加密/安全密码。 |
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 |