Cloud Functions を保護する
このページでは、Cloud Functions のリソースを使用して操作を制御する方法の概要を説明します。
アクセス制御
Cloud Functions に対するアクセスの制御には、次の 2 種類の方法があります。
ID によるアクセスの保護
関数へのアクセスを制御する方法の一つは、リクエスト元のエンティティが認証情報を使用して自身を識別するように要求することです。認証情報は一種の「名前」で、エンティティが知っているかアクセスできるシークレット(パスワードやハードウェア ドングルなど)によって保護されます。デフォルトでは、関数は非公開としてデプロイされ、こうした認証情報が必要になります。関数は一般公開としてデプロイすることもできます。
このプロセスの最初のステップは認証情報の検証です。リクエストの送信者が誰かと、名前とシークレットの組み合わせが正しいことを確認します。このステップは Authentication
と呼ばれます。
リクエスト送信者の ID が認証されると、そのアクセスレベル、ID に付与された権限を評価できます。このステップは Authorization
と呼ばれます。
認証
Cloud Functions は、次の 2 種類の ID をサポートしています。これらはプリンシパルとも呼ばれます。
- サービス アカウント: 関数、アプリケーション、VM など、人以外の ID として機能する特別なアカウントです。これにより、人以外の認証を行うことができます。
- ユーザー アカウント: 個々の Google アカウント所有者、または Google グループのような Google が管理するエンティティの一員といった、人を表しています。
サービス アカウントとユーザー アカウントで、認証情報の名前部分は通常、アカウントに関連付けられているメールアドレスになります。通常、ユーザー アカウントのシークレットはパスワードです。サービス アカウントの場合は、アカウントと一緒に作成される鍵ペアの秘密鍵になります。
ユーザー パスワードとサービス アカウント キーは非常に強力で、これにより、さまざまなデータや機能にアクセスすることが可能になります。これらは、明示的に取り消されるか変更されるまで有効です。認証情報が漏えいした場合の被害を抑えるため、Google Cloud では、このコア認証情報の代わりに短期の認証情報であるトークンを使用します。トークンには有効期間があり、リクエスト シーケンスの一部として動的に作成されます。このトークンはリクエストと一緒に渡され、アカウントを安全に認証するために使用されます。
Cloud Functions で使用されるトークンには、アクセス トークンと ID トークンの 2 種類があります。アクセス トークンは通常、API 呼び出しの認証に使用され、ID トークンはデベロッパーが作成したコードの呼び出しを認証するために使用されます(たとえば、関数が別の関数を呼び出す場合)。トークン自体は OAuth 2 フレームワークとその拡張機能である Open Identity Connect を使用して作成されますが、シーケンスは複雑でエラーが発生しやすいため、Cloud クライアント ライブラリを使用してプロセスを管理することを強くおすすめします。
認可
リクエスト送信者の ID が確認されたら、リクエスト送信者に許可されている内容を確認する必要があります。この評価は、認証されたアカウントの認証時に付与された権限に基づいて行われます。Cloud Functions は、Identity and Access Management(IAM)を使用してこれを行います。ロールは、便宜上グループ化された個別の権限の集合で、アカウントに直接、またはポリシーという構成を介して割り当てられます。通常、ロールセット内の個々の権限は、リクエストされたサービスが公開する単一の REST API 呼び出しに対応します。このプロセスの詳細については、IAM によるアクセスの承認をご覧ください。
ネットワーク ベースのアクセス制御
個々の関数のネットワーク設定を指定してアクセスを制限することもできます。これにより、関数の上り(内向き)、下り(外向き)のネットワークをより細かく制御できます。
隔離とサンドボックス化
内部では、関数インスタンスは、gVisor サンドボックス プラットフォームを使用して分離されています。設計上、関数は他の関数のオペレーション環境にアクセスできません。