Bitbucketプラグイン

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

機能

  • BitBucketパイプライン内にKeeperボルトからシークレットを取り込みます

  • BitBucketパイプラインのスクリプトで、ビルドの引数または環境変数としてシークレットのクレデンシャルを設定します

  • Keeperボルトからセキュリティで保護されたファイルをコピーします

Keeper Secrets Manager機能の完全なリストについては、概要をご参照ください。

前提条件

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

設定

設定を取得

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>

パイプでは、バージョンのgitのタグを選択する必要があります。README.mdのYAML定義では、常に最新のタグが利用できます。

変数

必須

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:**を追加できますが、必須ではありません。

環境変数名は、有効なUnix環境変数名でなければなりません

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

以下の例では、ログインシークレットを取得して環境変数に格納します。どちらの行も同じですが、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_TYPEexportであり、内容を読み込んで、シークレット値を環境変数に格納できます。

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

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

最終更新