実行環境のセキュリティ

すべての関数は、Cloud Functions の安全な実行環境内で、バージョニングされたランタイム イメージ上で実行されます。ランタイム イメージには、オペレーティング システム ライブラリ、言語ランタイム、その他のシステム パッケージが含まれています。Google は、すべての Cloud Functions ランタイム イメージを保持し、安定性テスト期間の後にセキュリティ パッチとメンテナンス更新をリリースします。

ランタイム イメージ

各ランタイムには、Artifact Registry の公開リポジトリに、関連するランタイム イメージ(実行イメージとも呼ばれます)があります。ランタイム ID とそのランタイム イメージの一覧については、ランタイムをご覧ください。

ランタイム イメージを特定する

関数のビルドログを調べることで、関数の作成に使用されたランタイム イメージを特定できます。

ビルドログ内で google.run-image を検索します。これにより、関数のビルドに使用されたランタイム イメージのバージョンを記述したビルドステップのログエントリが得られます。たとえば、Nodejs 関数のログエントリは次のようになります。

{
  ...
  "textPayload": "Step #2 - \"build\": Adding image label google.run-image:
    us-central1-docker.pkg.dev/serverless-runtimes/google-22-full/runtimes/nodejs22:nodejs20_20230924_20_6_1_RC00",
  ...
}

セキュリティ更新ポリシー

次のいずれかのセキュリティ更新ポリシーを選択できます。

  • 自動更新(デフォルト): ランタイム環境の更新とセキュリティ パッチは、ランタイム イメージの新しいバージョンで公開されます。更新されたランタイムは、安定性と信頼性についてのテスト期間の後、すべての関数にロールアウトされ、ダウンタイムのない更新が行われます。セキュリティの自動更新は、Cloud Functions(第 1 世代)と Cloud Functions(第 2 世代)で使用できます。言語レベルのセキュリティ修正を適用するには、Go や Java などのコンパイル済み言語を使用する関数を再ビルドする必要がある場合があります。

  • デプロイ時の更新: 特に明記されていない限り、更新とセキュリティ パッチは、関数がデプロイまたは再デプロイされたときにのみランタイムに適用されます。デプロイ時の更新は、Cloud Functions(第 1 世代)と Cloud Functions(第 2 世代)の両方で使用できます。

ランタイムの更新ポリシーは、gcloud deploy コマンドの --runtime-update-policy フラグを使用して変更できます。

関数の更新ポリシーを設定する

次に示すように、gcloud deploy コマンドに --runtime-update-policy フラグを含めることで、関数の更新ポリシーを変更できます。

  gcloud functions deploy FUNCTION_NAME \
    --runtime-update-policy=POLICY ...

次のように置き換えます。

  • FUNCTION_NAME は、関数の名前に置き換えます。
  • POLICYautomatic または on-deploy に置き換えます。

すべての関数のデフォルト ポリシーは automatic です。

関数の更新ポリシーを調べる

関数の更新ポリシーは、次のコマンドで検査できます。

  gcloud functions describe FUNCTION_NAME \

ここで、FUNCTION_NAME は関数の名前です。

  • セキュリティの自動更新が有効になっている関数には、キー automaticUpdatePolicy があります。
  • デプロイ時に更新される関数には、キー onDeployUpdatePolicy があります。

自動更新後に使用されるランタイム イメージを特定する

自動更新を有効にすると、Cloud Functions は関数のランタイム イメージを、追加のセキュリティ パッチと更新を含む新しいリビジョンと交換します。この変更は、関数のランタイムログに記載されます。

ランタイムログの runtime_version ラベルは、新しいランタイム イメージが関数で使用されることを表しています。自動的に更新された Nodejs 関数のログエントリは、次のようになります。

{
  ...
  "labels:" {
    runtime_version: nodejs20_20230924_20_6_1_RC00
    execution_id: ...
  }
  ...
}

Cloud Functions(第 2 世代)のセキュリティ スキャン

自動更新が有効になっている Cloud Functions(第 2 世代)は、scratch イメージ上に構築されます。その結果、Artifact Registry で関数を表すコンテナはベースイメージを持たなくなるため、デプロイ時の更新を使用する関数よりもかなり小さなサイズとなります。ベースイメージは実行時に関数イメージと結合され、完全な関数が作成されます。

セキュリティ スキャナを使用して、関数を実行する Google マネージド ベースイメージをモニタリングできます。関数の最新のベースイメージは REGION-docker.pkg.dev/serverless-runtimes/STACK/runtimes/RUNTIME_ID にあります。

次のように置き換えます。

  • REGION: 優先するリージョン(us-central1 など)
  • STACK: 優先オペレーティング システム スタック(google-22-full など)
  • RUNTIME_ID は、関数で使用されるランタイム ID(python310 など)に置き換えます。

たとえば、google-22-full スタックを使用して us-central1 でホストされている最新の Node.js 20 ベースイメージは、次の URL で参照されます。us-central1-docker.pkg.dev/serverless-runtimes/google-22-full/runtimes/nodejs22

イメージが scratch の上にビルドされるため、Artifact Registry に保存されたイメージは直接実行できなくなります。実行可能なイメージが必要な場合は、デプロイ時のポリシーを使用します。