0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google CloudのService Accountの作成方法について

Last updated at Posted at 2025-03-23

前提

  • 今回はBigQueryのScheduled Queryのリソースを例に説明します

ServiceAccountとは

サービス アカウントは、ユーザーではなく、アプリケーションや Compute Engine インスタンスなどのコンピューティング ワークロードで通常使用される特別なアカウントです。サービス アカウントは、アカウント固有のメールアドレスで識別されます。

簡単にいうとリソースごとに実行するためのアカウントを使用する仕組みです
Google Cloudの各サービス用のAPIが提供されており、サービスごとのAPIを実行するには対象のAPIの呼び出しをユーザのアカウントではなく、サービスアカウント経由で使用することで

  • API キーを使わずにIAMを通じて安全に権限管理できる
  • 必要なリソースへの最小のアクセス権限のみ付与できるようになる

などのメリットがあります
AWSでいうIAM Roleに該当するかと思います

ServiceAccountと必要なIAMメンバーの作成方法

Scheduled Queryを実行するためのサービスアカウントと必要な権限が付与されたIAMメンバーを作成します
今回は

  • BigQuery Data Transfer Service エージェントのロールをもつIAMメンバー
    • BigQuery Data TransferのAPIを有効化するため
  • BigQuery 管理者のロールをもつIAMメンバー
    • Scheduled Queryの実行、更新権限が付与されている

を作成します

iam.tf
resource "google_service_account" resource "google_service_account" "scheduled_query_service_account" {
  account_id   = "scheduled-query-sa"
  display_name = "Scheduled Query Service Account"
}


resource "google_project_iam_member" "bq_admin" {
  project = var.project
  role    = "roles/bigquery.admin"
  member  = "serviceAccount:${google_service_account.scheduled_query_service_account.email}"
}

resource "google_project_iam_member" "bq_transfer" {
  project = var.project
  role    = "roles/bigquerydatatransfer.serviceAgent"
  member  = "serviceAccount:${google_service_account.scheduled_query_service_account.email}"
}

以下のように

  • BigQuery Data Transfer Service エージェント
  • BigQuery 管理者

のロールが付与された状態でService Accountが作成されていたら成功です

スクリーンショット 2025-03-23 10.35.23.png

サービスアカウントの付与

作成したサービスアカウントをScheduled Queryに設定します
serviec_account_nameへService Accountのメールを紐づけることで実現できます

bigquery.tf
resource "google_bigquery_data_transfer_config" "insert_coupon_usage_query" {
  data_refresh_window_days  = 0
  data_source_id            = "scheduled_query"
  destination_dataset_id    = null
  disabled                  = true
  display_name              = "insert_coupon_usage"
  location                  = "us"
  notification_pubsub_topic = null
  params = {
    query = templatefile("${path.module}/query/insert_coupon_usage.sql", {
      dataset = var.dataset
    })
  }
  project              = var.project
  schedule             = "every 15 minutes synchronized"
  service_account_name = google_service_account.scheduled_query_service_account.email
}

以下のようにScheduled Queryを実行できれば成功です

スクリーンショット 2025-03-23 10.46.39.png

必要なロールの確認方法

サービス名 IAMなどと調べることで権限の一覧が記載されている公式ドキュメントを閲覧できます
今後自身でサービスに必要な権限を調べる際は公式ドキュメントを熟読することを推奨しm

カスタムロールの作成方法

今回はroles/bigquery.adminのロールを使用したので実行に成功しましたがScheduled Query実行時に不要なBigQueryの権限も付与されているので権限が大きすぎます
そのため、Scheduled Queryの権限とBigQueryのテーブルへの参照、更新のみ付与されたカスタムロールを作成するのも手です
google_project_iam_custom_roleを作成し、permissions内に必要な権限を記載していきます

iam.tf
resource "google_service_account" "scheduled_query_service_account" {
  account_id   = "scheduled-query-sa"
  display_name = "Scheduled Query Service Account"
}

resource "google_project_iam_member" "bq_transfer" {
  project = var.project
  role    = "roles/bigquerydatatransfer.serviceAgent"
  member  = "serviceAccount:${google_service_account.scheduled_query_service_account.email}"
}

resource "google_project_iam_member" "custom_bq_transfer" {
  project = var.project
  role    = google_project_iam_custom_role.custom_bigquery_transfer_role.name
  member  = "serviceAccount:${google_service_account.scheduled_query_service_account.email}"
}

resource "google_project_iam_custom_role" "custom_bigquery_transfer_role" {
  project     = var.project
  role_id     = "customBigQueryTransferRole"
  title       = "Custom BigQuery Transfer Role"
  description = "Custom role with BigQuery Transfer permissions"
  permissions = [
    "bigquery.tables.getData",
    "bigquery.tables.updateData",
    "bigquery.transfers.get",
    "bigquery.transfers.update",
  ]
}

以下のように

  • BigQuery Data Transfer Service エージェント
  • BigQuery カスタムロール

のロールが付与された状態でService Accountが作成されていたら成功です

スクリーンショット 2025-03-23 10.51.48.png

スクリーンショット 2025-03-23 11.07.51.png

以下のようにScheduled Queryを実行できれば成功です

スクリーンショット 2025-03-23 11.07.34.png

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?