# Bitbucketプラグイン

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FFlgYjasZKZ7FCNXEKTi5%2Fimage.png?alt=media&#x26;token=e19f29a8-598b-4c2c-bbbe-f840c6919ff4" alt=""><figcaption></figcaption></figure>

## 機能

* BitBucketパイプライン内にKeeperボルトからシークレットを取り込みます
* BitBucketパイプラインのスクリプトで、ビルドの引数または環境変数としてシークレットのクレデンシャルを設定します
* Keeperボルトからセキュリティで保護されたファイルをコピーします

{% hint style="info" %}
Keeper Secrets Manager機能の完全なリストについては、[概要](/keeperpam/jp/secrets-manager/overview.md)をご参照ください。
{% endhint %}

## 前提条件

このページでは、Secrets ManagerとBitBucketとの連携について説明します。 この連携を利用するための必要条件は以下のとおりです。

* Keeper Secrets Managerへのアクセス（詳細は、[クイックスタートガイド](/keeperpam/jp/secrets-manager/quick-start-guide.md)をご参照ください）
  * KeeperアカウントのSecrets Managerアドオンの有効化
  * Secrets Manager強制ポリシーが有効化されたロールを割り当てられたメンバーシップ
* シークレットを共有するKeeper [Secrets Managerアプリケーション](/keeperpam/jp/secrets-manager/about/terminology.md)
  * アプリケーションの作成手順については、[クイックスタートガイド](/keeperpam/jp/secrets-manager/quick-start-guide.md)をご参照ください
* Keeper [Secrets Manager設定](/keeperpam/jp/secrets-manager/about/secrets-manager-configuration.md)の初期化
  * BitBucket連携では、JSON形式とBase64形式の設定を使用できます

## 設定

### 設定を取得

Keeper Commanderを使用して、アプリケーションに新しいクライアントを追加し、設定をBase64文字列に初期化します。これは、「Initialized Config:」ラベルの後に表示される長いハッシュテキストになります。

```
My Vault> sm client add --app MyApp --config-init b64

Successfully generated Client Device
====================================

Initialized Config: eyJob3N0bmFtZSI6ICJr....OUk1ZTV1V2toRucXRsaWxqUT0ifQ==
IP Lock:Enabled
Token Expires On:2021-10-19 15:31:31
App Access Expires on:Never
```

この値は、**Repository settings** (リポジトリ設定) メニューの下のBitBucket **Repository variables** (リポジトリ変数) に、**KSM\_CONFIG**という名前の安全なシークレットとして追加できます。これにより、Keeper Secrets Managerパイプで設定を変数として使用できるようになります。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FPmEkMavh0aScBfkRB3Cn%2Fimage.png?alt=media&#x26;token=b3cb00f3-6ce0-4f1b-a300-e4e7a80c2870" alt=""><figcaption></figcaption></figure>

### bitbucket-pipeline.ymlへの追加

```
image: atlassian/default-image:2

pipelines:
  default:
    - step:
        name:'Build My Stuff'
        script:
          - pipe: keepersecurity/keeper-secrets-manager-pipe:<tag>
            variables:
              KSM_CONFIG: "${KSM_CONFIG}"
              SECRETS: |
                1adh_WZxtbbHWqf6IALMVg/field/login > MY_LOGIN
                V8lFbio0Bs0LuvaSD5DDHA/file/IMG_0036.png > file:my.png
              SCRIPT_TEXT: |
                #!/usr/bin/env bash
                echo "My Login = \${MY_LOGIN}"
                ls my.png
              SHOW_OUTPUT:"True"
              SECRETS_FILE: "secret.env"
              SECRETS_FILE_TYPE: "export"
          - source secret.env
```

#### パイプによる連携

パイプ連携の名前は以下のとおりです。

```
        script:
          - pipe: keepersecurity/keeper-secrets-manager-pipe:<tag>
```

{% hint style="info" %}
パイプでは、バージョンのgitのタグを選択する必要があります。[README.md](https://bitbucket.org/keepersecurity/keeper-secrets-manager-pipe/src/master/README.md)のYAML定義では、常に最新のタグが利用できます。
{% endhint %}

### 変数

#### 必須

`KSM_CONFIG` - Secrets Manangerのパイプには設定情報が必要です。これはリポジトリ変数に格納し、「${KSM\_CONFIG}」を使用して変数に取り込むことができます

`SECRETS` - シークレットは、Keeper表記法と代入先の改行文字で区切られたリストです。表記法と代入先は、「>」文字で区切られています。

#### オプション

`SCRIPT_FILE` - スクリプトファイルは、パイプ内で実行するアプリケーションまたはシェルスクリプトです。スクリプトからシークレットにアクセスできるようになります。

`SCRIPT_TEXT` - スクリプトテキストを使用すると、bitbucket-pipeline.yml内にスクリプトをハードコードできます。`SCRIPT_FILE`が存在しない場合に使用されます。使用する場合は、シェル関連の記号をエスケープする必要があります。

`SECRETS_FILE` - これを設定すると、環境変数に格納されるシークレットもファイルに格納されるようになります。ファイルの形式は、`SECRET_FILE_TYPE`によって異なります。

`SECRETS_FILE_TYPE` - SECRET\_FILEを使用する場合、この変数によってその形式を指定します。有効な形式は、「json」、「export」、「setenv」、「set」です。デフォルトは「json」です

`SHOW_OUTPUT` - `SCRIPT_FILE`または`SCRIPT_TEXT`からの出力を表示するブール型フラグ。REDACT変数で、出力にシークレットを表示できるようにするか否か指定します。デフォルトでは、このフラグはTrueです。

`SAVE_OUTPUT_FILE` - これを設定すると、`SCRIPT_FILE`または`SCRIPT_TEXT`の出力がファイルに保存されます。

`REDACT` - **True**の場合、`SCRIPT_FILE`または`SCRIPT_TEXT`に表示されたシークレットはすべて「\*\*\*\*」に置き換えられます。デフォルトでは、このフラグは**True**です。ファイルに保存された出力は編集されません。

`REMOVE_FILES` - **True**の場合、パイプが終了すると、作成したファイルはすべて削除されます。これらのファイルは、値が**False**に設定されていない限り、パイプの外部では利用できません。デフォルトはTrueです。

`CLEANUP_FILE` - パイプ内に作成されたファイルをすべて削除するシェルスクリプトの名前。ビルドのワークスペースはビルドの完了時に削除されますが、このシェルファイルを実行してファイルを確実に削除できます。設定しない場合、クリーンアップファイルは作成されません。

`DEBUG` - パイプ内のデバッグメッセージを有効にします。デフォルトは**False**です。

## シークレットの取得

YAMLのSECRETS変数には、[Keeper表記法](/keeperpam/jp/secrets-manager/about/keeper-notation.md)のリストと値の保存場所が格納されます。シークレットは、環境変数またはファイルに格納できます。

変数のデフォルトの格納先は環境変数です。環境変数名の前にプレフィックス\*\*env:\*\*を追加できますが、必須ではありません。

{% hint style="info" %}
環境変数名は、有効なUnix環境変数名でなければなりません
{% endhint %}

### シークレットを環境変数に保存

以下の例では、ログインシークレットを取得して環境変数に格納します。どちらの行も同じですが、1つは\*\*env:\*\*プレフィックスなし、もう1つはプレフィックスありです。

```
        script:
          - pipe: keepersecuirty/keeper-secrets-manager-pipe:<tag>
            variables:
              KSM_CONFIG: "${KSM_CONFIG}"
              SECRETS: |
                1adh_WZxtbbHWqf6IALMVg/field/login > MY_LOGIN
                1adh_WZxtbbHWqf6IALMVg/field/login > env:SAME_LOGIN          
```

この例では、`1adh_WZxtbbHWqf6IALMVg`がUID記録です。

### シークレットをファイルに保存

シークレットがバイナリデータの場合は、エンコードの問題があるため、シークレットを環境変数に格納しないことを強くお勧めします。代わりに**file:**&#x683C;納先をご使用ください。

```
        script:
          - pipe: keepersecurity/keeper-secrets-manager-pipe:<tag>
            variables:
              KSM_CONFIG: "${KSM_CONFIG}"
              SECRETS: |
                1adh_WZxtbbHWqf6IALMVg/file/server.xml > file:server.xml
                1adh_WZxtbbHWqf6IALMVg/file/domain.crt > file:config/path/domain.crt             
```

変数`REMOVE_FILES`がTrueの場合、ファイルはパイプの終了時に削除されます。パイプの外部のファイルを使用したい場合は、この変数をFalseに設定します。

## 例

### 例1 - Dockerビルド

この例では、SSL証明書を含むカスタムserver.xml設定とキーストアで構成されたTomcatサーバーのDockerイメージを作成します。server.xmlとキーストアはKeeperボルトに保存されます。

最初の手順は、BitBucketでリポジトリを作成し、Dockerfileを追加します。このDockerfileは、Keeper Secrets Managerのパイプによって作成された2つのファイルを公式のTomcat Dockerイメージに追加します。

```
FROM tomcat:10-jdk16

ADD /server.xml /usr/local/tomcat/conf/server.xml
ADD /localhost-rsa.jks /usr/local/tomcat/conf/localhost-rsa.jks

# SSL用にポート8443を公開
EXPOSE 8443
```

次に必要なのが、Keeper Secrets Managerパイプの設定です。この設定は、Keeper Commanderを使用し、Base64で初期化して作成できます。

```
My Vault> sm client add --app MyApp --config-init b64

Successfully generated Client Device
====================================

Initialized Config: eyJob3N0bmFtZSI6ICJr....OUk1ZTV1V2toRucXRsaWxqUT0ifQ==
IP Lock:Enabled
Token Expires On:2021-10-19 15:31:31
App Access Expires on:Never
```

{% hint style="info" %}
設定を作成するその他のオプションは、[設定のドキュメント](/keeperpam/jp/secrets-manager/about/secrets-manager-configuration.md)をご参照ください
{% endhint %}

**初期化された設定:** Base64の文字列を**リポジトリ変数**にカットアンドペーストする必要があります。この例では、変数の名前は**KSM\_CONFIG**です。プライベートDocker Hubのユーザー名とパスワードも**リポジトリ変数**に追加されます。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2F2Jqbwboe8dtdV3wvzqRU%2Fimage.png?alt=media&#x26;token=4d2c4de3-6c59-41b7-93f0-3a5eb2e6a538" alt=""><figcaption></figcaption></figure>

次にリポジトリに追加する必要があるのが、`bitbucket-pipelines.yml`ファイルです。

```
image: atlassian/default-image:2

pipelines:
  default:
    - step:
        name:'Build Custom Tomcat Server'
        script:
          - pipe: keepersecuirty/keeper-secrets-manager-pipe:<tag>
            variables:
              KSM_CONFIG: "${KSM_CONFIG}"
              SECRETS: |
                3GGclNXOoU0DwZwdn6iZmg/file/server.xml > file:server.xml
                3GGclNXOoU0DwZwdn6iZmg/file/localhost-rsa.jks > file:localhost-rsa.jks
              REMOVE_FILES:"False"
              CLEANUP_FILE: "ksm_cleanup.sh"
          - VERSION="1.$BITBUCKET_BUILD_NUMBER"
          - IMAGE="$DOCKERHUB_USERNAME/$BITBUCKET_REPO_SLUG"
          - docker login --username "$DOCKERHUB_USERNAME" --password "${DOCKERHUB_PASSWORD}"
          - docker image build -t ${IMAGE}:${VERSION} .
          - docker image tag ${IMAGE}:${VERSION} ${IMAGE}:latest
          - docker image push ${IMAGE}
          - git tag -a "${VERSION}" -m "Tagging for release ${VERSION}"
          - git push origin ${VERSION}
          - ./ksm_cleanup.sh
        services:
          - docker
```

上記のファイルは、DockerイメージをビルドしてDocker Hubアカウントにプッシュするために使用します。最初の手順では、Keeper Secrets Managerのパイプを使用して2つのファイルを取得し、作業ディレクトリに配置します。

パイプの終了後に削除したくないため、`REMOVE_FILES`変数は**False**に設定されています。

`CLEANUP_FILE`変数は、**ksm\_cleanup.sh**に設定され、完了時に2つのファイルを削除するスクリプトが作成されます。

Dockerfileをビルドすると、イメージ内の適切な場所に2つのファイルが追加されます。完了すると、イメージがDocker Hubアカウントにプッシュされます。

最後の部分では、`CLEANUP_FILE`変数によって設定されたksm\_cleanup.shスクリプトが実行されます。これにより、作成した2つのファイルが確実に削除されます。BitBucketのパイプラインは完了時に作業領域を削除しますが、これによりファイルは確実に削除されます。

### 例2 - Keeper Secrets Managerのパイプを他のパイプと併用。

この例では、別のパイプの変数として使用されているシークレットを取得します。別のパイプは、ローカルディレクトリをS3バケットにコピーするAWS S3 Deployパイプです。

Keeperボルトで、AWSクレデンシャルとS3バケットに関する情報を含む記録が作成されました。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FpdmfmCJjDRg0RjEFOT66%2Fimage.png?alt=media&#x26;token=ee0df031-d3e5-4761-9770-85302f7baf7a" alt=""><figcaption></figcaption></figure>

最初にBitBucketにリポジトリを作成し、Keeper Secrets Managerのパイプ設定を**リポジトリ変数**に格納します。この設定は、Keeper Commanderを使用し、Base64で初期化して作成できます。

```
My Vault> sm client add --app MyApp --config-init b64

Successfully generated Client Device
====================================

Initialized Config: eyJob3N0bmFtZSI6ICJr....OUk1ZTV1V2toRucXRsaWxqUT0ifQ==
IP Lock:Enabled
Token Expires On:2021-10-19 15:31:31
App Access Expires on:Never
```

{% hint style="info" %}
設定を作成するその他のオプションは、[設定のドキュメント](/keeperpam/jp/secrets-manager/about/secrets-manager-configuration.md)をご参照ください
{% endhint %}

**初期化された設定: Base64の文字列をリポジトリ変数**にカットアンドペーストする必要があります。この例では、変数の名前は**KSM\_CONFIG**です。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2F2h7UN49W89HfEvOODNCO%2Fimage.png?alt=media&#x26;token=cecbac47-30de-4c72-89cf-61809b91c8a8" alt=""><figcaption></figcaption></figure>

次にリポジトリに追加する必要があるのが、`bitbucket-pipelines.yml`ファイルです。

```
image: atlassian/default-image:2

pipelines:
  default:
    - step:
        name:'Copy Image To S3'
        script:
          - pipe: keepersecurity/keeper-secrets-manager-pipe:<tag>
            variables:
              KSM_CONFIG: "${KSM_CONFIG}"
              SECRETS: |
                IumwT1QYRr8TTCtY8rqzhw/custom_field/AWS_ACCESS_KEY_ID > AWS_ACCESS_KEY_ID
                IumwT1QYRr8TTCtY8rqzhw/custom_field/AWS_SECRET_ACCESS_KEY > AWS_SECRET_ACCESS_KEY
                IumwT1QYRr8TTCtY8rqzhw/custom_field/AWS_DEFAULT_REGION > AWS_DEFAULT_REGION
                IumwT1QYRr8TTCtY8rqzhw/custom_field/S3_BUCKET > S3_BUCKET
                V8lFbio0Bs0LuvaSD5DDHA/file/IMG_0036.png > file:to_s3/my_image.png
              SECRETS_FILE: "secrets.env"
              SECRETS_FILE_TYPE: "export"
          - source ./secrets.env
          - pipe: atlassian/aws-s3-deploy:1.1.0
            variables:
              AWS_ACCESS_KEY_ID: "${AWS_ACCESS_KEY_ID}"
              AWS_SECRET_ACCESS_KEY: "${AWS_SECRET_ACCESS_KEY}"
              AWS_DEFAULT_REGION: "${AWS_DEFAULT_REGION}"
              S3_BUCKET: "${S3_BUCKET}"
              LOCAL_PATH: "to_s3"
```

`bitbucket-pipelines.yml`には、AWSクレデンシャルを記録から取得して環境変数に格納する、Keeper Secrets Managerパイプが設定されています。また、PNG画像を取得し、**to\_s3**というディレクトリに書き込みます。このパイプによってsecrets.envというシークレットファイルが作成されます。

`SECRETS_FILE_TYPE`は**export**であり、内容を読み込んで、シークレット値を環境変数に格納できます。

次に、secretsファイルが読み込まれます。これにより、他のパイプやアプリケーションが環境変数としてシークレットにアクセスできるようになります。

最後の手順では、**aws-s3-deploy**パイプを使用して、イメージをS3バケットにコピーします。aws-s3-deployパイプの変数は、Keeper Secrets Managerパイプのシークレットファイルに指定された環境変数を使用して設定されます。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.keeper.io/keeperpam/jp/secrets-manager/integrations/bitbucket-plugin.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
