開発モデル、ワークフロー、プロセス、アプリのレイアウトといったイメージは、コンテナベースのアプリ開発に深く関わる際、大変役立ちます。各開発段階で道しるべとなりますが、重要なイメージが散在すると、助けどころか煩わしさを招きます。
コンテナレジストリは、すべての重要なイメージを一元化することで、開発プロセスを大いに効率化します。
定義上、コンテナレジストリとは、コンテナイメージを一元管理し保存するプラットフォームです。これらのイメージはクラウド上に展開され、さらにコンテナワークロードのテンプレートとして利用できます。
コンテナベースのアプリの開発に関わる開発者は、このリソースにアクセスしてコンテナイメージをプッシュ/プルできます。
このリソースはCI/CDやDevOpsの開発手法で広く利用されています。また、Kubernetesやコンテナベースのアプリのエンドポイントとしても活用され、いずれの場合もイメージ管理に大いに寄与し、一元的なアクセスを可能にします。
コンテナイメージには、アプリ開発に不可欠なさまざまな要素やファイルが含まれています。拡張性に優れ、CI/CDやDevOpsの開発手法とも連携しやすく、システムライブラリやシステムツールなどあらゆるコンポーネントがその一部を成します。
開発過程では、様々な段階で多数のコンテナイメージが作成され、その効果的な保存が求められます。レジストリは他システムへの取り込みが容易なため、多くの開発専門家がイメージの管理に利用しています。
レジストリにはパブリック型とプライベート型の2種類があり、それぞれ異なる方式で動作し異なる利点が提供されます。レジストリを利用する際は、まず両方の種類について理解することが重要です。
まずは広く利用されているパブリックレジストリから紹介します。いずれのユーザーもコンテナイメージを保存・共有できる場合、レジストリはパブリック型となり、サブスクリプションなしで誰でも利用可能です。Docker Hubはこの例として非常に有名です。
公式の著作権付きプロフェッショナルなコンテナイメージが用意され、主にオープンソースで提供されますが、中にはフリーミアム型のものもあります。
プライベートレジストリは、特定のベンダー固有の権限が伴う専用のレジストリです。必ずしもオンプレミスに限定されず、クラウドホスト型の場合もありますが、ベンダーがアクセス許可や変更リクエストの管理、イメージの独占的権利を有しています。
プライベートレジストリの利用者は、イメージに対する制御がほとんどなく、サブスクリプション料金を支払い、管理者の許可に従って利用します。
各タイプにはそれぞれ長所と短所があり、たとえば:
パブリックレジストリやプライベートレジストリを利用する場合でも、イメージが登録前後に適切に検査されないとリスクが伴います。
実際、イメージがレジストリに登録された後もセキュリティリスクが発生するため、初期のスキャンだけでは不十分です。自動またはサードパーティの協力を得た継続的なスキャンが有効な対策として注目されています。
そのため、多くの有名なパブリック・プライベート双方のコンテナレジストリには、内蔵のスキャン機能が搭載されています。なぜコンテナレジストリのスキャンに注目するのか、またAPIセキュリティの観点からなぜ重要なのか、以下の理由に注目してほしいです。
完全自動のDevOpsやCI/CDの開発手法では、レジストリ設定の不備やアクセス権の制御不足によるリスクが常に高く、これらの脅威が未検証で有害なコンテナイメージの混入を招く可能性があります。
各開発段階での徹底スキャンにより、潜在的に危険なイメージを特定し、不正なイメージが登録されるのを防ぎ、イメージのバージョン履歴を監視して許可されない更新を制限します。
前述のように、パブリックレジストリのイメージは無料で利用でき、熟練者に悪用されやすいです。公開イメージのセキュリティや不正な活動を監視する主体が存在しないため、利用には常にリスクが伴います。
公式イメージを利用すればある程度の安全性は確保されますが、知らぬ間に攻撃の足掛かりとなる可能性もあります。
パブリックレジストリのイメージを安全に利用するための有効な対策は、脆弱性管理ツールを統合し、継続的かつ定期的なスキャンによって自動的に脆弱性を評価することです。
コンテナイメージには、パスワード、アクセスキー、秘密鍵、トークンなどの重要な情報が含まれており、ハッカーにとっては金鉱のような価値があります。これらを利用して攻撃が実行される恐れがあります。
定期的なスキャンにより、レジストリ内の秘密情報を守り、新たなイメージバージョンに対する是正措置を迅速に実施できます。
意図的であれ偶然であれ、コンテナイメージ内にマルウェアや不正なスクリプトが潜んでいる可能性があります。
これらはハッカーが攻撃を行う際に利用され、実行中に攻撃が発生し、従来の署名やパターンによるスキャンを回避する場合もあります。
この場合、高度に保護されたクラウドホスト型サンドボックス環境でイメージを実行することが理想的なセキュリティ対策となります。こうしたソリューションはCI/CDパイプラインと連携し、機能が有効な状態でのスキャンを実施します。
ご存じの通り、一度作成されたコンテナイメージは変更できず、新バージョンのリリースによってのみ更新が可能です。このプロセスでは、多くの古いパッケージやライブラリが放置されがちです。
これらの古い要素はハッカーに悪用され新たな脆弱性を引き起こすため、適切な管理が必要です。CI/CDパイプラインにスキャナーを導入することで、リスクのあるパッケージを容易に特定し、問題が生じる前に除去できます。
コンテナレジストリは開発プロセスを効率化するためのものですが、それに伴い一定のセキュリティリスクが存在するため、安易な利用は避けるべきです。たとえば、非公開のコンテナイメージの脆弱性が、保存されたコンテナや利用中のソフトアプリに悪影響を及ぼす恐れがあります。
また、セキュリティが不十分なコンテナイメージは、短時間で攻撃経路となり深刻な被害をもたらす可能性があるため、適切なセキュリティ対策を講じる必要があります。
以下のコンテナレジストリのセキュリティ対策は世界トップクラスであり、その有効性が実証されています。
各コンテナイメージには、マニフェストとダイジェストという2つの固有要素が付随します。JSONベースのマニフェストは、タグや設定情報などイメージ固有の詳細を示します。
イメージのSHA-256マニフェストハッシュがダイジェストであり、各イメージに独自の参照情報を付与します。万一、イメージが不正に変更された場合でも、ダイジェストによりその変化が検出され、不正な変更を容易に確認できます。
古いリソース、ソフト、またはコンテナイメージは対象システムやアプリに深刻な脅威をもたらします。古いイメージでは最適なコンテナを期待できず、脆弱な結果を招く可能性があります。
また、古いコンテナイメージは持続的な脆弱性を招くため、最終的な解決策はイメージの更新にあります。コンテナイメージを使用する前に監査を実施し、定期的な監査を行うことで脆弱なイメージの混入を防ぐことが望ましいです。
過度かつ制御されていないコンテナイメージの利用は、レジストリのセキュリティ問題の主要な原因となります。そのため、ユーザー権限を細かく制限することが必須です。最小権限の原則やプロジェクト固有のイメージへのアクセス限定といった対策が有効です。
これらの対策により、例えば更新権限のない利用者に書き込みアクセスを許さないなどの制限が実施されます。
DevOpsツールなどのリソースは、権限制限と変更リクエストの事前検証を徹底し、十分な検証なしに変更リクエストを処理してはなりません。
明確な役割分担、細かいアクセス制御、厳格な検証プロセスが整ったレジストリが最適な選択肢です。このようなシステムは、許可範囲外のアクセスや寄稿リクエストには応じません。
サードパーティのアクセスの場合、十分に監視されないとCI/CDパイプラインやコンテナレジストリにさらなるセキュリティリスクをもたらすため、特に注意が必要です。
コンテナレジストリを賢明に選定するには、次のような機能が備わっているかを確認することが大切です。
これらの要素を踏まえ、貴社の要件に最適なものを選定してください。
このリソースを利用する際は、広範な市場調査を通じて提供されるオプションを把握し、貴社の開発目標に最も合致するものを選定することが重要です。以下、市場で有望な選択肢をいくつか紹介します。
Microsoft提供のACRは、多機能で高い能力を備えたオプションです。Docker Registry 2.0に基づいており、Azure RBAC認証方式が採用されています。
コンテンツトラスト、保持ポリシーに基づくタグ未設定のマニフェスト、不要または古いイメージの削除機能など、独自の優れた機能があり、他のサービスにはない特徴です。
コンテンツトラスト機能はDockerの考え方に沿い、プッシュされたイメージに署名を付与し、Dockerクライアントが利用前にイメージの整合性を確認できるようにします。ACRは単なるイメージの保存にとどまらず、OCIアーティファクト、Helm Chart、イメージの開発統合も可能にします。
ECRでは、パブリックおよびプライベートのDockerレジストリ利用が可能で、AWS IAMとの連携も容易です。AWS IAMをサポートすることで、ユーザー、アプリ、関連サービスのアクセスレベルを制御できます。
ユーザー単位でコンテナイメージの利用サイクル全体を監視・制御できるほか、内蔵の脆弱イメージスキャン機能によりDevSecOpsへの最適な選択肢となります。Amazon ECRの特徴は、既存のセキュリティリスクの深刻度を把握するためのCVEsデータベースにあります。
イメージの上書きを防ぐため、AWS Elastic Container Registry (ECR)のImmutable Imageタグ機能を利用すれば、上書きが発生しません。
デフォルトの選択肢であるDocker Hubは、その人気の高さが際立っています。パブリックのコンテナイメージに無料でアクセスでき、特に初心者の開発者に広く利用されています。
しかし、無料であることが仇となり、暗号通貨の不正マイニングに利用された事例もあり、イメージのプル/プッシュ制限で悪用をある程度抑制しています。
プロ向け機能を求める場合、有料プランも提供され、大いに価値があります。
Helm Chart機能を備えた無料のコンテナレジストリをお探しなら、GitLab独自のコンテナイメージを試すと良いでしょう。セルフホスト版とクラウド版の両方で利用可能で、クリーンアップポリシーにより同一の正規表現に沿ったタグの削除が容易です。
さらに、Package Registry機能も無料で利用でき、GitLabを広く活用する場合には特にお勧めです。
Package Registryの成功を受け、GitHubは2020年にコンテナイメージを導入しました。パーソナルアクセストークンを用いたエンドツーエンドの認証が可能なため、シームレスな認証が求められる場合に適しています。
GitHubの認証情報を利用して直接認証でき、AzureやAWSほどの機能はないものの、GitHubを多用するユーザーからは支持されています.
コンテナイメージはCI/CDやDevOpsパイプラインの重要な要素であり、開発の自動化を大いに促進します。しかし、その効果的な利用は、過剰利用の防止、脅威を検出するスキャナーの配置、継続的な監査実施など複数の要素に依存します。そして、貴社の開発目標に適したレジストリの選定が求められます。
パブリックレジストリであれプライベートレジストリであれ、コンテナセキュリティに対して十分な安全対策を講じることが必要です。
最新情報を購読