In this article
セキュアなアプリケーションを構築するためのクラウドネイティブセキュリティガイド
最新のクラウドネイティブアーキテクチャは、最先端のソフトウェア技術を活用し、クラウドファーストのインフラを中心に、企業がアプリケーションを安全かつ大規模にデプロイできるようにします。クラウドネイティブセキュリティは、この考え方をアプリケーションの保護に適用するものです。ゼロトラストや多層防御(DiD)などの概念を取り入れた、最新かつ実践的なアプローチです。クラウドネイティブアプリケーションセキュリティにも、専用に構築されたツールやサービスを活用した同様のアプローチが求められます。
クラウドネイティブセキュリティとは?
クラウドネイティブセキュリティとは、クラウドベースのプラットフォーム、インフラストラクチャ、アプリケーションを保護する取り組みです。開発プロセスの開始から本番環境に至るまでセキュリティを組み込み、複数のセキュリティレイヤーと新たな脆弱性の継続的な監視を実現します。

クラウドネイティブとは?
クラウドネイティブとは、クラウドを主要なホスティングプラットフォームとして設計されたシステムアーキテクチャの構築に焦点を当てた、設計原則、ソフトウェア、サービスの総称です。クラウドネイティブアプリケーションの主な目的は、最新のクラウドベースのインフラが持つ機能を活用し、継続的インテグレーションの手法を取り入れて開発とデプロイを迅速化することで、高いスケーラビリティ、回復力、安全性を実現することです。
クラウドネイティブは運用の簡素化も可能にします。ソフトウェア駆動型のインフラモデルを活用して高度な自動化を実現することで、従来のサーバーインフラの管理やデプロイに伴う煩雑な作業の多くをなくします。
上記の定義はクラウドネイティブを一般的に理解するための確かな基盤となりますが、Cloud Native Computing Foundation(CNCF)などによる、より具体的な定義もあります。
多くの場合、クラウドネイティブは「クラウドファースト」と捉えれば十分ですが、CNCFはベンダー中立のアプローチを重視し、最小限の追加設定でクラウドプロバイダー間を移行できるプロジェクトやソフトウェアを推進しています。また、CNCF最大のプロジェクトであるKubernetesが注力しているコンテナも重視されています。企業は、CNCFの定義の範囲外にあるホステッドサービスを使いながら、クラウドネイティブの一般的な定義に当てはまる場合もあります。どの定義が設計に最適かは、各チームが判断する必要があります。
クラウドネイティブアプリケーションとは?
クラウドネイティブアプリケーションとは、クラウドネイティブアーキテクチャを前提に構築、設計されたソフトウェアプログラムやサービスです。クラウドネイティブアプリは、クラウドネイティブの利点を活用して機能するために必要な設計原則、デプロイのパラダイム、運用プロセスを備えた、明確に独立した単位です。
クラウドネイティブの一般的な原則とは異なり、個々のアプリケーションでは、不変のアーティファクトなど、具体的な実装上の決定やツール、パターンの選択が必要になります。これらは、システム全体におけるクラウドネイティブ機能の強化に役立ちます。
クラウドネイティブの定義に該当するソフトウェアの設計やデプロイ方法には幅広い選択肢がありますが、すべてのクラウドネイティブアプリケーションに共通する一般的な特徴もあります。
多くのクラウドネイティブアプリケーションは、さまざまな形で自動化に大きく依存しています。アプリケーションの中核となるコードの自動テストやビルドから、基盤インフラの自動デプロイやスケーリングまで、その範囲は多岐にわたります。最も成功している企業の中には、高度に自動化された堅牢なクラウドネイティブCI/CDシステムを活用し、1日に数千回のデプロイを行うところもあります。クラウドネイティブセキュリティの現状レポートによると、クラウドネイティブの自動化が進んでいる企業ほど、セキュリティテスト手法の導入率も高くなっています。デプロイパイプラインを完全に自動化している組織は、クラウドネイティブアプリケーションを保護するために、SDLCにSASTとSCAのツールを導入する可能性が2倍高くなります。
クラウドネイティブアプリでは通常、マイクロサービスアーキテクチャのパターンも採用されます。コンポーネントが疎結合になっているため、サービス需要の増加に合わせて個別にスケールできます。より一般的に言えば、DevOpsの原則に基づいて構築されたアプリケーションは、成功するためにほぼ必ず暗黙的にクラウドネイティブに依存します。
クラウドネイティブアプリケーションは、従来のアプリケーションモデルよりも迅速に構築でき、効率的にスケールできます。そのため、テクノロジー主導の企業はイノベーションを加速し、市場投入までの時間を短縮できます。一方で、クラウドネイティブモデルは根本的な変化をもたらすため、クラウドネイティブアプリケーションの保護と運用を担う人は、その変化を考慮しなければなりません。かつてはインフラと見なされていたものが、今やアプリケーションの一部になっています。特にセキュリティの観点では、クラウドネイティブアプリケーションに対してセキュリティモデルの考え方を変え、アプリケーションセキュリティと運用の概念を再定義する必要があります。
クラウドネイティブセキュリティツールとレガシーツールの比較
従来のレガシーソフトウェアホスティングインフラを想定して設計されたセキュリティツールやプロセスには、クラウドネイティブアーキテクチャにおける動的で、外部に広くさらされた「境界のない」環境に十分対応するための機能がありません。
簡単に言えば、従来のセキュリティツールは、最新のクラウドが求める要件に対応するようには作られていません。現代のソフトウェアスタックでは当たり前になっているツールや設計パターンの多くが、セキュリティツールの設計当時には存在していなかった可能性もあります。

その典型例が、TerraformなどのInfrastructure as Code(IaC)ツールの普及です。これらは技術的には「コード」ですが、通常は独自の機能を持つドメイン固有言語(DSL)を表すため、静的解析などの従来のツールによる検証は困難で、効果も限定的です。IaCツールを使えば、比較的少ない労力で大量のインフラをプロビジョニングできるため、確実に保護することが非常に重要です。IaCのコードと設定を監査するには、ソフトウェアおよびインフラエンジニアリングの歴史の中でも比較的新しいベストプラクティスとツールを導入する必要があります。
IaCツールはレガシーセキュリティツールに重大なギャップをもたらしますが、クラウドネイティブアプリケーションを大規模に保護する際の課題の一つにすぎません。根本的に、クラウドネイティブアプリケーションの保護には、従来ITや運用セキュリティの責任範囲にあった概念をアプリケーションセキュリティモデルに取り込むアプローチが必要です。また、こうしたコンポーネントの保護は、IT/運用セキュリティチームだけに任せるのではなく、アプリケーションを構築する開発者から始める必要があります。
クラウドネイティブアプリケーションの保護
クラウドネイティブセキュリティでは、組織全体のクラウドネイティブ戦略に沿ったセキュリティへの取り組みが求められます。クラウドネイティブアプリケーションは、アプリケーションのコンテキストで保護する必要があります。そのアプローチでは、アプリケーションの構築と運用を担うチーム、プロセス、インフラモデルの変化にも対応しなければなりません。そのため、クラウドネイティブセキュリティでは、クラウドネイティブなアプリケーションセキュリティを重視し、開発中に脆弱性を特定して修正することが重要です。アプローチは包括的でなければならず、ソフトウェア開発ライフサイクル全体にセキュリティを組み込む必要があります。
セキュリティプラットフォームで開発者を支援し、ビジネス目標を満たし、クラウドネイティブの原則を活用した設計の実現に注力できるようにしましょう。同時に、アプリケーション開発中に定義されるインフラが増えるほど、コードの安全性を確保する責任を開発チームが担うことになると認識する必要があります。あらゆる議論や設計上の決定においてクラウドアーキテクチャが最優先事項として考慮されなければ、真のクラウドネイティブアプリケーションの構築は難しくなるでしょう。
設計の基盤が整ったら、アプリケーションやインフラのコーディングが始まります。この段階では、コードをテストすることを、セキュアなソフトウェア開発ライフサイクル(SSDLC)のできるだけ早い段階から始めることが重要です。記事の前半で触れたように、静的解析だけに頼る従来の単一アプローチでは、もはや十分ではありません。静的アプリケーションセキュリティテスト(SAST)、動的アプリケーションセキュリティテスト(DAST)、インタラクティブアプリケーションセキュリティテスト(IAST)、モバイルアプリケーションセキュリティテスト(MAST)は、クラウドネイティブアプリケーションのコードに対して実施すべきさまざまなテストの一部です。
クラウドネイティブインフラの保護
アプリケーションのクラウドネイティブインフラを保護する際にも、特有の課題があります。IaCの設定によって実環境のインフラがデプロイされるため、開発者はインフラのコードとアプリケーションコードを並行して記述することがよくあります。この課題に対応できるセキュリティツールが必要です。既存のワークフローにシームレスに統合し、開発者に直接、インサイトや修正方法を提供できるものでなければなりません。一般的には、セキュリティ情報をIDEに直接表示し、CLIツールでローカルテストを実行できるようにします。
開発者のローカル環境にセキュリティインサイトを提供するだけでなく、クラウドネイティブセキュリティツールはソフトウェアライフサイクルの各段階にも統合する必要があります。ソースコード管理システムでの自動スキャンや、CI/CDシステムを通じたコンテナイメージなどの派生アーティファクトのスキャンを優先すべきです。こうした統合スキャンの結果には、開発者が優先順位を簡単に判断できるよう、修正方法も提示する必要があります。
従来のオンプレミスインフラでは、論理ネットワーク境界に依存することがよくありました。境界は、一般にセキュリティ制御が緩やかな特定の内部リソースへの不正な通信を防ぐ役割を果たしていました。クラウドネイティブでは、境界という概念はほとんど意味を持ちません。ほとんどのクラウドプロバイダーでは、わずかな設定やUIの変更で、ほぼすべてのリソースを公開できます。同じ論理ドメインにあるように見えるデータも、宛先に届くまでに複数のネットワークや物理的な場所を経由することがあります。こうした状況を踏まえ、企業は「ゼロトラスト」モデルを採用する必要があります。このモデルでは、すべてのコンポーネントやサービスが侵害の標的になり得ると想定します。システム内のすべてのノードやリソース間で、ネットワーク上の場所にかかわらず認証を行います。
開発プロセスでクラウドネイティブアプリケーションセキュリティの重要性が高まる一方で、本番環境でもクラウドネイティブセキュリティソリューションが引き続き必要であることにも注意が必要です。従来のアーキテクチャで利用できるコンピューティングリソースは、一般にハードウェアサーバーのみでした。従来のセキュリティツールは、静的なネットワーク設定やファイアウォールを用いてアクセスや通信の流れを制御し、これらのリソースを境界の内側で保護していました。クラウドネイティブインフラは、アプリケーションの迅速なデプロイやリソースの再構成を可能にする、高度に動的な環境として一から設計されています。
クラウドネイティブセキュリティアーキテクチャとは?
クラウドネイティブセキュリティアーキテクチャとは、クラウド上にデプロイされ稼働するすべてのものを可視化し、セキュリティチームがクラウド上のアプリケーション、インフラ、プラットフォームを監視・保護できるようにするための戦略です。詳しくはクラウドセキュリティアーキテクチャをご覧ください。
クラウドネイティブアプリケーションでは、仮想マシン、コンテナ、サーバーレス関数など、さまざまなコンピューティングリソースやランタイムが使われる可能性があります。クラウドネイティブエコシステムを構成するコンテナの監視とランタイム環境の保護には、専用に構築されたセキュリティツールが必要です。クラウドネイティブ環境で強固なセキュリティ態勢を維持するには、実行時のアーティファクトと設定のスキャンが不可欠です。
クラウドネイティブアプリにはクラウドネイティブセキュリティプラットフォームが必要
クラウドは絶えず変化していますが、クラウド全体は今後もなくなることはありません。イノベーションのペースが加速し続けるなか、企業がその変化に対応できるよう、新たなテクノロジーやツールの開発が必要になります。企業では既存のオンプレミスのソフトウェアインフラをそのままクラウドに移行することがよくあります。その結果、古い抽象化やセキュリティモデルを持ち込んでしまい、クラウドネイティブアプリケーションのメリットを活かせなくなります。
オンプレミスでのホスティングを前提に構築されたセキュリティモデルやツールは、特に大きなリスクとなります。こうしたツールの多くは、クラウドが主要なホスティングプラットフォームとして普及する前に設計されており、十分なセキュリティを提供するには不十分です。非常に変化が速く競争の激しい環境では、アプリケーションをスケールさせること、そして何より安全に保つことが最重要課題です。現代のクラウド時代に競争力を維持したい企業は、クラウドネイティブアプリケーションの構築に注力し、保護にはクラウドネイティブのセキュリティプラットフォームを活用する必要があります。
「ソフトウェアをデプロイするときには、さまざまな要素が関わります」... 「すべてを手作業で行うと、時間がかかり、面倒で、ミスも起こりやすく、頻繁にやりたいとは思えません。だからこそ、セキュリティを含めてすべてをSnykで自動化する必要があると考えました。」
Snykの単一プラットフォームで、クラウドネイティブアプリのあらゆるコンポーネントを保護しましょう。