Anchore Engine は 、セキュリティの脆弱性やポリシーの問題についてコンテナ イメージをスキャンおよび分析するためのオープンソース ツールです。これは、オーケストレーション プラットフォーム内で実行できる Docker コンテナー イメージとして、またはスタンドアロン インストールとして使用できます。
これは、開発者や QA チームがアプリケーションの作成に使用しているイメージの脆弱性をテスト、特定、対処できるようにする便利なセキュリティ ツールです。
この記事では、Anchore イメージ脆弱性スキャナーをインストールして使用する方法を見ていきます。一般に、いくつかの実装方法があります。ただし、次の 2 つに焦点を当てます。
- AnchoreCLI コマンドライン オプションの使用
- GUI ベースの Jenkins Anchore Container Image Scanner プラグイン。
エンジンのインストール、構成、起動、AnchoreCLI コマンドライン ツールと Jenkins プラグインの構成と使用方法を説明します。 2 つの方法それぞれについて、スキャンする画像の追加方法、スキャンの実行方法、レポートの表示方法を学習します。
この記事の最後では、次の 3 つのことを学びます。
- アンカー エンジン のインストールと構成
- AnchoreCLI のインストール、構成、使用
- Jenkins での Anchore Container Image Scanner プラグイン の構成と使用

前提条件
このチュートリアルの要件は次のとおりです。
- Ubuntu 18.04 以降を搭載したローカル マシンまたは仮想マシン。
- ドッカー
- Docker-compose
- Jenkins がインストールされ実行されている
- sudo ユーザー

ステップ 1:— 作業ディレクトリをセットアップし、構成ファイルをダウンロードします。
Anchore ファイル用の作業ディレクトリを作成します。そのディレクトリ内に、構成用とデータベース用の 2 つのサブディレクトリを作成します。
Anchore ファイル用のホーム ディレクトリを作成する
mkdir anchore
新しいディレクトリに移動し、構成サブディレクトリとデータベース サブディレクトリを作成します。
cd anchore
mkdir config
mkdir db
設定ファイルをダウンロードする
ディレクトリの準備ができたら、Github プロジェクトから 2 つの構成ファイル (
docker-compose.yaml
と
config.yaml
) をダウンロードします。
docker-compose.yaml
をダウンロードするには
アンカーのホームディレクトリに移動し、次のコマンドを使用します。
curl https://raw.githubusercontent.com/anchore/anchore-engine/master/scripts/docker-compose/docker-compose.yaml > docker-compose.yaml
次に、config.yaml を
~/anchore/config
ディレクトリにダウンロードします。
curl https://raw.githubusercontent.com/anchore/anchore-engine/master/scripts/docker-compose/config.yaml -o ~/anchore/config/config.yaml
config.yaml
ファイルは、アンカー エンジン サービスの実行に必要な基本設定が含まれる構成ファイルです。これには、デフォルト、ログ レベル、リスニング ポート、ユーザー名、パスワードなど、特定の要件を満たすように調整できるパラメーターがいくつかあります。
パスワードを変更することはセキュリティ上の良い習慣であり、
config.yaml
ファイルを編集することでこれを行うことができます。ただし、このチュートリアルではデフォルト設定を使用します。
デフォルトの資格情報 (
username
– admin および
password
– foobar) を使用して続行するには、
ステップ 2
に進みます。
アンカー エンジンの認証情報の変更 (オプション)
アンカーディレクトリから次のコマンドを使用します
nano ~/anchore/config/config.yaml
ユーザー名 (admin) とパスワード (foobar) を見つけて、好みの値に変更します。
CTRL + X を 押してから Y を押して保存し、終了します。
作業ディレクトリと設定ファイルが配置されると、システムは Anchore Engine をインストールする準備が整います。
ステップ 2: — Anchore Engine をインストールして開始する
Docker Compose を使用して、Anchore エンジンとデータベースをインストールして起動します。
アンカーのホーム ディレクトリから実行します。
docker-compose up -d
これにより、Anchore イメージが自動的にプルされ、Anchore エンジンとデータベースがそれぞれ home ディレクトリと ~/anchore/database/ ディレクトリに作成されます。完了すると、コマンドはアンカー エンジンを開始します。
アンカー エンジンを正常にインストールして起動したら、アンカー コマンド ライン AnchoreCLI を使用してイメージをスキャンできるようになります。ただし、次に示すように、まず AnchoreCLI コマンドライン ユーティリティをインストールする必要があります。

AnchoreCLIのインストールと設定
このステップでは、 AnchoreCLI コマンドライン ツールをインストールして構成する方法を学習します。
ステップ 3: — AnchoreCLI をインストールする
このチュートリアルでは、まず python-pip ユーティリティをインストールし、次にこれを使用してソースから AnchoreCLI をインストールします。
Python pip をインストールするには。 Anchore ホームディレクトリに移動して実行します。
sudo apt-get update
sudo apt-get install python-pip
sudo pip install --upgrade setuptools
python-pip を使用して AnchoreCLI をインストールする
pip install anchorecli
このコマンドは、AnchoreCLI のファイルをダウンロードしてインストールします。インストール後、次のコマンドを使用して .profile ファイルをソースする必要があります。
source ~/.profile
インストールが成功したかどうか、および
Anchorecli
のバージョンを確認するには、次のコマンドを使用します。
anchore-cli --version
アンカー CLI システムのステータスを確認するには、次のコマンドを使用します。
anchore-cli --url http://localhost:8228/v1 --u admin --p foobar system status
Anchore エンジンの URL、ユーザー名、パスワードを渡す必要があることに注意してください。
アンカー エンジンのパラメータを定義する
デフォルトでは、AnchoreCLI は認証なしで Anchore Engine へのアクセスを試みます。ただし、これは機能せず、すべてのコマンドでアンカー エンジンの認証情報を指定する必要があります。
これには、すべての Anchore CLI コマンドでユーザー名、パスワード、および URL パラメーターを渡すことが含まれます。これらを毎回指定する代わりに、次の形式で環境変数として定義することもできます。
URL を渡すには、次を実行します。
ANCHORE_CLI_URL=http://localhost:8228/v1
これにより、アンカー エンジンの URL と、それが使用するポート 8228 が定義されます。
デフォルト値を使用してユーザー名とパスワードを設定します。それ以外の場合は、 ステップ 1 で設定した新しい値に置き換えます。
ANCHORE_CLI_USER=admin
ANCHORE_CLI_PASS=foobar
上記は、現在のシェルのパラメータのみを設定します。現在のシェルとそこから開始される他のプロセスを設定するには、export コマンドを使用します。
export ANCHORE_CLI_URL
export ANCHORE_CLI_USER
export ANCHORE_CLI_PASS
パラメータを定義すると、AchoreCLI のセットアップが完了し、画像をスキャンする準備が整います。
ステップ 4: — 画像の追加と分析
これでアンカー エンジンが実行され、CLI が設定されました。次は、イメージを追加してセキュリティ問題を分析する方法を学びます。このチュートリアルでは、2 つの画像を分析します。
-openjdk:8-jre-alpine
脆弱性があり、
debian:latest without
。
画像の解析
続行するには、まずイメージをエンジンに追加する必要があります。画像を追加するには
anchore-cli image add openjdk:8-jre-alpine
安定したイメージの
debian:latest
を追加
anchore-cli image add docker.io/library/debian:latest
さらに画像を追加
anchore-cli image add openjdk:10-jdk
anchore-cli image add openjdk:11-jdk
画像をアンカー エンジンに追加すると、すぐに分析が開始されます。ロードされたイメージが複数ある場合、それらはキューに入れられ、一度に 1 つずつ分析されます。進行状況を確認したり、読み込まれた画像のリストとその解析ステータスを確認したりできます。
リストを表示するには、次のコマンドを実行します
anchore-cli image list
出力
user1@Imagescan:~/anchore$ anchore-cli image list
Full Tag Image Digest Analysis Status
docker.io/openjdk:10-jdk sha256:923d074ef1f4f0dceef68d9bad8be19c918d9ca8180a26b037e00576f24c2cb4analyzed
docker.io/openjdk:11-jdk sha256:9923c0853475007397ed5c91438c12262476d99372d4cd4d7d44d05e9af5c077analyzed
docker.io/openjdk:8-jre-alpine sha256:b2ad93b079b1495488cc01375de799c402d45086015a120c105ea00e1be0fd52analyzed
画像の数、サイズ、追加後の経過時間に応じて、完了した画像は分析され、進行中の画像は分析され、キューに入れられた画像は分析されません。
ステップ 5: — 分析結果を取得して表示する
分析が完了したら、結果を確認し、脆弱性スキャン、ポリシー チェック、およびエンジンが特定したその他の問題の結果を確認できます。
openjdk:8-jre-alpine
脆弱なイメージの脆弱性スキャンの結果を確認するには
走る
anchore-cli image vuln openjdk:8-jre-alpine all
出力
user1@Imagescan:~/anchore$ anchore-cli image vuln openjdk:8-jre-alpine all
Vulnerability IDPackage Severity Fix CVE Refs Vulnerability URL
CVE-2018-1000654 libtasn1-4.13-r0 High 4.14-r0 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-1000654
CVE-2019-12900 libbz2-1.0.6-r6 High 1.0.6-r7 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-12900
CVE-2019-14697 musl-1.1.20-r4 High 1.1.20-r5 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-14697
CVE-2019-14697 musl-utils-1.1.20-r4 High 1.1.20-r5 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-14697
CVE-2019-8457 sqlite-libs-3.26.0-r3 High 3.28.0-r0 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-8457
CVE-2018-14498 libjpeg-turbo-1.5.3-r4 Medium 1.5.3-r5 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-14498
レポートには、CVE 識別子、脆弱なパッケージ、重大度、修正の有無が表示されます。私たちのイメージ openjdk:8-jre-alpine の場合、分析の結果、5 つの高脆弱性と、かなりの数の中程度および無視できる脆弱性があることがわかりました。 (一部は上に示されていません)。
安定したイメージの脆弱性結果を表示するには、
debian:latest
コマンドを実行します
anchore-cli image vuln docker.io/library/debian:latest all
出力
user1@Imagescan:~/anchore$ anchore-cli image vuln debian:latest all
Vulnerability IDPackage Severity Fix CVE RefsVulnerability URL
CVE-2005-2541 tar-1.30+dfsg-6 Negligible None https://security-tracker.debian.org/tracker/CVE-2005-2541
CVE-2019-1010022libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010022
CVE-2019-1010022libc6-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010022
CVE-2019-1010023libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010023
CVE-2019-1010023libc6-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010023
CVE-2019-1010024libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010024
レポートからわかるように、イメージ debian:latest には無視できるほどの脆弱性があり、修正はありません。
不安定なイメージ
openjdk:8-jre-alpine
のポリシー評価結果を確認するには
走る
anchore-cli evaluate check openjdk:8-jre-alpine
出力 – 結果は失敗を示します
user1@Imagescan:~/anchore$ anchore-cli evaluate check openjdk:8-jre-alpine
Image Digest: sha256:b2ad93b079b1495488cc01375de799c402d45086015a120c105ea00e1be0fd52
Full Tag: docker.io/openjdk:8-jre-alpine
Status: fail
Last Eval: 2019-09-20T12:03:32Z
Policy ID: 2c53a13c-1765-11e8-82ef-23527761d060
イメージ openjdk:8-jre-alpine は、指定されたポリシー ID (
Policy ID: 2c53a13c-1765-11e8-82ef-23527761d060
) に違反しているため、失敗ステータスを返します。
ポリシー違反を検出した後にアンカー エンジンがどのように反応するかを確認したので、今度は安定したイメージ debian:latest でアンカー エンジンがどのように動作するかを確認します。
debian:latest
安定したイメージ
anchore-cli evaluate check docker.io/library/debian:latest --detail
user1@Imagescan:~/anchore$ anchore-cli evaluate check docker.io/library/debian:latest --detail
Image Digest: sha256:d3351d5bb795302c8207de4db9e0b6eb23bcbfd9cae5a90b89ca01f49d0f792d
Full Tag: docker.io/library/debian:latest
Image ID: c2c03a296d2329a4f3ab72a7bf38b78a8a80108204d326b0139d6af700e152d1
Status: pass
Last Eval: 2019-09-20T12:00:06Z
Policy ID: 2c53a13c-1765-11e8-82ef-23527761d060
Final Action: warn
Final Action Reason: policy_evaluation
Gate TriggerDetail Status
dockerfileinstructionDockerfile directive 'HEALTHCHECK' not found, matching condition 'not_exists' checkwarn
結果には、Dockerfile ディレクティブと情報が一致しないため、
Pass
ステータスと
Warn
の最終アクションが表示されます。これは失敗しませんが、問題を確認して対処する必要がある場合があります。

Jenkins での Anchore Container Image Scanner プラグインの構成と使用
ステップ 6:— Jenkins に Anchore Container Image Scanner プラグインを追加して構成する
このステップでは、アンカー エンジンを Jenkins サーバーと統合します。 Jenkins は、ソフトウェア開発サイクルにおける幅広い反復タスクを自動化するための Java ベースのオープンソース サーバーです。
Anchore プラグインは Jenkins で使用できますが、デフォルトではインストールされません。
Web ブラウザを使用して Jenkins にログインします
http://your_server_ip_or_domain:8080
username
と
password
を入力します。
ジェンキンスのメニュー に移動
「Jenkins の管理」を 見つけて選択します
「プラグインの管理」 に移動します
[利用可能] タブ で、 [ビルド ツール] まで下にスクロールし、 [Anchore Container Image Scanner] を選択します。
「再起動せずにインストール」 オプションをクリックします。
Anchore Container Image Scanner プラグインが 正常にインストールされたら、次のステップは認証情報を構成することです。
「Jenkins」 メニューに移動し、 「Jenkins の管理」 タブを選択します。
「システムの構成」 を開きます。
アンカー構成 を見つけます。
エンジンモード の選択
アンカー エンジンの
詳細 (エンジンの
URL
、
username
と
password
、および
port 8228
(エンジンのデフォルト ポート)) を入力します。
URL –
http://your_server_IP:8228/v1
username
= admin を入力します
Password
= foobar を入力するか、
ステップ 3
(上記) で変更した場合は新しいパスワードを入力します。
「保存」 をクリックします
アンカープラグインの構成
ステップ 8:— 画像の追加とスキャン
左上のメニューにある Jenkins ダッシュボード で [新しい項目] をクリックします。
これにより、いくつかのオプションを含む画面が開きます。
「項目名を入力してください」フィールドにテスト プロジェクトの名前を入力します。
このプロジェクトでは、パイプライン ビルドを使用します。
パイプライン
を選択し、
「OK」
をクリックします。
これで、画像をスキャンする準備ができました。この例では、 Anchore Engine からアクセスできる Docker レジストリに既に存在するイメージを使用します。
これを行うには、スキャンする画像を指定するパイプライン スクリプトを追加します。
ステップ 9:— パイプライン スクリプトを追加する
「パイプライン」セクションまで下にスクロールし、スキャンするイメージを指定するスクリプトを追加します。いくつかの脆弱性を含む
openjdk:8-jre-alpine
から始めます。
node {
def imageLine = 'openjdk:8-jre-alpine'`
writeFile file: 'anchore_images', text: imageLine`
anchore name: 'anchore_images'`
}
「保存」 をクリックします
ステップ 10:— ビルドを実行し、スキャン レポートを確認します。
ジェンキンスのメニューから
「今すぐ構築」 をクリックします
これによりビルド プロセスが開始されます。イメージ サイズに応じて数分かかります。完了すると、ビルド履歴の下に番号と色付きのボタンが表示されます。不合格の場合は赤色、合格の場合は青色になります。ボタンをクリックすると、さらに結果が表示されます。
ステップ 11:— 結果を確認する
ビルド番号
をクリックして詳細を表示します
これにより、失敗を示す
コンソール出力
ウィンドウが開きます –
アンカー レポート (FAIL)
詳細レポートには、分析が失敗したか合格したかが示され、構成に基づいて脆弱性、警告などを示すいくつかのレポートが提供されます。デフォルトでは、プラグインは、脆弱性がある場合は常にビルドに失敗する ( Stop ) ように設定されています。以下は、ポリシー レポートとセキュリティ レポートのスクリーンショットです。
アンカーポリシー評価の概要
以下は、脆弱なイメージのセキュリティ結果のスクリーンショットです。
一般的な脆弱性と暴露 (CVE) のリスト
ここで、脆弱性のない安定したイメージ
debian:latest
をスキャンすると、以下の結果が得られます。
アンカーポリシー評価の概要 (合格)
Common Vulnerabilities and Exposures (CVE) リスト パス
結論
Anchore Container Image Scanner は、Docker イメージ内の幅広い脆弱性とポリシーの問題を特定する強力なイメージ分析ツールです。多くのカスタマイズ オプションがあり、分析中に問題が検出された場合の対応方法を構成できます。その 1 つは、エンジンに重大な脆弱性が発生したときにビルドを中断することです。
DevSecOps でキャリアを築きたい場合は、この Udemy コース をチェックしてください。
