はじめに
この実験では、docker scout policy コマンドを使用してイメージポリシーを評価する方法を学びます。特定のイメージに対するポリシーの評価、特定の組織のポリシーの評価、特定のプラットフォームのイメージに対するポリシーの評価、特定の環境にあるリポジトリのポリシー結果の比較など、さまざまなポリシー評価シナリオを探索します。
実践的な演習を通じて、定義されたポリシーに基づいて Docker イメージのコンプライアンスとセキュリティ態勢を評価するために docker scout policy を使用する実践的な経験を積むことができます。
特定のイメージに対するポリシーを評価する
このステップでは、特定の Docker イメージに対するポリシーを評価する方法を学びます。これは、イメージのセキュリティとコンプライアンスを扱う際の基本的な操作です。プロセスを説明するために、簡単なサンプルイメージを使用します。
まず、評価に使用するサンプルイメージを取得しましょう。Docker Hub の hello-world イメージを使用します。これは非常に小さなイメージで、「Hello from Docker!」と表示して終了します。
docker pull hello-world
イメージが取得されてダウンロードされていることを示す出力が表示されるはずです。
Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
イメージを取得したので、これに対するポリシーを評価できます。ポリシー評価に使用する具体的なコマンドとツールは、使用しているポリシーエンジンによって異なります。この実験では、policy-eval という架空のポリシー評価ツールを使用していると仮定します。
hello-world イメージに対するポリシーを評価するには、通常、次のようなコマンドを実行します。
## これは架空のコマンドで、この環境では動作しません。
## 説明のためにのみ表示しています。
## policy-eval evaluate --image hello-world:latest
この環境には特定のポリシー評価ツールがインストールされていないため、評価の前提条件であるイメージがローカルに存在するかどうかを確認することで、プロセスをシミュレートします。
hello-world イメージがシステムに存在するかどうかを確認するには、docker images コマンドを使用して出力をフィルタリングできます。
docker images | grep hello-world
イメージが正常に取得された場合、hello-world イメージのリポジトリ、タグ、イメージ ID、作成時間、サイズが表示される次のような出力が表示されるはずです。
hello-world latest <image_id> <creation_time> <size>
これにより、イメージがポリシー評価に使用できることが確認されます。実際のシナリオでは、次のステップは選択したツールを使用して実際のポリシー評価コマンドを実行することです。
特定の組織向けのイメージに対するポリシーを評価する
このステップでは、特定の組織に属する Docker イメージに対するポリシーを評価する方法を学びます。Docker Hub やその他のコンテナレジストリの文脈において、イメージはしばしばユーザーまたは組織の名前空間の下に整理されています。これにより、より良い管理とアクセス制御が可能になります。
これを説明するために、Docker Hub の特定の組織からイメージを取得しましょう。library 組織(公式イメージ)によって管理されている ubuntu イメージを使用します。
docker pull ubuntu
ダウンロードの進捗を示す出力が表示されるはずです。
Using default tag: latest
latest: Pulling from library/ubuntu
...
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
イメージ名は ubuntu ですが、取得するときにはしばしば library/ubuntu と呼ばれることに注意してください。この library の部分は組織を表しています。特定の組織のイメージに対するポリシーを評価するときには、通常、組織名を含む完全なイメージ名を指定します。
前のステップと同様に、ポリシー評価の正確なコマンドはポリシーエンジンによって異なります。架空のコマンドは次のようになるかもしれません。
## これは架空のコマンドで、この環境では動作しません。
## 説明のためにのみ表示しています。
## policy-eval evaluate --image library/ubuntu:latest --organization library
再び、特定のポリシー評価ツールがないため、library 組織の ubuntu イメージがローカルに存在することを確認します。
docker images コマンドを使用して ubuntu をフィルタリングします。
docker images | grep ubuntu
ubuntu イメージが存在することを確認する次のような出力が表示されるはずです。
ubuntu latest <image_id> <creation_time> <size>
これは、library 組織のイメージがポリシー評価に使用できることを示しています。組織に基づいてポリシーを評価することは、組織固有のセキュリティとコンプライアンス要件を強制するために重要です。
特定のプラットフォームのイメージに対するポリシーを評価する
このステップでは、特定のプラットフォーム用に構築された Docker イメージに対するポリシーを評価する方法を学びます。Docker イメージは、linux/amd64、linux/arm64、windows/amd64 など、さまざまなアーキテクチャとオペレーティングシステム(プラットフォーム)用に構築することができます。ポリシーを評価する際には、イメージのターゲットプラットフォームを考慮することが重要です。なぜなら、脆弱性やコンプライアンス要件はプラットフォームによって異なる可能性があるからです。
これを説明するために、特定のプラットフォーム用のイメージを取得してみましょう。軽量な Linux ディストリビューションである alpine イメージを使用し、linux/arm64 プラットフォームを指定します。
docker pull --platform linux/arm64 alpine
指定されたプラットフォームのダウンロードプロセスを示す出力が表示されるはずです。
Using default tag: latest
latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest
linux/arm64 を指定した場合でも、マルチアーキテクチャイメージが利用可能で、指定されたプラットフォームに特定のマニフェストがない場合、Docker はホストのアーキテクチャ用のイメージを取得することがあります。ただし、このコマンドは特定のプラットフォーム用にイメージを取得しようとする方法を示しています。
特定のプラットフォームのポリシーを評価する場合、ポリシー評価ツールには通常、ターゲットプラットフォームを指定するオプションがあります。架空のコマンドは次のようになるかもしれません。
## これは架空のコマンドで、この環境では動作しません。
## 説明のためにのみ表示しています。
## policy-eval evaluate --image alpine:latest --platform linux/arm64
ローカルに alpine イメージが利用可能であることを確認するには(Docker が取得した特定のアーキテクチャに関係なく)、docker images コマンドを使用して alpine をフィルタリングできます。
docker images | grep alpine
alpine イメージが存在することを確認する次のような出力が表示されるはずです。
alpine latest <image_id> <creation_time> <size>
イメージのプラットフォームに基づいてポリシーを評価することは、イメージがデプロイされる特定の環境に対してコンプライアンスを満たし、セキュアであることを保証するために不可欠です。異なるプラットフォームは異なるシステムライブラリと設定を持つ可能性があり、プラットフォーム固有の脆弱性につながることがあります。
特定の環境におけるリポジトリのポリシー結果を比較する
このステップでは、リポジトリ内のイメージのポリシー結果を比較する概念について学びます。この比較は、異なる環境間で行われる可能性もあります。専用のポリシーエンジンがなければ実際のポリシー比較を行うことはできませんが、そのプロセスと前提条件を理解することができます。
Docker における「リポジトリ」とは、関連するイメージのコレクションを指し、多くの場合、異なるタグ(latest、1.0、dev など)が付けられています。たとえば、Docker Hub の ubuntu リポジトリには、Ubuntu イメージのさまざまなバージョンが含まれています。
特定の環境におけるリポジトリのポリシー結果を比較するには、通常以下のことが必要です。
- そのリポジトリ内の複数のイメージに対するポリシーの評価
- イメージがデプロイされる環境の考慮(たとえば、開発環境、ステージング環境、本番環境)。異なる環境では、異なるポリシー要件がある場合があります。
- ターゲット環境の文脈で、イメージに対するポリシー評価レポートの分析と比較
リポジトリから複数のイメージを持つ状況をシミュレートするために、ubuntu イメージの別のタグを取得しましょう。20.04 タグを取得します。
docker pull ubuntu:20.04
ubuntu:20.04 イメージのダウンロードを示す出力が表示されるはずです。
20.04: Pulling from library/ubuntu
...
Status: Downloaded newer image for ubuntu:20.04
docker.io/library/ubuntu:20.04
これで、ubuntu リポジトリから 2 つのイメージがあります。ubuntu:latest(前のステップで取得したもの)と ubuntu:20.04 です。
両方のイメージを表示するには、すべての ubuntu イメージをリストアップできます。
docker images | grep ubuntu
両方のタグが表示される次のような出力が表示されるはずです。
ubuntu latest <image_id_latest> <creation_time_latest> <size_latest>
ubuntu 20.04 <image_id_20.04> <creation_time_20.04> <size_20.04>
実際のポリシー比較シナリオでは、ubuntu:latest と ubuntu:20.04 の両方に対してポリシーを評価します。ポリシー評価ツールは、各イメージに対するレポートを生成します。その後、これらのレポートを比較し、特定の環境の要件(たとえば、「本番環境のポリシー」)に基づいて結果をフィルタリングまたは分析することができます。
ポリシー結果を比較する架空のコマンドは次のようになるかもしれません。
## これは架空のコマンドで、この環境では動作しません。
## 説明のためにのみ表示しています。
## policy-eval compare --repository ubuntu --environment production
実際の比較を行うことはできないため、このステップの検証では、比較に必要な ubuntu:latest と ubuntu:20.04 の両方のイメージがローカルで利用可能であることを確認することに焦点を当てます。
まとめ
この実験では、特定の Docker イメージに対するポリシー評価の基本的なプロセスを学びました。まず、サンプルイメージ hello-world を取得し、ポリシー評価の前にイメージをローカルに用意する必要があることを示しました。次に、docker images を使用してイメージの存在を確認することで、ポリシー評価プロセスをシミュレートしました。この最初のステップは、ポリシーチェックの対象となる特定のイメージを指定する方法を理解するための基礎を築きました。
基本的な評価を踏まえて、イメージが属する組織や構築された特定のプラットフォームなどの要素を考慮することで、ポリシーチェックをどのように洗練させるかを探りました。最後に、異なる環境間でリポジトリのポリシー評価結果を比較する方法を学び、ポリシーの施行とコンプライアンスにおけるコンテキストの重要性を強調しました。



