サーバー シークレットの管理

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 と秘密キーが利用できなければなりません。次のセクションに、この方法の例を示します。

このセクションでは、シークレットを別のコンピューターに保管するための処理方法の例について説明します。

詳細については、次の外部参照資料を参照してください。

例:暗号化とエクスポート

構成をエクスポートするときのファイルの保護方法について例を示します。

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 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

tblwgadmin Postgres ユーザーのパスワード。

: 構成パラメーターは Tableau の構成ファイル (tabsvc.yml、workgroup.yml) に暗号化されますが、このパスワードは、SAML で使用される他のファイルにプレーン テキストで保存されます。

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

Redis のパスワード

: 構成パラメーターは Tableau の構成ファイル (tabsvc.yml、workgroup.yml) に暗号化されますが、構成は Redis アプリケーションが使用する redis.conf ファイルにプレーン テキストで引き続き保存されます。Redis は暗号化/セキュア パスワードをサポートしていません。

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
フィードバックをお送りいただき、ありがとうございます。フィードバックは正常に送信されました。ありがとうございます!