Docker Writerイメージ

シークレットを取得するための汎用Dockerイメージ

概要

KSM用のDocker Writerイメージは、シークレットファイルをダウンロードし、シークレットを含むファイルを生成できるイメージです。

以下のコマンドでイメージを取得できます。

$ docker pull keeper/keeper-secrets-manager-writer

実行時は、パラメータを環境変数で渡します。

$ docker run \
    -v $PWD:/wd --workdir /wd \
    -e "KSM_CONFIG=BASE64 CONFIG" \
    -e "SECRETS=JfXpSQ2nZG6lkdl1rxB0dg/file/example.crt > file:example.crt"
    keeper/keeper-secrets-manager-writer

このライターイメージは、ボルトからファイルをコピーし、シークレットを含むファイルを作成するために使います。ディスクへの書き込みは漏洩リスクを伴うため、代替手段としてkeeper/keeper-secrets-manager-cliイメージの exec コマンドの利用を検討してください。

パラメータ

パラメータは環境変数としてコンテナに渡します。

パラメータ
説明

KSM_CONFIG

Base64でエンコードされた設定ファイル

SECRETS

Keeper表記法と代入先の改行区切りのリスト

SECRETS_FILE

ファイル以外のシークレットを書き込むファイル名

SECRETS_FILE_TYPE

シークレットファイルの形式。有効な形式はexport、setenv、set、JSON。デフォルトはJSON

CLEANUP_FILE

設定時、作成ファイルを削除用シェルスクリプトに追加。実行で一括削除可能

シークレットリスト

SECRETS は、Keeper表記法と代入先のリストです。値は改行で区切られています。以下に例を示します。

各行は「Keeper表記法 > 代入先」です。代入先には、環境変数/JSONキーまたはファイルのパスと名前を指定できます。ファイルの場合、パスの先頭に file: を付けます。文字列エンコーディングが不明なため、バイナリデータを環境変数に格納しないことをお勧めします。

シークレットファイルの形式

シークレットファイルには、環境変数 SECRETS の値が格納されます。ファイル形式は SECRETS_FILE_TYPE の値に基づいています。タイプには以下の値を指定できます。

  • json: JSON形式で格納される値

  • export: BASHシェルで一般的に使用されるエクスポートコマンドとして格納される値

  • setenv: Cシェルで一般的に使用されるsetenvコマンドとして格納される値

  • set: Cシェルで一般的に使用されるsetコマンドとして格納される値

シェルに関連するタイプを読み込んで、シークレットを環境変数に格納できます。

KSM用のDocker Writerイメージは、多くのアプリケーションで使用できます。いくつかの例を紹介します。

Kubernetes

ライターイメージは、Initコンテナで使用するのが最適です。

このコンテナでは、ライターイメージでファイルを保存し、メインコンテナがアクセスできるシークレットファイルを作成します。ボリュームをマウントしてファイルを書き込み、メインコンテナに同じボリュームをマウントします。PodのemptyDirが適しています。

Docker Compose

mainサービスで depends_on オプションを使用すると、KSM用のDocker Writerイメージを初期化サービスで使用できます。以下の例では、Docker Writerがボルトからシークレットを取得し、ボリュームマウントでmainイメージと共有します。

通常、サービスは同時に開始されますが、depends_on オプションで開始順序を制御できます。上記では、mainサービスがinitサービスに依存します。

initサービスが起動し、ファイルを取得してkeys-volumeに保存した後、終了します。service_completed_successfully 条件により、initサービスが正常終了してからmainサービスが開始されます。mainサービスは keys-volume をマウントし、格納された鍵を使用します。

Dockerコマンドライン

ライターイメージは docker run でコマンドラインから実行できます。

SECRETS に複数のシークレットが設定されている場合、改行文字(\n)を表記するのは困難です。解決策は、--env,-e 値を $" で囲むことです。以下に例を示します。

file:my.pngと以降のレコードUIDの間に「\n」があります。値全体を$''で囲まない場合、my.pngファイル名に改行コードと以降のレコードUIDが含まれてしまいます。

最終更新