DevOpsを加速する、JFrog日本法人メンバーによるブログです。JFrog ArtifactoryやXrayといった自社ツールはもちろん、CI/CDやコンテナ技術(DockerやKubernetes)などDevOpsの一般的な内容も扱います。その他、日本でのDevOps事例紹介やお楽しみコンテンツも掲載予定です。

JFrogならではの面白くて役に立つブログを目指しますので、お楽しみに!

【翻訳】Docker Hubの変更をふまえて:DevOpsでリポジトリが抱えるリスクを低減する

デベロッパーアドボケイトのよこなです。これは同僚によるMitigating DevOps Repository Risks - DZone DevOpsを翻訳したものです。


Docker Hub: 最近の話題

Docker Hubはクラウドベースのリポジトリです。人気のDockerイメージが公開されており、エンドユーザーはそれを取得してクラウドネイティブなインフラやデプロイに使えます。Dockerイメージは軽量でポータブルなのでシステム間の共有も簡単に行えますし、作成したイメージをリポジトリに保存し組織内で共有することは誰にでも可能です。また、Dockerコンテナのイメージも共有出来ます。

そんなDocker Hubですが、2つのポリシー導入をきっかけに最近話題となりました。

  1. イメージ保持期間の制限
    Docker Hubのポリシーにより、無料アカウント(オープンソースプロジェクトや自動化されたビルドでよく使われているものです)から保存したイメージは6ヶ月間アクティブでない*1場合削除されます。

  2. ダウンロードの制限
    イメージのプルが制限され、匿名ユーザーは6時間あたり100回、無料アカウントだと6時間あたり200回までとなります。

Docker Hubがニュースになるのは今回が初めてではありません。2018年にはDocke Hub上で17個の悪質なイメージが見つかり、クリプトジャッキングにより9万ドル(およそ950万円)の設けを手にしたクラッカーが現れました。

インターネット上のいたるところでDocker Hubのイメージが盲目的に信頼され利用されていることは驚きです。Docker Hub内のアカウントやプロジェクトは相互に繋がっており、セキュリティ事故が発生した際にどの資産が影響を受けたかを正確に追跡するのは非常に大変です。組織に深刻な影響を及ぼす大規模な作業となるため、結果として、開発からデプロイ、運用に至るまで全ての作業の遅れに繋がるでしょう。

DevOpsチームはイメージリポジトリや自動ビルドを何時間も調査し、アカウントやプロジェクトに不審なアクティビティがないかを確認しなくてはなりません。また、パスワードをリセットし、脆弱なアカウントのイメージを削除・交換して、すでに行った作業をやり直す必要もあります。

Dockerの買収: 時代の終わり?

Dockerは他のパッケージングツールにはないものを提供してくれました。イメージの無料ホスティングと無制限・無条件の利用です。これは開発者コミュニティを惹きつける上で大きな成功を収めました。

しかし、GoogleによるオープンソースのKubernetesプラットフォームがコンテナ技術を誰でも使える存在へと変えたことで、Dockerの運命もまた、技術としても企業としても変化を余儀なくされました。さらに、2019年にはMirantisがDockerを買収し、エンタープライズ事業が譲渡されます。こうして、Dockerの企業としての未来はより陰りを見せることとなりました。

コードをスケーラブルなものとしてパッケージングし配布するのに重い仮想マシンしかソリューションがなかった時代、Dockerがソフトウェア開発においてコンテナ利用の開拓を促進したのは間違いありません。Dockerはまた、アプリケーションの柔軟性と移植性にも貢献しました。しかし、Googleの技術が人気を高め続ける中では特に、持続可能なビジネスモデルを見つけるのに苦労しました。

買収後、元のDocker, Inc.には注力すべきプラットフォームがたった2つだけ残されました。Docker DesktopとDocker Hubです。そして、DockerはDocker DesktopとDocker Hubという既存のプラットフォームを強化することで、ビジネスの中心を開発者からKubernetesへのパイプラインへと移しました。

Dockerはコンテナ化の分野において革新者である一方、事業利益を守るために最善を尽くしてきたとは言い難いのも事実です。例えば、彼らはKubernetesと競合しようとすることでオープンソースや規格の力を誤算しました。また、エンタープライズビジネスとコミュニティを適切に統合することが出来ず、その結果、よく知られていないMirantisという企業にエンタープライズ資産を買収されてしまいました。

直近の決断であるイメージ保持ポリシーやダウンロード制限といった変更を見ると、コミュニティの価値やエンタープライズの顧客に与えていたビジネスインパクトを彼らが過小評価したのではないかと考えてしまうかもしれません。

Dockerライセンスの課題

Dockerイメージはライセンス条項やコンプライアンス義務の異なる様々なソフトウェアやOSのパッケージで構成されています。エンタープライズで用いているコンテナのリスクを知るには、すべての依存関係を把握して企業のセキュリティガイドラインとオープンソースポリシーのコンプライアンスに則った評価をする必要があります。

Docker Hubからダウンロードしたイメージのライセンス条項をきちんと理解するには、イメージをドリルダウンし、OSのパッケージ、バンドルされたアプリケーション、依存ライブラリ、そしてこれらの全てのレイヤーのライセンスを集計して、準拠していないパッケージを識別出来る自動化されたツールが必須です。ライセンス条項と要件の遵守は非常に重要であり、ビジネスおよび法的なリスクを最小限に抑えることが出来ます。

JFrogはJFrog Xrayというセキュリティスキャンソリューションを提供しています。これによりDockerイメージをドリルダウンして脆弱性とライセンス遵守を見分けたり、セキュリティの研究者が発見した新しい脆弱性にフラグを立てたりすることが出来ます。

リスクの低減: 今こそ行動する時

Dockerが設けた新しいポリシーに影響を受けるのは次の2グループです。Dockerイメージを作成するオープンソースのコントリビューターたち、そしてDockerイメージを消化するDevOps愛好家たちです。

オープンソースグループはあまり使わないが重要なイメージの保持について問題を抱えることになります。一方、DevOps好きはSoR(System of Record)としてDocker Hubを使っている場合に課題に直面するはずです。それはダウンロードの制限により、警告なしにイメージが消えたり、ビルドが壊れたり、匿名または無料アカウントで行っているビルドがフェイルしたりするからです。

無料アカウントを使っている以上はこのような影響を受けてしまうとなれば、より高度に洗練された選択肢「Artifactory」へと移行するしかないですね!

f:id:ihcomega:20200915055858p:plain

  1. Artifactoryはイメージをキャッシュするので、上流のイメージ削除の影響を受けません。
  2. Artifactoryはキャッシュからイメージを提供するので、1イメージあたりDocker Hubからのプルは1回です。ダウンロード制限も避けられます。
  3. ある組織の全ての開発者・ビルドを行う全てのマシンに対して必要となるDocker Hubのアカウントは1つだけです。
  4. Artifactoryを使うと、1インスタンスあたりに複数のDockerレジストリを作成出来ます。ローカルリポジトリは組織内でDockerイメージを共有するためのプライベートなDockerレジストリとして使用可能です。詳細なアクセスコントロールも備えています。
  5. 開発チームが作ったセキュアなDockerイメージを含め、どんな種類のアーティファクトも保存・取り出しが可能です。こうして、アーティファクトを中央の管理された場所に保存することで、いかなるソフトウェア開発ライフサイクルにおいてもArtifactoryは欠かせないものとなります。

JFrogが提供するおすすめの代替ツール

JFrog Artifactory:

f:id:ihcomega:20200915060323p:plain:h100

  • 2GBのデータストレージと10GBのデータ転送量がついた無料プラン
  • より大きな組織向けの有料プラン

Artifactoryはシームレスにコンテナイメージをホスティング・配布するサービスです。1箇所に全てのバイナリファイルを保存することが出来るので、Dockerイメージが保持する全ての内容と情報をコントロールすることが出来ます(参考ページ: Dockerレジストリ)。 広範囲なインテグレーション、高可用性、強いセキュリティ、大規模でも耐えられるスケーラブルなストレージも提供していること、Dockerクライアントの最新バージョンとAPIをサポートするため継続的にアップデートされることも特徴です。

JFrog Container Registry:

f:id:ihcomega:20200915060329p:plain:h100

  • 無料かつ無制限のコンテナレジストリとして使えるオンプレミス版
  • 2GBのデータストレージと10GBのデータ転送量が無料となるクラウド版(SaaS)
  • クラウド上で無料にて使えるBYOL

JFrog Container Registry(JCR)は希望の環境でDockerイメージを管理するための全ての機能を備えています。また、Dockerと完全に互換性があるので、チームに必要ないかなるツールともネイティブに連携出来ます。

そして、全Dockerイメージを管理する単一のアクセスポイントとして使用可能です。安全で信頼性が高く、一貫性があり、ビルドエコシステムと統合されたリモートのDockerコンテナレジストリへの効率的なアクセスを実現します。

管理者は詳細なパーミッションコントロール機能で誰が何にアクセス出来るかを制御しながら、パブリックであれプライベートであれ、必要な数だけDockerレジストリを管理出来ます。そして、リッチなメタデータと共にコンテナを保存することで、コンテナの内部を層状に表示するユニークで包括的な画面を提供しており、コンテナの中に何があるのか把握するのに役立ちます。

持続可能なコンテナ・エコシステムの構築

DockerやKubernetesなどのクラウドネイティブな技術を使う以上、いかなる企業にとっても成功するためには良質なコンテナ・エコシステムが不可欠です。Docker Hubのように無料のリソースでコミュニティを支えるというDockerが行ってきた偉業は称賛に値します。しかし、無料でサービスを運営し続けるのに必要な大量のデータやその転送を支えるべく、今抱えているユーザーのもとでマネタイズすることが必要であると彼らが気付き、そうした時代は終わりを迎えようとしています。

ビルドやテスト、デプロイを支えるためにJFrog ArtifactoryやJFrog Container Registryのようなローカルリポジトリ技術を各企業が持つと、Docker Hub、その他コミュニティが運営しているMaven, NPM, Go, Conanなど無料の中央リポジトリ、すなわちコミュニティの共有インフラにかかる負荷が軽減されます。これにより、コミュニティはスケールするインフラへの投資ではなく、パッケージの品質やセキュリティを高めることに集中出来ます。

同時に、チームやインフラで使われているイメージのコピーを保持し続けることで、仮に上流のコンテナイメージ削除やビジネスに影響しうるサービスの利用制限および停止が発生しても、組織のリスクを低減出来ます。アーティファクトを管理するシステムを用意することは、エンドツーエンドでソフトウェアを提供するプラットフォームにとって極めて重要なのです。

*1:訳者補足: 「アクティブでない」とはpullもpushもされていないことを指します。Docker Hub FAQより。