In this article
コンテナレジストリのセキュリティ:利用時に注意すべきセキュリティ上の懸念
コンテナはDevOpsプロセスにおける重要な要素です。アプリケーションのソフトウェアコンポーネントを分離し、あらゆるコンピューティング環境に一貫してデプロイできるようにします。つまり、コンテナ内のアプリは常に同じように動作します。
コンテナレジストリとは?
コンテナレジストリとは、アプリケーションを構成するすべてのコンポーネントを含むコンテナイメージを保存するリポジトリ、または複数のリポジトリの集合です。DevOpsプロセスの一環として、コンテナレジストリはコンテナベースのアプリケーション開発を支え、コンテナオーケストレーションプラットフォームと連携できます。レジストリはイメージを保存するだけでなく、次の方法で開発者がイメージを共有するための場所も提供します。
1. プッシュ:イメージをレジストリにアップロードする
2. プル:DockerやKubernetesなどの別のシステムにイメージをダウンロードする
「レジストリ」と「リポジトリ」を同じ意味で使う人もいますが、コンテナにおける両者の機能は大きく異なります。リポジトリはイメージの保存と管理に使われます。レジストリは複数のリポジトリで構成され、APIパスやアクセス制御のガイドラインも保存できます。
リポジトリにはさまざまな種類があります。次のようなものです。
ローカルで管理するもの
キャッシュプロキシとしてリモートで利用するもの
特定のパッケージに関連付けられていない汎用のもの
リモートとローカルのリポジトリを1つのURLにまとめた仮想コレクション
Cloud Native Computing Foundation(CNCF)によると、コンテナイメージとレジストリはDevOpsやクラウドネイティブアプリケーションの開発において重要な役割を果たします。そのため、イメージレジストリは開発プロセスのあらゆる段階で利用できます。
レジストリにはパブリックとプライベートの2種類があり、それぞれ多くの選択肢があります。どちらを選ぶか決める前に、開発者は次の点を確認しましょう。
レジストリに保存するコンポーネント。イメージに加えて、さまざまなプラットフォーム、コード、パッケージがコンテナに保存され、そこからアクセスされます。イメージレジストリ以外をサポートしていないコンテナもあります。
必要なセキュリティレベル
レジストリのホスティング場所
プライベートレジストリとパブリックレジストリの違いは?
パブリックコンテナレジストリは、インフラのセットアップが不要なため、手軽で迅速に利用できます。主に、オープンソースイメージを活用する小規模チームや個人に使われています。ただし、パブリックレジストリはセキュリティが比較的弱い傾向があります。
プライベートコンテナレジストリは組織がセットアップするため、企業のコンテナイメージストレージにセキュリティとデータプライバシーを組み込めます。プライベートレジストリは、オンプレミスでもリモートでもホスティングでき、開発者が完全に管理できます。最大の利点は、組織のニーズに合わせて自由に管理し、必要なセキュリティ対策を追加できることです。
プライベートとパブリック、どちらを使うべき?
予算に余裕のないごく小規模なチームには、無料プランを利用できるパブリックコンテナレジストリが最適です。ただし、無料プランでは一定期間内にコンテナイメージをプルできる回数に制限があります。一方、パブリックレジストリなら、開発者は一から作業を始める必要がなく、すでに公開されているイメージを進行中のプロジェクトに活用できます。
データプライバシーを最優先する場合は、プライベートコンテナレジストリを使いましょう。企業向けのパブリックコンテナレジストリもありますが、必要なプライバシーとセキュリティのレベルを考慮する必要があります。機密性の高いデータや、組織の知的財産に関わるものは、プライベートコンテナレジストリに保存すべきです。また、何らかの規制要件への準拠が必要な場合は、厳格に管理された環境が求められます。プライベートコンテナを使えば、イメージの保存場所や配布方法を管理できます。
最も安全なレジストリは?
利用できる特に安全性の高いコンテナレジストリには、次のようなものがあります。
レジストリ自体に安全性があるかどうかは一概に言えないため、組織はセキュリティツールと容易に連携できるソリューションを選ぶ必要があります。
コンテナレジストリを安全に利用する
コンテナセキュリティは、複数のプロセス、ツール、その他のリソースを組み合わせた多層的なアプローチです。悪用可能な脆弱性のリスクを減らすため、セキュリティのベストプラクティスに従ってコンテナ自体を適切に構築する必要があります。また、コンテナの各レイヤーにも個別のセキュリティ対策が必要です。レイヤーは次のとおりです。
コンテナイメージとそのソフトウェア
最初のコンテナ、オペレーティングシステム、その他のコンテナ間の相互作用
ホストオペレーティングシステム
ネットワークとストレージ
Kubernetesクラスターのランタイム
安全なコンテナイメージを実現することが最優先です。そのためには、次の3つのステップに従います。
1. コードとその依存関係を最初から保護します。このプロセスを自動化すると、開発者は潜在的な問題を早期に発見できます。
2. 信頼できるソースの最小限のベースイメージからビルドします。Docker Hubには、数百万のイメージと、さらに数百万のリポジトリがあります。また、信頼できるイメージ構築の出発点となるVerified Publishersも利用できます。
3. 開発ライフサイクル全体を通じて、すべてのレイヤーを管理します。脆弱性の管理が最も難しいのは、この領域かもしれません。最小限のベースから始め、必要に応じてセキュリティツールを追加することで、ライフサイクル全体を通してツールを簡単に削除したり、再構築したりできます。
Snyk Containerは、潜在的な脆弱性を検出し、イメージのセキュリティ向上とベースイメージの軽量化に役立つ推奨事項を提示するイメージスキャンソリューションです。人気のコンテナレジストリとも連携しているため、開発者はソフトウェアプロジェクト全体で使用するイメージの安全性を確認できます。