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?

More than 1 year has passed since last update.

Workload Identityを使ってサービスアカウントキー無しでTerraform cloud からのGoogle Cloud デプロイ環境をつくる

Last updated at Posted at 2023-10-10

背景

Google Cloud Platform (GCP) 上でデプロイ環境を構築する際、通常はサービス アカウントキーを使用して Terraform などのインフラストラクチャ管理ツールを認証します。セキュリティを向上させ、鍵の管理を簡素化するために、Workload Identity を使用してサービス アカウント キーの発行を回避する方法があります。Workload Identityを使ってSAキー無しでTerraform cloud からのデプロイ環境をつくってみます。

事前準備

GCPとTerraform Cloudのセットアップが必要になります。詳細は割愛しますが、以下の流れで事前準備を行います。

GCPアカウントのセットアップ

  1. GCPアカウントを持っていない場合、GCP公式ウェブサイトでアカウントを作成します。
  2. プロジェクトを作成し、必要なAPIやサービスを有効にします。
  3. Google Cloud SDKをインストールして、コマンドラインからGCPにアクセスできるようにします。

Terraform Cloudへのアクセス

1.Terraform Cloudのアカウントを作成またはログインします。アカウントがない場合は、Terraform Cloudのウェブサイトから登録できます。
2.Terraform Cloudのワークスペースを作成し、プロジェクトに関連付けます。

手順

以下は、Terraform Cloud を使用して GCP 上で Workload Identity をセットアップし、サービス アカウント キーなしでデプロイ環境を構築する基本的な手順です。

Google CloudでWorkload Identityプールとプールプロバイダを作成する。

  1. 「IAMと管理」にある、「Workload Identity連携」を選択すると、以下の画面がでてくるので、使ってみるを押す。
    スクリーンショット 2023-09-30 22.24.30.png

  2. ウィザードが表示されるので、IDプールを作成するの中の、名前とプールIDを入力して続行を押す。
    スクリーンショット 2023-09-30 22.26.29.png

  3. プールにプロバイダを追加する箇所で、プロバイダの選択をOpenID Connect (OIDC)を選択して、プロバイダ名と、プロバイダIDを入力する。また、発行元(URL)には、https://app.terraform.ioを入力するして、続行を押す。
    スクリーンショット 2023-09-30 22.30.39.png

  4. プロバイダの属性を構成する箇所で、以下の属性マッピングを行う。

Google OIDC
google.subject assertion.sub
attribute.terraform_full_workspace assertion.terraform_full_workspace
attribute.terraform_workspace_id assertion.terraform_workspace_id

検証のため今回は属性条件を入力してないが、terraformのOrganization idやworkspace名などでCEL条件を入力することで認証を制限する。

スクリーンショット 2023-09-30 22.34.17.png

作成したプロバイダが表示される。
スクリーンショット 2023-09-30 22.35.26.png

サービスアカウントの作成と権限付与

サービスアカウントを作成して、以下コマンドにて、IAMバインディングを追加します。

gcloud iam service-accounts add-iam-policy-binding [id]@[プロジェクトID].iam.gserviceaccount.com \
 --role="roles/iam.workloadIdentityUser" \
 --member="principalSet://iam.googleapis.com/projects/[プロジェクト番号]/locations/global/workloadIdentityPools/[プールID]/attribute.terraform_workspace_id/[terraformのworkspace ID]"

コマンド実行後、プールの詳細の接続済みサービスアカウントに表示されます。
スクリーンショット 2023-09-30 23.00.12.png

Terraform Cloud のセットアップと実行

  1. Terraform Cloud のWorkspace の Variables で3つの変数を定義する。
key value
TFC_GCP_PROVIDER_AUTH true
TFC_GCP_RUN_SERVICE_ACCOUNT_EMAIL [サービスアカウント]
TFC_GCP_WORKLOAD_PROVIDER_NAME [Workload Identityプロバイダ名(*1)(*2)]

(*1) 形式はprojects/[プロジェクト番号]/locations/global/workloadIdentityPools/[プールID]/providers/[プロバイダID]
(*2) Sensitiveにチェックをいれる

スクリーンショット 2023-09-30 23.05.36.png

2. Terraform コードを作成し、Terraform Cloud を使用してデプロイを実行します。Terraform は Workload Identity を介して GCP にアクセスし、サービス アカウント キーを使用せずにデプロイを行います。デプロイが成功するとTerraform Cloud上で以下のように表示されます。

スクリーンショット 2023-09-30 23.56.01.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?