Artifact Analysis には、イメージをスキャンする 2 つの方法(自動スキャンとオンデマンド スキャン)があります。このドキュメントでは、両方のタイプのスキャンの機能の詳細について説明します。
Artifact Analysis はメタデータ管理も提供します。スキャンとメタデータ ストレージを併用して CI/CD パイプラインをエンドツーエンドで保護する方法について詳しくは、Artifact Analysis の概要をご覧ください。
コンテナ イメージのスキャンに関連する費用の詳細については、料金をご覧ください。
この概要では、Artifact Registry または Container Registry(非推奨) で Docker リポジトリの使用に精通していることを前提としています。
自動スキャン
Artifact Analysis は、Artifact Registry または Container Registry(非推奨)内のアーティファクトに対して脆弱性スキャンを実行します。また、アーティファクト分析では、依存関係とライセンスを特定して、ソフトウェアの構成を把握するのに役立ちます。
自動スキャンは、プッシュ時スキャンと継続分析の 2 つの主要なタスクで構成されます。
プッシュ時スキャン
Artifact Analysis は、Artifact Registry または Container Registry にアップロードされた新しいイメージをスキャンします。このスキャンにより、コンテナ内のパッケージに関する情報が抽出されます。画像は、画像のダイジェストに基づいて 1 回だけスキャンされます。つまり、タグを追加または変更しても、新しいスキャンはトリガーされません。
Artifact Analysis は、セキュリティの脆弱性に関して公開で監視されているパッケージの脆弱性のみを検出します。
イメージのスキャンが完了すると、イメージの脆弱性オカレンスのコレクションが脆弱性の結果として生成されます。
Artifact Analysis では、既存のイメージは自動的にスキャンされません。既存のイメージをスキャンするには、もう一度 push する必要があります。
継続的な分析
Artifact Analysis は、イメージのアップロード時に検出された脆弱性のオカレンスを作成します。最初のスキャンの後、Artifact Registry と Container Registry 内でスキャンされたイメージのメタデータに新たな脆弱性がないか継続的にモニタリングを行います。
Artifact Analysis は、1 日に複数回、脆弱性ソースから新しい脆弱性情報と更新された脆弱性情報を受け取ります。新しい脆弱性データが届くと、Artifact Analysis はスキャンされたイメージのメタデータを更新して最新の状態に保ちます。Artifact Analysis は、既存の脆弱性オカレンスを更新し、新しいメモ用の新しい脆弱性オカレンスを作成し、有効でなくなった脆弱性オカレンスを削除します。
Artifact Analysis は、過去 30 日間に push または pull されたイメージのメタデータのみを更新します。Artifact Analysis は、30 日以上経過したメタデータをアーカイブします。アーカイブされたメタデータを含むイメージを再スキャンするには、そのイメージを pull します。メタデータの更新には最長で 24 時間ほどかかることがあります。
マニフェスト リスト
マニフェスト リストで脆弱性スキャンを使用することもできます。マニフェスト リストは、複数のプラットフォームのマニフェストへのポインタのリストです。これにより、単一のイメージで複数のアーキテクチャまたはオペレーティング システムのバリエーションに対応できます。
Artifact Analysis の脆弱性スキャンは、Linux amd64 イメージのみをサポートしています。マニフェスト リストが複数の Linux amd64 イメージを参照している場合、最初のイメージのみがスキャンされます。Linux amd64 イメージへのポインタがない場合、スキャン結果は得られません。
オンデマンド スキャン
オンデマンド スキャンを使用すると、gcloud CLI を使用して、コンピュータまたはレジストリでローカルにコンテナ イメージをスキャンできます。これにより、脆弱性の結果にアクセスする必要があるタイミングに応じて、CI/CD パイプラインを柔軟にカスタマイズできます。
サポートされているパッケージ タイプ
コンテナ イメージを Artifact Registry の Docker リポジトリに push すると、Artifact Analysis は複数のタイプの OS パッケージとアプリケーション言語パッケージの脆弱性をスキャンできます。
Container Registry は非推奨になりました。Container Registry では、自動スキャンは OS パッケージのみをスキャンします。Container Registry を使用している場合は、Artifact Registry に移行する方法をご覧ください。
次の表は、Artifact Analysis でスキャンできるパッケージのタイプと、各スキャン サービスを比較したものです。
サポートされている OS パッケージ
Artifact Registry による自動スキャン | Container Registry による自動スキャン(非推奨) | オンデマンド スキャン | |
---|---|---|---|
AlmaLinux OS | |||
Alpine | |||
CentOS | |||
Chainguard | |||
Debian | |||
Google Distroless | |||
Red Hat Enterprise Linux(RHEL) | |||
Red Hat Universal Base Image(UBI) | |||
Rocky Linux | |||
SUSE Linux Enterprise Server(SLES) | |||
Ubuntu | |||
Wolfi |
サポートされているアプリケーション言語パッケージ
Artifact Registry による自動スキャン | Container Registry による自動スキャン(非推奨) | オンデマンド スキャン | |
---|---|---|---|
Go パッケージ | |||
Java パッケージ | |||
Node.js パッケージ | |||
PHP パッケージ | |||
Python パッケージ | |||
Ruby パッケージ | |||
Rust パッケージ | |||
.NET パッケージ |
Artifact Analysis は、パッケージがコンテナ化され、Docker 形式のリポジトリに保存されている場合にのみ、Artifact Registry 内のアプリケーション言語パッケージをスキャンします。他の Artifact Registry リポジトリ形式はサポートされていません。
各レジストリ プロダクトで利用可能な機能の詳細については、比較表をご覧ください。
Artifact Analysis は Windows Server コンテナではサポートされていません。
Artifact Analysis のインターフェース
Google Cloud コンソールで、Artifact Registry のコンテナのイメージの脆弱性とイメージのメタデータを表示できます。
gcloud CLI を使用して、脆弱性とイメージ メタデータを表示できます。
また、Artifact Analysis REST API を使用して、こうしたアクションを実行することもできます。他の Cloud Platform API と同様、OAuth2 を使用してアクセスを認証する必要があります。認証した後、API を使用してカスタムのメモやオカレンスを作成したり、脆弱性のオカレンスを表示したりすることもできます。
Artifact Analysis API は、gRPC と REST/JSON の両方をサポートしています。API の呼び出しは、クライアント ライブラリまたは REST/JSON の cURL を使用して行うことができます。
脆弱なイメージのデプロイを制御する
Binary Authorization を使用すると、Cloud Build パイプラインの一部として Artifact Analysis から提供される脆弱性情報に基づいて、脆弱性の許可リストを作成できます。脆弱性が許可リストのポリシーに違反している場合、ビルドは失敗します。
Artifact Analysis を Binary Authorization と統合して証明書を作成することもできます。これにより、既知のセキュリティ問題を含むコンテナ イメージがデプロイ環境で実行されないようにすることができます。
脆弱性のあるソース
次のセクションでは、Artifact Analysis が CVE データを取得するために使用する脆弱性ソースについて説明します。
OS パッケージのスキャン
Artifact Analysis は、次のソースを使用します。
- AlmaLinux OS
- Alpine
- CentOS - Red Hat と CentOS は同じソースの脆弱性データを共有しています。CentOS パッケージは Red Hat パッケージの後に公開されるため、Red Hat の脆弱性に対する修正が CentOS でも利用可能になるまでに時間がかかることがあります。
- Chainguard
- Debian
- Google Distroless は Debian をベースにしており、Debian の脆弱性データを使用します。
- National Vulnerability Database
- Red Hat Enterprise Linux(RHEL)
- Red Hat Universal Base Image(UBI)
- Rocky Linux
- SUSE Linux Enterprise Server(SLES)
- Ubuntu
- Wolfi
言語パッケージのスキャン
Artifact Analysis は、コンテナ イメージ内の言語パッケージの脆弱性スキャンをサポートしています。脆弱性データは GitHub Advisory Database から取得されます。
ほとんどの場合、各脆弱性には CVE ID が割り当てられ、この ID がその脆弱性の主な識別子になります。脆弱性に CVE ID が割り当てられていない場合は、代わりに GHSA ID が識別子として割り当てられます。後でその脆弱性に CVE ID が割り当てられると、脆弱性 ID は CVE に合わせて更新されます。詳細については、プロジェクトで特定の脆弱性をチェックするをご覧ください。
サポートされている OS バージョン
Artifact Analysis は、次のバージョンのオペレーティング システム ソフトウェアの脆弱性スキャンをサポートしています。
- AlmaLinux OS - バージョン: 8、9、マイナー バージョン
- Alpine Linux - バージョン: 3.3、3.4、3.5、3.6、3.7、3.8、3.9、3.10、3.11、3.12、3.13、3.14、3.15、3.16、3.17、3.18、3.19、3.20
- CentOS - バージョン: 6、7、8、とマイナー バージョン
- Chainguard - 単一のリリース トラックでのローリング アップデート。
- Debian GNU/Linux - バージョン: 9、10、11、12
- Red Hat Enterprise Linux(RHEL)- バージョン: 6、7、8、9、マイナー バージョンは、レジストリ自動スキャンでサポートされています。
- Red Hat Universal Base Image(UBI)- バージョン 8、9、マイナー バージョン
- Rocky Linux - バージョン: 8、9、マイナー バージョン
- SUSE Linux Enterprise Server(SLES)- バージョン: 12、15、マイナー バージョン。SLES for SAP も同じバージョンでサポートされています。
- Ubuntu - バージョン: 12.04、12.10、13.04、14.04、14.10、15.04、15.10、16.04、16.10、17.04、17.10、18.04、18.10、20.04、20.10、21.04、21.10、22.04、22.10、23.04、23.10、24.04
- Wolfi - 単一のリリース トラックでローリング アップデート。
制限事項
- アーティファクト分析は、リリースされたメジャー バージョンごとの最新のマイナー バージョンに基づいて、RHEL の脆弱性スキャンの結果を提供します。古いマイナー バージョンの RHEL のスキャン結果には、不正確な部分がある可能性があります。
- RHEL バージョン 9 は、オンデマンド スキャンではサポートされていません。
パッケージ マネージャーとセマンティック バージョニング
- Go - Artifact Analysis は、Go 標準ライブラリのパッケージと、標準ライブラリに含まれていない外部 Go パッケージの脆弱性を報告します。脆弱性は、パッケージの種類ごとに異なるラベルで報告されます。
- Java - Artifact Analysis は、Maven の命名規則に従う Maven パッケージをサポートしています。パッケージ バージョンにスペースが含まれている場合、スキャンされません。
- Node.js - パッケージ バージョンの照合は、セマンティック バージョニング仕様に準拠しています。
- PHP - Artifact Analysis は Composer パッケージをスキャンします。Composer のセマンティック バージョニングをご覧ください。
- Python - Python バージョンの照合は PEP 440 のセマンティクスに従います。
- Ruby - Artifact Analysis は RubyGems パッケージをスキャンします。RybyGems のセマンティック バージョニングをご覧ください。
- Rust - Artifact Analysis は Cargo パッケージをスキャンします。Rust のセマンティック バージョニングをご覧ください。
- .NET - Artifact Analysis は NuGet パッケージをスキャンします。NuGet のセマンティック バージョニングをご覧ください。