Managed Service Column <システム運用コラム>

コンテナサービスとは

Category: 入門編

2021.02.05

はじめに

ここ数年、仮想化技術の一つであるコンテナサービスが注目を集めています。コンテナサービスに関する用語は多数ありますが、ここではその中から「コンテナレジストリ」について、概要や種類、運用上の注意などについてまとめます。

コンテナレジストリとは

コンテナレジストリとは、コンテナエンジンが扱うコンテナイメージファイルを保管する場所であり、またレジストリにおいてコンテナイメージのバージョン管理や配布を行えるツールです。

アプリケーションを構成するコンテナ内のファイルとコンポーネントを「コンテナイメージ」と呼びます。コンテナイメージをレジストリにアップロード(push)したり、レジストリからダウンロード(pull)したりすることによってイメージの共有が可能です。
さらに、このコンテナイメージを使うことで、スケールアウトや他のシステムへの移行が迅速に行えるようになります。

2種類のレジストリ:パブリックレジストリとプライベートレジストリ

コンテナレジストリは、パブリックレジストリとプライベートレジストリの2種類に分けられます。それぞれの特徴は次の通りです。

パブリックレジストリ

公開されているレジストリをパブリックレジストリと呼びます。パブリックレジストリを使用すると、誰でもリポジトリを作成してコンテナイメージをホストし、他のユーザが使えるようにすることができます。

また、レジストリのためのインフラ構築やインフラのメンテナンスが不要なので手軽に始めることができます。基本的な機能を持つ標準のオープンソースイメージを利用して速やかにレジストリを立ち上げ、プロジェクトを開始したい場合などに適しています。

ただし、コンテナイメージの展開範囲が拡大するにつれ、パッチ適用や機密情報の漏洩防止、アクセス制御といったセキュリティ対策を講じる必要が出てきます。それほどセキュリティを気にせず使いやすさを優先したい場合には、パブリックレジストリが適しているでしょう。

プライベートレジストリ

プライベートレジストリは非公開のレジストリであり、使用する企業によってホストされるため、独自のレジストリを作成することができます。

独自のコンテナレジストリをホストすることで、きめ細かいアクセス制御、ユーザ認証やイメージ認証などの追加、定期的な脆弱性スキャンとパッチ適用を行うなど、安全性を高めるための独自の対策をとれるようになります。

プライベートレジストリは自由度が高い分、運用にはある程度の労力やスキルが必要となります。

プライベートレジストリ構築・運用時の注意点

プライベートレジストリを構築・運用する場合に、どのような点に注意すべきかを以下にまとめました。次の2点を具体化していきます。

  • 悪意のあるユーザの攻撃を防ぐ
  • イメージを安全性の高い状態に保つ

それでは、具体的な方法について見ていきましょう。

ロールベースのアクセス制御を行う

ロールベースアクセス制御(RBAC)を行うことで、アクセス権の悪用による攻撃を防ぐことができます。
例えば、イメージ管理者にはリポジトリへの push 権限を、イメージ利用者には pull 権限のみを与えるなど、リポジトリに対する操作のアクセス権をユーザのロールに応じて設定することが有効です。

RBACによりアクセスできるユーザが明確になるため、攻撃を受けるリスクを抑えることができます。ただし、前提として社内のセキュリティポリシーの制定と周知徹底が必要です。

スムーズにアクセス権を管理するには、コンテナイメージを格納するレジストリを、扱う情報の機密性によって分けるといった方法が考えられます。

push 時、pull 時に脆弱性スキャンを行う

脆弱性を含んだコンテナイメージがコンテナレジストリにpushされると、コンテナ実行時に脆弱性が拡散され攻撃を受けるリスクが高まります。そのため、コンテナイメージのpush時・pull時に脆弱性スキャンを行うことで、コンテナイメージを利用する際にそれに含まれる脆弱性を攻撃されるリスクを減らすことが重要です。

脆弱性のあるイメージがそのままになってしまう理由として、内部ファイルのアップデート不足などによりイメージが古くなっていることが挙げられます。
脆弱性スキャンと並行して、定期的にコンテナイメージをアップデート・再ビルドする、あるいは古いコンテナイメージを定期的に削除すると、脆弱性によるリスクをより低減させることができます。

コンテナイメージにデジタル署名をする

ビルドしたコンテナイメージにデジタル署名を追加すると、イメージ発行者の真正性とイメージ自体の信頼性の検証ができます。署名を用いてイメージを検証することで改ざんされていないイメージのみを取得したり、イメージの署名と検証を徹底することで不正なユーザによるpushを判別・拒否したりすることが可能です。

push 時に機密情報をスキャンする、機密情報を中央リポジトリで管理・転送先アプリを制限する

IDやパスワードなどの機密情報を、暗号化していないまま直接コンテナイメージに記載してしまうと、第三者に漏洩する可能性があります。機密情報の漏洩を避けるためには、ステップごとに安全性を高める対策が必要です。

最初のステップでは、コンテナイメージのpush前の対策を行います。
具体的には、コンテナイメージをレジストリに push する際に機密情報が含まれていないかスキャンし、機密情報があった場合はpushしないことです。そもそも機密情報がpushされていなければ流出の可能性はなくなります。

次に、コンテナイメージをpushする際の対策です。
機密情報をpushする場合は、暗号化して中央リポジトリに保存するようにし、直接記載しない方法も有効です。さらに、当該情報を利用することを想定しているアプリケーションだけが受け取ることのできるように転送先を制限すれば、不正な取得を防ぐことができます。 このように暗号化し安全性を高めることによって、機密情報の漏洩防止対策を行いましょう。

ログ監視・変更監視など不正な通信の監視を行う

適切な管理が行われていないレジストリは、コンテナイメージを改ざんされ、不正なプログラムが侵入するリスクがあります。自前でレジストリサーバを構築する場合は、サーバへの不正アクセス監視やログ監視・変更監視などの通信管理が必須です。

アクセス制御を行ったうえで、不正な通信の監視を行った方が攻撃や情報漏洩のリスクはより低くなります。ログの監視については、問題が発生した場合に要因や経路のトレーサビリティを確保するため、ログの長期保管も対策の一つだといえるでしょう。変更監視は不正な変更・改ざんの早期発見と復旧のために有効な手段です。

おわりに

コンテナイメージファイルの保管やバージョン管理・配布を行うコンテナレジストリは、コンテナサービスを運用するうえで理解しておきたいことの一つです。パブリックレジストリとプライベートレジストリの違いや、行うべきセキュリティ対策などを把握することで、自社に合ったシステム運用が可能になります。
アクセス制御や脆弱性スキャンなど、安全性をできる限り高めた状態で運用するようにしましょう。

Tag: コンテナレジストリ コンテナ

関連記事

Contactお問い合わせ

お見積もり・ご相談など、お気軽にお問い合わせください。

single.php