TerraformでGoogle Cloudのサービスアカウントを作成してみた

Google CloudのサービスアカウントをTerraformを用いて作成してみました。そしてTerraformで作成するサービスアカウントにロールも付与できるかどうかも検証してみました。
2024.05.10

データアナリティクス事業本部の根本です。TerraformでGoogle Cloudのリソース作成をしていて、サービスアカウントも作りたいなと思ったので検証してみました。よかったら読んでみてください。

この記事の対象者

  • TerraformでGoogle Cloudのサービスアカウントを作成したいひと

前提条件

  • Cloud Shell, IAM, Cloud Resource ManagerのAPIが使えること

検証の全体像

  • Terraformでサービスアカウントを作成
  • サービスアカウントにロールもセット

上記の検証をCloud Shellを用いて行います。
それでは早速検証していきます!

やってみる

Terraformの確認と準備

まずは、Cloud Shellを開いて、Terraformが入っているかコマンドで確認します。

terraform version

コマンドを実行して以下のようなバージョン情報の出力があれば問題ありません。

Terraform v1.5.7
on linux_amd64

Your version of Terraform is out of date! The latest version
is 1.8.2. You can update by downloading from https://www.terraform.io/downloads.html

(今回は検証なのでバージョンは特に気にしません)
それではTerraformを動かす準備をしていきます。
まずはホームディレクトリ直下で、Terraform用のディレクトリを作成して移動します。

mkdir terraform_serviceaccount_test && cd terraform_serviceaccount_test

サービスアカウントを作成してみる

まずはサービスアカウントを作成してみます。

provider "google" {
  project = "プロジェクトID"
  region  = "asia-northeast1"
}

resource "google_service_account" "terraform-test" {
  project      = "プロジェクトID"
  account_id   = "dev-terraform-service-account"
  display_name = "terraform_service_account"
}

リファレンスを参考に作成しました。

 リソースの種類はgoogle_service_accountを指定して、設定項目には以下を指定しました。

設定項目 設定値
project [任意]プロジェクトID
account_id [必須]サービスアカウントID
display_name [任意]表示名

それでは以下のコマンドを実行していきます。

terraform init

terraform initコマンドが成功したらterraform applyコマンドを実行します

terraform apply

コマンドを実行すると

Do you want to perform these actions?

と確認されますので、yesと入力してEnterキーを押下します。
コマンドが成功したらサービスアカウントが作成されているか確認してみます。

サービスアカウントが、指定通り作成できていることを確認できました。

ロールを付与したサービスアカウントを作成してみる

次はロールを付与したサービスアカウントを作成してみます。 ホームディレクトリ直下へ移動して、ディレクトリを作成して移動します。

mkdir terraform_serviceaccount_test_with_role && cd terraform_serviceaccount_test_with_role

実行するTerraformは以下となります。

provider "google" {
  project = "プロジェクトID"
  region  = "asia-northeast1"
}
resource "google_service_account" "terraform-role-test" {
  project      = "プロジェクトID"
  account_id   = "dev-serviceaccount-role"
  display_name = "terraform_service_account_with_role"
}
resource "google_project_iam_member" "log_writer_iam" {
  project = "プロジェクトID"
  role    = "roles/logging.logWriter"
  member  = "serviceAccount:${google_service_account.terraform-role-test.email}"
}

リソースの種類はgoogle_project_iam_memberを指定してロール:roles/logging.logWriter(ログ書き込み権限)を対象サービスアカウントに設定します。 リファレンスを参考に作成しました。
それでは先ほど同様に以下のコマンドを実行していきます。

terraform init

terraform initコマンドが成功したらterraform applyコマンドを実行します

terraform apply

コマンドを実行すると

Do you want to perform these actions?

と確認されますので、yesと入力してEnterキーを押下します。
コマンドが成功したらサービスアカウントが作成されているかとロールが付与されているか確認してみます。
設定値通りロールも付与された状態で作成されていました。検証は無事成功です。

おわりに

TerraformでGoogle Cloudのサービスアカウントを作成してみました。リファレンスを見ると、他にも多くの項目があり柔軟に設定できるので運用に用いる際は他のリソースや設定項目も意識して実装したいですね。また時間があったらより深掘りをして記事にしたいと思います。
この記事がどなたかのお役に立てば嬉しいです。それではまた。

参考

Terraform公式リファレンス