HashiCorp Vault を使用して Confluence を設定する

このページの内容

お困りですか?

アトラシアン コミュニティをご利用ください。

コミュニティに質問

HashiCorp Vault は、機密データの保存、アクセス、管理に役立つシークレット管理プラットフォームです。Confluence では、JDBC パスワードを安全に保管するオプションとして Vault がサポートされるようになりました。

サポートされているエンジン

サポートされている認証

On this page:

Vault のセットアップ方法

以下の手順は、HashiCorp Vault インスタンスが既に実行されていることを前提としています。詳細については、HashiCorp Vault のドキュメントを参照してください。

HashiCorp Vault と連携するように Confluence を設定するには、次の手順を実行します。

  1. HashiCorp Vault インスタンスにシークレットを作成します。

  2. シークレットを読み取る権限を含むポリシーを作成します。

  3. Confluence を Vault で認証します。

  4. 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 つの構成要素があります。

コンポーネント

説明

secret

KV V2 Secret Engine がマウントされている場所です。

data

これが KV V2 シークレットであることを示すプレフィックスです。

sample/secret

このシークレットを含むパスです。

前のポリシーが ./sample_policy.hcl にある場合、このコマンドはサーバー上にポリシーを作成します。

vault policy write sample_policy ./sample_policy.hcl

ステップ 3: Confluence を Vault で認証する

トークンで認証するか、Kubernetes 認証方式で認証するか (Kubernetes 環境を使用している場合) を選択できます。両方の方式について以下で説明します。

トークンで認証する

以下の情報は、Vault トークンの作成に精通していることを前提としています。詳細とトークンのオプションについては、HashiCorp Vault のドキュメントを参照してください

  1. 次のコマンドを使用して新しいトークンを作成します。

    vault token create -policy=sample_policy
  2. トークンとポリシーによってシークレットへのアクセスが許可されていることを確認するには、次のコマンドを実行します。

    export VAULT_TOKEN=<YOUR_TOKEN>
    vault kv get -mount=secret sample/secret
  3. You should see the following output:

    ====== Secret Path ======
    secret/data/sample/secret
    
    ======= Metadata =======
    Key         Value
    ---         -----
    ~~~~        ~~~~~
    
    ====== Data ======
    Key         Value
    ---         -----
    ~~~~        ~~~~~

    上記の出力が表示されない場合は、HashiCorp のドキュメントを参照して、問題のトラブルシューティングを行ってください
    プロセスを完了するには、トークンに関連付けられた環境変数が Confluence に存在する必要があります。

  4. 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 認証方法が有効になっていることを確認してください。

また、次の手順でいくつかの環境変数を設定する必要があります。以下の表で、これらについて説明します。

環境変数

説明

SECRET_STORE_VAULT_KUBE_AUTH_ROLE

Kubernetes 認証方式に付随して Vault で定義されているロールの名前。

SECRET_STORE_VAULT_KUBE_AUTH_PATH
(オプション)

Kubernetes 認証方式で定義されたパス。

既定値:
kubernetes

SECRET_STORE_VAULT_KUBE_AUTH_JWT_PATH
(オプション)

Confluence の Pod 内のサービス アカウント トークン ファイルの場所。

既定値: /var/run/secrets/kubernetes.io/serviceaccount/token


  1. カスタム パスを使用して Kubernetes 認証方式を作成した場合は、次の手順の CLI コマンドkubernetes をそのパス名に置き換えます。

  2. 次のコマンドを使用して、作成した 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
  3. Confluence Pod がシークレットにアクセスできることを確認します。
    現在、Vault CLI では Kubernetes 認証方式でのログインはサポートされていませんが、ログインしてから HTTP API を使用してクライアント トークンを取得し、この生成されたトークンを使用してアクセスをテストできます。

  4. 生成されたトークンでシークレットを取得できない場合は、Hashicorp のドキュメントを参照して問題のトラブルシューティングを行ってください。

  5. これらの手順の冒頭にある表を参照して、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 を使用することを強くお勧めします。

フィールド

必須かどうか

説明

mount

必須

KV V2 Secret Engine のマウント パス。

path

必須

シークレットのパス。

key

必須

キー名。

endpoint

必須

Vault インスタンスのベース URL。

HTTP と HTTPS のどちらも使用できます。常に HTTPS を使用することを強くお勧めします。

URL の末尾にスラッシュがある場合、そのスラッシュは省略します。

authenticationType

任意

使用する認証の種類。

サポートされているオプションは、TOKENKUBERNETES です。

既定は TOKEN です。

  1. Confluence ホーム ディレクトリで、confluence.cfg.xml ファイルをバックアップします。バックアップ ファイルConfluence サーバー外の安全な場所に移動します。

  2. confluence.cfg.xml ファイルで、jdbc.password.decrypter.classname プロパティを追加または変更して、次の内容を含めます。

    com.atlassian.secrets.store.vault.VaultSecretStore
  3. confluence.cfg.xml ファイルで、hibernate.connection.password プロパティを追加または変更して、JSON 設定オブジェクトを含めます。これらのフィールドの詳細については、これらの手順の冒頭にある表を参照してください。
    以下に例を示します。

    {"mount": "secret", "path": "sample/secret", "key": "password", "endpoint": "https://127.0.0.1:8200"}
  4. Confluence を再起動します。

最終更新日: 2024 年 2 月 8 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.