Dockerイメージ

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

Dockerでのシークレット管理

機能

  • KeeperボルトのシークレットのクレデンシャルをDockerイメージに渡します

  • ビルド引数を指定し、Keeperボルトのシークレットのクレデンシャルを使用して、Dockerイメージをビルドします

  • KeeperボルトからDockerコンテナにファイルをコピーします

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

前提条件

このページでは、Secrets ManagerとDockerイメージのビルドアクションとの連携について説明します。 この連携を利用するための必要条件は以下のとおりです。

概説

Secrets Manager CLIは、実行時にDockerイメージからシークレットを取得するために使用することも、Dockerイメージに組み込んで使用することもできます。このドキュメントでは、いくつかのユースケースについて説明します。

例 1: BuildKitを使用したシークレットを含むイメージのビルド

Keeperボルトのシークレットは、Docker BuildKitを使用してDockerコンテナに埋め込めます。Docker 18.09以降のイメージのビルドでは、マウントされたファイルシステムを使用して、シークレットを渡す機能がサポートされています。この機能を示す簡単な例として、Keeper Secrets Managerから取得したユーザー名とパスワードを使用して、マウント先イメージにユーザーアカウントを作成することにしましょう。

手順 1: 必要なシークレットにKeeper表記法を使用して環境変数を設定します。表記法の詳細については、こちらをご参照ください。

手順 2: ksm execコマンドを使用すると、2つのシークレット (ログインとパスワード) でDockerビルドが作成されます。 --secretパラメータは、Keeperシークレットで置き換えられた環境変数から値を取得します。

手順 3: dockerfileでは、useraddを使用してLinuxユーザーアカウントを作成し、chpasswdでパスワードを設定します。このDockerファイルは以下のとおりです。

この例では、各シークレットはファイルとしてマウントされます。「dst」値でシークレットを一時的に格納したい場所を指定します。RUNコマンドが終了すると、一時ファイルは削除され、アンマウントされます。ファイル名を引数として渡すか、この例では、cat $(/path/to/secret)を使用してファイルの内容を変数に読み込みます。

例 2: ビルド引数を使用したシークレットを含むイメージのビルド

例1と同様に、--build-argを使用して、シークレットを渡すことができます。この例では、Dockerのビルドプロセスでシークレットを使用する機能も示します。

手順 1: 必要なシークレットにKeeper表記法を使用して、環境変数を設定します。表記法の詳細は、こちらをご参照ください。

手順 2: ksm execコマンドを使用すると、2つのシークレット (ログインとパスワード) でDockerビルドが作成されます。 --inlineフラグは、シークレットの置換を処理します。以下に例を示します。

手順 3: dockerfileでは、useraddを使用してLinuxユーザーアカウントを作成し、chpasswdでパスワードを設定します。このDockerファイルは以下のとおりです。

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でパスワードを設定します。このDockerファイルは以下のとおりです。

printenvコマンドでシークレットが標準出力に送信されないようにするには、--nullオプションを使用して改行を削除します。

例 4: ボルトからDockerイメージにファイルをコピー

この実際の例では、SSL証明書とパスフレーズをKeeperボルトからTomcatコンテナにコピーします。

デフォルトでは、公式のTomcat dockerには、SSLが有効になっていないデフォルトのサーバー設定が含まれています。server.xmlをインストールし、キーストアファイルをコピーして、SSLを有効にするカスタムイメージをビルドすることになります。server.xmlファイルには、キーストアファイルのシークレットのパスフレーズも含まれています。

手順1:Keeper Secretの記録を作成

以下に示すように、Keeperボルトでserver.xmllocalhost-rsa.jksの2つのファイル添付を含むシークレットの記録を作成します。

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

情報ダイアログに表示された、dockerfileで使用するUID記録をメモします。UID記録(Record UID)をクリックして、クリップボードにコピーします。

UID記録をコピー

手順 2: dockerfileを作成

以下のdockerfileの例では、server.xmlファイルとkeystoreファイルをボルトからTomcatフォルダにコピーします。

このユースケースでは、ksmはビルド後に不要になるため、削除します。

手順 3: dockerビルドを実行するシェルスクリプトを作成

docker buildを実行するには、以下のスクリプトでSecrets Managerのデバイス設定と、シークレットファイルを含むUID記録を渡します。

Dockerイメージがビルドされると、Keeperボルトが管理するSSL、キーストアファイル、パスフレーズが完全に設定されます。

Docker Composeとの連携

Keeper Secrets Managerは、KSM Writer Dockerイメージを使用したDocker Composeとの直接連携をサポートしています。

KSM Writer Dockerイメージの詳細は、こちらをご参照ください。

Dockerイメージの例に貢献

このページに貢献できる素晴らしい例をお持ちであれば、Slackでメッセージを送信するか、またはメールでお知らせください[email protected]

最終更新