Bitbucketプラグイン
Keeper Secrets ManagerのBitbucketへの統合によるシークレットの動的な取得

機能
BitBucketパイプライン内にKeeperボルトからシークレットを取り込みます
BitBucketパイプラインのスクリプトで、ビルドの引数または環境変数としてシークレットのクレデンシャルを設定します
Keeperボルトからセキュリティで保護されたファイルをコピーします
前提条件
このページでは、Secrets ManagerとBitBucketとの連携について説明します。 この連携を利用するための必要条件は以下のとおりです。
Keeper Secrets Managerへのアクセス(詳細は、クイックスタートガイドをご参照ください)
KeeperアカウントのSecrets Managerアドオンの有効化
Secrets Manager強制ポリシーが有効化されたロールを割り当てられたメンバーシップ
シークレットを共有するKeeper Secrets Managerアプリケーション
アプリケーションの作成手順については、クイックスタートガイドをご参照ください
Keeper Secrets Manager設定の初期化
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パイプで設定を変数として使用できるようになります。

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>
変数
必須
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表記法のリストと値の保存場所が格納されます。シークレットは、環境変数またはファイルに格納できます。
変数のデフォルトの格納先は環境変数です。環境変数名の前にプレフィックス**env:**を追加できますが、必須ではありません。
シークレットを環境変数に保存
以下の例では、ログインシークレットを取得して環境変数に格納します。どちらの行も同じですが、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:格納先をご使用ください。
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
初期化された設定: Base64の文字列をリポジトリ変数にカットアンドペーストする必要があります。この例では、変数の名前はKSM_CONFIGです。プライベートDocker Hubのユーザー名とパスワードもリポジトリ変数に追加されます。

次にリポジトリに追加する必要があるのが、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バケットに関する情報を含む記録が作成されました。

最初に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
初期化された設定: Base64の文字列をリポジトリ変数にカットアンドペーストする必要があります。この例では、変数の名前はKSM_CONFIGです。

次にリポジトリに追加する必要があるのが、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パイプのシークレットファイルに指定された環境変数を使用して設定されます。
最終更新