関数 ID

ランタイム サービス アカウント

他のエンティティが Cloud Functions とやり取りするためにアクセスする必要がある場合と同様に、関数自体が処理を行うために Google Cloud の他のリソースへのアクセスを必要とすることがよくあります。デフォルトでは、Cloud Functions は App Engine のデフォルト サービス アカウントPROJECT_ID@appspot.gserviceaccount.com)を関数実行の ID として使用します。

ただし、App Engine サービス アカウントには編集者のロールが付与されており、多くの GCP サービスにアクセスできます。これにより、関数の開発時間は短縮できますが、本番環境で必要以上に権限が付与される可能性があるため、最小限の権限が付与されるように構成する必要があります。

これを行うには 2 つの方法あります。

App Engine のデフォルト サービス アカウントの権限を変更する

Console

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

    Google Cloud Console に移動

  2. テーブルから App Engine のデフォルトのサービス アカウント(PROJECT_ID@appspot.gserviceaccount.com)を選択します。

  3. 行の右側にある鉛筆をクリックして、[権限を編集] タブを表示します。

  4. [役割] プルダウンを使用して役割を追加または削除し、最小限のアクセス権限を設定します。

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

gcloud

編集者のロールを削除し、gcloud projects add-iam-policy-binding コマンドを使用して新しいロールを追加します。

# Remove the Editor role
gcloud projects remove-iam-policy-binding PROJECT_ID \
  --member="PROJECT_ID@appspot.gserviceaccount.com"
  --role="roles/editor"

# Add the desired role
gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="PROJECT_ID@appspot.gserviceaccount.com"
  --role="ROLE"

ここで、PROJECT_ID は使用するプロジェクトのプロジェクト ID、ROLE はランタイム サービス アカウントに割り当てる新しいロールです。

個別のサービス アカウントを関数に使用する

関数へのアクセスをより柔軟に管理するために、それぞれに独自のサービス アカウント(デフォルト以外の ID)を付与できます。

  • サービス アカウントを作成します。接続されている関数と同じプロジェクト内にある必要があります。サービス アカウント名をメモしておきます。
  • その関数が機能するためにアクセスする必要のあるリソースに基づいて、適切なロール付与します。
  • サービス アカウントと関数が別のプロジェクトにある場合、プロジェクト間で機能するようにサービス アカウントを構成します。作成したサービス アカウントで、サービス アカウント トークン作成者のロールを以下の Google が管理するサービス アカウントに付与する必要があります。

    • App Engine デフォルト サービス アカウント(PROJECT_ID@appspot.gserviceaccount.com
    • Cloud Functions サービス エージェント(service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
  • サービス アカウントをメンバーとしてリソースに追加します。この方法は、アクセスする必要があるリソースによって異なります。

  • サービス アカウントと関数を接続します。これは、デプロイ時に、または以前にデプロイされた関数を更新することによって実行できます。

デプロイ時にデフォルト以外のサービス アカウントを追加する

Console

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

    Google Cloud Console に移動

  2. 必要に応じて関数を指定および構成します。

  3. [ランタイム、ビルド、接続の設定] をクリックして、追加の設定を表示します。

  4. [ランタイム] タブを選択します。

  5. [サービス アカウント] プルダウンをクリックして、目的のサービス アカウントを選択します。

  6. [次へ]、[作成] の順にクリックします。

gcloud

gcloud functions deploy で関数をデプロイするときに、--service-account フラグを追加します。次に例を示します。

gcloud functions deploy FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL

ここで、FUNCTION_NAME は関数名、SERVICE_ACCOUNT_EMAIL はサービス アカウントのメールアドレスです。

既存の関数のサービス アカウントを更新する

既存の関数を更新して、新しいランタイム サービス アカウントを作成することもできます。

Console

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

    Google Cloud Console に移動

  2. 目的の関数の名前をクリックして、詳細ページに移動します。

  3. 詳細ページの上部にある 編集鉛筆をクリックして、関数を編集します。

  4. [ランタイム、ビルド、接続の設定] をクリックして、追加の設定を表示します。

  5. [ランタイム] タブを選択します。

  6. [サービス アカウント] プルダウンをクリックして、目的のサービス アカウントを選択します。

  7. [次へ]、[デプロイ] の順にクリックします。

gcloud

gcloud functions deploy で関数をデプロイするときに、--service-account フラグを追加します。

gcloud functions deploy FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL

ここで、FUNCTION_NAME は関数名、SERVICE_ACCOUNT_EMAIL はサービス アカウントです。