サーバーレスとは、クラウドコンピューティングにおけるクラウドネイティブ開発モデルのことで、開発者はインフラやサーバーサイドのITを管理することなく、アプリケーションやサービスを構築・実行することができます。サーバーレスモデルのアプリケーションは、マネージドクラウドサービスとFaaS(Function as a Service)の組み合わせに依存しており、インフラストラクチャや仮想マシンの管理、パッチ適用、セキュリティ確保の必要性を排除しています。
オライリーによると、2020年までに 40%の組織がサーバーレスアーキテクチャを完全に採用していると回答しています。それ以来、サーバーレスはアプリケーション実行環境の主流となっています。 State of Cloud Native Security Report 2024 』では、調査回答者の70%が今後24ヶ月間に利用が増加する予定であると回答しており、さらなる成長が見込まれています。
サーバーレスモデルの採用は、アプリケーション開発に重大なメリットをもたらします:
ソフトウェア開発やIT運用が大きく進歩するたびに、攻撃のベクトルやセキュリティリスクも変化しています。仮想化から コンテナへの移行が始まった当初、セキュリティ担当者はインフラを強化し、防御し、管理する新しい方法を見つけ、適応しなければなりませんでした。サーバーレスアプリケーションのコンセプトは、アプリケーションのセキュリティに関して、これまでにない大きなパラダイムシフトをもたらします。
従来、組織はインフラやネットワークベースのツールに依存してアプリケーションを保護していました。ファイアウォールでトラフィックを検査したり、侵入検知システムで悪意のある活動を検知しようとしたり、ランタイム・アプリケーション・セルフプロテクション(RASP)技術でアプリケーションを保護したり。コンテナを使用しても、組織は基盤となるインフラのセキュリティにある程度依存することができます。
サーバーレスアプリケーションは、S3バケットがLambda Functionをトリガーし、そのLambda FunctionがDynamoDB®をトリガーするといったように、連携する分散クラウドサービスで構成されます。このアーキテクチャでは、ファイアウォール、IDS/IPSツール、あらゆる種類のインストルメンテーション・エージェント、またはサーバーベースの保護方法が存在する余地はありません。サーバーレスモデルは、ネットワーク検査やアクセス制御リストに焦点を当てる代わりに、セキュリティの焦点を IAM権限、行動保護、 強固なコードにシフトします。
サーバーレスセキュリティを採用することで、組織はインフラ、ネットワーク、ホストのセキュリティを心配する必要がなくなるため、アプリケーションはセキュリティの観点から強力なスタートを切ることができます。しかし、新たな攻撃ベクトルが出現し、おなじみの攻撃がサーバーレス環境向けに再構築されています。その一例を見てみましょう(全リストはCloud Security Allianceの Top 12 Risks for Serverless Applicationsを参照):
アプリケーションにおけるインジェクションの欠陥は、今日まで最も一般的なリスクの一つであり、多くのセキュアな コーディングのベストプラクティスガイドで徹底的に取り上げられてきました。高度なレベルでは、インジェクションの欠陥は、信頼されていない入力が実行または評価される前にインタプリタに直接渡される場合に発生します。しかし、サーバーレスアーキテクチャの文脈では、関数のイベントデータ注入は、厳密にはユーザーからの直接入力( Web API呼び出しからの入力など)に限定されません。ほとんどのサーバーレスアーキテクチャは、サーバーレス関数の実行のトリガーとなる多数のイベントソースを提供します。
イベントデータ・インジェクション・ソースの例
各イベントインプットは異なるメッセージフォーマットを含むかもしれず、これらのイベントメッセージの様々な部分は攻撃者が制御する、あるいは他の方法で危険なインプットを含むかもしれません。イベントソースの豊富なセットは、潜在的なアタックサーフェスを増加させ、イベントデータインジェクションからサーバーレス機能を保護しようとする際に複雑さをもたらします。サーバーレスアーキテクチャは、開発者がどのメッセージ部分が信頼されるべきではないかを知っているウェブ環境ほどには理解されていないため、これは特に当てはまります(例:GET/POSTパラメータ、HTTPヘッダーなど)。
効果的なサーバーレスのセキュリティは、コードの完全性、厳重なパーミッション、行動分析の確保に重点を置いています。