GNU/Linux >> Linux の 問題 >  >> Linux

DevSecOps:quay.ioスキャナーを使用したパイプラインでの画像スキャン

Sysdig 2021 Container Security and Usage Reportによると、コンテナのセキュリティは多くの組織にとってますます懸念されています。ただし、まだいくつかのギャップがあります。コンテナイメージのスキャンと特権コンテナは、最も重要な2つの側面です。

Podmanルートレスコンテナー(rootless Podmanを非rootユーザーとして実行するおよびRootlessコンテナーをPodmanで実行する:基本を参照)とOpenShift Container Platformはどちらも、デフォルトで最小特権の原則を実装し、管理者がセキュリティのベストプラクティスを実施するのに役立ちます。 RedHatquay.ioおよびRedHatquayコンテナレジストリオファリングは、管理者および開発者が画像の脆弱性スキャンをCI/CDパイプラインに組み込むのに役立ちます。

[読むこともお楽しみいただけます:Podman2.0とのsystemd統合の改善]

Red Hatは、ホストされたパブリックコンテナレジストリであるquay.ioを管理します。個人または企業は、レジストリを使用して、コンテナイメージを(組織内または一般の人々に)保存および共有できます。 Red Hat Universal Base Images(UBI)はRHELに基づいており、アプリケーションイメージを自由に構築および共有する方法を提供します。

レジストリには、脆弱性についてイメージをチェックし、イメージ内のパッケージに関する詳細を提供し、関連する修正とともに脆弱性を識別するセキュリティスキャナーが組み込まれています。脆弱性を低、中、高の重大度のカテゴリに分類します。また、CVE番号や脆弱性に関連するエラッタへのリンクなどのメタデータも提供します。コンテナイメージが古くなるにつれて、新しいCVEが発見されるため、この記事では、古いバージョンのUBIを見ていきます。たとえば、この記事の執筆時点で、ubi8の特定のビルドの1つ(8.2〜299)には、178個のパッケージ(影響の大きい10個のパッケージ)と38個の脆弱性(10個の高い)を強調した次の出力があります。

quay.io UIは、脆弱性に関連する情報をユーザーフレンドリーな形式で提供します。パッケージのリストを参照し、影響を受けるパッケージを確認し、脆弱性の詳細を表示できます。ただし、DevSecOpsに重点を置いている組織では、この情報をその場で取得し、各展開の前に利用して、安全なイメージのみが本番環境に到達するようにすることが有益です。

この記事は、リポジトリ、ロボットアカウントなどのquay.ioの概念、およびイメージビルド(DockerFilesを使用)やイメージタグ付けなどの一般的なタスクにある程度精通していることを前提としています。これらの概念について詳しく知りたい場合は、quay.ioユーザーガイドを参照してください。

コマンドラインからスキャン情報を取得するには、skopeoを使用します およびjq コマンド。 Skopeoを使用すると、ユーザーは最初にローカルマシンに画像をダウンロードせずに画像を検査できるだけでなく、あるリポジトリ(ローカルまたはリモート)から別のリポジトリへの画像のコピーもサポートします。

次のコマンドは、docker inspectと同様の画像メタデータをフェッチします ローカルイメージに対して実行されるコマンド:

# IMAGE_NAME='app-sre/ubi8-ubi'
# IMAGE_TAG='8.2-299'
# skopeo inspect docker://quay.io/$IMAGE_NAME:$IMAGE_TAG

画像の一意のダイジェストを取得するために、jqを使用して受信したjson出力を解析できます。 コマンド。

# IMAGE_DIGEST=`skopeo inspect docker://quay.io/$IMAGE_NAME:$IMAGE_TAG | jq -r .Digest`

ダイジェストを使用すると、quay.io APIにクエリを実行して、画像のセキュリティレポートを取得できます。出力(jsonファイル)をローカルファイルに保存し、jqを利用できます 目的のコンテンツをフィルタリングします。

# curl -o `basename $IMAGE_NAME`.json https://quay.io/api/v1/repository/$IMAGE_NAME/manifest/$IMAGE_DIGEST/security?vulnerabilities=true

たとえば、関連するアドバイザリID、アドバイザリURL、パッケージ名、影響を受けるバージョン、および修正を含むバージョンを含む重大度の高い脆弱性に関する情報を取得するには、次のコマンドを使用できます。

jq '.data.Layer.Features[]' `basename $IMAGE_NAME`.json | jq -c '{"Name":.Name,"Version":.Version,"Advisory":.Vulnerabilities[]} | select(.Advisory.Severity=="High") | {"Advisory":.Advisory.Name,"Link":.Advisory.Link,"PACKAGE":.Name,"CURRENT VERSION":.Version,"FIXED IN VERSION":.Advisory.FixedBy }'

このコマンドは、このUBI画像(app-sre / ubi8-ubi)に10個の通知通知があることを示す次のような出力を生成します。

{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus-tools","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}
{"Advisory":"RHSA-2020:3658","Link":"https://access.redhat.com/errata/RHSA-2020:3658","PACKAGE":"librepo","CURRENT VERSION":"1.11.0-2.el8","FIXED IN VERSION":"0:1.11.0-3.el8_2"}
{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus-libs","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}
{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus-common","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}
{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus-daemon","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}
{"Advisory":"RHSA-2020:2755","Link":"https://access.redhat.com/errata/RHSA-2020:2755","PACKAGE":"libnghttp2","CURRENT VERSION":"1.33.0-1.el8_0.1","FIXED IN VERSION":"0:1.33.0-3.el8_2.1"}
{"Advisory":"RHSA-2020:5476","Link":"https://access.redhat.com/errata/RHSA-2020:5476","PACKAGE":"openssl-libs","CURRENT VERSION":"1:1.1.1c-15.el8","FIXED IN VERSION":"1:1.1.1g-12.el8_3"}
{"Advisory":"RHSA-2020:3658","Link":"https://access.redhat.com/errata/RHSA-2020:3658","PACKAGE":"python3-librepo","CURRENT VERSION":"1.11.0-2.el8","FIXED IN VERSION":"0:1.11.0-3.el8_2"}
{"Advisory":"RHSA-2020:2637","Link":"https://access.redhat.com/errata/RHSA-2020:2637","PACKAGE":"gnutls","CURRENT VERSION":"3.6.8-10.el8_2","FIXED IN VERSION":"0:3.6.8-11.el8_2"}
{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}

[無料コース:RedHatSatelliteの技術概要。 ]

まとめ

この一連の記事の次のパートでは、この記事の情報をサンプルパイプラインに組み込んで、このイメージを進めてアプリケーションを本番環境にデプロイするかどうかについて情報に基づいた決定を下します。


Linux
  1. Linuxコマンドを使用して画像にテキストを書き込む方法

  2. Docker イメージ/コンテナの中身は?

  3. mysql コンテナーにデータをコミットする

  1. Linuxで独自のコンテナを構築する

  2. Ubuntu:curl を使用してイメージをダウンロードする

  3. Docker コンテナーで実行されている OS はどれですか?

  1. Buildahを使用したコンテナイメージビルドの高速化

  2. Nmapを使用してネットワーク内の不正なデバイスを見つける

  3. Quay.ioを使用してコンテナレジストリの負荷を軽減する方法