サーバーレス・セキュリティとは?

サーバーレスとは、クラウドコンピューティングにおけるクラウドネイティブ開発モデルのことで、開発者はインフラやサーバーサイドのITを管理することなく、アプリケーションやサービスを構築・実行することができます。サーバーレスモデルのアプリケーションは、マネージドクラウドサービスとFaaS(Function as a Service)の組み合わせに依存しており、インフラストラクチャや仮想マシンの管理、パッチ適用、セキュリティ確保の必要性を排除しています。

サーバーレスアーキテクチャのメリット

オライリーによると、2020年までに 40%の組織がサーバーレスアーキテクチャを完全に採用していると回答しています。それ以来、サーバーレスはアプリケーション実行環境の主流となっています。 State of Cloud Native Security Report 2024 』では、調査回答者の70%が今後24ヶ月間に利用が増加する予定であると回答しており、さらなる成長が見込まれています。

サーバーレスモデルの採用は、アプリケーション開発に重大なメリットをもたらします:

  • 運用オーバーヘッドの削減管理するサーバーがないため、開発者やDevOpsはインフラストラクチャのスケーリング、エージェントのインストールと保守、その他のインフラストラクチャ関連の運用を心配する必要がありません。
  • 敏捷性の向上:サーバーレスアプリケーションは、データベースや認証などのマネージドサービスに大きく依存しているため、開発者はアプリケーションの実際のビジネスロジックに集中することができます。
  • コスト削減:サーバーレスアプリケーションで使用されるほとんどのサービスでは、顧客は利用料金のみを支払います。例えば、AWS Lambdaでは、顧客は関数の実行に対して料金を支払います。これにより、仮想マシンのように未使用の容量に対して料金を支払う必要がなくなるため、一般的にコストに大きな影響を与えます。
シーバーレス・モデルの構成要素
図1:シーバーレス・モデルの構成要素

 

サーバーレスアプリケーションにはサーバーレスセキュリティが必要

ソフトウェア開発やIT運用が大きく進歩するたびに、攻撃のベクトルやセキュリティリスクも変化しています。仮想化から コンテナへの移行が始まった当初、セキュリティ担当者はインフラを強化し、防御し、管理する新しい方法を見つけ、適応しなければなりませんでした。サーバーレスアプリケーションのコンセプトは、アプリケーションのセキュリティに関して、これまでにない大きなパラダイムシフトをもたらします。

従来、組織はインフラやネットワークベースのツールに依存してアプリケーションを保護していました。ファイアウォールでトラフィックを検査したり、侵入検知システムで悪意のある活動を検知しようとしたり、ランタイム・アプリケーション・セルフプロテクション(RASP)技術でアプリケーションを保護したり。コンテナを使用しても、組織は基盤となるインフラのセキュリティにある程度依存することができます。

サーバーレスアプリケーションは、S3バケットがLambda Functionをトリガーし、そのLambda FunctionがDynamoDB®をトリガーするといったように、連携する分散クラウドサービスで構成されます。このアーキテクチャでは、ファイアウォール、IDS/IPSツール、あらゆる種類のインストルメンテーション・エージェント、またはサーバーベースの保護方法が存在する余地はありません。サーバーレスモデルは、ネットワーク検査やアクセス制御リストに焦点を当てる代わりに、セキュリティの焦点を IAM権限、行動保護、 強固なコードにシフトします。

シーバーレスモデルへの応用
図2:シーバーレスモデルへの応用

 

サーバーレスの攻撃ベクトル

サーバーレスセキュリティを採用することで、組織はインフラ、ネットワーク、ホストのセキュリティを心配する必要がなくなるため、アプリケーションはセキュリティの観点から強力なスタートを切ることができます。しかし、新たな攻撃ベクトルが出現し、おなじみの攻撃がサーバーレス環境向けに再構築されています。その一例を見てみましょう(全リストはCloud Security Allianceの Top 12 Risks for Serverless Applicationsを参照):

イベントデータ・インジェクション

アプリケーションにおけるインジェクションの欠陥は、今日まで最も一般的なリスクの一つであり、多くのセキュアな コーディングのベストプラクティスガイドで徹底的に取り上げられてきました。高度なレベルでは、インジェクションの欠陥は、信頼されていない入力が実行または評価される前にインタプリタに直接渡される場合に発生します。しかし、サーバーレスアーキテクチャの文脈では、関数のイベントデータ注入は、厳密にはユーザーからの直接入力( Web API呼び出しからの入力など)に限定されません。ほとんどのサーバーレスアーキテクチャは、サーバーレス関数の実行のトリガーとなる多数のイベントソースを提供します。

イベントデータ・インジェクション・ソースの例

  • クラウドストレージイベント(AWS S3®、Azure Blob Storage、Google Cloud Storageなど)
  • NoSQLデータベースのイベント(AWS DynamoDB、Azure Cosmos DB® など)
  • SQLデータベースイベント
  • ストリーム処理イベント(Amazon Kinesis®など)
  • コード変更と新規リポジトリのコードコミット
  • HTTP APIコール

各イベントインプットは異なるメッセージフォーマットを含むかもしれず、これらのイベントメッセージの様々な部分は攻撃者が制御する、あるいは他の方法で危険なインプットを含むかもしれません。イベントソースの豊富なセットは、潜在的なアタックサーフェスを増加させ、イベントデータインジェクションからサーバーレス機能を保護しようとする際に複雑さをもたらします。サーバーレスアーキテクチャは、開発者がどのメッセージ部分が信頼されるべきではないかを知っているウェブ環境ほどには理解されていないため、これは特に当てはまります(例:GET/POSTパラメータ、HTTPヘッダーなど)。

イベントデータインジェクションのアタックサーフェス
図3:イベントデータインジェクションのアタックサーフェス

 

サーバーレスアプリケーションの保護

効果的なサーバーレスのセキュリティは、コードの完全性、厳重なパーミッション、行動分析の確保に重点を置いています。

  • アクセスと許可サーバーレス関数やその他のサービスに対する 最小限のアクセス権を 維持します。例えば、AWS Lambda関数がDynamoDBのテーブルにアクセスする必要がある場合、ビジネスロジックが必要とする特定のアクションのみを実行できるようにします。
  • 脆弱性スキャン脆弱なサードパーティの依存関係、設定エラー、過剰なロールを定期的にスキャンすることで、コードと Infrastructure-as-Codeテンプレートの整合性を 確保します。
  • ランタイム保護:ランタイム保護を使用して、悪意のあるイベント入力や異常な関数の動作を検出し、必要に応じて各関数のファイル、ホスト、インターネットへのアクセス、子プロセスの生成を制限します。

 

サーバーレスFAQ

サーバーレス・コンピューティングは、サーバーレス・アーキテクチャとも呼ばれ、エンジニアが基盤となるインフラを管理することなくアプリケーションを構築・実行できるようにするソフトウェア設計のアプローチです。その代わりに、クラウドプロバイダーは、デジタル組織やクラウドネイティブ組織向けに、アプリケーション、データベース、ストレージシステムを実行するサーバーをプロビジョニングします。
ファンクション・アズ・ア・サービスは、複雑な管理をすることなく、イベントに応じてコードを実行できるクラウドコンピューティングサービスです。
サーバーレスアーキテクチャは、開発者がHTTPリクエストや同様のイベントに応答して特定のタスクを実行するように設計された独自の関数のセットとしてアプリケーションコードを記述するFaaSです。機能がクラウドプロバイダーのアカウントにデプロイされると、クラウドプロバイダーはクラウドプロバイダーが提供するサーバー上で機能を実行します。
クラウドプロバイダーが提供するサーバーレスサービスの例としては、Google Cloud Functions、AWS Lambda、Microsoft Azure Functionsなどがあります。
前へ クラウドセキュリティは共有責任
次へ ポリシー・アズ・コードとは?