コンテナのセキュリティの強化と向上
コンテナを強化する場合、セキュリティ手段を実装して攻撃対象領域を減らし、潜在的な脅威に対する回復性を向上させる必要があります。このセクションでは、コンテナを強化する場合によく使われる手法をリストにしています。このリストは包括的なものではなく、コンテナのセキュリティは組織のインフラストラクチャによって異なります。
詳細については、Security and Hardening Guideを参照してください。
1. 最小限のベースイメージを使用する
SUSE Manager 5.0はSLE Micro 5.5をベースとして使用します。このイメージには事前インストール済みのパッケージがほとんどないため、潜在的な攻撃対象領域が少なくなります。
- サイズの削減
-
最小限のベースイメージは従来のオペレーティングシステムイメージと比べて大幅にサイズが小さくなっています。これらのイメージでは、不要なパッケージとライブラリを削除することで全体的なフットプリントが最小限に抑えられているため、ダウンロード時間が高速化され、ストレージ要件が減少します。
- 的を絞った機能
-
最小限のベースイメージは、コンテナ化されたアプリケーションを実行するために必要な必須機能を提供するように設計されています。最小限のベースイメージには通常、以下が含まれます。
-
コアシステムユーティリティ
-
ランタイム環境(シェルなど)
-
必須ライブラリ
最小限のベースイメージでは通常、次のような必須ではないコンポーネントは除外されます。
-
マニュアル
-
開発ツール
-
不要なデーモン
-
- セキュリティの向上
-
最小限のベースイメージを使用すると、インストールされているパッケージと依存関係の数が最小限に抑えられ、コンテナ環境内の攻撃対象領域と存在的な脆弱性が減ります。これにより、悪意のある攻撃者がシステムを悪用するために使用できる手段が限定されます。
- 柔軟性
-
最小限のベースイメージでは、開発者はコンテナ化されたアプリケーションをより柔軟にカスタマイズおよび最適化できます。これらのイメージには基本的なものしか含まれないため、開発者は、追加で組み込むコンポーネントや依存関係をより細かく制御し、特定のアプリケーション要件に合わせてコンテナ環境を調整できます。
2. 定期的に更新する
セキュリティパッチと更新でコンテナイメージを最新の状態に保ちます。次のようなツールを使用してコンテナイメージを定期的にスキャンし、脆弱性がないかどうかを確認します。
3. イメージの署名を有効にする
デジタル署名を使用して、コンテナイメージの真正性と整合性を検証します。イメージの署名および検証メカニズムを実装して、信頼済みのイメージのみが配備されるように徹底します。
- デジタル署名
-
デジタル署名は、コンテナイメージなどのデジタルコンテンツの真正性と整合性を検証するために使用される暗号化メカニズムです。デジタル署名では、イメージのコンテンツのハッシュまたはチェックサムを生成し、コンテンツを機密鍵で暗号化して署名を生成する必要があります。対応する公開鍵を使用してこの署名を復号して、その真正性を検証できます。
- 機密鍵と公開鍵
-
イメージの署名は非対称暗号化に依存し、機密鍵と公開鍵の暗号鍵のペアを使用する必要があります。機密鍵は署名の生成に使用され、公開鍵は署名の検証に使用されます。機密鍵は機密を保ったまま安全に保管されます。一方、公開鍵は自由に配布できます。
- 信頼モデル
-
イメージの署名によって信頼モデルを確立し、この信頼モデルによってイメージの署名者を暗黙的に信頼し、その真正性を保証します。組織では通常、イメージに署名するための独自の機密鍵を維持しており、ユーザはその組織の鍵で署名されたイメージを信頼します。イメージの利用者は、対応する公開鍵を使用して署名を検証し、悪意のある攻撃者によってイメージが侵害または改ざんされていないことを確認できます。
- レジストリの統合
-
イメージの署名は多くの場合、Docker Hubや、Harborなどのプライベートレジストリといったコンテナイメージレジストリに統合されます。レジストリには、イメージの署名のサポートが組み込まれている場合があり、ユーザはレジストリプラットフォーム内で直接、イメージに署名および検証できます。通常、署名されたイメージには、イメージの署名ステータスと署名者のIDを示すメタデータでタグが付けられます。
- 検証プロセス
-
コンテナイメージを配備する前に、イメージの利用者(たとえば、コンテナランタイムまたはオーケストレーションプラットフォーム)は、署名者の公開鍵を使用してイメージの署名を検証します。署名が有効でイメージのコンテンツに一致する場合は、そのイメージを真性であるとみなして安全に配備できます。署名を検証できない場合や、署名がイメージのコンテンツに一致しない場合、イメージは潜在的なセキュリティリスクを防止するために拒否されます。
4. ユーザ特権を実装する
コンテナは最小特権の原則に従って実行します。コンテナをrootとして実行することは可能な限り避けます。代わりに、非rootユーザを作成し、コンテナ内ではこのユーザを使用して存在的なエクスプロイトの影響を抑えます。
5. セキュリティコンテキストを使用する
Podmanなどのコンテナランタイムで提供されているセキュリティ機能を利用します。リソース制限、ネットワークポリシー、およびSELinux/AppArmorプロファイルを強制するようにセキュリティコンテキストを設定します。
6. ネットワークセグメンテーション
ネットワークセグメンテーションを実装して、コンテナを相互に、およびホストシステムから分離します。コンテナネットワークプラグインまたはオーバーレイネットワークを使用して、ネットワークポリシーを強制し、コンテナの通信を制限します。
7. ランタイムアクティビティを監視する
コンテナランタイムのモニタリングツールを使用して、不審なアクティビティをリアルタイムに検出して対応します。コンテナのログ、ファイルの整合性、およびシステム呼び出しを監視し、侵害の兆候や悪意のある挙動がないかどうかを確認します。
8. コンテナの機能を制限する
コンテナ内でLinuxの不要な機能を無効にして、特権エスカレーション攻撃の潜在的な影響を軽減します。`capsh`などのツールを使用し、必要に応じて機能を削除または制限します。
9. ホスト環境をセキュリティ保護する
基礎となるホストシステムが適切にセキュリティ保護されていることを確認します。オペレーティングシステムパッチを適用し、ファイアウォールルールを設定し、アクセス制御を実装して、外部の脅威からホストを保護します。
10. ランタイム保護を実装する
seccompやAppArmorプロファイルなどのランタイム保護メカニズムを使用して、コンテナプロセスが実行できるアクションを制限します。きめ細かいセキュリティポリシーを定義して強制し、不正アクセスや悪意のあるコードの実行を防止します。