docker trust signer remove コマンドを使って署名者を削除する方法

DockerBeginner
オンラインで実践に進む

はじめに

この実験では、docker trust signer remove コマンドを使用して Docker リポジトリの署名者を管理する方法を学びます。まず、リポジトリの現在の署名者を調べて、既存の信頼関係を理解します。

調査の後、単一のリポジトリから署名者を削除する練習を行い、削除が成功したことを確認します。最後に、複数のリポジトリから同時に署名者を削除する方法を学び、変更を確認します。この実験では、Docker のコンテンツ信頼管理に関する実践的な経験を積むことができます。

リポジトリの現在の署名者を調査する

このステップでは、Docker リポジトリの現在の署名者を調べる方法を学びます。Docker Content Trust を使用すると、使用するすべてのイメージの整合性と公開者を検証することができます。コンテンツ信頼が有効になっている場合、Docker は pull するイメージが署名されていることを保証します。

まず、Docker Content Trust を有効にしましょう。これは、DOCKER_CONTENT_TRUST 環境変数を 1 に設定することで行えます。

export DOCKER_CONTENT_TRUST=1

コンテンツ信頼が有効になったので、イメージとやり取りするときに Docker は署名をチェックします。リポジトリの署名者を調べるには、docker trust inspect コマンドの後にリポジトリ名を指定します。

ubuntu リポジトリの署名者を調べてみましょう。

docker trust inspect ubuntu

以下のような出力が表示され、署名者とそのキーが示されるはずです。

No signatures for ubuntu

この出力は、ubuntu リポジトリに現在署名がないことを示しています。多くの公式イメージでは、明示的にコンテンツ信頼と署名が有効にされていない限り、このような結果が予想されます。

署名があることが知られている docker/trusttest のようなリポジトリを調べてみましょう。必要なメタデータを取得するために、まずイメージを pull する必要があります。

docker pull docker/trusttest

次に、docker/trusttest の署名者を調べます。

docker trust inspect docker/trusttest

署名者とそのキーが一覧表示される出力が表示され、このリポジトリが署名されていることが示されます。出力には、TargetsReleases の署名者に関する情報が表示されます。

Signers of docker/trusttest:

ROLE         KEYS
----         ----
Releases     0a0d52c692a8b3459f3422732222222222222222222222222222222222222222: docker/trusttest

Signatures for docker/trusttest:

SIGNER     KEYS
------     ----
Releases   0a0d52c692a8b3459f3422732222222222222222222222222222222222222222: docker/trusttest

この出力は、docker/trusttest リポジトリが署名されていることを確認し、署名者に関連付けられたキーを一覧表示しています。

単一のリポジトリから署名者を削除する

このステップでは、Docker Content Trust を使用して単一の Docker リポジトリから署名者を削除する方法を学びます。署名者のキーが漏洩した場合や、特定のリポジトリのイメージに署名する権限がユーザーに与えられなくなった場合に、この操作は有用です。

署名者を削除するには、docker trust signer remove コマンドを使用します。このコマンドには、削除する署名者の名前と、その署名者を削除するリポジトリ名が必要です。

docker/trusttest リポジトリから Releases 署名者を削除してみましょう。前のステップで docker/trusttest には Releases 署名者がいることを確認しました。

docker trust signer remove Releases docker/trusttest

このコマンドを実行すると、削除を確認するように促されます。y と入力して Enter キーを押して続行します。

Removing signer "Releases" from docker/trusttest. Are you sure you want to continue? (y/n): y

確認後、指定されたリポジトリから署名者が削除されます。削除が成功したことを示す出力が表示されるはずです。

Successfully removed signer "Releases" from docker/trusttest

このコマンドは、ノータリサーバーに保存されている信頼データ内で、Releases 署名者の公開キーと docker/trusttest リポジトリとの関連付けを削除します。署名者のキー自体は削除されず、この特定のリポジトリに対する署名権限のみが削除されます。

署名者の削除を検証する

このステップでは、署名者がリポジトリから正常に削除されたことを検証します。最初のステップと同じように、docker trust inspect コマンドを再度使用することでこれを行うことができます。

前のステップで docker/trusttest から Releases 署名者を削除した後、docker trust inspect docker/trusttest を実行すると、Releases が署名者として表示されなくなることが期待されます。

再度 docker/trusttest の署名者を調べてみましょう。

docker trust inspect docker/trusttest

出力を注意深く確認してください。これで docker/trusttestSigners セクションに Releases 署名者がもう表示されないはずです。

Signers of docker/trusttest:

ROLE         KEYS
----         ----
Targets      0a0d52c692a8b3459f3422732222222222222222222222222222222222222222: docker/trusttest

Signatures for docker/trusttest:

SIGNER     KEYS
------     ----
Releases   0a0d52c692a8b3459f3422732222222222222222222222222222222222222222: docker/trusttest

承認された Signers のリストから Releases 署名者が削除されている一方で、Signatures セクションにはまだ Releases による署名が表示される場合があることに注意してください。これは、remove コマンドが署名者が将来のイメージに署名する 権限 を削除するが、必ずしもノータリサーバーから既存の署名をすぐに削除しないためです。ただし、リポジトリに対する署名者の 役割 の削除を検証する目的では、Signers リストを確認するだけで十分です。

Signers of docker/trusttest セクションに Releases がないことは、この特定のリポジトリから署名者が正常に削除されたことを確認します。

複数のリポジトリから署名者を削除する

このステップでは、Docker Content Trust を使用して複数の Docker リポジトリから同時に署名者を削除する方法を学びます。複数のリポジトリで署名者の権限を取り消す必要がある場合、この方法は効率的です。

docker trust signer remove コマンドを使用すると、署名者名の後に複数のリポジトリを指定できます。

別のリポジトリ docker/another-trusttestReleases 署名者を持っていると仮定しましょう。1 つのコマンドで docker/trusttestdocker/another-trusttest の両方から Releases 署名者を削除するには、両方のリポジトリ名を列挙します。

まず、デモンストレーション用に 2 つ目のリポジトリとして hello-world イメージを取得します。その後、別のリポジトリをシミュレートするためにタグを付けます。

docker pull hello-world
docker tag hello-world docker/another-trusttest

では、docker/trusttestdocker/another-trusttest の両方から Releases 署名者を削除しましょう。実際のシナリオでは docker/another-trusttestReleases 署名者を持っていない場合もありますが、このコマンドは複数のリポジトリから署名者を削除する構文を示しています。

docker trust signer remove Releases docker/trusttest docker/another-trusttest

各リポジトリについて削除を確認するように促されます。各確認で y と入力して Enter キーを押します。

Removing signer "Releases" from docker/trusttest. Are you sure you want to continue? (y/n): y
Successfully removed signer "Releases" from docker/trusttest
Removing signer "Releases" from docker/another-trusttest. Are you sure you want to continue? (y/n): y
Successfully removed signer "Releases" from docker/another-trusttest

出力は、指定された両方のリポジトリから Releases 署名者が削除されたことを確認します。このコマンドは、1 つの操作で複数のリポジトリの署名者の承認を管理する便利な方法です。

複数のリポジトリからの署名者削除を検証する

このステップでは、前のステップで指定した両方のリポジトリから署名者が正常に削除されたことを検証します。各リポジトリに対して docker trust inspect コマンドを再度使用します。

まず、docker/trusttest の署名者を調べましょう。前のステップで Releases 署名者を削除し、その削除を確認したため、Signers リストには Releases 署名者がまだ含まれていないことが期待されます。

docker trust inspect docker/trusttest

出力では、Signers of docker/trusttest の下に Releases がリストされていないはずです。

Signers of docker/trusttest:

ROLE         KEYS
----         ----
Targets      0a0d52c692a8b3459f3422732222222222222222222222222222222222222222: docker/trusttest

Signatures for docker/trusttest:

SIGNER     KEYS
------     ----
Releases   0a0d52c692a8b3459f3422732222222222222222222222222222222222222222: docker/trusttest

次に、docker/another-trusttest の署名者を調べましょう。このリポジトリからも Releases 署名者を削除しようとしたため、このリポジトリの Signers リストにも Releases が含まれていないことが期待されます。

docker trust inspect docker/another-trusttest

docker/another-trusttest の出力は、hello-worlddocker/another-trusttest としてタグ付けしたもの)はデフォルトで署名されておらず、Releases 署名者(この特定のタグには最初から存在していなかった)を削除しようとしたため、署名者がいないことを示すはずです。

No signatures for docker/another-trusttest

これにより、docker trust signer remove コマンドを複数のリポジトリ名とともに使用すると、指定された署名者をリストされた各リポジトリから削除しようとすることが確認されます。docker/trusttest の検証は、以前に署名者がいたリポジトリからの正常な削除を示し、docker/another-trusttest の検証は、署名者がいなかったリポジトリの状態(したがって、削除の試行によって署名者が追加されなかった)を示しています。

まとめ

この実験では、docker trust コマンドを使用して Docker リポジトリの署名者を管理する方法を学びました。まず、Docker Content Trust を有効にし、docker trust inspect を使用してリポジトリの現在の署名者を調べました。これにより、特定のリポジトリ内のイメージの署名に関連付けられているキーを確認することができました。

その後、単一のリポジトリから署名者を削除する練習を行い、再度 docker trust inspect を使用して削除を検証しました。最後に、この知識を拡張して、複数のリポジトリから同時に署名者を削除し、指定されたすべてのリポジトリでの削除が成功したことを確認しました。この実践的な経験は、Docker 環境内でのコンテンツトラストを管理するための docker trust signer remove コマンドの実用的なアプリケーションを示しています。