こんにちは!JFrog Developer AdvocateのよしQ(よしきゅー)です。
以下のブログではJFrog Xrayを利用してOSS脆弱性がスキャンについてお知らせしました。
blog.jfrog.co.jp
この記事で挙げた通り、XrayのOSS脆弱性スキャンは無料版で実際に試していただくことができますが、 設定に関する部分はかなり省略させていただいており、このままでは皆さんに使っていただくには情報提供が不十分だと理解しています。 いくつかの記事に分けながら、実際にXrayを使っていただくところまでに必要な設定について説明します。
なお、Xrayによるスキャンは、Artifactoryに保管されたアーティファクトに対して行われます。(Xrayを単体で利用することはできません。)
そのため、Artifactoryに対してアーティファクトを保管することが、Xrayのスキャンを行う前提条件となります。
今回は、設定編その1として、 JFrog Artifactoryにアーティファクト(ソースコードをビルドした結果得られるファイル)を管理するまでをカバーします。
ステップ1: JFrog Platformの環境を取得する
JFrog Platformの無料版を、以下のサイトから取得いただけます。
クラウド版であれば、自身でホストする必要もなくすぐに利用できます。 以下の必要事項を設定します。
- ①名, ②姓: お名前を設定してください。
- ③メールアドレス: 必ず受信可能なメールアドレスを指定してください。
- ④パスワード: パスワードルールを満たすパスワードを設定してください。
- ⑤利用規約、プライバシーポリシー: 内容確認の上、承諾いただきチェックを指定します。
- ⑥クラウドプロバイダー、⑦クラウドのリージョン: どれを選択いただいても同じ内容の環境が取得できます。
- ⑧お客様の環境に名前: 任意で指定可能ですが、利用者の中で一意である必要があり、すでに同名の利用者がいる場合は指定できません。
「今すぐ試してみてください」ボタンを押せば、環境のアクティベーションが始まります。
環境のアクティベーションが完了すると、ログイン画面が表示されます。 以下を使用してログインしてください。
- Username: 登録時に指定したメールアドレス
- Password: 登録時に指定したパスワード
次のような画面が表示されれば、JFrog Platformの利用が開始できる状態になっています! ようこそ、JFrog Platformへ!
ステップ2: JFrog Artifactoryにリポジトリを作成する
次はアーティファクトを格納する以下のリポジトリを合わせて3つ作成します。
- ローカルリポジトリ(ステップ2-1): ご自身で作成されたコードにより生成されるアーティファクトを管理するリポジトリ
- リモートリポジトリ(ステップ2-2): OSSなどのパッケージマネージャから取得される外部のアーティファクトを管理するリポジトリ
- バーチャルリポジトリ(ステップ2-3): Artifactory上のアーティファクトに対してユーザがアクセスしやすくするための仮想リポジトリ
まずはリポジトリ作成のために、管理(Administration)メニューを開き、「Repositories」> 「Repositories」の順に進んで、 以下のリポジトリ管理画面に進みます。
なお、以下の説明では、Xrayの脆弱性スキャンで使用したサンプルコードを利用するため、 パッケージマネージャとして「Maven」を利用する場合の例を挙げていきます。
サンプルコードは以下を参照ください。 github.com
ステップ2-1: ローカルリポジトリを作成する
ローカルリポジトリは、ご自身で作成されたコードにより生成されるアーティファクトを管理するためのリポジトリです。
リポジトリ管理画面の右上「Add Repositories」> 「Local Repository」を選択します。
次に、パッケージタイプを選択するモーダル画面(Select Package Type)が表示されます。
利用するパッケージマネージャを考慮して選択します。
(サンプルコードではMavenを使う想定となっているため、「Maven」を選択します。)
次の画面ではリポジトリに関する詳細設定となります。
「Repository Key」にローカルリポジトリの名前を設定します。名前は任意で設定できますが、お客様の環境内で一意である必要があります。
例として、「xraysample-local」としました。この後作成するリポジトリとの区別ができるよう、「-local」をsuffixとして設定しています。
ページ下にスクロールすると「JFrog Xray Integration」というセクションがあります。Xrayを利用する場合は、「Enable Indexing in Xray」が有効になっている必要があります。 その他の入力項目はデフォルトのままで問題ありません。
「Create Local Repository」ボタンを押下し、ローカルリポジトリの作成を完了します。
ステップ2-2: リモートリポジトリを作成する。
リモートリポジトリは、OSSなどのパッケージマネージャから取得される外部のアーティファクトを管理するリポジトリです。
リポジトリ管理画面の右上「Add Repositories」> 「Remote Repository」を選択します。
次に、パッケージタイプを選択するモーダル画面(Select Package Type)が表示されます。
利用するパッケージマネージャを考慮して選択します。
(サンプルコードではMavenを使う想定となっているため、「Maven」を選択します。)
次の画面ではリポジトリに関する詳細設定となります。
「Repository Key」にリモートリポジトリの名前を設定します。ローカルリポジトリ同様、名前は任意で設定できますが、お客様の環境内で一意である必要があります。 例として、「xraysample-remote」としました。同様にリポジトリの区別のために、suffixとして「-remote」を付与しています。
「URL」には、アーティファクトの配布元のURLを指定します。(デフォルトで問題なければ変更不要) アーティファクト取得時に認証が必要な場合は「User Name」、「Password / Access Token」に認証情報を設定します。(認証不要の場合は空欄のままにします。) その他の入力項目はデフォルトのままで問題ありません。
「Create Remote Repository」ボタンを押下し、リモートリポジトリの作成を完了します。
このブログの執筆時点では、Mavenでのパッケージ取得元にあたる「URL」にはデフォルトでBintrayのURLが指定してありますが、Bintrayは2022/02/01に読み込み専用でのサービス提供に切り替わりました。 もし使用したいパッケージが存在しないなどの問題がある場合は、Maven CentralのURLなどを設定するなどすると回避できる可能性があります。
ステップ2-3: バーチャルリポジトリを作成する
バーチャルリポジトリは、複数のリポジトリ(ローカルまたはリモート)を1つの仮想的なリポジトリとして集約するためのものです。 これにより、ユーザはバーチャルリポジトリのURLを利用するだけで、ローカルリポジトリ・リモートリポジトリ双方にアクセスすることができます。
リポジトリ管理画面の右上「Add Repositories」> 「Virtual Repository」を選択します。
次に、パッケージタイプを選択するモーダル画面(Select Package Type)が表示されます。
利用するパッケージマネージャを考慮して選択します。
(サンプルコードではMavenを使う想定となっているため、「Maven」を選択します。)
次の画面ではリポジトリに関する詳細設定となります。
「Repository Key」にバーチャルリポジトリの名前を設定します。先に作成したリポジトリ同様、名前は任意で設定できますが、お客様の環境内で一意である必要があります。
例として、「xraysample」としました。他のリポジトリと異なりsuffixをつけないのは、ユーザが利用するシンプルな名称にしておく方が利用しやすいためです。
「Repositories」でこのバーチャルリポジトリに紐付け、利用するリポジトリを選択します。
Available Itemsで対象にするリポジトリを選択し、「>」をクリックしてIncluded Itemsに移動させます。
「Included Repository」で、選択されたリポジトリを確認し、内容が正しいことを確認します。
「Default Deployment Repository」にはローカルリポジトリを指定します。
「Create Virtual Repository」ボタンを押下し、バーチャルリポジトリの作成を完了します。
以上で登録先リポジトリの準備が整いました。
ステップ3: JFrog CLIをPCにインストールし、環境設定をする
ステップ3-1: JFrog CLIをインストールする
次はPCで実際にアーティファクトを登録するために、JFrog CLIをPCにインストールします。
JFrog CLIは、JFrog ArtifactoryやJFrog XrayといったJFrog製品に対して、
コマンドライン(jf
コマンド、またはjfrog
コマンド)を用いて操作する際に使います。
インストール方法は以下を参照ください。
お使いの環境に合わせた方法で、簡単に導入いただけます。
www.jfrog.com
ステップ3-2: JFrog CLIの初期設定を行う
JFrog CLIの初期設定として、ステップ1で作成したサーバに接続できるよう設定を行います。 コマンドラインから以下の通りのコマンドを実行し、設定を行います。
% jf c add Choose a server ID [****]: xraysample JFrog platform URL [****]: https://satoyblogsample.jfrog.io/ Use the arrow keys to navigate: ↓ ↑ → ← Select 'Save and continue' or modify any of the URLs 🐸 Save and continue JFrog Artifactory URL(https://satoyblogsample.jfrog.io/artifactory/) JFrog Distribution URL(https://satoyblogsample.jfrog.io/distribution/) JFrog Xray URL(https://satoyblogsample.jfrog.io/xray/) JFrog Mission Control URL(https://satoyblogsample.jfrog.io/mc/) JFrog Pipelines URL(https://satoyblogsample.jfrog.io/pipelines/) JFrog access token (Leave blank for username and password/API key): JFrog username [****]: ※Platformにログイン時に指定するUsernameを設定 JFrog password or API key: ※Platformにログイン時に指定するPasswordを設定 Is the Artifactory reverse proxy configured to accept a client certificate? (y/n) [n]? n
Step by Stepでいくと、以下のような内容になります。
- 上記コマンドは、
jfrog config add
と同じ内容です。PCに設定を追加するためのコマンドです。 Choose a server ID
には、PC上で登録先サーバを識別するためのIDを指定します。(サーバ取得時の環境名が分かりやすいかと思います。)JFrog platform URL
には、登録先サーバURLを指定します。Select 'Save and continue' ...
は特に設定変更不要ですので、Save and continue
を選択します。JFrog access token ...
は、今回はPlatformへのログイン情報(Username/Password)を利用しますので、何も指定せず、エンターキーを押下します。JFrog username ...
にログイン時のUsernameを指定します。JFrog password or API key
にログイン時のPasswordを指定します。Is the Artifactory ...
は、プロキシ設定が不要であれば、n
を指定します。(通常はn
で問題ありません。)
ステップ3-3: JFrog CLIを用いてパッケージマネージャのコマンドを利用するための設定を行う
jf mvn package
のように、Mavenのコマンドをjf
コマンドを用いて利用し、Artifactoryに直接登録可能となるようにします。
以下はMaven向けの設定として行いますが、パッケージマネージャが異なる場合はコマンドが異なります。詳細はJFrog wikiの「Package Managers Integration」をご確認ください。
今回Maven向けの対応として、コマンドラインから以下の通りのコマンドを実行し、設定を行います。
% jf mvnc Resolve dependencies from Artifactory? (y/n) [y]? y Set Artifactory server ID [****]: xraysample Set resolution repository for release dependencies (press Tab for options): xraysample Set resolution repository for snapshot dependencies (press Tab for options): xraysample Deploy project artifacts to Artifactory? (y/n) [y]? y Set Artifactory server ID [****]: xraysample Set repository for release artifacts deployment (press Tab for options): xraysample Set repository for snapshot artifacts deployment (press Tab for options): xraysample Would you like to filter out some of the deployed artifacts? (y/n) [n]? n **:**:** [🔵Info] maven build config successfully created.
Step by Stepでいくと、以下のような内容になります。
jf mvnc
はMavenのビルド時の設定を行うコマンドで、jfrog mvn-config
と同じ内容です。接続先のArtifactoryの設定を行います。Resolve dependencies from Artifactory?
は、リモートリポジトリを使って依存するアーティファクトを管理するため、y
を指定します。Set Artifactory server ID
は、ステップ3-2で指定したサーバIDを指定します。Set resolution repository for release dependencies
およびSet resolution repository for snapshot dependencies
は、リモートリポジトリを利用しますが、アクセス時はバーチャルリポジトリを利用しますので、その名称のxraysample
を利用します。Deploy project artifacts to Artifactory?
は、ローカルリポジトリを使って作成したアーティファクトを管理するため、y
を指定します。Set Artifactory server ID
は、ステップ3-2で指定したサーバIDを指定します。Set repository for release artifacts deployment
およびSet repository for snapshot artifacts deployment
は、ローカルリポジトリを使用しますが、アクセス時はバーチャルリポジトリを利用しますので、その名称のxraysample
を利用します。Would you like to filter out some of the deployed artifacts?
は、今回は作成したアーティファクトは全て登録するのでn
を指定します。
以上で、JFrog CLIを用いてビルドおよびアーティファクトの管理を行うことが可能になりました。
ステップ4: JFrog CLIを使ってビルドおよびアーティファクトの登録を行う
Artifactoryは、ビルドを実施するごとに変わる可能性があるアーティファクトの詳細や依存関係、環境変数などの情報を収集し記録します。 この情報は、ビルドによって生成されるアーティファクトの特徴を示す情報であり、一般に「メタデータ」と呼ばれます。 Artifactoryにおいては、特にビルド時のメタデータ情報を「Build Info」と呼んでいます。
以下のコマンドを使って、いよいよビルドおよびアーティファクトの登録を行います。
% jf mvn clean % jf mvn install --build-name=xraytest-build --build-number=sample1-001 % jf rt bce xraytest-build sample1-001 % jf rt bp xraytest-build sample1-001
Step by Stepでいくと、以下のような内容になります。
jf mvn clean
は、Mavenでいうmvn clean
と同じ内容です。targetディレクトリを削除を行います。jf mvn install
は、maven install
と同じ内容です。 ビルドをし、実行jarの生成&Artifactoryへ登録を行います。オプションで設定しているbuild-name
とbuild-number
はこのビルドを識別するための識別子として利用します。jf rt bce
は、ArtifactoryにBuild Info(アーティファクトの詳細や依存関係、環境変数などの情報)を収集します。rt
は、Artifactoryに関するコマンドを動かすことを指示しています。bce
は、Build Infoを収集することを指示しています。xraytest-build
とsample1-001
は、前のコマンドで指定したビルドを識別するために指定したオプションと同じ値を--build-name
,--build-number
の順に指定します。これにより、前のコマンドで行なったビルドと紐付けされます。
jf rt bp
は、ArtifactoryにBuild Infoを実際に登録します。bp
は、Build Infoを登録することを指示しています。xraytest-build
とsample1-001
は、前のコマンドと同じ意味です。
登録された結果を確認する
ローカルリポジトリの内容を確認する
リポジトリを確認するため、アプリケーション(Application)メニューを開き、「Artifactory」> 「Artifacts」の順に進んで、リポジトリの一覧画面に進みます(下図の赤線)。
一覧からローカルリポジトリ(xraysample-local)を選択し、ドリルダウンを開いて内容を確認します(下図の青線)。
今回作成したjarファイルが登録されていることが確認できます。
リモートリポジトリのキャッシュの内容を確認する
次にリモートリポジトリのキャッシュの内容を確認します。
一覧からリモートリポジトリのキャッシュ(xraysample-remote-cache)を選択し、ドリルダウンを開きます。
リモートリポジトリでアクセスしたパッケージはArtifactory上にキャッシュとして保管されます。 これにより、以下のようなメリットを享受できます。
- 一般公開されているリモートリポジトリに対してアクセスできない場合でもキャッシュ利用によりビルドを実施することができる
- Artifactoryの設置場所がビルド環境に対して近くなる場合、より高速にパッケージ取得できるようになる
Build Infoを確認する
ビルド時の状況であるBuild Infoにより、アーティファクトの詳細や依存関係、環境変数などの情報を確認します。 アプリケーション(Application)メニューの「Artifactory」> 「Builds」の順に進んで、ビルドの一覧画面に進みます。
「Build Name」の列には、ビルド時に指定したオプション「--build-name」で指定したもの、 「Last Build ID」の列には、ビルド時に指定したオプション「--build-number」で指定した最新のものが表示されており、Build Nameでグルーピングされています。
実際に今回のビルドを確認するには、Build Nameが「xraytest-build」をクリックし、 次の画面で表示される画面でBuild Idが「sample1-001」を開きます。
以下では、いくつかのタブで表示される情報の概要を説明します。
「Published Modules」タブでは、このビルドで生成されたモジュールを確認できます。
「Environment」タブでは、このビルドが行われた環境の環境変数を見ることができます。
「Build Info JSON」タブでは、収集された情報全てを、Artifactoryに格納されているJSONの状態で確認できます。 この中には、環境変数の他、ビルドで使用された外部リソースなども確認できます。
なお、「Xray Data」タブでは、JFrog XrayによるSCAの結果が表示されるのですが、この時点ではまだ設定が済んでいないため表示されません。
まとめ
このブログでは、JFrog Platform無料版の取得から、JFrog Artifactoryにアーティファクトを登録し、 ビルドの情報を確認する部分までを流れに従って説明しました。
「設定すること、結構多いな」と感じられた方もいるかもしれませんが、 ここで説明したほとんどは初期設定としての部分です。 これらの設定ができれば、ステップ4として挙げたビルドを行うだけで管理が行われます。 初めの人の一歩目は苦労が多いかもしれませんが、進み出してしまえば、後につづく人と一緒に メリットを感じながら進んでいただけると信じています。
是非お試しいただき、 不明点などがありましたら、弊社SNSや問い合わせフォームからお問合せください。
このブログで説明しきれなかったJFrog Xrayの説明は次のブログで紹介したいと思います。
おまけ: リポジトリの一括作成
本ブログでは、3つのリポジトリをそれぞれ説明するために1つずつ作成しましたが、 これら3種類を各用途に分けて一括作成する「Quick Repository Creation」を利用するとよりリポジトリを早く作成することができます。
画面右上のメニューにある「Quick Repository Creation」(赤枠)をクリックします。
次に作成したいリポジトリのパッケージマネージャを選択します。
リポジトリ名の接頭語になるキーワードを「Repository Prefix」に入力し、右下「Create」を押下すると画面に表示されていたリポジトリが作成されます。
なお、上記のようにJava系のパッケージマネージャを作成する場合は、開発・本番各環境用に分けられるリポジトリも併せて作成されますが、これらは各パッケージマネージャの性質により異なります。Quick Repository Creation機能を使う場合は、作成前に画面で確認しましょう。