JFrog PlatformとはJFrogのすべての製品をシームレスに統合したDevOpsプラットフォームだそうです。
バイナリー、成果物の管理、自動化を行うArtifactoryを中心に、成果物に含まれる脆弱性やライセンスのスキャン、SBOMのサポートなどを行うXray、ソフトウェアの配信を行うDistribution、Cl/CD 自動化およびオーケストレーションを担うPipelines、これらのプラットフォームを一元管理するMission Controlなどと言ったような複数のコンポーネントから成り立っています。
今回はこの中からArtifactoryとXrayを使って、DockerのイメージをJFrog Platformで管理してみました。
JFrog Platformで何が可能か
本題に入る前に筆者から一言を...
例えば、ちょっと前に話題になったLog4j問題もJFrog Platformのようなソリューションを使えば、問題の把握や解決までのプロセスが速くなるというメリットはあると思います。
自分たちが売っている製品や稼働しているサービスにLog4jが使われているか、該当のバージョンのソフトウェアが自分たちの製品やサービスに含まれているかなどは、SBOM(Software Bill Of Materials:ソフトウェア部品表)によってコンポーネントとソフトウェアのライセンスを日頃から適切に管理していれば、早急に対応できると思います(でも実際のところは、そこまでできていないのが正直なところです)。
ソフトウェア開発にDevOps CI/CDという取り組みがされていれば、万が一問題が発生した時もコードの静的なテスト、テスト環境を使った本番さながらのアプリケーションの動作テスト、本番環境へアプリケーションデプロイに向けたコンテナイメージと言った成果物の作成などを、開発者の希望する間隔で行うことができます(月一、週一、一日毎、一時間毎 等々)。
これにより、Log4jのパッチを適用した場合に自分たちのソフトウェアは問題なく動作するのかも、自動でチェック、検証、イメージ化されるので、何かことが起こってから対応するよりも早々に対応できます。
最近はアプリケーションをDockerやKubernetesを中心としたコンテナプラットフォームで動かすのが、日本でも当たり前になりつつあります。このようなコンテナーではアプリケーションを動かすための環境をコンテナイメージを使ってプラットフォーム上に展開します。コンテナプラットフォームを使う上で、コンテナイメージは非常に重要なものです。
本番環境をコンテナで実現するには、コンテナイメージは誰が作っているのか、メンテナンスは適切にされているか、コンテナイメージにはどういったライセンスのソフトウェアが含まれているのか、脆弱性は含まれていないかなどにも注意を向ける必要はあると思います(できれば開発初期から取組みたいところです)。
当然ながらこの分野には様々なソフトウェアやソリューションが用意されているので、様々なソフトウェアを組み合わせることでイメージのセキュリティを確保でき、結果的に自分たちのソフトウェアやサービスを安心、安全に提供できることに繋がります。
コンテナとイメージベースでアプリケーション開発をするとなると、「開発環境を共有する」必要も出てくると思います。コンテナーベースでアプリケーションを開発すると開発環境をイメージ化することで、あっという間に開発環境を手元で再現できます。ではこのイメージはどう他のユーザーに共有しましょうか。
色々なソフトウェアを組み合わせて目の前の課題を解決するのは非常に手間がかかりますし、ノウハウもある程度蓄積されていないと至難の業です。
私がこれまで長々と書いたような課題があるのであれば、おそらくJFrog Platformを使うことで最終的にはコスト削減や作業効率化につながるのではないかと思います。 JFrog Platformにはバイナリやイメージを共有するためのJFrog Artifactory、セキュリティとライセンスのスキャンとしてXray、CI/CDにより開発からデプロイまでのサイクルをあげて、アプリケーション品質の向上につなげるPipeline、開発の現場から遠隔の本番サイトへアプリケーションを届けるDistributionなど、様々な製品によって開発の様々な課題を解決できるためです。
JFrog Platformは14日はフル機能を試せますし、無料で使えるバージョンもあるので「ちょっと使ってみようかな」と思ったらこちらから登録できるようです。
今回はそのようないくつかの製品で構成されるJFrog Platformから、JFrog ArtifactoryとJFrog Xrayの機能を使ってみたレポートをご紹介しようと思います。
JFrog Platformを使うまでの流れ
ユーザー登録
まずユーザー登録をします。と言っても結構簡単で、次をみながらユーザー登録するだけです。
右側に「Skip Trial and Start with a Free JFrog Instance」というリンクがあります。JFrog DevOps PlatformのEnterprise版をトライアルしないでも良ければそのリンクをクリックします。14日経過すると、無料のCommunity版として使えるようです。
メールアドレスとパスワードでユーザー登録するか、GitHub、Googleアカウントのいずれかでユーザー登録できます。 いずれも登録のあとメールが届くのでリンクを踏んでユーザーを有効化するだけで使えます。
再度メールが届くので、指定されたURLにアクセスするとJFrog Platformが利用できます。
JFrog ArtifactoryでDocker Registryを動かす
JFrog Artifactoryで管理できる「パッケージ」は次のドキュメントにあるものがサポートされているようです。
今回の目的であるDocker Registryを動かすには、「Quick Setup」から「Docker」を選んでポチポチしていくだけで簡単に利用できます。
これを実際に使うには、ユーザーのトークンキーを使って「ログイン」する必要があります。
docker login USERNAME.jfrog.io
コマンドを実行するとユーザー名とパスワードの入力を促されますので、ユーザー名にJFrog Platformに登録したときに入力したメールアドレス、パスワードに後述の手順で発行したJFrog Platformユーザーのトークンキーを入力することで、そのレジストリーにDockerからイメージのPush、Pullが可能になります。
トークンキーを発行するには、「Edit Profile」を開き、Identity Tokensでトークンキーを作成します。このキーをパスワードとして入力するだけです。ユーザー名はアカウントのメールアドレスを入力します。
ログインしたあとは手元の環境でビルドしたイメージをこのレジストリーに登録すればよいです。登録する際に実行するコマンドについては書かれているとおり実行するだけです。
Dockerレジストリーにイメージを登録した際にXrayを使ってイメージスキャンできます。事前にリポジトリーの設定で「Xrayによるスキャン」機能を有効化しておくと、脆弱性がイメージにあるか、CVE番号は何番でそれはどのような脆弱性であるかといった内容を次のような感じでWebインターフェイスで確認できます。
一般的なCVEベースの脆弱性に対する情報のほか、JFrog開発者からの脆弱性に対する技術情報情報なども閲覧できますので、この脆弱性はどのような対処が必要なのか、もしくは必要ないのかなどと言った判断にも使えます。
今回はJFrogをDockerレジストリーとイメージスキャンとしてしか使っていませんが、インターネット越しに使えるプライベートなDockerレジストリーとしては非常に使いやすかったです。XrayもDocker DesktopのExtentionで使ったことがあって便利なのは知っていましたが、Dockerレジストリーとの統合が思った以上に使いやすくてよかったです。
今後、他のコンポーネントについても触ってみるつもりです。ある程度情報がまとまってきたら、またブログでご紹介したいと思います。