HashiCorp Vault で Jira を設定する

このページの内容

お困りですか?

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

コミュニティに質問

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

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

サポートされている認証

Vault のセットアップ方法

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

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

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

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

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

  4. Vault 設定データを <home-directory>/dbconfig.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 ドキュメント」をご参照ください。なお、Jira をご利用の場合に必要となる追加の情報を次に示します。

Vault からシークレットを取得するには、Jira が 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:Jira を 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 ドキュメントを参照して、問題のトラブルシューティングを行ってください。
    プロセスを完了するには、トークンに関連付けられた環境変数が Jira に存在する必要があります。

  4. Jira インスタンスのコンテキストで環境変数 SECRET_STORE_VAULT_TOKEN を定義します。これを簡単に行うには、Jira を実行しているユーザーの ~/.bashrc ファイルに次の行を追加します。

    export SECRET_STORE_VAULT_TOKEN=<YOUR_TOKEN>


設定に問題がある場合(たとえば、認証トークンでシークレットにアクセスできないなど)、Jira はスタートアップ時に詳細を表示します。これらの情報は、catalina.outatlassian-jira.log の 2 つのログ ファイルでもチェックできます。


Kubernetes サービス アカウント トークンを使用して認証する

Jira が Kubernetes 環境内で動作している場合は、Kubernetes 認証方式を利用できます。この方式では、Kubernetes サービス アカウント トークンを使用して、Jira を実行する 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
(オプション)

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

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

  5. これらの手順の冒頭にあるテーブルを参照して、Jira で次の環境変数を設定します。

  • SECRET_STORE_VAULT_KUBE_AUTH_ROLE

  • SECRET_STORE_VAULT_KUBE_AUTH_PATH (オプション)

  • SECRET_STORE_VAULT_KUBE_AUTH_JWT_PATH (オプション)

ステップ 4:Vault 設定データを dbconfig.xml に追加する

Vault は、<home-directory>/dbconfig.xml ファイルに追加された JSON オブジェクトを介して設定されます。JSON 設定オブジェクトにはいくつかのフィールドがあります。これらのプロパティの詳細は、次のテーブルをご参照ください。

セキュリティをさらに強化するため、すべての Vault インスタンスで HTTPS を使用することを強くお勧めします。

フィールド

必須かどうか

説明

mount

必須

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

path

必須

シークレットのパス。

key

必須

キー名。

endpoint

必須

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

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

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

authenticationType

任意

使用する認証の種類。

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

既定は TOKEN です。

  1. Jira ホーム ディレクトリに移動して、dbconfig.xml ファイルをバックアップします。Jira Server の外部の安全な場所バックアップ ファイルを移動します。

  2. dbconfig.xml ファイルで、<atlassian-password-cipher-provider> プロパティを追加または変更して、次の内容を含めます。

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

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

最終更新日 2023 年 11 月 21 日

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

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