GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

信頼を高めるためにDockerイメージに署名する方法

ほとんどのDockerイメージは、それらが主張しているものであるかどうかの検証なしで配布されます。画像にデジタル署名することで、画像の信頼性を高めることができます。これは、詐欺師ではなく、画像を公開したことをユーザーに証明します。

Dockerの署名システムは、コンテンツの信頼として知られています。 docker trustを通じて公開されます CLIコマンド。コンテンツトラストはキーセットを使用して、レジストリが将来の発行者の身元を確認できるようにします。署名された画像のユーザーは、期待されるソースからのものであると確信できます。

キーの生成

コンテンツトラストの使用を開始するには、キーペアが必要です。キーペアは、認証局によって発行されるか、DockerCLIによって生成されます。

docker trust key generate your-nameを実行します キーを作成します。パスフレーズを入力するように求められます。これは、キーを使用して画像に署名または確認するたびに提供する必要があります。続行するには、各プロンプトでEnterキーを押してください。

完了すると、2つのファイルが~/.docker/trustに生成されます :秘密鍵とそれに対応する公開鍵。 SSHキーと同様に、秘密キーを共有したり、紛失したりしないでください。マシン間を移動する必要がある場合は、docker trust key load my-key.pemを使用して、秘密鍵ファイルを別のDockerインストールにインポートできます。 。

レジストリへの公開鍵の追加

Docker Hubは、docker trustのすべての機能をサポートします 。プライベートDockerレジストリサーバーを使用している場合は、より複雑なセットアッププロセスが必要です。

レジストリサーバーは、組み込みの署名サポートを提供していません。イメージのプッシュとプルの署名検証を処理する別のDockerNotaryサービスが必要です。 Notaryには、サーバー、署名サービス、およびMySQLデータベースの3つのコンポーネントがあります。レジストリサーバーと同じURLにデプロイする必要があります。

DockerComposeファイルを使用してNotaryを起動して実行できます。

git clone https://github.com/theupdateframework/notary.git
docker-compose up -d

この基本的な展開は、自己署名TLS証明書を使用して実行されます。開発用のみを対象としています。認証局ファイルfixtures/root-ca.crtを信頼する必要があります クライアントが正常に接続できるようになる前に、リポジトリに保存されます。

sudo mkdir -p /usr/share/ca-certificates/extra
sudo cp fixtures/root-ca.crt /usr/share/ca-certificates/extra/notary.crt
sudo update-ca-certificates

上記のコマンドは、証明書ファイルをca-certificatesにコピーします ストレージの場所。 update-ca-certificates すべての証明書をリロードし、システムに公証人の権限を追加します。

本番環境でNotaryを実行する場合は、認証を設定して、許可されたユーザーのみが新しいキーを追加できるようにする必要があります。 NOTARY_AUTH docker-composeを使用してサービスを開始する場合は、環境変数を設定する必要があります 。これは、username:passwordでBase64でエンコードされたクレデンシャルを受け入れます フォーマット。公証人とやり取りするときに、これらを提供するように求められます。

export NOTARY_AUTH=$(echo "username" | base64):$(echo "password" | base64)
docker-compose up -d

これで、公開鍵をNotaryサーバーに追加する準備が整いました。キーはリポジトリごとに追加されます。これにより、画像を相互に分離し、委任されたサードパーティの寄稿者をサポートできます。秘密鍵を使用してコマンドを繰り返すようにさせることで、後で公開権限を持つ他の個人を追加できます。

docker trust signer add your-key-name registry.example.com/my-image

キーのパスフレーズを入力する必要があります。その後、レジストリサーバーで利用できるようになります。

画像に署名する

キーがレジストリに登録されると、画像への署名を開始できます。 docker trust signを使用します 指図。各画像が正しいレジストリURLでタグ付けされていることを確認してください。

docker trust sign registry.example.com/my-image:latest

このコマンドは、キーを使用して画像に署名し、レジストリに直接プッシュします。 docker pushを手動で実行する必要はありません その後。個々のイメージの信頼データを保護するために、リポジトリキーとパスフレーズを設定する必要があります。各プロンプトに従って、署名キーを設定します。

docker pushを使用した既存のワークフローがある場合 、docker trustの代わりにそのコマンドを選択できます 。上記の手順を実行してキーを作成し、Notaryに追加します。 DOCKER_CONTENT_TRUSTを設定します DockerCLIコマンドがContentTrustを検出し、それを自動的に適用するための環境変数。

export DOCKER_CONTENT_TRUST=1
docker push registry.example.com/my-image:latest

シェルの出力がdocker trust signと一致することがわかります を生成します。 Dockerは、より明示的なコマンドと同じアクションを実行します。

信頼できる画像の確認

DOCKER_CONTENT_TRUST プルした画像の検証に関しては、変数がより重要に再表示されます。 Dockerは、信頼データが含まれている場合でも、デフォルトではイメージの検証を試みません。コンテンツの信頼性の検証を有効にするには、シェルで環境変数を設定する必要があります。

export DOCKER_CONTENT_TRUST=1
docker pull registry.example.com/my-image:latest

変数が設定されると、すべてのイメージプルがレジストリのNotaryサーバーに対してチェックされます。 Notaryが信頼データを提供できない場合、画像は署名されていないものとして扱われ、プルは中止されます。これにより、本物の発行者になりすました悪意のある俳優によって発行された画像からあなたを保護します。

Docker Enterpriseユーザーは、オプションのデーモン設定を構成して、DockerEngineが既にホスト上にある信頼できないイメージを処理しないようにすることができます。これらはtarで届いた可能性があります 安全でないソースからのアーカイブ。

/etc/docker/daemon.jsonを編集します 次のキーを追加します:

{
    "content-trust": {
        "mode": "enforced"
    }
}

systemctl reload dockerを使用してDockerデーモン構成をリロードします 変更を適用します。

docker trust inspectを使用して、画像の信頼ステータスを検査できます。 。これにより、画像に関連付けられている署名が表示され、画像が署名されているかどうかを確認できます。

docker trust inspect registry.example.com/my-image:latest

署名する必要がなくなった画像を公開した場合は、docker trust revokeを使用してください 指図。これにより、イメージの信頼データが削除され、後続のすべてのDockerクライアント検証が失敗します。

docker trust revoke registry.example.com/my-image:latest
概要

Docker Content Trustは、Dockerエコシステムにデジタル署名を追加し、画像を使用する際の安全性を高めます。画像をDockerHubにプッシュすると、この機能を使用するために必要なものがすべて揃っています。 DOCKER_CONTENT_TRUSTを設定します 環境変数を使用し、通常どおりDockerコマンドを使用します。

自己ホスト型レジストリユーザーの場合、セットアップはより複雑ですが、信頼が重要な環境で努力する価値はあります。執筆時点では、Notaryはまだ公式の安定したリリースを取得しておらず、ドキュメントはGitHubリポジトリにあります。


Docker
  1. ホスト間でDockerイメージを移動する方法

  2. Dockerイメージを他の人と共有する方法

  3. Dockerイメージを変更する方法

  1. LinuxでDockerイメージを検索、プル、リスト、および削除する方法

  2. Dockerイメージ、コンテナー、およびDockerファイルを詳細に使用する方法

  3. LinuxサーバーにDockerを使用してNextcloudをインストールする方法

  1. Dockerイメージのコンテンツを分析および調査する方法

  2. GitHubでDockerイメージの自動ビルドを設定する方法

  3. Dockerイメージの概要