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 関数管理者(roles/function.admin
)IAM ロールを付与するよう管理者に依頼してください。ロールの付与の詳細については、アクセス権の管理をご覧ください。
この事前定義ロールには、 cloudfunctions.functions.setIamPolicy
権限が含まれています。この権限は、プロジェクト内の特定の関数またはすべての関数のアクセスを制御するために必要です。
カスタムロールや他の事前定義ロールを使用して、この権限を取得することもできます。
Cloud Run 関数のロールとそれに関連する権限の詳細については、Cloud Run 関数の IAM ロールをご覧ください。
関数へのアクセスを有効にする
IAM を使用して個々の ID にロールを付与または制限することで、関数に対するアクションを制御できます。
プリンシパルの追加とロールの付与
コンソール
Google Cloud コンソールに移動します。
対象の関数の横にあるチェックボックスをオンにします。
画面の上部の [権限] をクリックします。[権限] パネルが開きます。
[プリンシパルを追加] をクリックします。
[新しいプリンシパル] フィールドに、関数にアクセスが必要な ID を 1 つ以上入力します。通常はユーザーまたはサービス アカウントのメールアドレスです。
[ロールを選択] プルダウン メニューからロールを選択します。選択したロールと付与する権限の簡単な説明がパネルに表示されます。
[保存] をクリックします。
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 Run 関数の IAM ロールのリファレンス ページをご覧ください。
プリンシパルからロールを削除する
コンソール
Google Cloud コンソールに移動します。
対象の関数の横にあるチェックボックスをオンにします。
画面の上部の [権限] をクリックします。[権限] パネルが開きます。
削除するプリンシパルを検索します。プリンシパルに付与されているすべてのロールを確認します。
削除するロールのプリンシパルが見つかったら、そのメンバーの横にあるゴミ箱アイコンをクリックします。プリンシパルのアクセス権を完全に削除する場合は、プリンシパルに付与されているすべてのロールでこの操作を行います。
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 Run 関数の IAM ロールのリファレンス ページをご覧ください。
プリンシパルに複数のロールが付与されている場合は、削除するロールを 1 つ指定してください。
プリンシパルの一括追加
コンソール
Google Cloud コンソールに移動します。
アクセスを許可または制限する関数の隣にあるチェックボックスをクリックします。
画面の上部の [権限] をクリックします。[権限] パネルが開きます。
プリンシパルを追加するには、次の手順を実行します。
[プリンシパルを追加] をクリックします。
[新しいプリンシパル] フィールドに、関数にアクセスする必要がある ID を複数入力します。
[ロールを選択] プルダウン メニューからロールを選択します。選択したロールと付与する権限の簡単な説明がパネルに表示されます。
[保存] をクリックします。
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 Run 関数の IAM ロールのリファレンス ページをご覧ください。
プリンシパルの表示
コンソール
Google Cloud コンソールに移動します。
対象の関数の名前をクリックします。
[権限] タブを選択します。 [権限] パネルが開きます。
[プリンシパル別に表示] タブを選択すると、選択した関数に対する権限を持つすべてのプリンシパルのリストが表示されます。
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 \ ...
このフラグを使用しなくても、同じ関数の後続のデプロイではステータスは変更されません。
デプロイ後
コンソール
Google Cloud コンソールに移動します。
アクセスを許可する関数の名前をクリックします。
関数の概要ページの右上隅にある [Powered By Cloud Run] リンクをクリックします。
[セキュリティ] タブを開き、[認証] で [未認証の呼び出しを許可] を選択します。
[保存] をクリックします。
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"
これらのフィールドの詳細については gcloud run add-iam-policy-binding
リファレンスをご覧ください。
ドメインで制限された共有
ドメインで制限された共有の組織ポリシーの対象となるプロジェクトで関数を開発する場合、関数の未承認の呼び出しを許可できません。このポリシーは、一般公開データの共有を制限して、データの漏えいのリスクを低減します。
未認証の呼び出しを許可する関数をデプロイする場合は、ドメインで制限された共有組織ポリシーをプロジェクトから削除することをおすすめします。組織のポリシーは組織レベル、フォルダレベル、プロジェクト レベルで設定できます。
未認証の呼び出しを許可する関数を作成したら、次のように組織ポリシーを再度有効にできます。
- 組織ポリシーが再度有効になる前にデプロイされた関数では、未認証の呼び出しの呼び出しを引き続き許可します。
- 既存の関数の新しいバージョンは、呼び出しを認証することなくデプロイできます。
- 非認証の呼び出しを許可する新しい関数はデプロイできません。