Google Cloudとコンテナの継続的なセキュリティ
本文の内容は、2020年7月27日にVíctor Jiménez Cerradaが投稿したブログ(https://sysdig.com/blog/essential-workflows-for-secure-devops/)を元に日本語に翻訳・再構成した内容となっております。
Secure DevOpsのためのこれら5つの重要なワークフローに焦点を当てることは、コンテナとKubernetesのモニタリング、セキュリティ、コンプライアンスの実装を開始するのに役立ちます。
あなたはDevOpsを採用し始めて、それがコンテナとKubernetesへのアプリケーションのデプロイを劇的に簡素化することに気付くかもしれません。ただし、アプリケーションの管理、セキュリティ保護、およびトラブルシューティングのための一連の複雑さが新たに追加されることにも気付くでしょう。
組織は、基本的なCI/CDプロセスをすばやくセットアップしたいため、監視とトラブルシューティングの要件への対応を遅らせることがよくあります。彼らはセキュリティとコンプライアンスの要件について妥協し、それらの要件は開発を遅くすると考えています。その結果、チームは、本番環境でのアプリケーションのパフォーマンスと可用性に影響を与える問題に対処する準備ができていません。一部のアプリは、セキュリティとコンプライアンスの監査に合格できないため、製品のロールアウトが遅れる可能性があります。
ソリューションはDevOpsの基本にあります。自動化は、DevOpsを効果的にするための柱の1つですよね?DevOpsの保護についても同様です。
適切なツールと戦略を使用すると、監視、セキュリティ、およびコンプライアンスの実装によって速度が低下しないことを体験できます。むしろ、コンテナを運用環境で実行するために必要な自信を与えてくれます。
そこで、DevOpsパイプラインの監視と安全性の確保を始めたいと思います。
すでにインターネット上で推奨事項やベストプラクティスをたくさん読んだことがあるかもしれませんし、少し圧倒されていると感じているかもしれません。そこで、これらのヒントをセキュアな DevOps のための 5 つの重要なワークフローにまとめ、迅速に結果を得ることに集中できるようにしました。
それぞれを紹介しましょう。
イメージスキャンとは、セキュリティの問題、脆弱性、悪い習慣を検出するために、コンテナイメージのコンテンツとビルドプロセスを分析するプロセスを指します。
ツールは通常、複数のフィード(NVD、Alpine、Canonicalなど)からCommon Vulnerabilities and Exposures(CVE)情報を収集して、イメージに脆弱性がないかどうかを確認します。最も一般的なセキュリティの問題と悪い習慣を探すために、すぐに使えるスキャンルールを提供するものもあります。
イメージスキャンは、Secure DevOpsワークフローに組み込むための重要な機能です。防御の最前線の1つとして、脆弱性が悪用される前にそれを検出してブロックするのにも役立ちます。このプロセスにセキュリティ分析とコンプライアンスの検証を統合することで、問題を早期に解決し、デプロイメントの速度低下を防ぐことができます。これは、「セキュリティのシフトレフト」と呼ばれます。
たとえば、CI/CDパイプラインにセキュリティ分析とコンプライアンス検証を統合して、脆弱性がレジストリに到達するのをブロックしたり、レジストリでサードパーティのイメージの脆弱性から保護したり、実行時に新しく検出されたCVEから保護したりできます。
幸いなことに、イメージスキャンは実装と自動化が簡単です。効果的なコンテナーイメージスキャン戦略の採用に役立つヒントについては、本番環境におけるコンテナイメージスキャン、12のベストプラクティスを確認してください。
コンテナがデプロイされると何が起こるか?イメージスキャンでは、発見されていない脆弱性や設定ミスを見逃してしまう可能性があります。そのため、ランタイムセキュリティを実装する必要があります。結局のところ、アプリケーションは実行中にほとんどの時間を費やしており、最も脆弱性があるのはランタイムです。
運用中のワークロードを安全にするための主な戦略は、ゼロトラストアプローチを採用することです。最小限の権限とアプリケーションへのアクセスを許可することで、セキュリティインシデントが発生する可能性が低減します。
次に、最後の防御策として、リソースの予期せぬ使用、シェルセッション、ネットワークアクセスなどの異常な動作を探す必要があります。
攻撃を防ぎつつ、アプリケーションを破壊しないようなポリシーを作成するのは難しいことです。そのためには、アプリケーションが何をする必要があるのか、どのサービスがお互いに通信する必要があるのかなどを理解する必要があります。
効果的なランタイムセキュリティを実装するためのいくつかの推奨事項は以下の通りです。
クラウドネイティブのワークロードのランタイム保護のために、Kubernetesネイティブのコントロールを活用する。Kubernetesには、セキュリティツールと連携するために拡張できる効果的なリソースがすでに用意されているため、余分な複雑なレイヤーを追加する必要はありません。
たとえば、アドミッションコントローラは、特定の設定を許可またはブロックし、特定のコンテナをクラスタ上で実行できるかどうかを判断することができます。
さらに、ポッドセキュリティポリシー(PSP)は、実行時にポッドが受け取るパーミッションを定義することで、「最小特権」ポリシーを実施するのに役立ちます。例えば、コンテナが特権モードで実行されているかどうか、ホストネットワークやファイルシステムへのアクセス権を持っているかどうかなどを定義します。
手動でポリシーを作成するのは面倒なプロセスであり、長期的に維持するのは難しいので、ツールを活用して自動的にポリシーを構築します。
ほとんどのランタイムセキュリティツールは、アプリケーションの仕様に合わせてカスタマイズして適応させることができる、すぐに使えるポリシーを提供しています。Falcoは、デファクトのKubernetes脅威検知エンジンであり、そのルールフォーマットは、ランタイムセキュリティポリシーを書いて共有するためのアプローチ可能な方法です。
NIST、PCI、HIPAA、またはCISベンチマークなどのコンプライアンス標準は、チェックとベストプラクティスの集まりであり、これを実行すると、特定のユースケースに対してインフラストラクチャーが安全であることを確認できます。大規模な組織や政府のプロバイダーは準拠する必要があることが多いため、遅かれ早かれ、それらを実装する必要があります。
必須ではない場合でも、それらを検証することをお勧めします。たとえば、DockerとKubernetesのCISベンチマークを使用してプラットフォームとコンテナ設定を検証することで、コンテナ環境のコンプライアンスの実装を開始することをお勧めします。
心に留めておくべきことは、コンプライアンスは時々チェックするものではないということです。見るのをやめたときこそ、問題が発生する場所です。アプリケーションのライフサイクル全体にわたって継続的なコンプライアンス検証が必要です。
ビルド中に コンプライアンスを実装し、コンテナイメージスキャンポリシーを標準にマッピングします(つまり、ほとんどの標準では、ルートとして実行されているコンテナを確認する必要があります)または内部コンプライアンスポリシー(ブラックリストに登録されたイメージ、パッケージ、またはライセンス)。
また、ランタイム時にもコンプライアンスを実装します。すでに実装したベストプラクティスは、コンプライアンス標準の中核です。ほとんどのランタイムセキュリティツールには、PCIおよびNISTに関する特定の推奨事項をカバーする、すぐに使えるポリシーもあります。さらに、MITRE ATT&CKなどのフレームワークを使用して既知の攻撃を検出するランタイムポリシーをデプロイする必要があります。
フォレンジックのためのアクティビティ監査データのキャプチャーは、コンプライアンスにもメリットがあります。SOC2、PCI、ISO、HIPAAなどのコンプライアンス監査のランタイム変更の監査を含め、設定とポリシーの変更を記録することが重要です。
コンテナベースのアプリケーションの動的な性質を監視することは、クラウドサービスの高可用性とパフォーマンスにとって重要です。
コンテナは短期間で動的であり、常に変動します。コンテナが死ぬと、中身はすべてなくなります。SSHを使用したり、ログを確認したりすることはできません。モノリシックアプリケーションに使用されている従来のツールのほとんどは、問題が発生したときにほとんど役に立ちません。コンテナは、アプリケーションをパッケージ化して分離し、あらゆる場所に一貫してデプロイできるため、運用には最適ですが、同時に、トラブルシューティングが困難なブラックボックスになります。
さらに悪いことに、マイクロサービスベースのアプリケーションを複数のインスタンスに分散させ、コンテナを必要に応じてマルチクラウドインフラストラクチャー間で移動させることができます。これにより、イベントとメトリクスの関連付けが困難になります。これは通常、パフォーマンスと可用性の問題の原因を見つけるための鍵となります。
Kubernetesがすべてのサービスインスタンスを稼働し続けているかどうかを理解するには、Kubernetesオーケストレーションの状態を監視することが重要です。そうするために:
インフラストラクチャーからアプリケーションに至るまで、Kubernetesクラスタのサービスや運用状況など、あらゆるレベルで健全性とパフォーマンスのメトリクスを収集して監視します。
過剰なリソースを消費しているポッドを 特定し、キャパシティリミットを監視します。これは、クラスターとクラウド全体でキャパシティを最適化することにより、コストを削減するのに役立ちます。
最後に、自動スケーリングの動作を監視して、予期しない課金、アプリケーションのロールアウト、デプロイメントのロールバックを制御します。
レイテンシー、エラー、トラフィック、およびサチュレーションのメトリクスは、サービスの健全性を監視するためのゴールデン・シグナルとして知られています。これらのメトリクスは、サービスを利用しているユーザーが見たアプリケーションの実際の健全性とパフォーマンスを示しています。本当に重要なものを見ることで時間を節約し、アプリケーションの本当の問題を覆い隠してしまうような罠を避けることができます。
また、メトリクスにKubernetesとクラウドのコンテキストをタグ付けすることで、所有者を特定するのに役立ち、問題をより早く解決できるようになります。
Prometheusは、Kubernetes環境における可視性のデファクトスタンダードとなっています。チームはすでにPrometheusを使用している可能性が高いので、Prometheusと完全に互換性のあるモニタリングツール(PromQLやGrafanaダッシュボードを含む)を探して、その投資を活用しましょう。
PromCat.ioは、Kubernetesプラットフォームとクラウドネイティブサービスのための監視統合がキュレーションされ、ドキュメント化され、サポートされているPrometheus統合のリソースカタログであり、生産性を向上させることができます。
1つのグローバルアプリケーションで各ワークフローの情報を収集するようにしてください。アプリケーションの可用性とセキュリティを横断した単一の真実のソースは、チームがより迅速に問題を解決することを可能にします。そして、これは最終的には信頼性を向上させます。
安全なDevOpsのためのこれらの5つの重要なワークフローは、クラウドネイティブ環境のセキュリティ、コンプライアンス、監視を開始するのに役立ちます。
その後、チームがKubernetesとコンテナの経験を積むにつれて、セキュリティと復元力をさらに強化する、より高度なワークフローに進むことができます。
これらは、高度なトラブルシューティング、機械学習ベースの異常検出、脅威防止、インシデントレスポンスとフォレンジック、および拡張コンプライアンスコントロールです。これらの高度なエンタープライズワークフローには、DevOpsチームの効率を高める特別な機能が含まれています。
セキュアなDevOpsについての詳細をお知りになりたいですか?「Secure DevOps ワークフローを実現するための 5 つの鍵」をダウンロードしてください。
クラウド・アプリケーションをより迅速にシップする方法をご覧ください。Sysdig Secure DevOps Platformでセキュリティを組み込み、コンプライアンスを検証し、パフォーマンスと可用性を最大化しましょう。
無料トライアルを開始して、クラウドサービスのパフォーマンス、可用性、セキュリティの目標を達成しましょう。今すぐお試しください。