Harness CIプラグイン
Harness CIにおけるKeeperシークレットマネージャー連携による動的シークレット取得

機能
Harness CIパイプライン内でKeeperボルトからシークレットを取得
Harness CIパイプラインのビルド引数としてシークレット認証情報を設定
Keeperボルトからセキュアファイルをコピー
Keeperシークレットマネージャーの機能一覧は 概要 をご参照ください。
要件
Keeperシークレットマネージャーの要件
KSMアクセス
Keeperシークレットマネージャーの有効なサブスクリプションが必要です (クイックスタートガイド)
アドオン有効化
Keeperアカウントでシークレットマネージャーアドオンが有効になっていること
ロール所属
シークレットマネージャー適用ポリシーが有効なロールのメンバーであること
KSMアプリケーション
シークレットが共有されたKeeperシークレットマネージャーアプリケーションが構成済みであること
KSM構成
初期化済みの構成 (Base64トークン、ワンタイムアクセストークン、またはJSON構成ファイルのいずれか)
Harness CIの要件
有効なHarnessアカウントがあること
Harness CIのパイプラインが設定されていること
Harness CIのシークレット管理を理解していること
Keeperプラグインがインストールされていること
構成の種類
プラグインは3つの認証方式をサポートします。セキュリティ要件に合わせて選択します。
ワンタイムアクセストークン (OTAT)
テキストシークレット
使い捨て、最高のセキュリティ
Base64トークン
テキストシークレット
再利用可、標準的なセキュリティ
JSON構成ファイル
ファイルシークレット
完全な構成、再利用可
セットアップ手順
手順1. Keeperボルトの構成
Keeperボルトに共有フォルダを作成します。
共有フォルダ内にシークレットを含むレコードを作成します。
シークレットマネージャーのアプリケーションを作成します。
希望する認証情報の種類を生成します。
ワンタイムアクセストークン (OTAT)
Base64トークンまたはJSON構成
手順2. Harness CIのシークレット作成
次の画面に移動します。[Project] → [Project Setup] → [Secrets] → [+ New Secret]
オプションA: ワンタイムアクセストークン (テキストシークレット)
[+ New Secret → Text] をクリックします。
次のとおり設定します。
[Secret Name]:
keeper_otat_secret[Secret Value]: トークンを貼り付けます (例:
US:xxxxx...)[Scope]: [Project] (推奨)
[Save] をクリックします。
ワンタイムアクセストークンは1回限りの利用です。パイプライン実行ごとに新しいトークンを生成してください。
オプションB: Base64トークン (テキストシークレット)
[+ New Secret → Text] をクリックします。
次のとおり設定します。
[Secret Name]:
keeper_base64_secret[Secret Value]: Base64エンコードされたトークンを貼り付けます。
[Scope]: [Project] (推奨)
[Save] をクリックします。
Base64文字列に改行や空白が入らないようにしてください。
オプションC:JSON構成ファイル (ファイルシークレット)
[+ New Secret] → [File] をクリックします。
次のとおり設定します。
[Secret Name]:
keeper_ksm_config_file[Upload File]: KSMのJSON構成ファイルを選択します。
[Scope]: [Project] (推奨)
[Save] をクリックします。
想定されるJSONの構造は次のとおりです。
手順3. パイプラインでの参照
シークレットは次の構文で参照します。
クイックスタート
パイプラインの例
RECORD_UID はKeeperボルトの実際のレコードUIDに置き換えてください。
パイプライン実行が完了すると、シークレットを出力する手順のログで内容を確認できます。

シークレットの設定
Keeper表記法の構文
secrets 入力は、取得するシークレットを指定するためにKeeper表記法を用います。
表記の形式
record_uid
Keeperレコードの識別子
selector
データの種類です。field、custom_field、file のいずれか
field_name
取得するフィールドまたはファイルの名前
destination_name
/harness/secrets/ 内の出力ファイル名
セレクターの種類
field
標準のレコードフィールド (ログイン、パスワードなど)
/harness/secrets/<destination>
custom_field
レコードに定義されたカスタムフィールド
/harness/secrets/<destination>
file
ファイル添付
/harness/secrets/<destination>
例
配列やキーと値のペアなど複雑な値については、Keeper表記法の述語 (Predicates) のドキュメントをご参照ください。
ローカルDockerランナーの構成
Harness Cloudではなく runtime: type: docker (ローカルランナー) を使う場合、ローカル上のパイプライン間でデータを共有するには共有パスを設定する必要があります。
Harness Cloudでは /harness が自動的に共有されます。ローカルDockerでは sharedPaths を明示的に設定する必要があります。
セキュリティのベストプラクティス
ワンタイムアクセストークンの利用
可能な限りパイプライン実行ごとに新しいトークンを生成します
シークレットファイルの削除
パイプラインの手順で利用後にシークレットファイルを削除します
適切なスコープ
より広いアクセスが不要な限りプロジェクトレベルのスコープを使います
アクセスの制限
パイプラインを編集できるユーザーを制限します (編集者はシークレットを読み取れる可能性があります)
シークレットのマスキング (ログからの隠蔽)
Harness CIはコンソールに出力されたシークレットをログ上で自動的にマスキングします。ただし次の点に注意してください。
隠されるのは出力ログのみです
パイプライン編集者がシークレットを取り出せる可能性があります
常に最小権限の原則に従ってください
トラブルシューティング
よくある問題
KSM config is required
シークレットが見つからない、または式が誤っている
シークレット名が完全一致しているか確認します (大文字・小文字を区別)
Missing required fields
JSON構成が不完全
JSONに hostname、clientId、privateKey が含まれることを確認します
式が解決されない
シークレットのスコープが一致しない
シークレットのスコープがパイプラインのスコープと一致しているか確認します
トークンはすでに使用済み
ワンタイムトークンは1回限り
実行ごとに新しいOTATを生成します
事象: クラウドでは動くがローカルで失敗する
症状: Fetch_Keeper_Secrets は成功しますが、次の手順で /harness/secrets/ の読み取りに失敗します
原因と対処
シークレット名の不一致
プラグインは
> USERNAMEおよび> PASSWORDに書き込みますRun手順では
/harness/secrets/USERNAMEおよび/harness/secrets/PASSWORDを参照する必要があります
ワークスペースが共有されていない
ステージのspecに
sharedPaths: /harnessを追加します (ローカルDockerランナーの構成を参照)
デバッグ: プラグイン出力の確認
プラグインの直後にデバッグ用の手順を追加します。
ファイルが表示されない場合は次を確認してください。
プラグインの設定 (シークレット名)
ワークスペースの共有 (ローカルランナー向け)
ksm_configの設定 (PLUGIN_KSM_CONFIGへのマッピング)
最終更新

