Configure Bitbucket with HashiCorp Vault

このページの内容

お困りですか?

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

コミュニティに質問

HashiCorp Vault is a secrets management platform that helps you store, access, and manage sensitive data. Bitbucket now supports Vault as a secure storage option for your product configuration file.

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

サポートされている認証

Vault のセットアップ方法

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

To configure Bitbucket to work with HashiCorp Vault:

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

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

  3. Authenticate Bitbucket with Vault.

  4. Vault 設定データを <home-directory>/shared/bitbucket.properties ファイルに追加します。


Important
It's quite common for Vault deployments to have a KV V2 Secret Engine enabled under the secret  mount. If you are using a different Vault deployment, please see the HashiCorp documentation for enabling a new KV V2 Secret Engine:
https://developer.hashicorp.com/vault/docs/secrets/kv/kv-v2


これらの手順の詳細について、以下で説明します。

ステップ 1: HashiCorp Vault インスタンスにシークレットを作成する

If you haven’t created a secret in the KV V2 Secret Engine of your Vault instance before, take a look at the Hashicorp Vault documentation for more information.

This secret must contain a single value for your product configuration file.

ステップ 2: シークレットを読み取る権限を含むポリシーを作成する

If you need detailed instructions on creating a policy in Vault, see the Hashicorp Vault documentation. The details below provide additional information from the Bitbucket perspective.

To retrieve your secret from the Vault, Bitbucket must have a policy with the read permission.

以下は、KV V2 Secret Engine 内のシークレットを読み取る権限を含む Vault ポリシーの例です。

path "secret/data/sample/secret" {
  capabilities = ["read"]
}

上記のパスの例には、次の 3 つの構成要素があります。

コンポーネント

説明

secret

This is where the KV V2 Secret Engine is mounted.

data

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

sample/secret

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

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

vault policy write sample_policy ./sample_policy.hcl

Step 3: Authenticate Bitbucket with 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
    ---         -----
    ~~~~        ~~~~~

    If you don’t see the output above, refer to the Hashicorp documentation to troubleshoot the issue.
    To complete the process, an environment variable associated with the token must be present on Bitbucket.

  4. Define the environment variable SECRET_STORE_VAULT_TOKEN in the context of the Bitbucket instance. A simple way to do this is to add the following line to the ~/.bashrc file for the user running Bitbucket:

    export SECRET_STORE_VAULT_TOKEN=<YOUR_TOKEN>

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

If Bitbucket is operating within a Kubernetes environment, you can leverage the Kubernetes auth method. This method uses a Kubernetes Service Account Token to confirm the identity of the pod that runs Bitbucket and to grant the appropriate access.

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
(オプション)

The location of the Service Account Token file in the pod for Bitbucket.

既定値: /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. Ensure that your Bitbucket pod has access to the secret.
    Currently, Vault CLI doesn’t offer support for logging in with Kubernetes auth method, but you can log in to retrieve client token using HTTP API and then use this generated token to test for access.

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

  5. Refer to the table at the start of these steps to set the following environment variables for Bitbucket:

  • SECRET_STORE_VAULT_KUBE_AUTH_ROLE

  • SECRET_STORE_VAULT_KUBE_AUTH_PATH (オプション)

  • SECRET_STORE_VAULT_KUBE_AUTH_JWT_PATH (オプション)


If there are any problems with your configurations, (for example, the secret is not accessible with the authentication token), Bitbucket won’t start. Check the log file launcher.log for any related error messages.


Step 4: Add the Vault configuration data to bitbucket.properties

Vault is configured via a JSON object that is added to the <home-directory>/shared/bitbucket.properties file. The JSON configuration object has a number of fields. Make sure you refer to the following table for details on each of these properties.

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

フィールド

必須かどうか

説明

mount

必須

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

path

必須

シークレットのパス。

key

必須

キー名。

endpoint

必須

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

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

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

authenticationType

任意

使用する認証の種類。

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

既定は TOKEN です。

  1. In the Bitbucket home directory, back up the bitbucket.properties file. Move the backup file to a safe place outside of your Bitbucket server.

  2. In the bitbucket.properties file, add or modify the encrypted-property.cipher.classname property to contain:

    com.atlassian.secrets.store.vault.VaultSecretStore
  3. In the bitbucket.properties file, add or modify the jdbc.password property to contain your JSON configuration object. Use the table at the start of these steps for further information on these fields.
    Here is an example of how it might look:

    {ENC}{"mount": "secret", "path": "sample/secret", "key": "password", "endpoint": "https://127.0.0.1:8200"}
  4. Restart Bitbucket

最終更新日 2023 年 11 月 21 日

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

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