IAM でアクセスを認可する

Cloud Functions v2 API を使用して作成された関数に対して gcloud functions、REST API、Terraform などで管理アクションを実行する ID は、Identity and Access Management(IAM)を使用して認可します。この管理アクションには、関数の作成、更新、削除が含まれます。Cloud Run で作成された関数の IAM アクセスの詳細については、IAM によるアクセス制御をご覧ください。

IAM では、プリンシパル(有効にする必要がある ID で、通常はユーザーまたはサービス アカウントのメールアドレス)に、関数またはプロジェクトに対する適切な IAM ロールを付与します。このロールには、プリンシパルが実行できるアクションを定義する権限が含まれています。

始める前に

プロジェクト内の特定の関数またはすべての関数へのアクセスを制御するために必要な権限を取得するには、関数またはプロジェクトに対する Cloud Run functions 管理者roles/roles/cloudfunctions.admin)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

この事前定義ロールには、 cloudfunctions.functions.setIamPolicy 権限が含まれています。この権限は、プロジェクト内の特定の関数またはすべての関数のアクセスを制御するために必要です。

カスタムロールや他の事前定義ロールを使用して、この権限を取得することもできます。

Cloud Run functions のロールとそれに関連する権限の詳細については、Cloud Run functions の IAM ロールをご覧ください。

関数へのアクセスを有効にする

IAM を使用して個々の ID にロールを付与または制限することで、関数に対するアクションを制御できます。

プリンシパルの追加とロールの付与

gcloud functions add-iam-policy-binding コマンドを使用します。

gcloud functions add-iam-policy-binding FUNCTION_NAME \
  --member=PRINCIPAL_ID \
  --role=ROLE
 

ここで、FUNCTION_NAME は関数名、PRINCIPAL_ID はプリンシパルの ID(通常はメールアドレス)、ROLE はロールです。

PRINCIPAL_ID を提供できるソースの一覧については、プリンシパル ID をご覧ください。ROLE に使用可能な値については、Cloud Run functions の IAM ロールのリファレンス ページをご覧ください。

プリンシパルからロールを削除する

gcloud functions remove-iam-policy-binding コマンドを使用します。

gcloud functions remove-iam-policy-binding FUNCTION_NAME \
  --member=PRINCIPAL_ID \
  --role=ROLE

ここで、FUNCTION_NAME は関数名、PRINCIPAL_ID はサービス アカウントを識別するメールアドレス(先頭は serviceAccount:)、ROLE はロールです。

PRINCIPAL_ID に使用できるソースの一覧については、プリンシパル ID をご覧ください。ROLE に使用可能な値のリストについては、Cloud Run functions の IAM ロールのリファレンス ページをご覧ください。

プリンシパルに複数のロールが付与されている場合は、削除するロールを 1 つ指定してください。

プリンシパルの一括追加

たとえば、policy.json という名前の IAM ポリシーを作成します。

  {
    "bindings": [
      {
        "role": ROLE,
        "members": [
        PRINCIPAL_ID
        ]
      }
    ]
  }

gcloud functions set-iam-policy コマンドを使用します。

gcloud functions set-iam-policy FUNCTION_NAME policy.json

PRINCIPAL_ID に使用できるソースの一覧については、プリンシパル ID をご覧ください。ROLE に使用可能な値については、Cloud Run functions の IAM ロールのリファレンス ページをご覧ください。

プリンシパルの表示

プリンシパルを表示するには、gcloud functions get-iam-policy コマンドを使用します。

gcloud functions get-iam-policy FUNCTION_NAME

認証されていない HTTP 関数の呼び出しを許可する

2020 年 1 月 15 日時点では、[未認証の呼び出しを許可する] が有効になっていない HTTP 関数は、適切な権限のないエンドユーザーとサービス アカウントへのアクセスを制限します。

未認証の呼び出しを許可するには、デプロイ時またはデプロイ後に指定する必要があります。

上述の方法で特別な認証を行い、未認証の起動元に HTTP 関数の呼び出しを許可します。

デプロイ時

gcloud functions deploy コマンドは、関数作成時に呼び出し権限を構成するようにプロンプトを表示します。また、--allow-unauthenticated フラグも使用できます。

gcloud functions deploy FUNCTION_NAME \
  --trigger-http \
  --allow-unauthenticated \
  ...

このフラグを使用しなくても、同じ関数の後続のデプロイではステータスは変更されません。

デプロイ後

gcloud run services add-iam-policy-binding コマンドを使用して、特定の関数に roles/run.invoker ロールを付与します。

gcloud run services add-iam-policy-binding FUNCTION_NAME \
  --member="allUsers"\
  --role="roles/run.invoker"

これらのフィールドの詳細については gcloud run add-iam-policy-binding リファレンスをご覧ください。

ドメインで制限された共有

ドメインで制限された共有の組織ポリシーの対象となるプロジェクトで関数を開発する場合、関数の未承認の呼び出しを許可できません。このポリシーは、一般公開データの共有を制限して、データの漏えいのリスクを低減します。

未認証の呼び出しを許可する関数をデプロイする場合は、ドメインで制限された共有組織ポリシーをプロジェクトから削除することをおすすめします。組織のポリシーは組織レベル、フォルダレベル、プロジェクト レベルで設定できます。

未認証の呼び出しを許可する関数を作成したら、次のように組織ポリシーを再度有効にできます。

  • 組織ポリシーが再度有効になる前にデプロイされた関数では、未認証の呼び出しの呼び出しを引き続き許可します。
  • 既存の関数の新しいバージョンは、呼び出しを認証することなくデプロイできます。
  • 非認証の呼び出しを許可する新しい関数はデプロイできません。