サーバー シークレットの管理
Tableau Server は一般的に、内部通信の保護、他のアプリケーションやオペレーティング システムとの通信、またはクライアントとの安全な通信の提供など、さまざまな機能の実行に使用する多数のシークレットを保存する必要があります。このコンテキストでは、シークレットという用語は、1 つのエンティティを別のエンティティに対して認証するために使用される、パスワード、トークン、またはその他の文字列を表します。
Tableau Server で実行する必要があるシークレットには 2 つのカテゴリーがあります。それらは、シークレットの生成方法によって異なります。
- 管理者によって生成されるシークレット。これらには、認証資格情報や、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
既定では、次のユーザーおよびグループにこのディレクトリへのアクセス権があります。
- root
- tableau (ユーザー)
- 'tableau' グループのメンバー
構成情報のインポートおよびエクスポート
Tableau Services Manager には、tsm settings export を使用して構成情報をインポートおよびエクスポートする機能が導入されています。
注:このバージョンの Tableau Server では、バックアップからの構成情報の復元はサポートされていません。代わりに、構成のエクスポートおよびインポート コマンドを使用して構成情報をバックアップおよび復元することをお勧めします。
構成シークレットはディスクに内部保存されるときに暗号化されますが、構成がファイルにエクスポートされるときには、シークレットがプレーン テキスト形式でファイルに書き込まれます。管理者はこのファイルを保護する責任があります。次のようなさまざまなオプションがあります。
- 暗号化されたファイル システムにファイルを書き込む。
- ファイル システム パーミッションによって特定のユーザーまたはグループのみに限定されるディレクトリにファイルを書き込む。
- 出力ファイルを暗号化する。
インポートおよびエクスポート操作におけるシークレットの保護
このセクションでは、バックアップ出力を PGP で暗号化する方法について説明します。この方法により、名前付きパイプを作成してファイル引数として指定し、それを gpg 暗号化の入力として使用します。ディスクにシークレットがプレーン テキストで書き込まれることがないという利点があります。gpg と秘密キーが利用できなければなりません。次のセクションに、この方法の例を示します。
このセクションでは、シークレットを別のコンピューターに保管するための処理方法の例について説明します。
詳細については、次の外部参照資料を参照してください。
- File encryption on the command line (コマンド ラインでのファイルの暗号化)
- mkfifo(1) - Linux man page (mkfifo(1) - Linux man ページ)
例:暗号化とエクスポート
構成をエクスポートするときのファイルの保護方法について例を示します。
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 ではデータを待機しながらブロックします。これにより、暗号化されたデータを含むファイルが作成されます。
gpg --symmetric --batch --yes --passphrase-file ~/.secrets/pgppassphrase.txt --cipher-algo AES256 --output encrypted.enc < /tmp/secure1 &
名前付きパイプをファイル引数に指定して tsm を呼び出し、構成をエクスポートします。
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 |