Dockerイメージ
コンテナ化された環境での環境変数置換の使用
Dockerシークレット管理

機能
Keeperボルトのシークレット認証情報をDockerイメージへ渡す
ビルド引数を使用し、Keeperボルトのシークレット認証情報でDockerイメージをビルド
KeeperボルトからDockerコンテナへファイルをコピー
Keeperシークレットマネージャーの機能一覧については、概要をご参照ください。
前提条件
本ページでは、シークレットマネージャーとDockerイメージのビルドアクションとの連携について取り扱います。本連携を利用するには、以下が必要です。
Keeperシークレットマネージャーへのアクセス(クイックスタートガイドをご参照ください)
Keeperのサブスクリプションでシークレットマネージャーアドオンが有効になっていること
シークレットマネージャーポリシーが有効なロールに所属していること
シークレットが共有されているKeeperシークレットマネージャーアプリケーション
アプリケーションの作成手順については、クイックスタートガイドをご参照ください
KSM CLIの設定手順については、こちらをご参照ください
概説
シークレットマネージャーCLIは、Dockerイメージの実行時やビルド時にシークレットを利用できます。本ページでは、いくつかのユースケースを取り扱います。
例 1: BuildKitを使用したシークレットを含むイメージのビルド
Keeperボルトのシークレットは、Docker BuildKitを使ってDockerコンテナに組み込めます。Docker 18.09以降では、マウントされたファイルシステム経由でシークレットを渡せます。ここでは、Keeperシークレットマネージャーから取得したユーザー名とパスワードで、ビルド先イメージにユーザーアカウントを作成する簡単な例を示します。
手順 1: 必要なシークレットにKeeper表記法を使用して環境変数を設定します。表記法の例については、こちらをご参照ください。
手順 2: ksm exec コマンドで、2つのシークレット(ログインとパスワード)を用いたDockerビルドを実行します。--secret パラメータは、Keeperシークレットで置き換えられた環境変数から値を取得します。
手順 3: Dockerfileでは、useradd を使用してLinuxユーザーアカウントを作成し、chpasswd でパスワードを設定します。Dockerfileは以下のとおりです。
この例では、各シークレットはファイルとしてマウントされます。dst値でシークレットを一時的に格納したい場所を指定します。RUNコマンドが終了すると、一時ファイルは削除され、アンマウントされます。ファイル名を引数として渡すか、この例では cat $(/path/to/secret) を使用してファイルの内容を変数に読み込みます。
例 2: ビルド引数を使用したシークレットを含むイメージのビルド
例1と同様に、--build-arg を使用してシークレットを渡すことができます。この例では、Dockerのビルドプロセスでシークレットを使用する機能も示します。
手順 1: 必要なシークレットにKeeper表記法を使用して環境変数を設定します。表記法の例については、こちらをご参照ください。
手順 2: ksm exec コマンドで、2つのシークレット(ログインとパスワード)を用いたDockerビルドを実行します。--inline フラグでシークレットの置換を行います。以下に例を示します。
手順 3: Dockerfileでは、useradd を使用してLinuxユーザーアカウントを作成し、chpasswd でパスワードを設定します。Dockerfileは以下のとおりです。
printenv コマンドでシークレットが標準出力に送信されないようにするには、--null オプションを使用して改行を削除します。
例 3: docker-composeを使用したシークレットを含むイメージのビルド
この例では、docker-composeを使用してイメージをビルドします。docker-composeは環境変数からビルド引数を読み込めません。表記をシークレット値に置き換えるには、コマンドラインでビルド引数を設定する必要があります。表記をコマンドラインで使用するため、--inline 置換フラグを設定する必要があります。
手順 1: 単純な docker-compose.yaml ファイルを作成します。
手順 2: ksm exec コマンドで、2つのシークレット(ログインとパスワード)を用いたDockerビルドを実行します。--inline フラグでシークレットの置換を行います。以下に例を示します。
手順 3: Dockerfileでは、useradd を使用してLinuxユーザーアカウントを作成し、chpasswd でパスワードを設定します。Dockerfileは以下のとおりです。
printenv コマンドでシークレットが標準出力に送信されないようにするには、--null オプションを使用して改行を削除します。
例 4: ボルトからDockerイメージにファイルをコピー
この実際の例では、SSL証明書とパスフレーズをKeeperボルトからTomcatコンテナにコピーします。
デフォルトでは、公式のTomcat dockerには、SSLが有効になっていないデフォルトのサーバー設定が含まれています。server.xmlをインストールし、キーストアファイルをコピーして、SSLを有効にするカスタムイメージをビルドします。server.xmlファイルには、キーストアファイルのシークレットのパスフレーズも含まれています。
手順 1: Keeperボルトにシークレットレコードを作成
Keeperボルトで、server.xml と localhost-rsa.jks の2つのファイル添付を含むシークレットレコードを作成します。

情報ダイアログに表示されるレコードUIDを控え、Dockerfileで使用します。レコードUIDをクリックしてクリップボードにコピーできます。

手順 2: Dockerfileを作成
以下のDockerfileの例では、server.xmlファイルとkeystoreファイルをボルトからTomcatフォルダにコピーします。
この事例では、ksm はビルド後に不要になるため、削除します。
手順 3: dockerビルドを実行するシェルスクリプトを作成
docker buildを実行するには、以下のスクリプトでシークレットマネージャーのデバイス設定と、シークレットファイルを含むレコードUIDを渡します。
Dockerイメージがビルドされると、Keeperボルトが管理するSSL、キーストアファイル、パスフレーズが完全に設定されます。
Docker Composeとの連携
Keeperシークレットマネージャーは、KSM Writer Dockerイメージを使ったDocker Composeとの直接連携に対応しています。
KSM Writer Dockerイメージの詳細は、こちらをご参照ください。
Dockerイメージの例に貢献
良い例がございましたら、Slackでご連絡いただくか、sm@keepersecurity.comまでメールでお送りください。
最終更新

