Cloud Run を使用して安全なサーバーレス アーキテクチャをデプロイする

Last reviewed 2023-03-10 UTC

このコンテンツの最終更新日は 2023 年 3 月で、作成時点の状況を表しています。お客様の保護の継続的な改善のために、Google のセキュリティ ポリシーとシステムは変更される場合があります。

サーバーレス アーキテクチャでは、サーバーのプロビジョニングやメンテナンスを行うことなく、ソフトウェアやサービスを開発できます。サーバーレス アーキテクチャを使用して、幅広いサービスのアプリケーションを構築できます。

このドキュメントでは、DevOps エンジニア、セキュリティ アーキテクトを対象として、Cloud Run を使用するサーバーレス アプリケーションを保護する方法に関する独自のガイダンスを提供します。このドキュメントは、以下で構成されるセキュリティ ブループリントの一部です。

  • 一連の Terraform の構成とスクリプトを含む GitHub リポジトリ
  • ブループリント(このドキュメント)で実施するアーキテクチャ、設計、セキュリティ管理のガイド。

このブループリントは、最初に Google Cloud エンタープライズ基盤ブループリントをデプロイせずにデプロイできますが、このドキュメントでは、Google Cloud エンタープライズ基盤ブループリントで説明する基本的なセキュリティ管理の構成が完了していることを前提としています。このドキュメントで説明するアーキテクチャを使用すると、基盤に制御を追加して、サーバーレス アプリケーションを保護できます。

サーバーレス アプリケーションに関連する重要なセキュリティ管理の定義を支援するため、Cloud Security Alliance(CSA)サーバーレス アプリケーションの 12 の重大リスクを公開しました。このブループリントで使用されるセキュリティ管理は、このドキュメントで説明するさまざまなユースケースに関連するリスクに対処するように設計されています。

サーバーレス ユースケース

このブループリントは、次のユースケースをサポートしています。

Cloud Functions と Cloud Run の違いには、以下のような内容が含まれます。

  • Cloud Functions は、データベース内のデータの変更や、Pub/Sub などのメッセージング システムからのメッセージの受信などのイベントによってトリガーされます。Cloud Run は、HTTP リクエストなどのリクエストによってトリガーされます。
  • Cloud Functions は、サポート対象のランタイムに制限されています。Cloud Run は任意のプログラミング言語で使用できます。
  • Cloud Functions はウェブサーバーや言語のランタイムを制御するコンテナやインフラストラクチャを管理するため、ユーザーはコードに集中できます。Cloud Run では、これらのサービスをユーザー自身で柔軟に実行できるので、コンテナ構成を制御できます。

Cloud Run と Cloud Functions の違いの詳細については、Google Cloud コンピューティング オプションの選択をご覧ください。

アーキテクチャ

このブループリントを使用すると、共有 VPC を使用して Cloud Run でサーバーレス アプリケーションを実行できます。すべてのネットワーキング リソースのネットワーク ポリシーと制御を一元管理するため、共有 VPC の使用をおすすめします。また、共有 VPC はエンタープライズ基盤ブループリントでデプロイされます。

次の図は、共有 VPC ネットワークでサーバーレス アプリケーションを実行する方法を示しています。

サーバーレス ブループリントのアーキテクチャ。

前の図のアーキテクチャでは、次の Google Cloud サービスと機能を組み合わせて使用しています。

  • 外部アプリケーション ロードバランサは、サーバーレス アプリケーションに必要なデータをインターネットから受信して Cloud Run に転送します。外部アプリケーション ロードバランサは、レイヤ 7 ロードバランサです。
  • Google Cloud Armor はウェブ アプリケーション ファイアウォールとして機能し、サービス拒否攻撃(DoS)やウェブ攻撃からサーバーレス アプリケーションを保護します。
  • Cloud Run は、コンテナでのアプリケーション コードの実行を可能にし、ユーザーに代わってインフラストラクチャを管理します。このブループリントでは、内部および Cloud Load Balancing の内部の上り(内向き)設定により、Cloud Run が外部アプリケーション ロードバランサからのリクエストのみを受け入れるように Cloud Run へのアクセスを制限します。
  • サーバーレス VPC アクセス コネクタは、サーバーレス VPC アクセスを使用して、サーバーレス アプリケーションを VPC ネットワークに接続します。サーバーレス VPC アクセスは、サーバーレス アプリケーションから VPC ネットワークへのリクエストがインターネットに公開されないようにするのに役立ちます。サーバーレス VPC アクセスを使用すると、Cloud Run は VPC Service Controls をサポートする他のサービス、ストレージ システム、リソースと通信できます。

    デフォルトでは、サーバーレス VPC アクセス コネクタをサービス プロジェクトに作成します。ホスト プロジェクトでサーバーレス VPC アクセス コネクタを作成するには、セキュア Cloud Run ネットワーク モジュールの実行時に connector_on_host_project 入力変数に true を指定します。詳細については、構成方法の比較をご覧ください。

  • Virtual Private Cloud(VPC)ファイアウォール ルールは、Compute Engine でホストされている会社サーバーや Cloud Storage に保存された会社のデータなど、リソースをホストするサブネットへのデータフローを制御します。

  • VPC Service Controls は、承認、アクセス制御、安全なデータ交換を設定して、Cloud Run のサービスとリソースを分離するセキュリティ境界を作成します。この境界は、受信コンテンツを保護し、追加のアクセス制御とモニタリングを設定してアプリケーションを分離して、Google Cloud のガバナンスをアプリケーションから分離するように設計されています。ガバナンスには鍵管理とロギングが含まれます。

  • 共有 VPC を使用すると、サービス プロジェクトのサーバーレス VPC アクセス コネクタをホスト プロジェクトに接続できます。

  • Cloud Key Management Service(Cloud KMS)には、サーバーレス アプリケーション、Artifact Registry、Cloud Run など、このブループリントのサービスで使用される顧客管理の暗号鍵(CMEK)が保存されます。

  • Identity and Access Management(IAM)Resource Manager は、アクセスを制限してリソースを分離するのに役立ちます。アクセス制御とリソース階層は、最小権限の原則に従います。

代替アーキテクチャ: 共有 VPC ネットワークを使用しない Cloud Run

共有 VPC ネットワークを使用していない場合は、共有 VPC ネットワークのない VPC Service Control 境界に Cloud Run とサーバーレス アプリケーションをデプロイできます。ハブ アンド スポーク トポロジを使用している場合は、この代替アーキテクチャを実装できます。

次の図は、共有 VPC を使用せずにサーバーレス アプリケーションを実行する方法を示しています。

サーバーレス ブループリントの代替アーキテクチャ。

上の図に示すアーキテクチャでは、前のセクションの推奨アーキテクチャ: 共有 VPC を使用した Cloud Run のセクションで説明した Google Cloud サービスと機能の組み合わせを使用します。

組織構造

リソースをグループ化して管理できるようにし、開発環境とテスト環境を本番環境から分離します。Resource Manager を使用すると、プロジェクト、フォルダ、組織ごとに論理的にリソースをグループ化できます。

次の図に、ブートストラップ、共通、本番、非本番(テスト)、開発などのさまざまな環境を表すフォルダを持つリソース階層を示します。このリソース階層は、エンタープライズ基盤ブループリントで説明されている階層に基づいています。ブループリントで指定されたプロジェクトを CommonProductionNon-productionDev のフォルダにデプロイします。

サーバーレス ブループリントの組織構造。

以下のセクションでは、この図について詳しく説明します。

フォルダ

フォルダを使用して、本番環境とガバナンス サービスを非本番環境やテスト環境から分離します。次の表に、このブループリントで使用されるエンタープライズ基盤ブループリントのフォルダを示します。

フォルダ 説明
Bootstrap エンタープライズ基盤ブループリントをデプロイするために必要なリソースが含まれています。
Common セキュリティ プロジェクトなど、組織の一元化されたサービスが含まれています。
Production テスト済みの、お客様による使用が可能なクラウド リソースを含むプロジェクトが含まれています。このブループリントでは、Production フォルダにサービス プロジェクトとホスト プロジェクトが含まれています。
Non-production テストとリリースのステージングが現在行われているクラウド リソースがあるプロジェクトが含まれます。このブループリントでは、Non-production フォルダにサービス プロジェクトとホスト プロジェクトが含まれています。
Dev 現在開発されているクラウド リソースがあるプロジェクトが含まれています。このブループリントでは、Dev フォルダにサービス プロジェクトとホスト プロジェクトが含まれています。

これらのフォルダの名前は、組織のフォルダ構造に合わせて変更できますが、同様の構造を維持することをおすすめします。詳細については、組織構造をご覧ください。他のフォルダ構造については、Google Cloud ランディング ゾーンのリソース階層を決定するをご覧ください。

プロジェクト

プロジェクトを使用して環境内のリソースを分離します。次の表に、組織内で必要なプロジェクトを示します。これらのプロジェクトの名前は変更できますが、同様のプロジェクト構造を維持することをおすすめします。

プロジェクト 説明
ホスト プロジェクト このプロジェクトには、ファイアウォールの上り(内向き)ルールと、内部 IP アドレスを持つリソースが含まれます(VPC ネットワークへの接続を参照)。共有 VPC を使用する場合、1 つのプロジェクトをホスト プロジェクトとして指定し、他のサービス プロジェクトをホスト プロジェクトに接続します。

Terraform コードを適用するときに、このプロジェクトの名前を指定すると、ブループリントによってサービスがデプロイされます。
サービス プロジェクト このプロジェクトには、サーバーレス アプリケーション、Cloud Run、サーバーレス VPC アクセス コネクタが含まれます。ホスト プロジェクトにサービス プロジェクトを接続して、サービス プロジェクトが共有 VPC ネットワークに参加できるようにします。

Terraform コードを適用するときに、このプロジェクトの名前を指定します。ブループリントは、Cloud Run、Google Cloud Armor、サーバーレス VPC アクセス コネクタ、ロードバランサをデプロイします。
セキュリティ プロジェクト このプロジェクトには、Cloud KMS や Secret Manager などのセキュリティ固有のサービスが含まれています。

Terraform コードを適用するときには、このプロジェクトの名前を指定すると、ブループリントによって Cloud KMS がデプロイされます。Secure Cloud Run Harness モジュールを使用すると、Artifact Registry もデプロイされます。

セキュリティ基盤ブループリントをデプロイした後にこのブループリントをデプロイする場合、このプロジェクトはエンタープライズ基盤ブループリントで作成されたシークレットのプロジェクトになります。エンタープライズ基盤ブループリント プロジェクトの詳細については、プロジェクトをご覧ください。

エンタープライズ基盤ブループリントを使用せずにこのブループリントの複数のインスタンスをデプロイする場合、各インスタンスには独自のセキュリティ プロジェクトがあります。

ロールとグループをプロジェクトにマッピング

組織内のさまざまなユーザー グループに、サーバーレス アーキテクチャを構成するプロジェクトへのアクセス権を付与する必要があります。次の表に、作成するプロジェクトのユーザー グループとロールの割り当てに関するブループリントの推奨事項を示します。組織の既存の構造に合わせてグループをカスタマイズできますが、同様の職掌分散とロール割り当てを維持することをおすすめします。

グループ プロジェクト ロール
サーバーレス管理者

grp-gcp-serverless-admin@example.com
サービス プロジェクト
サーバーレス セキュリティ管理者

grp-gcp-serverless-security-admin@example.com
セキュリティ プロジェクト
Cloud Run デベロッパー

grp-gcp-secure-cloud-run-developer@example.com
セキュリティ プロジェクト
Cloud Run ユーザー

grp-gcp-secure-cloud-run-user@example.com
サービス プロジェクト

セキュリティ管理

このセクションでは、サーバーレス アーキテクチャの保護に使用する Google Cloud のセキュリティ管理について説明します。考慮すべき主なセキュリティ原則は次のとおりです。

  • 最小権限の原則に沿ってアクセスを保護し、エンティティに必要な権限のみをエンティティに付与します。
  • セグメンテーションの設計、組織のポリシー、ファイアウォール ポリシーによってネットワーク接続を保護できます。
  • 各サービスの構成を保護します。
  • サーバーレス ワークロードをホストする環境のリスクレベルとセキュリティ要件を理解します。
  • 検出、調査、レスポンスを許可する十分なモニタリングとロギングを構成します。

サーバーレス アプリケーションのセキュリティ管理

ネットワーク上のトラフィックを保護し、アクセスを制御して、データを暗号化する設定を使用すると、サーバーレス アプリケーションを保護できます。

ビルドシステム制御

サーバーレス アプリケーションをデプロイする場合は、Artifact Registry を使用して、コンテナ イメージとバイナリを保存します。Artifact Registry では CMEK をサポートしているため、独自の暗号鍵を使用してリポジトリを暗号化できます。

SSL トラフィック

サーバーレス アプリケーションへの HTTPS トラフィックをサポートするには、外部アプリケーション ロードバランサ用の SSL 証明書を構成します。デフォルトでは、自己署名証明書を使用します。この証明書は、Terraform コードの適用後にマネージド証明書に変更できます。マネージド証明書のインストールと使用の詳細については、Google マネージド SSL 証明書の使用をご覧ください。

ネットワークとファイアウォールのルール

Virtual Private Cloud(VPC)ファイアウォール ルールによって、境界へのデータフローが制御されます。restricted.googleapis.com の特別なドメイン名からの特定の TCP ポート 443 接続を除き、すべての下り(外向き)を拒否するファイアウォール ルールを作成します。restricted.googleapis.com ドメインを使用するメリットとしては、次のようなものが挙げられます。

  • ワークロードが Google API およびサービスと通信する際に限定公開の Google アクセスを使用することで、ネットワーク攻撃の可能性を低減できます。
  • これにより、VPC Service Controls をサポートするサービスのみを使用できます。

詳細については、限定公開の Google アクセスの構成をご覧ください。

境界制御

推奨アーキテクチャ図に示すように、サーバーレス アプリケーションのリソースを個別の境界に配置します。この境界は、意図しないアクセスやデータの引き出しからサーバーレス アプリケーションを保護します。

アクセス ポリシー

特定の ID(ユーザーまたはサービス)のみがリソースとデータにアクセスできるようにするには、IAM のグループとロールを有効にします。

特定のリソースのみがプロジェクトにアクセスできるように、Google 組織でアクセス ポリシーを有効にします。詳しくは、アクセスレベル属性をご覧ください。

Identity and Access Proxy

環境に Identity and Access Proxy(IAP)がすでに存在する場合は、IAP を使用してサーバーレス アプリケーションのトラフィックを承認するように外部アプリケーション ロードバランサを構成できます。IAP を使用すると、サーバーレス アプリケーションの一元的な承認レイヤを確立できるため、ネットワーク レベルのファイアウォール依存せずに、アプリケーション レベルのアクセス制御を使用できます。

アプリケーションで IAP を有効にするには、loadbalancer.tf ファイルで iap_config.enabletrue に設定します。

IAP の詳細については、Identity-Aware Proxy の概要をご覧ください。

サービス アカウントとアクセス制御

サービス アカウントは、Google Cloud がユーザーに代わって API リクエストを実行するために使用できる ID です。職掌分散を実装するには、特定の目的のために異なるロールを持つサービス アカウントを作成します。サービス アカウントは次のとおりです。

  • 次のロールを持つ Cloud Run サービス アカウント(cloud_run_sa)。

    • roles/run.invoker
    • roles/secretmanager.secretAccessor

    詳細については、Cloud Run にシークレットへのアクセスを許可するをご覧ください。

  • roles/compute.networkUser ロールを持つサーバーレス VPC アクセス コネクタ アカウント(gcp_sa_vpcaccess)。

  • roles/compute.networkUser ロールを持つ 2 番目のサーバーレス VPC アクセス コネクタ アカウント(cloud_services)。

    サーバーレス VPC アクセス コネクタのこれらのサービス アカウントは、コネクタがホスト プロジェクトで上り(内向き)および下り(外向き)のファイアウォール ルールを作成できるようにするために必要です。詳細については、サービス プロジェクトのサービス アカウントに権限を付与するをご覧ください。

  • roles/vpcaccess.user ロールを持つ Cloud Run(run_identity_services)を実行するサービス ID。

  • roles/editor ロールを持つ Google API のサービス エージェントcloud_services_sa)。このサービス アカウントを使用すると、Cloud Run がサーバーレス VPC アクセス コネクタと通信できます。

  • roles/artifactregistry.reader ロールを持つ Cloud Run(serverless_sa)のサービス ID。このサービス アカウントは、Artifact Registry、CMEK 暗号鍵、復号鍵にアクセスできます。

鍵管理

CMEK 鍵は、Artifact Registry と Cloud Run のデータの保護に使用します。次の暗号鍵を使用します。

  • サーバーレス アプリケーションのコードを証明するための Artifact Registry のソフトウェア キー。
  • Cloud Run によってデプロイされるコンテナ イメージを暗号化する暗号鍵

Terraform 構成を適用するときに、鍵が保存されている地理的なロケーションを決定する CMEK ロケーションを指定します。CMEK 鍵がリソースと同じリージョンに存在するようにする必要があります。デフォルトでは、CMEK 鍵は 30 日ごとにローテーションされます。

シークレット管理

Cloud Run は、サーバーレス アプリケーションに必要なシークレットを格納する Secret Manager をサポートしています。これらのシークレットには、API キーとデータベースのユーザー名とパスワードを含めることができます。シークレットをマウントされたボリュームとして公開するには、メイン モジュールvolume_mounts 変数と volumes 変数を使用します。

エンタープライズ基盤ブループリントを使用してこのブループリントをデプロイする場合は、Terraform コードを適用する前にシークレット プロジェクトにシークレットを追加する必要があります。このブループリントは、Secret Manager のシークレット アクセサー ロールを Cloud Run サービス アカウントに付与します。詳細については、シークレットを使用するをご覧ください。

組織のポリシー

このブループリントは、組織のポリシーの制約に制約を追加します。エンタープライズ基盤ブループリントで使用する制約の詳細については、組織のポリシーの制約をご覧ください。

次の表は、このブループリントの Secure Cloud Run Security モジュールで定義されているその他の組織のポリシーの制約を示しています。

ポリシーの制約 説明 推奨値
constraints/run.allowedIngress 内部サービスまたは外部アプリケーション ロードバランサからの上り(内向き)トラフィックのみを許可します。 internal-and-cloud-load-balancing
constraints/run.allowedVPCEgress Cloud Run サービスのリビジョンでサーバーレス VPC アクセス コネクタを使用するように要求し、リビジョンの VPC 下り(外向き)設定がプライベート範囲のみを許可するように設定されていることを確認します。 private-ranges-only

運用管理機能

ロギングと、Security Command Center のプレミアム ティアの機能(Security Health Analytics、脅威の検出など)を有効にできます。こうした制御により、次のことを実現できます。

  • データにアクセスするユーザーをモニタリングする。
  • 適切な監査を確実に実施する。
  • 発生する可能性のある問題への、インシデント管理チームと運用チームの対応能力をサポートする。

ロギング

監査要件を満たしてプロジェクトの分析情報を得るには、追跡するサービスのデータログを使用して、Google Cloud Observability を構成します。Terraform コードを適用する前にプロジェクトに Cloud Logging をデプロイして、ブループリントがファイアウォール、ロードバランサ、VPC ネットワークのロギングを構成できるようにします。

ブループリントをデプロイした後、以下を構成することをおすすめします。

  • すべてのプロジェクトにまたがる集約ログシンクの作成を行う。
  • ログを保存する適切なリージョンを選択する。
  • CMEK 鍵をログシンクに追加する。

プロジェクト内のすべてのサービスのログにデータの読み取りと書き込みに関する情報が含まれていることを確認し、管理者が何にアクセスするかに関する情報を含めてください。ロギングのベスト プラクティスについて詳しくは、検出制御をご覧ください。

モニタリングとアラート

ブループリントをデプロイした後、セキュリティ インシデントが発生している可能性があることをセキュリティ オペレーション センター(SOC)に通知するアラートを設定できます。たとえば、アラートを使用して、IAM ロールの権限が変更されたときにセキュリティ アナリストに通知できます。Security Command Center のアラートの構成の詳細については、検出通知の設定をご覧ください。

サンプル ダッシュボード ライブラリの一部である Cloud Run Monitoring ダッシュボードには、次の情報が表示されます。

  • リクエスト数
  • リクエストのレイテンシ
  • 課金対象インスタンス時間
  • コンテナの CPU 割り当て
  • コンテナのメモリ割り当て
  • コンテナ CPU 使用率
  • コンテナメモリ使用率

ダッシュボードをインポートする手順については、サンプル ダッシュボードをインストールするをご覧ください。アラートをエクスポートするには、次のドキュメントをご覧ください。

デバッグとトラブルシューティング

接続テストを実行すると、Cloud Run とサブネット内のリソースの間のネットワーク構成の問題をデバッグできます。接続テストはパケットの想定パスをシミュレートし、リソース間の接続分析など、接続の詳細を提供します。

Terraform コードでは、接続テストが有効になっていません。別途設定する必要があります。詳細については、接続テストを作成して実行するをご覧ください。

検出制御

このセクションでは、ブループリントに含まれる検出制御について説明します。

Google Cloud Armor と WAF

外部アプリケーション ロードバランサと Google Cloud Armor を使用して、サーバーレス アプリケーションに分散型サービス拒否攻撃(DDoS)に対する保護を提供します。Google Cloud Armor は、Google Cloud に含まれるウェブ アプリケーション ファイアウォール(WAF)です。

次の表に示す Google Cloud Armor ルールを構成して、サーバーレス アプリケーションを保護します。このルールは、OWASP トップ 10 リスクの軽減に役立つように設計されています。

Google Cloud Armor ルール名 ModSecurity ルール名
リモートコード実行 rce-v33-stable
ローカル ファイル込み lfi-v33-stable
プロトコル攻撃 protocolattack-v33-stable
リモート ファイル インクルード rfi-v33-stable
スキャナ検出 scannerdetection-v33-stable
セッション修正攻撃 sessionfixation-v33-stable
SQL インジェクション sqli-v33-stable
クロスサイト スクリプティング xss-v33-stable

これらのルールを有効にすると、Google Cloud Armor はルールに一致するトラフィックを自動的に拒否します。

これらのルールの詳細については、Google Cloud Armor の事前構成 WAF ルールを調整するをご覧ください。

Cloud Run でのセキュリティ問題の検出

Cloud Run の潜在的なセキュリティ問題は、Recommender を使用して検出できます。Recommender は、次のようなセキュリティ問題を検出できます。

  • Secret Manager ではなく、環境変数に保存されている API キーまたはパスワード。
  • サービス ID を使用する代わりに、ハードコードされた認証情報を含むコンテナ。

Cloud Run をデプロイしてから約 1 日後に、Recommender は検出結果と推奨事項の提供を開始します。Recommender は、検出結果と推奨される解決策を Cloud Run サービスリストまたはおすすめハブに表示します。

Terraform デプロイモード

次の表に、このブループリントをデプロイする方法と、各デプロイモードに適用される Terraform モジュールを示します。

デプロイモード Terraform モジュール
エンタープライズ基盤ブループリントをデプロイした後に、このブループリントをデプロイします(推奨)。

このオプションは、エンタープライズ基盤ブループリントで使用されているのと同じ VPC Service Controls の境界にこのブループリントのリソースをデプロイします。詳細については、サーバーレス デプロイを安全にするために Foundation v2.3.1 をカスタマイズする方法をご覧ください。

このオプションでは、エンタープライズ基盤ブループリントをデプロイしたときに作成したシークレット プロジェクトも使用されます。
次の Terraform モジュールを使用します。
エンタープライズ基盤ブループリントをインストールせずに、このブループリントをインストールします。

このオプションを使用するには、VPC Service Controls の境界を作成する必要があります。
次の Terraform モジュールを使用します。

まとめ

このドキュメントで説明されたアーキテクチャを実装する方法は次のとおりです。

  1. ブループリントの README を確認し、すべての前提条件を満たしていることを確認します。
  2. 外部アプリケーション ロードバランサで使用する SSL 証明書を作成します。
    このステップを完了していない場合、ブループリントは自己署名証明書を使用してロードバランサをデプロイし、ブラウザはサーバーレス アプリケーションにアクセスしようとすると安全でない接続に関する警告を表示します。
  3. テスト環境で Secure Cloud Run の例をデプロイして、ブループリントの動作を確認します。テストプロセスの一環として、次のことを検討します。
    1. Security Command Center を使用して、一般的なコンプライアンス要件を基にプロジェクトをスキャンします。
    2. サンプル アプリケーションを実際のアプリケーションに置き換え、一般的なデプロイ シナリオを実行します。
    3. 企業のアプリケーション エンジニアリング チームや運用チームと協力してプロジェクトへのアクセスをテストし、ソリューションが想定どおりにやり取りできるかどうかを確認します。
  4. ブループリントを環境にデプロイします。

コンプライアンス マッピング

サーバーレス アプリケーションに関連する重要なセキュリティ管理の定義を支援するため、Cloud Security Alliance(CSA)サーバーレス アプリケーションの 12 の重大リスクを公開しました。このブループリントで使用されるセキュリティ管理は、次の表に示すように、これらのリスクのほとんどに対処できます。

リスク ブループリントの対策 ユーザーの責任
1. 関数イベントデータの追加 2021 年の Google Cloud における OWASP トップ 10 緩和策で説明されているように、Google Cloud Armor と外部アプリケーション ロードバランサは OWASP トップ 10 から保護するために役立ちます。 例外処理などの安全なコーディング手法(OWASP Secure Coding Practicesソフトウェア アーティファクトのためのサプライ チェーン レベル(SLSA)を参照)
2. 不完全な認証 なし サービスに対するユーザーの認証に使用する IAP と Identity Platform
3. 安全でないサーバーレス デプロイ構成 Cloud KMS の CMEK
顧客管理の暗号鍵の管理
4. 過剰な権限の関数とロール
  • サービス認証用のカスタム サービス アカウント(デフォルトの Compute Engine サービス アカウントではありません)
  • Cloud Run サービス アカウントの範囲を限定した IAM ロール
  • Google Cloud API アクセスの範囲を制限する VPC Service Controls(Google Cloud エンタープライズ基盤ブループリントを使用することで提供)
なし
5. 不適切な関数モニタリングとロギング Cloud Logging Cloud Monitoring のダッシュボードとアラートの構造
6. 安全でないサードパーティの依存関係 なし コードのスキャンとデプロイ前分析を使用して CI / CD パイプラインを保護する
7. 安全でないアプリケーション シークレット ストレージ Secret Manager アプリケーション コードのシークレット管理
8. サービス拒否攻撃や財務リソースの枯渇
  • Google Cloud Armor
  • Cloud Run サービスのタイムアウト(デフォルトは 120 秒)
なし
9. サーバーレスのビジネス ロジックの操作 Google Cloud API アクセスの範囲を制限する VPC Service Controls(エンタープライズ基盤ブループリントを使用することで提供) なし
10. 不適切な例外処理と詳細なエラー メッセージ なし 安全なプログラミングのベスト プラクティス
11. 廃止された関数、クラウド リソース、イベント トリガー リビジョンを使用して攻撃対象領域を最小限に抑えます。リビジョンにより、サービスで古くなったイテレーションを誤って有効にする可能性を軽減できます。また、リビジョンは、A/B Testing をモニタリング ツールやロギングツールとともに使用して新しいリビジョンのセキュリティ対策をテストするのにも役立ちます。
  • クラウド リソースを管理するための Infrastructure as Code(IaC)
  • Security Command Center を使用したクラウド リソースのモニタリング
  • Cloud Billing のモニタリング
  • 攻撃対象領域を最小化するための未使用のクラウド リソースのクリーンアップ
12. 実行間でのデータの維持 なし なし

次のステップ