IAM でアクセスを承認する

Identity and Access Management(IAM)を使用して、関数の作成、更新、削除などの管理アクションを実行する ID を承認します。プリンシパル(有効にする必要がある ID、通常はユーザーまたはサービス アカウントのメールアドレス)を関数に追加し、それらのプリンシパルに適切な IAM ロールを付与します。このロールには、実行できるアクションを定義する権限が含まれています。

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

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

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

コンソール

  1. Google Cloud コンソールに移動します。

    Google Cloud コンソールに移動

  2. 対象の関数の横にあるチェックボックスをオンにします。

  3. 画面の上部の [権限] をクリックします。[権限] パネルが開きます。

  4. [プリンシパルを追加] をクリックします。

  5. [新しいプリンシパル] フィールドに、関数にアクセスが必要な ID を 1 つ以上入力します。通常はユーザーまたはサービス アカウントのメールアドレスです。

  6. [ロールを選択] プルダウン メニューからロールを選択します。選択したロールと付与する権限の簡単な説明がパネルに表示されます。

  7. [保存] をクリックします。

gcloud

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 を提供できるソースのリストについては、IAM のコンセプト ページをご覧ください。ROLE に使用可能な値については、Cloud Functions IAM ロールのリファレンス ページをご覧ください。

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

コンソール

  1. Google Cloud コンソールに移動します。

    Google Cloud コンソールに移動

  2. 対象の関数の横にあるチェックボックスをオンにします。

  3. 画面の上部の [権限] をクリックします。[権限] パネルが開きます。

  4. 削除するプリンシパルを検索します。プリンシパルに付与されているすべてのロールを確認します。

  5. 削除するロールのプリンシパルが見つかったら、そのメンバーの横にあるゴミ箱アイコンをクリックします。プリンシパルのアクセス権を完全に削除する場合は、プリンシパルに付与されているすべてのロールでこの操作を行います。

gcloud

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 に使用可能なソースについては、IAM のコンセプト ページをご覧ください。ROLE に使用可能な値のリストについては、Cloud Functions IAM ロールのリファレンス ページをご覧ください。

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

プリンシパルの一括追加

コンソール

  1. Google Cloud コンソールに移動します。

    Google Cloud Console に移動

  2. アクセスを許可または制限する関数の隣にあるチェックボックスをクリックします。

  3. 画面の上部の [権限] をクリックします。[権限] パネルが開きます。

プリンシパルを追加するには、次の手順を実行します。

  1. [プリンシパルを追加] をクリックします。

  2. [新しいプリンシパル] フィールドに、関数にアクセスする必要がある ID を複数入力します。

  3. [ロールを選択] プルダウン メニューからロールを選択します。選択したロールと付与する権限の簡単な説明がパネルに表示されます。

  4. [保存] をクリックします。

gcloud

たとえば、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 に使用可能なソースについては、IAM のコンセプト ページをご覧ください。ROLE に使用可能な値については、Cloud Functions IAM ロールのリファレンス ページをご覧ください。

プリンシパルの表示

コンソール

  1. Google Cloud コンソールに移動します。

    Google Cloud コンソールに移動

  2. 対象の関数の名前をクリックします。

  3. [権限] タブを選択します。 [権限] パネルが開きます。

  4. [プリンシパル別に表示] タブを選択すると、選択した関数に対する権限を持つすべてのプリンシパルのリストが表示されます。

gcloud

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

gcloud functions get-iam-policy FUNCTION_NAME

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

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

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

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

デプロイ時

コンソール

[トリガー] パネルの [認証] セクションで、[未認証の呼び出しを許可する] を選択します。

gcloud

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

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

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

デプロイ後

Cloud Functions(第 1 世代)

関数の未認証の呼び出しを許可するには、関数の特別な allUsers プリンシパルに Cloud Functions 起動元のロールを付与します。

コンソール

  1. Google Cloud コンソールに移動します。

    Google Cloud コンソールに移動

  2. 受信側関数の横にあるチェックボックスをオンにします(関数自体はクリックしないでください)。

  3. 画面の上部の [権限] をクリックします。[権限] パネルが開きます。

  4. [プリンシパルを追加] をクリックします。

  5. [新しいプリンシパル] フィールドに「allUsers」と入力します。

  6. [ロールを選択] プルダウン メニューから Cloud Functions > Cloud Functions 起動元ロールを選択します。

  7. ダイアログが表示されたら、[一般公開アクセスを許可] をクリックします。

gcloud

gcloud functions add-iam-policy-binding コマンドを使用して、関数に対する特別な allUsers プリンシパルに roles/cloudfunctions.invoker ロールを付与します。

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

Cloud Functions(第 2 世代)

コンソール

  1. Google Cloud コンソールに移動します。

    Google Cloud コンソールに移動

  2. アクセスを許可する関数の名前をクリックします。

  3. 関数の概要ページの右上隅にある [Powered By Cloud Run] リンクをクリックします。

  4. [セキュリティ] タブを開き、[認証] で [未認証の呼び出しを許可] を選択します。

  5. [保存] をクリックします。

gcloud

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

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

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

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

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

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

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

プロジェクト内のすべての関数に対するアクセスを制御する

プロジェクトのすべての関数にロールを付与する場合は、プロジェクトでこれらのロールを付与します。