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:
HashiCorp Vault インスタンスにシークレットを作成します。
シークレットを読み取る権限を含むポリシーを作成します。
Authenticate Bitbucket with Vault.
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 つの構成要素があります。
コンポーネント | 説明 |
---|---|
| This is where the KV V2 Secret Engine is mounted. |
| これが KV V2 シークレットであることを示すプレフィックスです。 |
| このシークレットを含むパスです。 |
前のポリシーが ./sample_policy.hcl
にある場合、このコマンドはサーバー上にポリシーを作成します。
vault policy write sample_policy ./sample_policy.hcl
Step 3: Authenticate Bitbucket with 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 --- ----- ~~~~ ~~~~~
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.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 認証方法が有効になっていることを確認してください。
また、次の手順でいくつかの環境変数を設定する必要があります。以下の表で、これらについて説明します。
環境変数 | 説明 |
---|---|
| Kubernetes 認証方式に付随して Vault で定義されているロールの名前。 |
| Kubernetes 認証方式で定義されたパス。 既定値: |
| The location of the Service Account Token file in the pod for Bitbucket. 既定値: |
カスタム パスを使用して 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
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.生成されたトークンでシークレットを取得できない場合は、Hashicorp のドキュメントを参照して問題のトラブルシューティングを行ってください。
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 を使用することを強くお勧めします。
フィールド | 必須かどうか | 説明 |
---|---|---|
| 必須 | KV V2 Secret Engine のマウント パス。 |
| 必須 | シークレットのパス。 |
| 必須 | キー名。 |
| 必須 | Vault インスタンスのベース URL。 HTTP と HTTPS のどちらも使用できます。常に HTTPS を使用することを強くお勧めします。 URL の末尾にスラッシュがある場合、そのスラッシュは省略します。 |
| 任意 | 使用する認証の種類。 サポートされているオプションは、 既定は |
In the Bitbucket home directory, back up the b
itbucket.properties
file. Move the backup file to a safe place outside of your Bitbucket server.In the b
itbucket.properties
file, add or modify theencrypted-property.cipher.classname
property to contain:com.atlassian.secrets.store.vault.VaultSecretStore
In the b
itbucket.properties
file, add or modify thejdbc.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"}
Restart Bitbucket