コンテナレジストリのセキュリティとは?
コンテナレジストリのセキュリティは、コンテナイメージの集中保管・配布システムであるコンテナレジストリの保護に重点を置いています。コンテナレジストリは、コンテナ化されたアプリケーションの整合性とセキュリティを確保する、コンテナエコシステムにおいて極めて重要な役割を果たします。適切なコンテナレジストリのセキュリティには、信頼できるレジストリの使用、厳格なアクセス制御の実装、脆弱性の監視、ホスティングサーバの安全確保が含まれます。さらに、安全でない接続を拒否し、古くなった画像を削除する要件もあります。コンテナレジストリのセキュリティを優先することで、組織はコンテナ化された環境を保護し、ユーザーや顧客の信頼を維持することができます。
コンテナレジストリのセキュリティ説明
コンテナレジストリのセキュリティは、コンテナエコシステムの重要な構成要素であるコンテナレジストリに焦点を当てています。 コンテナ・セキュリティの広範な物語において、レジストリはコンテナ化されたアプリケーションの構成要素であるコンテナ・イメージの管理者として機能します。このように、コンテナ登録は単なる保管庫ではありません。それはむしろ、アプリケーション・イメージの整合性が維持され、分配される結節点です。
コンテナ・レジストリの理解
コンテナ化された 環境では、ご存知のように、依存関係を持つアプリケーションはコンテナにパッケージ化され、ポータブルになり、プラットフォーム間でのデプロイが容易になります。コンテナレジストリは、コンテナイメージを一貫した方法でバージョン管理、検索、デプロイできる場所を提供することで、このプロセスに役立ちます。
コンテナレジストリは、コンテナイメージの集中保管・配布システムです。このレジストリにより、開発者と運用チームはコンテナイメージを保存、管理、共有できるようになり、コンテナ化されたアプリケーションや マイクロサービスの作成とデプロイに使用できるようになります。
公的および私的レジストリ
組織は、パブリックとプライベートのコンテナレジストリを組み合わせて使用して、コンテナイメージやその他の成果物を管理することができます。
Docker HubやGitHub Packagesのサブ機能であるGitHub Container Registryのようなパブリックレジストリは、組織がアプリケーションの基盤として使用できるオープンソースのイメージの膨大なコレクションを提供しています。これらのレジストリは一般に誰でもアクセスできるため、開発者は簡単に構築済みイメージを見つけ、利用することができます。
しかし、組織には特定の要件や独自のソフトウェアがあり、プライベートレジストリを使用しなければならないことがよくあります。
図1:コンテナ・レジストリ / リポジトリの公開 vs 非公開
Azure Container Registry、Amazon Elastic Container Registry、Google Container Registry などのプライベートコンテナレジストリは、独自のコンテナイメージや関連成果物を保管・管理するための、セキュアで管理された環境を提供します。これらのレジストリは、組織内の許可されたユーザーのみがアクセスできるようになっており、機密情報やカスタムメイドのイメージを安全に保つことができます。
パブリックとプライベートのレジストリを組み合わせて使用することで、組織はプロプライエタリなソフトウェアの管理を維持しながら、オープンソースの画像の利点を活用することができます。この2つのアプローチにより、組織はコンテナ管理ワークフローを最適化し、デプロイメントプロセスを合理化できます。
コンテナレジストリセキュリティの構成要素
レジストリはコンテナ化環境の運用方法の中心であり、組織には何万ものイメージが保存されている可能性があるため、レジストリのセキュリティ確保は ソフトウェア開発ライフサイクルの完全性にとって不可欠です。
脆弱性はアプリケーション以上のものを危険にさらす可能性があります。設定ミスを利用した攻撃者は、 CI/CD システムに不正にアクセスし、基盤となるOSにアクセスするために横方向に移動する可能性があります。彼らは正規のCI/CDフローを操作し、機密トークンを取得し、公開されたクレデンシャルを特定することで組織のネットワークに侵入できる本番環境に移動する可能性があります。
レジストリのセキュリティは、信頼できるレジストリとライブラリのみを使用することから始まります。脆弱性の変化を継続的に監視することは、ホスティングサーバーの安全確保や実質的なアクセスポリシーの実装と並んで重要です。適切なレジストリのセキュリティは、安全でない接続を拒否し、古くなったイメージにフラグを立てたり削除したりし、厳格な認証と承認の制限を実施する必要があります。
これらの対策を詳しく見てみましょう。
CI/CDにおけるイメージとアーティファクトの完全性の促進
画像やアーティファクトに関連するリスクを理解することは、その完全性を保証するための厳重なチェックを実装することの重要性を再認識させます。以下の戦略の実装を検討してください。
安全でない接続の拒否
公開レジストリはコンテナイメージへの匿名アクセスを許可する場合がありますが、中間者攻撃、不正改ざん、機密情報への不正アクセスを防ぐには、安全な接続を維持する必要があります。
安全でない接続を拒否するには、HTTPSやTLS暗号化接続のような安全なプロトコルのみを受け付けるようにシステムを設定します。まず、信頼できる認証局(CA)からドメインに有効なSSL/TLS証明書を取得し、インストールします。次に、サーバーまたはサービスの設定を更新して、HTTPSまたはTLSの使用を強制し、HTTPのような安全でないプロトコルを無効にします。セットアップによっては、ウェブサーバー(Nginx、Apacheなど)、ロードバランサー、アプリケーションの設定を調整する必要があります。また、HSTS(HTTP Strict Transport Security)のようなセキュリティ機能を使用して、サイトやサービスにアクセスする際には常に安全な接続を使用するようブラウザに指示することも検討してください。
古くなった画像の削除
特定の期間より古い画像や、一定期間未使用の画像など、古くなった画像を定義するポリシーを確立し、レジストリツールやAPIを使用して、ポリシーに基づいて画像をリストアップし、フィルタリングします。例えばDocker Registryでは、Docker Registry APIを使って画像のメタデータを取得し、最後にプッシュされた日付やタグでフィルタリングします。他のレジストリでは、同様のAPIまたはCLIツールが利用可能かもしれません。古くなったイメージを特定したら、適切なコマンドやAPIを使用して、レジストリのガベージコレクションのベストプラクティスに従って削除します。
サードパーティレジストリにおけるIAM問題の回避
特にGitHubのようなソース管理システム(SCM)では、リポジトリに 貴重なコードや資産が保管されています。不十分なIAMはCI/CDパイプラインにおけるセキュリティリスクにつながります。リポジトリのセキュリティとガバナンスを最適化するために、組織はシングルサインオン(SSO)とクロスドメインID管理システム(SCIM)を使用してアクセス制御を管理することができます。しかし、SSOはGitHub Enterpriseでのみ利用可能で、他のライセンスはリスクにさらされています。
GitHubアカウントの私用メールアドレス、ゴーストGitHubアカウント、不完全なオフボーディングなどの問題を軽減するために、二要素認証(2FA)を強制し、専用の企業アカウントでオンボーディングプロトコルを確立し、ユーザーアカウントのインベントリを管理します。SSOが有効な組織では、SCIMを実装することで、ユーザーの自動デプロビジョニングが保証され、古い認証情報によるアクセスがなくなります。IAMリスクに対処することで、リポジトリ、CI/CDエコシステムを保護し、すべてのシステムで高いセキュリティレベルを維持することができます。
十分な認証と認可の制限の採用
リポジトリに必要以上の権限を付与されたIDは、権限昇格の機会を開き、不正なコード変更、ビルドプロセスの改ざん、機密データへのアクセスを引き起こす可能性があります。自動化は、アクセス制御の検証、ユーザー権限のチェック、潜在的な脆弱性の特定を支援し、組織が以下のような日常的な事前対策を実施できるようにします:
- エンジニアリング・エコシステム全体のすべてのアイデンティティの分析とマッピング。各 ID について、ID プロバイダ、付与された権限、使用された権限を継続的にマッピングします。分析がすべてのプログラムアクセス方法をカバーしていることを確認します。
- 環境内のさまざまなシステムにわたって、各IDの不要な権限を削除します。
- 古くなったアカウントを無効化または削除するための許容期間の設定。この非アクティブ期間を超えた ID を無効にして削除します。
- すべての外部協力者をマッピングし、そのアイデンティティを最小特権の原則に合わせること。可能であれば、人間とプログラムアカウントに有効期限付きの権限を付与してください。
- 従業員が個人のメールアドレスや組織が所有していないドメインのアドレスを使用してSCM、CI、その他のCI/CDプラットフォームにアクセスすることを禁止します。異なるシステム間で非ドメインアドレスを監視し、コンプライアンス違反のユーザーを削除します。
- ユーザーがシステムに自己登録することを禁止し、必要性に基づいて権限を付与します。
- システム内の基本的な権限を、すべてのユーザーや、自動的に割り当てられたユーザーアカウントで大規模なグループに付与することは避けてください。
- 共有アカウントを使用するのではなく、特定のコンテキストごとに専用のアカウントを作成し、指定されたコンテキストに必要な要件セットを正確に付与します。
安全なストレージの実装
成果物を保管するための、改ざん防止された安全なリポジトリを確立します。バージョニングを有効にしてアーティファクトの変更履歴を管理し、リアルタイム監視を実装して疑わしいアクティビティを追跡して警告します。危殆化した成果物の場合、以前の既知の良いバージョンへのロールバックを容易にするようにシステムを構成します。
開発から生産までの完全性検証チェックの実施
ソフトウェアデリバリーチェーン全体を通してリソースの整合性を検証するプロセスと技術を実装します。開発者はリソースを生成する際、外部のリソース署名インフラを使用して署名する必要があります。後続のパイプライン・ステージでリソースを消費する前に、その完全性を署名機関に照合します。
コード・サイン
SCM ソリューションは、貢献者ごとに一意の鍵でコミットに署名する機能を提供し、署名されていないコミットがパイプラインを通過するのを防ぎます。
人工物検証ソフトウェア
Linux FoundationのSigstoreのような、コードや成果物の署名と検証のために設計されたツールは、検証されていないソフトウェアがパイプラインを進むのを阻止することができます。
コンフィギュレーション・ドリフトの検出
署名された Infrastructure-as-Code テンプレートを使用して管理されていないクラウド環境のリソースなど、構成のドリフトを検出するための測定可能な手段を実装します。このようなドリフトは、信頼できないソースやプロセスからのデプロイメントを示す可能性があります。
暗号化署名の採用
公開鍵基盤(PKI)を使用して、CI/CDパイプラインの各段階で成果物に暗号署名します。この方法は、署名を使用する前に、信頼できる認証局に対して署名を検証します。CI/CDパイプラインを構成して、無効または欠落した署名を持つ成果物を拒否することで、改ざんされたリソースや不正な変更をデプロイするリスクを低減します。
セキュリティで保護されたコンテナイメージのみを使用
コンテナイメージには、攻撃者がコンテナとそのホストに不正アクセスするために悪用できる脆弱性が含まれている可能性があります。これを防ぐには、信頼できるソースからの安全で信頼できるコンテナイメージを使用し、定期的にスキャンしてください。パブリック・レジストリからコンテナをデプロイする場合は、まずコンテナにマルウェアや脆弱性がないかスキャンすることが特に重要です。
マルチソース検証の実施
チェックサム、デジタル署名、安全なハッシュアルゴリズム、信頼できるリポジトリなど、さまざまなソースを使用して成果物の完全性を検証するマルチソース検証戦略を採用します。暗号アルゴリズムと鍵は、その有効性を維持するために常に最新の状態に保ってください。
サードパーティのリソース検証
ビルドプロセス中に実行されるスクリプトのように、ビルドおよびデプロイパイプラインに組み込まれるサードパーティリソースは、厳格な検証を受ける必要があります。これらのリソースを利用する前に、そのハッシュを計算し、リソース提供者が提供する公式ハッシュと比較します。
セキュリティ・スキャンの統合
CI/CDパイプラインは、イメージを作成する際に、吟味されたコード(本番環境で承認されたコード)のみを使用する必要があります。脆弱性スキャンツール、 ソフトウェア構成分析(SCA) 、 静的アプリケーションセキュリティテスト(SAST )をCI/CDパイプラインに組み込み、本番デプロイメントがイメージを取得するレジストリにイメージをプッシュする前に、イメージの完全性を確保します。また、ベストプラクティスに従ってください。例えば、不要なソフトウェアコンポーネント、ライブラリ、設定ファイル、シークレットなどをすべて削除する前に、イメージをビルドしてはいけません。
保守的で慎重なアプローチをとることで、チームは開発プロセスの早い段階で脆弱性に対処し、セキュリティインシデントのリスクを低減しながら、高いレベルのコード品質を維持することができます。すべてのレジストリタイプと統合できるコンテナイメージスキャンソリューションを選択します。Prisma Cloudのようなプラットフォームは、管理者に柔軟でワンストップの画像スキャンソリューションを提供します。
イメージ解析サンドボックス
イメージ解析サンドボックスを使用することで、コンテナ化アプリケーションの開発およびデプロイ時のコンテナ セキュリティ戦略が強化され、古い脆弱なパッケージやマルウェアが埋め込まれた可能性のあるコンテナ イメージを外部リポジトリから安全に取得して実行できるようになります。
サンドボックスの機能により、暗号通貨マイニング、ポートスキャン、変更されたバイナリ、カーネルモジュールの変更など、疑わしい異常なコンテナの動作を制御された環境でスキャンできます。静的解析では見逃してしまうような、ソフトウェアのサプライチェーンに潜むリスクを明らかにし、 疑わしい依存関係を 特定することができます。
- コンテナの詳細な ランタイムプロファイルの取得
- 画像のリスク評価
- ワークフローに動的分析を導入
バリデーション方針と監査スケジュールの確立
イメージとアーティファクトの完全性を適切に検証するために、組織は検証プロセスを定義する明確なポリシーを確立する必要があります。策定後は、内部ポリシーのコンプライアンスを定期的に監査し、弱点やコンプライアンス違反の分野を特定し、対処します。継続的な監視と分析により、異常や不正行為を検知することができます。
一目でわかるコンテナレジストリのセキュリティチェックリスト
- 信頼できるレジストリとライブラリの使用
- ホスティングサーバーの保護と強固なアクセスポリシーの実装
- 十分な認証と承認の制限の実装
- 成果物の安全な保管場所の確立
- CI/CD全体を通しての整合性検証チェックの実行
- 暗号署名の採用
- マルチソース検証の実施
- サードパーティのリソースの検証
- CI/CDパイプラインにセキュリティスキャンを統合
- 検証方針と定期的な監査スケジュールの確立
コンテナ登録に関するFAQ
- SCM は、コンテナイメージの構築に使用されるコードの一貫性とトレーサビリティを維持するのに役立ち、開発者はコンテナイメージの作成に使用された特定のコードバージョンを容易に特定できます。
- SCM により、開発者はコードに関する共同作業を行うことができ、構築されレジストリに保存されたコンテナイメージが組織の品質要件を満たしていることが保証されます。
- SCMツールは、CI/CDパイプラインと統合し、コンテナイメージのビルド、テスト、レジストリへのプッシュのプロセスを自動化することで、ワークフローを強化します。
ウェブフックとは、カスタムコールバックを使ってウェブページやウェブアプリケーションの動作を拡張したり変更したりするための方法です。これらのコールバックは、ウェブページやアプリケーションのソースコードに必ずしもアクセスできないサードパーティのユーザーや開発者によって維持、変更、管理される可能性があります。クラウドコンピューティングやDevOpsでは、リポジトリやデプロイ環境で特定のイベントが発生したときに、 CI/CDパイプラインなどの自動ワークフローをトリガーするためにWebhookが使用されます。Webhookは、イベントに対するリアルタイムの通知と自動反応を可能にし、クラウドサービスとツール間の自動化と統合を強化します。
Notary は、コンテナイメージなどのコンテンツの署名を公開し、検証するためのフレームワークを提供するオープンソースツールです。セキュアなコンテンツ配信とアップデートのためのTUF(The Update Framework)仕様を実装しています。Notaryは、ユーザーが受け取るコンテンツが発行者の意図したとおりのものであることを保証し、不正な改変から保護します。
Notaryは一般的にDocker Content Trustと組み合わせて、Dockerイメージに署名し検証するために使用されます。