JFrog の新機能 “Curation” の紹介
先日JFrog の新機能Curationがリリースされました。

Overviewにもあるとおり、開発者がパッケージを利用する前から、パブリックリポジトリのパッケージ脆弱性を、ユーザーが定義したポリシーに合わせてチェックし、カタログ化したうえで各プロジェクトにおける利用可否を制御する機能です。
つまり一般的に言われている Shift Left よりもさらに前段階でセキュリティを担保することが可能となります。
ではWorkflowにそって実際の画面を見ていきましょう。
Curation サービスの管理
まずはプラットフォームの管理者が、管理者メニューから Curation サービスを有効にする必要があります。

無効化や通知の設定もここで設定します。
Curation 対象リポジトリの管理
次に Curation の対象とするリポジトリも管理者メニューから選択します。

プラットフォームに定義済みのリモートリポジトリの一覧が表示されます。既に Curation が有効になっているリポジトリは、トグルが Active になっています。無効なリポジトリを有効にしようとすると、既に定義済みのポリシーが適用される旨、確認が入ります。

組織レベルで既にポリシーが定義されていて、プロジェクトレベルで新たなリモートリポジトリを追加した際などご想像ください。なおこの後ポリシーを追加しますが、その際にも対象リポジトリを選択可能です。ただし、指定可能なリポジトリはこの管理画面上でActive化されているリポジトリのみです。なので流れとしては
- リモートリポジトリを作成
- 管理メニューで Curation 対象とする
- ユーザーメニューでポリシー作成
- 対象リポジトリを指定
となります。
今回はPyPIリポジトリのみActiveにしてみます。

Curation ポリシーの定義
ポリシーの管理はユーザーメニューから行います。

まずは名前から設定していきます。

次に対象リポジトリを指定します。すべて対象もしくは個別指定します。

個別指定時の一覧では管理メニューでActiveにされたものだけが表示されます。

次にポリシーにて有効とする条件を指定します。

対応する条件の詳細はこちらをご覧ください。
オプションで除外パッケージも指定可能です。

最後にアクションを指定します。

Block と Dry Run がありますが、Block は単にパッケージのダウンロードをブロックします。Dry Run はダウンロードはブロックせずにポリシーに違反したものをログで確認できますので、正式適用前の試行に用います。
ではせっかくなので Dry Run のポリシーも定義
して共に試してみましょう。
npm リポジトリに設定しました。
Curation リポジトリからのパッケージダウンロード
まずはPypIからポリシー対象外のパッケージをダウンロードします。ちなみにパッケージクライアントの設定についてはこちらをご覧ください。今回単純にpipが古かったのでアップグレードします。

Curation 対象リポジトリでは、ポリシー対象外のパッケージでもダウンロードがAudit Eventに残ります。

では次にポリシー対象となるパッケージを Dry Run アクションポリシーで試します。

ダウンロードはできましたが、Dry Run Audit に表示されました。

では少し厳しめのポリシーでBlockを試してみます。

ダウンロードしようとすると 403 エラーとなります。

Audit Event にも残ります。

まとめ
Artifactoryのリモートリポジトリは開発プロジェクトが参照するパブリックリポジトリのキャッシュとして機構しますが、それにJFrog Security Essentials(Xray)とCurationを組み合わせることで、バイナリ管理だからこそ可能なDevSecOpsの形が実現されます。ご興味ございましたらお気軽にお問い合わせください。