の アンカーエンジン は、セキュリティの脆弱性とポリシーの問題についてコンテナイメージをスキャンおよび分析するためのオープンソースツールです。オーケストレーションプラットフォーム内で実行できるDockerコンテナーイメージとして、またはスタンドアロンインストールとして利用可能.
これは、開発者とQAチームがアプリケーションの作成に使用しているイメージの脆弱性をテスト、特定、対処できるようにする便利なセキュリティツールです。.
この記事では、Anchoreイメージ脆弱性スキャナーをインストールして使用する方法について説明します。一般的に、いくつかの実装方法があります。ただし、次の2つに焦点を当てます,
- を使用して AnchoreCLI コマンドラインオプション
- GUIベース Jenkins Anchoreコンテナイメージスキャナ プラグイン.
エンジンのインストール、設定、起動方法、AnchoreCLIコマンドラインツールとJenkinsプラグインの設定方法と使用方法を示します。 2つの方法のそれぞれについて、スキャンする画像を追加し、スキャンを実行し、レポートを表示する方法を学習します.
記事の最後では、次の3つのことを学びます。.
- のインストールと構成 アンカーエンジン
- インストール、構成、使用 AnchoreCLI
- 構成と使用 Anchoreコンテナーイメージスキャナープラグイン に ジェンキンス
前提条件
このチュートリアルの要件は次のとおりです。
- Ubuntu 18.04以降のローカルまたは仮想マシン。
- Docker
- Docker-compose
- Jenkinsがインストールされ、実行されている
- sudoユーザー
ステップ1:—作業ディレクトリをセットアップし、構成ファイルをダウンロードする.
Anchoreファイルの作業ディレクトリを作成します。そのディレクトリ内に、構成用とデータベース用の2つのサブディレクトリを作成します.
Anchoreファイルのホームディレクトリを作成する
mkdir anchore
新しいディレクトリに移動し、構成とデータベースのサブディレクトリを作成します.
CDアンカー
mkdir設定
mkdir db
構成ファイルをダウンロードする
ディレクトリの準備ができたら、Githubプロジェクトから2つの構成ファイル(docker-compose.yamlとconfig.yaml)をダウンロードします.
docker-compose.yamlをダウンロードするには
anchoreホームディレクトリに移動し、コマンドを使用します
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ファイルを編集することでこれを行うことができます。ただし、このチュートリアルでは、デフォルト設定を使用します.
デフォルトの資格情報(ユーザー名– adminおよびパスワード– foobar)で続行するには、次の手順に進みます。 ステップ2.
Anchore Engine資格情報の変更(オプション)
anchoreディレクトリから次のコマンドを使用します
nano〜/ anchore / config / config.yaml
ユーザー名(admin)とパスワード(foobar)を見つけて、希望する値に変更します.
押す CTRL + バツ, その後 Y 保存して終了する.
作業ディレクトリと構成ファイルを配置すると、システムはAnchore Engineをインストールする準備が整います。.
ステップ2:— Anchoreエンジンをインストールして起動します
Docker composeを使用して、Anchoreエンジンとデータベースをインストールして起動します.
anchoreホームディレクトリから、実行します.
docker-compose up -d
これにより、Anchoreイメージが自動的にプルされ、ホームディレクトリと〜/ anchore / database /ディレクトリにそれぞれAnchoreエンジンとデータベースが作成されます。完了すると、コマンドはAnchoreエンジンを起動します.
anchoreエンジンを正常にインストールして開始した後、anchoreコマンドラインを使用してイメージをスキャンできます 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
インストール AnchoreCLI python-pipを使用する
pip install anchorecli
このコマンドは、AnchoreCLIのファイルをダウンロードしてインストールします。インストール後、次のコマンドを使用して.profileファイルを入手する必要があります
ソース〜/ .profile
インストールが成功したかどうか、およびAnchorecliのバージョンを確認するには、次のコマンドを使用します。
anchore-cli –version
anchore-CLIシステムのステータスを確認するには、次のコマンドを使用します
anchore-cli –url http:// localhost:8228 / v1 –u admin –p foobarシステムステータス
AnchoreエンジンのURL、ユーザー名、パスワードを渡す必要があることに注意してください.
Anchore Engineパラメータを定義する
デフォルトでは、AnchoreCLIは認証なしでAnchoreエンジンにアクセスしようとします。ただし、これは機能せず、すべてのコマンドでAnchore Engine資格情報を提供する必要があります.
これには、すべてのAnchore CLIコマンドでユーザー名、パスワード、およびURLパラメーターを渡すことが含まれます。これらを毎回提供する代わりに、次の形式で環境変数として定義することもできます。.
URLを渡すには、次を実行します。
ANCHORE_CLI_URL = http:// localhost:8228 / v1
これにより、Anchore EngineのURLとポート8228が定義されます。.
デフォルト値を使用してユーザー名とパスワードを設定します。それ以外の場合は、設定した新しい値に置き換えます ステップ1.
ANCHORE_CLI_USER = admin
ANCHORE_CLI_PASS = foobar
上記は、現在のシェルにのみパラメーターを設定します。現在のシェルとそれから始まる他のプロセスを設定するには、exportコマンドを使用します
ANCHORE_CLI_URLをエクスポート
ANCHORE_CLI_USERをエクスポート
ANCHORE_CLI_PASSをエクスポートする
パラメータを定義すると、AchoreCLIのセットアップが完了し、画像をスキャンする準備が整います.
ステップ4:—画像の追加と分析
Anchore Engineが実行され、CLIが構成されたので、セキュリティの問題のためにイメージを追加して分析する方法を学びます。このチュートリアルでは、2つの画像を分析します。 -openjdk:8-jre-alpineに脆弱性あり、debian:latestなし .
画像の分析
続行するには、最初に画像をエンジンに追加する必要があります。画像を追加するには
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
Anchore Engineに画像を追加すると、すぐに分析が開始されます。ロードされたイメージが複数ある場合、それらはキューに入れられ、一度に1つずつ分析されます。進行状況を確認し、読み込まれた画像のリストとその分析ステータスを確認できます.
リストを表示するには、次のコマンドを実行します
anchore-cli画像リスト
出力
[メール保護]:〜/ anchore $ anchore-cli画像リスト
完全なタグ画像ダイジェスト分析ステータス
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
出力
[メール保護]:〜/ anchore $ anchore-cli image vuln openjdk:8-jre-alpine all
脆弱性IDPackage重大度修正CVE Refs脆弱性URL
CVE-2018-1000654 libtasn1-4.13-r0高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高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中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
出力
[メール保護]:〜/ anchore $ anchore-cli image vuln debian:latest all
脆弱性IDPackage重大度修正CVE RefsVulnerability URL
CVE-2005-2541 tar-1.30 + dfsg-6無視できるなしhttps://security-tracker.debian.org/tracker/CVE-2005-2541
CVE-2019-1010022libc-bin-2.28-10無視できるなしhttps://security-tracker.debian.org/tracker/CVE-2019-1010022
CVE-2019-1010022libc6-2.28-10無視できるなしhttps://security-tracker.debian.org/tracker/CVE-2019-1010022
CVE-2019-1010023libc-bin-2.28-10無視できるなしhttps://security-tracker.debian.org/tracker/CVE-2019-1010023
CVE-2019-1010023libc6-2.28-10無視できるなしhttps://security-tracker.debian.org/tracker/CVE-2019-1010023
CVE-2019-1010024libc-bin-2.28-10無視できるなしhttps://security-tracker.debian.org/tracker/CVE-2019-1010024
レポートからわかるように、イメージdebian:latestには無視できるほどの脆弱性があり、修正はありません.
不安定なイメージopenjdk:8-jre-alpineのポリシー評価結果を表示するには
走る
anchore-cli評価openjdk:8-jre-alpine
出力–結果は失敗を示します
[メール保護]:〜/ anchore $ anchore-cli評価チェックopenjdk:8-jre-alpine
画像ダイジェスト:sha256:b2ad93b079b1495488cc01375de799c402d45086015a120c105ea00e1be0fd52
完全なタグ:docker.io/openjdk:8-jre-alpine
ステータス:失敗
最終評価:2019-09-20T12:03:32Z
ポリシーID:2c53a13c-1765-11e8-82ef-23527761d060
イメージopenjdk:8-jre-alpineは指定されたポリシーID(ポリシーID:2c53a13c-1765-11e8-82ef-23527761d060)に違反しているため、失敗ステータスを返します.
Anchore Engineがポリシー違反を検出した後の応答を確認したので、安定したイメージdebian:latestでどのように動作するかを確認します。.
debian:latest安定したイメージのポリシーチェック
anchore-cli評価チェックdocker.io/library/debian:latest –detail
[メール保護]:〜/ anchore $ anchore-cli evaluate check docker.io/library/debian:latest –detail
画像ダイジェスト:sha256:d3351d5bb795302c8207de4db9e0b6eb23bcbfd9cae5a90b89ca01f49d0f792d
完全なタグ:docker.io/library/debian:latest
イメージID:c2c03a296d2329a4f3ab72a7bf38b78a8a80108204d326b0139d6af700e152d1
ステータス:合格
最終評価:2019-09-20T12:00:06Z
ポリシーID:2c53a13c-1765-11e8-82ef-23527761d060
最終アクション:警告
最終アクションの理由:policy_evaluation
ゲートトリガー詳細ステータス
dockerfileinstructionDockerfileディレクティブ ‘HEALTHCHECK’が見つかりません、条件 ‘not_exists’に一致するチェック警告
Dockerfileディレクティブと情報が一致しないため、結果には合格ステータスと警告の最終アクションが表示されます。これは失敗しませんが、問題の確認と対処が必要になる場合があります.
JenkinsでのAnchoreコンテナーイメージスキャナープラグインの構成と使用
ステップ6:— JenkinsにAnchoreコンテナーイメージスキャナープラグインを追加して構成する
このステップでは、アンカーエンジンをJenkinsサーバーと統合します。 Jenkinsは、ソフトウェア開発サイクルで幅広い反復作業を自動化するためのJavaベースのオープンソースサーバーです。.
の Anchoreプラグイン Jenkinsで利用可能ですが、デフォルトではインストールされません.
Webブラウザーを使用してJenkinsにログインします。
http:// your_server_ip_or_domain:8080
ユーザー名とパスワードを入力してください.
に行く ジェンキンスメニュー
検索して選択 ジェンキンスを管理する
に行く プラグインを管理する
で 利用可能なタブ, 下にスクロール 構築ツール を選択します Anchoreコンテナイメージスキャナ
クリック 再起動せずにインストール オプション.
のインストールが成功した後 Anchore Container Image Scannerプラグイン, 次のステップは、資格情報を構成することです.
に行く ジェンキンス メニューを選択し、 ジェンキンスを管理する タブ.
開いた システムを構成する.
を見つけます アンカー構成.
選択する エンジンモード
入力します アンカーエンジン 詳細(エンジンのURL、ユーザー名とパスワード、およびポート8228 –エンジンのデフォルトポート).
URL – http:// your_server_IP:8228 / v1
ユーザー名を入力= admin
Password = foobarを入力するか、変更した場合は新しいパスワードを入力します。 ステップ3 (上)
クリック セーブ
Anchoreプラグインの構成
ステップ8:—画像の追加とスキャン
クリック 新商品 左上のメニューのJenkinsダッシュボードで
これにより、いくつかのオプションを含む画面が開きます.
[Enter the item name]フィールドにテストプロジェクトの目的の名前を入力します.
このプロジェクトでは、Pipelineビルドを使用します.
を選択 パイプライン そしてクリック OK.
これで画像をスキャンする準備ができました。今回のケースでは、すでにDockerレジストリにある画像を使用します。 アンカーエンジン.
これを行うには、スキャンする画像を指定するパイプラインスクリプトを追加します.
ステップ9:—パイプラインスクリプトを追加する
[パイプライン]セクションまでスクロールし、スキャンする画像を指定するスクリプトを追加します。いくつかの脆弱性を含むopenjdk:8-jre-alpineから始めます.
ノード{
def imageLine = ‘openjdk:8-jre-alpine’`
writeFileファイル: ‘anchore_images’、テキスト:imageLine`
アンカー名: ‘anchore_images’`
}
クリック セーブ
ステップ10:—ビルドを実行してスキャンレポートを確認する
Jenkinsメニューから
クリック 今すぐビルド
これによりビルドプロセスが開始され、イメージのサイズによっては数分かかります。完了すると、ビルド履歴の下に数字と色付きのボタンが表示されます。これは、不合格の場合は赤色、合格の場合は青色になります。ボタンをクリックすると、さらに結果が表示されます.
ステップ11:—結果を確認する
クリック ビルド# 詳細を表示するには
これにより、 コンソール出力 失敗を示すウィンドウ– アンカレポート(FAIL)
詳細レポートは、分析が不合格であったか合格であったかを示し、構成に基づいて脆弱性、警告、およびその他を示すいくつかのレポートを提供します。デフォルトでは、プラグインはビルドに失敗するように構成されています(やめる)脆弱性がある場合はいつでも。以下は、ポリシーおよびセキュリティレポートのスクリーンショットです。.
アンカーポリシー評価の概要
以下は、脆弱な画像のセキュリティ結果のスクリーンショットです.
Common Vulnerabilities and Exposures(CVE)リスト
脆弱性のない安定したイメージdebian:latestをスキャンすると、以下の結果が得られます.
アンカーポリシー評価の概要(合格)
Common Vulnerabilities and Exposures(CVE)リストパス
結論
Anchore Container Image Scannerは、Dockerイメージの幅広い脆弱性とポリシーの問題を識別する強力な画像分析ツールです。多くのカスタマイズオプションがあり、分析中に問題を検出した場合の対応方法を設定できます。これらの1つは、エンジンが深刻な脆弱性に遭遇したときにビルドを中断することです.
DevSecOpsでキャリアを築きたい場合は、こちらをご覧ください。 ウデミーコース.
タグ:
オープンソース