HashiCorp Vault を使用して Confluence を設定する
Vault のセットアップ方法
以下の手順は、HashiCorp Vault インスタンスが既に実行されていることを前提としています。詳細については、HashiCorp Vault のドキュメントを参照してください。
HashiCorp Vault と連携するように Confluence を設定するには、次の手順を実行します。
HashiCorp Vault インスタンスにシークレットを作成します。
シークレットを読み取る権限を含むポリシーを作成します。
Confluence を Vault で認証します。
Vault 設定データを
<home-directory>/confluence.cfg.xml
ファイルに追加します。
重要
Vault のデプロイでは、シークレットのマウントで KV V2 Secret Engine を有効にするのが一般的です。別の Vault デプロイを使用する場合は、HashiCorp のドキュメントを参照して、以下の新しい KV V2 Secret Engine を有効にしてください。
https://developer.hashicorp.com/vault/docs/secrets/kv/kv-v2
これらの手順の詳細について、以下で説明します。
ステップ 1: HashiCorp Vault インスタンスにシークレットを作成する
以前に Vault インスタンスの KV V2 Secret Engine でシークレットを作成したことがない場合は、HashiCorp Vault のドキュメントで詳細を確認してください。
このシークレットには、JDBC パスワードの値を 1 つ含める必要があります。
ステップ 2: シークレットを読み取る権限を含むポリシーを作成する
Vault でポリシーを作成する詳細な手順が必要な場合は、HashiCorp Vault のドキュメントを参照してください。以下では、Confluence の観点から追加情報を示します。
Vault からシークレットを取得するには、Confluence に read
権限を含むポリシーが必要です。
以下は、KV V2 Secret Engine 内のシークレットを読み取る権限を含む Vault ポリシーの例です。
path "secret/data/sample/secret" {
capabilities = ["read"]
}
上記のパスの例には、次の 3 つの構成要素があります。
コンポーネント | 説明 |
---|---|
| KV V2 Secret Engine がマウントされている場所です。 |
| これが KV V2 シークレットであることを示すプレフィックスです。 |
| このシークレットを含むパスです。 |
前のポリシーが ./sample_policy.hcl
にある場合、このコマンドはサーバー上にポリシーを作成します。
vault policy write sample_policy ./sample_policy.hcl
ステップ 3: Confluence を Vault で認証する
トークンで認証するか、Kubernetes 認証方式で認証するか (Kubernetes 環境を使用している場合) を選択できます。両方の方式について以下で説明します。
トークンで認証する
以下の情報は、Vault トークンの作成に精通していることを前提としています。詳細とトークンのオプションについては、HashiCorp Vault のドキュメントを参照してください。
次のコマンドを使用して新しいトークンを作成します。
vault token create -policy=sample_policy
トークンとポリシーによってシークレットへのアクセスが許可されていることを確認するには、次のコマンドを実行します。
export VAULT_TOKEN=<YOUR_TOKEN> vault kv get -mount=secret sample/secret
You should see the following output:
====== Secret Path ====== secret/data/sample/secret ======= Metadata ======= Key Value --- ----- ~~~~ ~~~~~ ====== Data ====== Key Value --- ----- ~~~~ ~~~~~
上記の出力が表示されない場合は、HashiCorp のドキュメントを参照して、問題のトラブルシューティングを行ってください。
プロセスを完了するには、トークンに関連付けられた環境変数が Confluence に存在する必要があります。Confluence インスタンスのコンテキストで環境変数
SECRET_STORE_VAULT_TOKEN
を定義します。これを簡単に行うには、Confluence を実行しているユーザーの ~/.bashrc ファイルに次の行を追加します。export SECRET_STORE_VAULT_TOKEN=<YOUR_TOKEN>
Kubernetes サービス アカウント トークンを使用して認証する
Confluence が Kubernetes 環境内で動作している場合は、Kubernetes 認証方式を利用できます。この方式では、Kubernetes サービス アカウント トークンを使用して、Confluence を実行する Pod の ID を確認し、適切なアクセス権を付与します。
Vault インスタンスで Kubernetes 認証方式を設定する方法の詳細については、HashiCorp Vault のドキュメントを参照してください。以下の手順を開始する前に、Vault サーバーで Kubernetes 認証方法が有効になっていることを確認してください。
また、次の手順でいくつかの環境変数を設定する必要があります。以下の表で、これらについて説明します。
環境変数 | 説明 |
---|---|
| Kubernetes 認証方式に付随して Vault で定義されているロールの名前。 |
| Kubernetes 認証方式で定義されたパス。 既定値: |
| Confluence の Pod 内のサービス アカウント トークン ファイルの場所。 既定値: |
カスタム パスを使用して Kubernetes 認証方式を作成した場合は、次の手順の CLI コマンドの
kubernetes
をそのパス名に置き換えます。次のコマンドを使用して、作成した
sample_policy
に認証方式をリンクするロールを定義します。vault write auth/kubernetes/role/<YOUR_NEW_ROLE_NAME> \ bound_service_account_names=<YOUR_PRODUCT_SERVICE_ACCOUNT_NAME> \ bound_service_account_namespaces=<YOUR_PRODUCT_SERVICE_NAMESPACE> \ policies=sample_policy
Confluence Pod がシークレットにアクセスできることを確認します。
現在、Vault CLI では Kubernetes 認証方式でのログインはサポートされていませんが、ログインしてから HTTP API を使用してクライアント トークンを取得し、この生成されたトークンを使用してアクセスをテストできます。生成されたトークンでシークレットを取得できない場合は、Hashicorp のドキュメントを参照して問題のトラブルシューティングを行ってください。
これらの手順の冒頭にある表を参照して、Confluence の次の環境変数を設定します。
SECRET_STORE_VAULT_KUBE_AUTH_ROLE
SECRET_STORE_VAULT_KUBE_AUTH_PATH
(オプション)SECRET_STORE_VAULT_KUBE_AUTH_JWT_PATH
(オプション)
設定に問題がある場合 (たとえば、認証トークンでシークレットにアクセスできない場合) は、catalina.out
ログで関連するエラー メッセージがないか確認してください。
ステップ 4: Vault 設定データを confluence.cfg.xml に追加する
Vault は、<home-directory>/confluence.cfg.xml
ファイルに追加された JSON オブジェクトを介して設定されます。JSON 設定オブジェクトにはいくつかのフィールドがあります。これらのプロパティの詳細については、次の表を参照してください。
セキュリティをさらに強化するため、すべての Vault インスタンスで HTTPS を使用することを強くお勧めします。
フィールド | 必須かどうか | 説明 |
---|---|---|
| 必須 | KV V2 Secret Engine のマウント パス。 |
| 必須 | シークレットのパス。 |
| 必須 | キー名。 |
| 必須 | Vault インスタンスのベース URL。 HTTP と HTTPS のどちらも使用できます。常に HTTPS を使用することを強くお勧めします。 URL の末尾にスラッシュがある場合、そのスラッシュは省略します。 |
| 任意 | 使用する認証の種類。 サポートされているオプションは、 既定は |
Confluence ホーム ディレクトリで、
confluence.cfg.xml
ファイルをバックアップします。バックアップ ファイルを Confluence サーバー外の安全な場所に移動します。confluence.cfg.xml
ファイルで、jdbc.password.decrypter.classname
プロパティを追加または変更して、次の内容を含めます。com.atlassian.secrets.store.vault.VaultSecretStore
confluence.cfg.xml
ファイルで、hibernate.connection.password
プロパティを追加または変更して、JSON 設定オブジェクトを含めます。これらのフィールドの詳細については、これらの手順の冒頭にある表を参照してください。
以下に例を示します。{"mount": "secret", "path": "sample/secret", "key": "password", "endpoint": "https://127.0.0.1:8200"}
Confluence を再起動します。