今回は、Terraformを使用してCloud Identity/Workspaceのユーザーを作成する方法について説明します。
Terraformを使用することで、コンソールからではなく、Cloud Identity/Workspaceのユーザーを作成することができます。
今後、Google Cloudの管理をTerraformだけで行いたいと考えている人に必見の内容となっております。
是非、最後までご覧いただけると嬉しいです。
作業手順
まずは、作業手順の説明です。作業手順は、3ステップです。
- ドメイン全体の委任
- Terraformファイルの作成
- Terraformの実行
1つずつ詳しく説明します。
ドメイン全体の委任
まずは、ドメイン全体の委任を行います。ドメイン全体に委任を行うために、サービスアカウントを作成します。TerraformでCloud Identity/Workspaceのユーザーを作成するには、サービスアカウントを作成し、そのアカウントに対してドメイン全体の委任を行います。
ドメイン全体の委任に関する作業手順は、全4ステップです。
- サービスアカウントの作成
- ドメイン全体の委任
- OAuthクライアントの作成
- サービスアカウントキーの作成
なお、こちらの作業手順は、下記Googleドキュメントを参考にしています。
1.サービスアカウントの作成
Google Cloudコンソールで、プロジェクトが選択されている状態で、サイドバーから、「IAMと管理」→「サービスアカウント」を選択します。
コンソール上部の「CREATE SERVICE ACCOUNT」を選択します。
下記2点を入力します。
- サービスアカウント名:サービスアカウントの表示名
- サービスアカウントID:メールアドレス
私は、どちらも「gws-user-add-sa」にしてもいます。入力後、「作成して続行」を選択します。
ロールの設定は、未設定のまま「続行」を選択します。
アクセス設定も未設定のまま、「完了」を選択します。
正常にサービスアカウントが作成されると、一覧画面に表示されます。
2.ドメイン全体の委任
1.のサービスアカウント一覧画面から、作成したサービスアカウントを選択します。すると、サービスアカウントの詳細画面が開きます。詳細設定右側の矢印マークを選択します。
クライアントIDをコピーし、「ドメイン全体の委任の詳細」を選択します。
Cloud Identity/Workspaceのコンソール(Google Admin コンソール)が開きます。サイドバーから、「セキュリティ」→「アクセスとデータ管理」→「APIの制御」を選択します。
「ドメイン全体の委任の管理」を選択します。
「新しく追加」を選択します。
コピーした「クライアントID」をペーストします。その後、「OAuth スコープ」に下記2点を追加し、承認を選択します。
https://www.googleapis.com/auth/admin.directory.user
https://www.googleapis.com/auth/admin.directory.group
正常に登録されると、一覧に表示されます。
3.OAuthクライアントの作成
Google Cloud コンソールの画面に戻り、「GOOGLE WOEKSPACE MARKETPLACE対応のOAUTHクライアントを作成」を選択します。
「続行」を選択します。
正常にOAuth クライアントが作成されるとコンソール下部に「〜が作成されました。」とのメッセージが表示されます。
4.サービスアカウントキーの作成
最後に、サービスアカウントキーを作成します。サービスアカウント詳細のコンソールから「キー」を選択し、「鍵を追加」を選択します。
「新しい鍵を作成」を選択します。
「JSON」を選択し、「作成」を選択します。すると、鍵が、ダウンロードされます。この鍵は、後でTerraformファイルを作成する際に使用します。
「秘密鍵がパソコンに保存されました」のメッセージを確認し、「閉じる」を選択します。
正常にサービスアカウントキーが作成されると、一覧に表示されます。
これで、ドメイン全体の委任作業は終わりになります。
Terraformファイルの作成
次は、Terraformファイルの作成です。今回は、前回のブログで説明したモジュールを使用してCloud Identity/Workspaceのユーザーを作成します。今回作成するTerraformファイルのフォルダ構造(ディレクトリ構造)は下記になります。
gws_user_add
|_module
| |_iam
| |_user
| |_main.tf
| |_outputs.tf
| |_variables.tf
|_provider.tf
|_sa_key.json
|_users.tf
|_versions.json
一番最上位に、「gws_user_add」フォルダがあり、その直下に、
- modulesフォルダ
- Terraformファイル
- サービスアカウントキー
の3点があります。
modulesフォルダのmain.tfで、ユーザーを作成するためのテンプレートを記述しています。その中で使用する変数については、variables.tfで定義しています。最終的に作成されたユーザーに関して、他のモジュールで使用することがあるため、outputs.tfで作成したユーザーに関する記述をしています。
次に、先程ダウンロードしたサービスアカウントキーは、名称を変更して保存しています。サービスアカウントキーのJSONファイルの名称は、任意に設定できます。こちらにはついては、provider.tfで定義しているので、その際に説明します。
1つずつのファイルに対して、詳しく説明していきます。
modulesフォルダのファイル
まずは、modulesフォルダのファイルについて説明します。
main.tf
main.tfは、ユーザーを作成するためのテンプレートファイルです。main.tfのコードは下記になります。
resource "googleworkspace_user" "template" {
primary_email = var.primary_email
recovery_email = var.recovery_email
password = random_password.user.result
change_password_at_next_login = true
name {
family_name = var.family_name
given_name = var.given_name
}
}
resource "random_password" "user" {
length = 12
special = true
}
1行ずつ説明すると、
resource "googleworkspace_user" "template" {
「resource “googleworkspace_user”」は定形なので、変更はできません。「template」の部分は、任意に設定できます。「default」等にしても良いでしょう。なお、outputs.tfで定義しているので、一緒にする必要があります。
primary_email = var.primary_email
recovery_email = var.recovery_email
password = random_password.user.result
change_password_at_next_login = true
name {
family_name = var.family_name
given_name = var.given_name
}
}
上記は、新規ユーザーを作成する際の設定項目です。コンソール画面は下記になります。
resource "random_password" "user" {
length = 12
special = true
}
新規アカウント作成時に発行されるパスワードの設定です。「resource “random_password”」も定型です。変更できません。「”user”」の部分は任意に設定できます。パスワードの長さは12桁で指定しています。こちらの長さは、任意です。
なお、作成されるパスワードは、コンソール画面で確認できません。Cloud Identityt/Workspaceの「ディレクトリ」→「ユーザー」→「作成したユーザー」の中にある「パスワードを再設定」から作成されたパスワードを手動で使用者に通知する必要があります。
variables.tf
variables.tfは、変数を定義しているファイルで、ユーザーを作成する際、ユーザー毎で変更になる値をここで定義しています。variables.tfのコードは下記になります。
variable "primary_email" {
type = string
}
variable "recovery_email" {
type = string
}
variable "family_name" {
type = string
}
variable "given_name" {
type = string
}
outputs.tf
outputs.tfは、下記コードになります。
output "email" {
value = googleworkspace_user.template.primary_email
}
outputs.tfでは、出力した値を他のモジュール等で使用する際に使用します。
users.tf
gws_user_addフォルダ直下のusers.tfは、実際に作成するユーザーの情報です。コードは下記になります。
module "googleworkspace_user_user00" {
source = "./modules/iam/user"
org_unit_path = "/"
primary_email = "user00@domain_name"
recovery_email = "administrator@domain_name"
family_name = "テスト"
given_name = "ユーザー00"
}
module "googleworkspace_user_user00" {
上記は、モジュールでユーザーを作成する際の記述です。「user00」の所に、実際作成するユーザー名を入力します。
source = "./modules/iam/user"
上記は、モジュールのmain.tfが保存されているフォルダのパス(場所)を指定しています。「.(ピリオド)」は、現在の位置を表しています。よって、「.(ピリオド)」は、「gws_user_add」フォルダ直下であることを表しています。
org_unit_path = "/"
ユーザーをCloud Identity/Workspaceのディレクトリにある組織に属すかの設定です。「/(ルート)」の場合、ドメイン直下を表しています。組織が複数ある場合は、ここで組織を指定します。
primary_email = "user00@domain_name"
recovery_email = "administrator@domain_name"
family_name = "テスト"
given_name = "ユーザー00"
上記で作成するユーザーを指定します。「domain_name」は、Cloud Identity/Workspaceで使用しているドメイン名を指定してください。「recovery_email」は、通常、ドメイン以外のドメインを指定することが多いです。Cloud Identity/Workspaceの環境でメールが受信できない場合、「recovery_email」は実際メールを受信できるメールアドレスを入力します。
versions.tf
vresions.tfでは、使用するTerraformのバージョンや、使用するサービス等のバージョンをしてします。下記コードの場合、Terraformのバージョンは、「1.4.6」以上を指定しています。「terraform init」を実行した際、この情報を基に、初期設定ファイルを生成されます。AWSで使用する場合は、「google」の記述を「aws」に変更します。
terraform {
required_version = ">= 1.4.6"
required_providers {
google = {
version = ">= 4.67.0"
}
random = {
source = "hashicorp/random"
version = ">= 3.5.1"
}
}
}
provider.tf
provider.tfは、使用するクラウドサービスの情報などを保存しているファイルです。コードは下記になります。
provider "googleworkspace" {
credentials = "./sa_key.json"
customer_id = "D00000000"
impersonated_user_email = "administrator@domain_name"
oauth_scopes = [
"https://www.googleapis.com/auth/admin.directory.user",
"https://www.googleapis.com/auth/admin.directory.group"
]
}
provider "random" {
}
credentials = "./sa_key.json"
上記コードでは、サービスアカウントキーが保存されているパス(場所)と、キーを指定しています。ダウンロードしたサービスアカウントキーの場所と名称は、任意に設定できます。
customer_id = "D00000000"
customer_idは、Cloud Identity/Workspaceのコンソールから、「アカウント」→「アカウント設定」→プロファイルに、「顧客 ID」から確認することができます。
impersonated_user_email = "administrator@domain_name"
impersonated_user_emailでは、Cloud Identity/Workspaceの管理者ユーザーのメールアドレスを記述します。下記で記述している通り、ユーザーやグループを作成することができるユーザーである必要があります。
oauth_scopes = [
"https://www.googleapis.com/auth/admin.directory.user",
"https://www.googleapis.com/auth/admin.directory.group"
]
以上で、Terraform ファイルの作成は終わりになります。自分の環境に合わせて、設定を変更する必要があるので、注意してください。
Terraformの実行
最後にTerraformファイルを実行します。手順は4ステップ。
- Terraform初期化
- Terraform ファイルのフォーマット
- terraform plan実行
- terraform apply実行
それでは1つずつ実行していきます。
1.Terraform初期化
まずは、Terraformの初期化を行います。下記コマンドを実行します。
terraform init
問題なく初期化されると、「Terraform has been successfully initialized!」のメッセージが出力されます。
2.Terraform ファイルのフォーマット
次は、Terraform ファイルのフォーマットです。下記コマンドを実行します。すると、自動的に、Terraform ファイルがフォーマットされます。
terraform fmt
3.terraform plan実行
次は、記述したTerraformファイルの変更内容を確認するための下記コマンドを実行します。問題ないと変更内容が表示されます。
terraform plan
4.terraform apply実行
最後に、変更内容を反映する下記コマンドを実行します。処理を続けるためには、「Enter a value」に「yes」と入力しエンターを押します。正常に処理が完了すると「Apply complete Resources:〜」と表示されます。
terraform apply
下記画像がCloud Identity/Workspaceのコンソール画面です。正常にユーザーが作成されています。
最後に、今回は検証で行っているので、作成したユーザーを削除します。削除する方法は、Terraformファイルから記述を削除するか、下記コマンドを実行します。今回は、コマンドで作成したユーザーを削除します。
terraform destroy
terraform applyの時同様、「Enter a value」のメッセージが表示されるので「yes」と入力します。
問題なく削除されると、「Destroy complete Resources〜」のメッセージが表示されます。
以上でTerraformの実行における説明は終わりになります。
まとめ
本日は、下記4点について説明しました。
- 作業手順
- ドメイン全体の委任
- Terraform ファイルの作成
- Terraform の実行
クラウドを使用する上で、Terraformを使うと一元管理ができ、また、GitHub等を使用すればチームでレビューを行い、間違った設定等を行った際に気づくことができます。Infrastructure as Code(IaC)は、クラウドを使用する上で必須技術の一つだと考えています。
Terraformでユーザーを作成するためには、ドメイン全体の委任やOAuthクライアントの作成等が必要です。Google ドキュメントと合わせてこちらのブログを参照して使ってみてください。
これからも、Macのシステムエンジニアとして、日々、習得した知識や経験を発信していきますので、是非、ブックマーク登録してくれると嬉しいです!
それでは、次回のブログで!