IAM によるアクセスの承認

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

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

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

メンバーを追加してロールを付与する

Console

  1. Google Cloud Console に移動します。

    Google Cloud Console に移動

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

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

  4. [メンバーを追加] をクリックします。

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

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

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

gcloud

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

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

ここで、FUNCTION_NAME は関数名、MEMBER_ID はメンバー ID(通常はメールアドレス)、ROLE はロールです。

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

メンバーからロールを削除する

Console

  1. Google Cloud Console に移動します。

    Google Cloud Console に移動

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

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

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

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

gcloud

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

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

ここで、FUNCTION_NAME は関数名、MEMBER_IDserviceAccount: で始まるサービス アカウント メンバー ID、ROLE はロールです。

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

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

メンバーの一括追加、削除

Console

  1. Google Cloud Console に移動します。

    Google Cloud Console に移動

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

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

メンバーを追加するには:

  1. [メンバーを追加] をクリックします。

  2. [新しいメンバー] に、関数にアクセスが必要な ID を複数入力します。

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

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

メンバーを削除するには:

  1. 削除するメンバーを検索するか、メンバーのロールを展開します。

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

gcloud

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

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

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

gcloud functions set-iam-policy FUNCTION_NAME policy.json

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

メンバーを表示する

Console

  1. Google Cloud Console に移動します。

    Google Cloud Console に移動

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

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

  4. [メンバー] タブが選択されていることを確認します。

gcloud

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

gcloud functions get-iam-policy FUNCTION_NAME

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

2020 年 1 月 15 日時点では、すべての HTTP 関数はデフォルトでほとんどの起動元の認証が必要です。未認証の呼び出しを許可するには、デプロイ時またはデプロイ後に指定する必要があります。

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

デプロイ時

Console

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

gcloud

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

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

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

デプロイ後

関数の未認証の呼び出しを許可するには、特別な allUsers メンバー ID を関数に追加し、Cloud Functions 起動元のロールを付与します。

Console

  1. Google Cloud Console に移動します。

    Google Cloud Console に移動

  2. アクセスを許可する関数の隣にあるチェックボックスをオンにします。

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

  4. [メンバーを追加] をクリックします。

  5. [新しいメンバー] フィールドで、「allUsers」と入力します。

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

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

gcloud

gcloud functions add-iam-policy-binding コマンドを使用して特別な allUsers メンバー ID を関数に追加し、roles/cloudfunctions.invoker ロールを付与します。

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

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

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

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

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

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

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

プロジェクトのすべての関数に対するロールをメンバーに付与するには、プロジェクト レベルの IAM を使用します。