HashiCorp Vault で Jira を設定する
HashiCorp Vault は、機密データの保存、アクセス、管理に役立つシークレット管理プラットフォームです。Jira では、JDBC パスワードを安全に保管するオプションとして Vault をサポートしています。
サポートされているエンジン
最新バージョンのシークレットの取得のみをサポートしています。
サポートされている認証
Vault のセットアップ方法
以下の手順は、HashiCorp Vault インスタンスが既に実行されていることを前提としています。詳細については、HashiCorp Vault のドキュメントを参照してください。
Confluence と HashiCorp Vault の連携を設定するには、次の手順を実行します。
HashiCorp Vault インスタンスにシークレットを作成します。
シークレットを読み取る権限を含むポリシーを作成します。
Vault で Jira を認証します。
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 つの構成要素があります。
コンポーネント | 説明 |
---|---|
| KV V2 Secret Engine がマウントされている場所です。 |
| これが KV V2 シークレットであることを示すプレフィックスです。 |
| このシークレットを含むパスです。 |
前のポリシーが ./sample_policy.hcl
にある場合、このコマンドはサーバー上にポリシーを作成します。
vault policy write sample_policy ./sample_policy.hcl
ステップ 3:Jira を 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 ドキュメントを参照して、問題のトラブルシューティングを行ってください。
プロセスを完了するには、トークンに関連付けられた環境変数が Jira に存在する必要があります。Jira インスタンスのコンテキストで環境変数
SECRET_STORE_VAULT_TOKEN
を定義します。これを簡単に行うには、Jira を実行しているユーザーの~/.bashrc
ファイルに次の行を追加します。export SECRET_STORE_VAULT_TOKEN=<YOUR_TOKEN>
設定に問題がある場合(たとえば、認証トークンでシークレットにアクセスできないなど)、Jira はスタートアップ時に詳細を表示します。これらの情報は、catalina.out
と atlassian-jira.log
の 2 つのログ ファイルでもチェックできます。
Kubernetes サービス アカウント トークンを使用して認証する
Jira が Kubernetes 環境内で動作している場合は、Kubernetes 認証方式を利用できます。この方式では、Kubernetes サービス アカウント トークンを使用して、Jira を実行する Pod の ID を確認して、適切なアクセス権を付与します。
Vault インスタンスで Kubernetes 認証方式を設定する方法の詳細については、HashiCorp Vault のドキュメントを参照してください。以下の手順を開始する前に、Vault サーバーで Kubernetes 認証方法が有効になっていることを確認してください。
また、次の手順でいくつかの環境変数を設定する必要があります。以下の表で、これらについて説明します。
環境変数 | 説明 |
---|---|
| Kubernetes 認証方式に付随して Vault で定義されているロールの名前。 |
| Kubernetes 認証方式で定義されたパス。 既定値: |
| Jira の 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
Jira Pod がシークレットにアクセスできることを確認します。
現在、Vault CLI は Kubernetes 認証方式でのログインをサポートしていません。ただし、HTTP API でログインしてクライアント トークンを取得して、この生成されたトークンによってアクセスをテストできます。生成されたトークンでシークレットを取得できない場合は、Hashicorp のドキュメントを参照して問題のトラブルシューティングを行ってください。
これらの手順の冒頭にあるテーブルを参照して、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 を使用することを強くお勧めします。
フィールド | 必須かどうか | 説明 |
---|---|---|
| 必須 | KV V2 Secret Engine のマウント パス。 |
| 必須 | シークレットのパス。 |
| 必須 | キー名。 |
| 必須 | Vault インスタンスのベース URL。 HTTP と HTTPS のどちらも使用できます。常に HTTPS を使用することを強くお勧めします。 URL の末尾にスラッシュがある場合、そのスラッシュは省略します。 |
| 任意 | 使用する認証の種類。 サポートされているオプションは、 既定は |
Jira ホーム ディレクトリに移動して、
dbconfig.xml
ファイルをバックアップします。Jira Server の外部の安全な場所にバックアップ ファイルを移動します。dbconfig.xml
ファイルで、<atlassian-password-cipher-provider>
プロパティを追加または変更して、次の内容を含めます。com.atlassian.secrets.store.vault.VaultSecretStore
dbconfig.xml
ファイルで、<password>
プロパティを追加または変更して、JSON 設定オブジェクトを含めます。これらのフィールドの詳細については、これらの手順の冒頭にある表を参照してください。
以下に例を示します。{"mount": "secret", "path": "sample/secret", "key": "password", "endpoint": "https://127.0.0.1:8200"}
Jira を再起動します。