私たちは皆、コンピュータシステムを扱うときに機密情報を扱います。システム管理者はSSHキーを移動し、ウェブ開発者はAPIトークンについて心配する必要があります。機密情報の問題は、機密であるということです。 、それが何らかの形で悪意のある人の手に渡った場合、セキュリティ災害を引き起こす可能性があることを意味します。コンテナもこの問題の例外ではありません。ユーザーは、機密情報を安全に保つと同時に、コンテナ内の機密情報を利用する必要があります。
[読むこともお楽しみいただけます:Podmanを使用したルートレスコンテナ]
なぜ秘密なのか
誰かがコンテナでデータベースを実行する必要があり、データベースのクレデンシャルをコンテナに挿入する必要がある場合はどうなりますか?これは複数の方法で行うことができます。コンテナの実行時にファイルを作成し、そこにクレデンシャルを保存するだけで済みます。ただし、これは危険です。コンテナがイメージにエクスポートされると、クレデンシャルもエクスポートされます。イメージを制御できる人は誰でもデータベースにアクセスできます。もう1つのオプションは、CLIを使用してクレデンシャルを渡すことですが、毎回データを入力する必要があり、面倒な場合があります。
機密情報を一元管理する方法があった場合はどうなりますか?
新しいコマンド、podman secret は、機密情報を使いやすく安全な方法で管理するサブコマンドとオプションのセットです。これにより、ユーザーはコンテナ内の機密コンテンツを簡単に使用できますが、画像レジストリなど、コンテナ外のどこかに行き着くのを防ぐことができます。 podman secretのサブコマンドのセット全体を実装しました :create 、rm 、ls 、およびinspect 、シークレットを作成および操作するため、および--secret コンテナにシークレットを挿入するためのフラグ。
どのように使用されますか?
podman secret createの場合 が実行されると、Podmanはデータを含むファイルが保存されることを期待します。
$ echo "secretdata" > secretfile
$ podman secret create secretname secretfile
e17465c9772b38f336fc4cbac
podman secret inspect コマンドは保存されたデータを表示せず、シークレットのメタデータのみを表示します。
$ podman secret inspect secretname
[
{
"ID": "e17465c9772b38f336fc4cbac",
"CreatedAt": "2021-02-12T09:05:49.661504248-05:00",
"UpdatedAt": "2021-02-12T09:05:49.661504248-05:00",
"Spec": {
"Name": "secretname",
"Driver": {
"Name": "file",
"Options": null
}
}
}
] もちろん、秘密をリストして削除することもできます。
$ podman secret ls
ID NAME DRIVER CREATED UPDATED
e17465c9772b38f336fc4cbac secretname file 1 second ago 1 second ago
$ podman secret rm secretname
e17465c9772b38f336fc4cbac
シークレットを使用してシークレットデータにアクセスするために、--secretを使用してコンテナを作成または実行できます。 国旗。コンテナ内では、/run/secrets/secretnameにあるファイル内のシークレットデータにアクセスできます。 。 --secretを使用できます コンテナに多数のシークレットを追加するには、複数回フラグを立てます。
$ podman run --secret secretname --name foo alpine cat /run/secrets/secretname
secretdata
シークレットは画像にコミットされたり、podman commitでエクスポートされたりすることはありません またはpodman export 指図。これにより、機密情報が誤って公開レジストリにプッシュされたり、間違った人に渡されたりするのを防ぐことができます。
$ podman commit foo secrimg
Getting image source signatures
Copying blob 1119ff37d4a9 skipped: already exists
Copying blob 3dd965b4468a done
Copying config 263fcafb79 done
Writing manifest to image destination
Storing signatures
263fcafb790dfdf6a7312953d3600ff9d990a664ec341ded7d0a6dfa1e71bb5d
$ podman run secrimg cat /run/secrets/mysecret
cat: can't open '/run/secrets/mysecret': No such file or directory どのように機能しますか?
ユーザーが--secretを使用する場合 フラグ、Podmanはシークレットデータを取得してtmpfsに保存します 。次に、ファイルをコンテナの/run/secrets/secretnameにマウントします。 。そこから、データベースキーであろうとTLS証明書であろうと、シークレットは通常どおりコンテナ内で使用できます。
シークレットは、実行の準備ができたときに、シークレット作成者のマシンまたはコンテナ内にのみ存在します。シークレットは、しないように特別に設計されています 画像に存在する:podman commit シークレットを画像にコミットしたり、podman exportを実行したりすることはありません。 。誰かがシークレットのあるコンテナからイメージを作成する場合は、そのイメージからコンテナを実行します。ファイルは/run/secret/mysecretにあります。 存在しないでしょう。これにより、秘密のデータが誤ってレジストリにプッシュされるのを防ぎ、機密性の高い危険な情報が存在してはならない場所に存在するのを防ぎます。
今後の作業
今のところ、このソリューションは秘密を管理する役割を果たします。ただし、現時点で機密情報を保存するために実装されている唯一のドライバーはファイルドライバーです。つまり、データはコンテナーホストによって制御される暗号化されていないファイルでディスクに保存されます。暗号化の実装や他のドライバーの使用など、さらなる改善を計画しています。また、秘密の環境変数をサポートしたいと思います。これは、コンテナー内に設定されるが、イメージには記録されない環境変数です。これらのタスクへのコミュニティの関与はありがたいことに受け入れられます。
[コンテナを使い始めますか?この無料コースをチェックしてください。コンテナ化されたアプリケーションのデプロイ:技術的な概要。 ]
かっこいい。欲しい。
PodmanシークレットはPodman3.1.0で利用できます。試してみたい場合は、次のインストール手順に従ってPodmanを入手できます。すでにPodmanをお持ちの場合は、Podman3.1.0にアップグレードすることでシークレット機能を利用できます。ご不明な点やフィードバックがございましたら、Podmanチームまでお気軽にお問い合わせください。ポッドマンの開発者は、フリーノードチャネル#podmanにたむろすることがよくあります。 podmanメーリングリストを使用してメールでお問い合わせください。毎月のコミュニティミーティングもあります。気軽に立ち寄って、そこで挨拶してください。