Dockerイメージ

コンテナ化された環境での環境変数置換の使用

Dockerシークレット管理

機能

  • Keeperボルトのシークレット認証情報をDockerイメージへ渡す

  • ビルド引数を使用し、Keeperボルトのシークレット認証情報でDockerイメージをビルド

  • KeeperボルトからDockerコンテナへファイルをコピー

Keeperシークレットマネージャーの機能一覧については、概要をご参照ください。

前提条件

本ページでは、シークレットマネージャーとDockerイメージのビルドアクションとの連携について取り扱います。本連携を利用するには、以下が必要です。

概説

シークレットマネージャー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.xmllocalhost-rsa.jks の2つのファイル添付を含むシークレットレコードを作成します。

シークレットファイルを添付したレコードの作成

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

レコード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までメールでお送りください。

最終更新