Cloud Run functions のセキュリティを強化する

このページでは、Cloud Run functions のリソースを使用して操作を制御する方法の概要を説明します。

アクセス制御

Cloud Run functions に対するアクセスの制御には、次の 2 種類の方法があります。

ID によるアクセスの保護

関数へのアクセスを制御する方法の一つは、リクエスト元のエンティティが認証情報を使用して自身を識別するように要求することです。認証情報は一種の「名前」で、エンティティが知っているかアクセスできるシークレット(パスワードやハードウェア ドングルなど)によって保護されます。デフォルトでは、関数は非公開としてデプロイされ、こうした認証情報が必要になります。関数は一般公開としてデプロイすることもできます。

このプロセスの最初のステップは認証情報の検証です。リクエストの送信者が誰かと、名前とシークレットの組み合わせが正しいことを確認します。このステップは Authentication と呼ばれます。

リクエスト送信者の ID が認証されると、そのアクセスレベル、ID に付与された権限を評価できます。このステップは Authorization と呼ばれます。

認証

Cloud Run functions は、次の 2 種類の ID をサポートしています。これらはプリンシパルとも呼ばれます。

  • サービス アカウント: 関数、アプリケーション、VM など、人以外の ID として機能する特別なアカウントです。これにより、人以外の認証を行うことができます。
  • ユーザー アカウント: 個々の Google アカウント所有者、または Google グループのような Google が管理するエンティティの一員といった、人を表しています。

サービス アカウントとユーザー アカウントで、認証情報の名前部分は通常、アカウントに関連付けられているメールアドレスになります。通常、ユーザー アカウントのシークレットはパスワードです。サービス アカウントの場合は、アカウントと一緒に作成される鍵ペアの秘密鍵になります。

ユーザー パスワードとサービス アカウント キーは非常に強力で、これにより、さまざまなデータや機能にアクセスすることが可能になります。これらは、明示的に取り消されるか変更されるまで有効です。認証情報が漏えいした場合の被害を抑えるため、Google Cloud では、このコア認証情報の代わりに短期の認証情報であるトークンを使用します。トークンには有効期間があり、リクエスト シーケンスの一部として動的に作成されます。このトークンはリクエストと一緒に渡され、アカウントを安全に認証するために使用されます。

Cloud Run functions で使用されるトークンには、アクセス トークンと ID トークンの 2 種類があります。アクセス トークンは通常、API 呼び出しの認証に使用され、ID トークンはデベロッパーが作成したコードの呼び出しを認証するために使用されます(たとえば、関数が別の関数を呼び出す場合)。トークン自体は OAuth 2 フレームワークとその拡張機能である Open Identity Connect を使用して作成されますが、シーケンスは複雑でエラーが発生しやすいため、Cloud クライアント ライブラリを使用してプロセスを管理することを強くおすすめします。

認可

リクエスト送信者の ID が確認されたら、リクエスト送信者に許可されている内容を確認する必要があります。この評価は、認証されたアカウントの認証時に付与された権限に基づいて行われます。Cloud Run functions は、Identity and Access Management(IAM)を使用してこれを行います。ロールは、便宜上グループ化された個別の権限の集合で、アカウントに直接、またはポリシーという構成を介して割り当てられます。通常、ロールセット内の個々の権限は、リクエストされたサービスが公開する単一の REST API 呼び出しに対応します。このプロセスの詳細については、IAM によるアクセスの承認をご覧ください。

ネットワーク ベースのアクセス制御

個々の関数のネットワーク設定を指定してアクセスを制限することもできます。これにより、関数の上り(内向き)、下り(外向き)のネットワークをより細かく制御できます。

隔離とサンドボックス化

内部では、関数インスタンスは、gVisor サンドボックス プラットフォームを使用して分離されています。設計上、関数は他の関数のオペレーション環境にアクセスできません。

実行環境の更新

安定性テスト期間の後に、Google によりセキュリティ パッチとメンテナンス更新が提供されます。Cloud Run functions はオペレーティング システムや含まれているパッケージなど、実行環境の他の部分にも更新を適用する場合があります。こうした更新により、関数の実行環境を安全に維持できます。

Cloud Run functions のセキュリティに関する更新

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

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

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

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

実行環境のセキュリティに関する更新の詳細については、セキュリティ更新ポリシーをご覧ください。