よっしー
こんにちは。よっしーです(^^)
今日は、Workload Identity プール用のサービスアカウントを作成する方法について解説しています。
背景
Workload Identity プール用のサービスアカウントを作成する方法について調査する機会がありましたので、その時の内容を備忘として記事に残しました。
Workload Identity プール用にサービスアカウントを作成する理由
Workload Identity プール用にサービスアカウントを作成する主な理由は以下のとおりです:
- アクセス制御の細分化:
サービスアカウントを使用することで、特定のGCPリソースやサービスへのアクセスを細かく制御できます。必要最小限の権限を付与することで、セキュリティリスクを低減できます。 - 責任の分離:
異なるワークロードや機能に対して個別のサービスアカウントを使用することで、責任の所在を明確にし、アクセスログの追跡や監査を容易にします。 - 一時的な認証情報の発行:
Workload Identity プールは、サービスアカウントと外部IDプロバイダーをマッピングします。これにより、外部システム(例:Terraform Cloud)は一時的な認証情報を取得し、そのサービスアカウントとして振る舞うことができます。 - キー管理のリスク軽減:
従来のサービスアカウントキーを使用する代わりに、Workload Identityを使用することで、長期的な認証情報の管理や漏洩のリスクを軽減できます。 - 柔軟な権限管理:
サービスアカウントにIAMロールを割り当てることで、必要に応じて権限を追加したり削除したりすることができます。これにより、セキュリティ要件の変更に柔軟に対応できます。 - 監査とコンプライアンス:
サービスアカウントの使用により、誰が何にアクセスしたかを詳細に追跡することができ、コンプライアンス要件を満たすのに役立ちます。 - 外部システムとの統合:
外部システム(例:CI/CDツール、クラウドサービス)とGCPを安全に統合する際に、サービスアカウントを使用することで、それぞれのシステムに適切な権限を付与できます。 - スケーラビリティ:
複数のワークロードや環境(開発、テスト、本番など)に対して、個別のサービスアカウントを使用することで、システムのスケールアップや管理が容易になります。
Workload Identity プール用にサービスアカウントを作成することで、セキュリティ、管理性、柔軟性が向上し、クラウドリソースへのアクセスをより安全かつ効率的に制御できるようになります。
手順
下記のコマンドで作成します。
gcloud iam service-accounts create sa-poc-terrafrom \
--display-name="workload identity for poc-terrafrom"
gcloud projects add-iam-policy-binding poc-terraform-20240715 \
--member serviceAccount:sa-poc-terrafrom@poc-terraform-20240715.iam.gserviceaccount.com \
--role roles/compute.instanceAdmin
解説
このコードは、Google Cloud Platform (GCP) で新しいサービスアカウントを作成し、そのアカウントに特定の権限を付与するものです。2つのコマンドに分かれているので、順番に解説します。
- サービスアカウントの作成:
gcloud iam service-accounts create sa-poc-terrafrom \
--display-name="workload identity for poc-terrafrom"
gcloud iam service-accounts create
: 新しいサービスアカウントを作成するコマンドです。sa-poc-terrafrom
: 作成するサービスアカウントの名前です。--display-name="workload identity for poc-terrafrom"
: サービスアカウントの表示名を設定します。この名前は管理コンソールなどで表示される際に使用されます。
- サービスアカウントへの権限付与:
gcloud projects add-iam-policy-binding poc-terraform-20240715 \
--member serviceAccount:sa-poc-terrafrom@poc-terraform-20240715.iam.gserviceaccount.com \
--role roles/compute.instanceAdmin
gcloud projects add-iam-policy-binding
: プロジェクトのIAMポリシーに新しいバインディング(権限の割り当て)を追加するコマンドです。poc-terraform-20240715
: 権限を付与するGCPプロジェクトのIDです。--member serviceAccount:sa-poc-terrafrom@poc-terraform-20240715.iam.gserviceaccount.com
: 権限を付与するサービスアカウントを指定します。これは先ほど作成したサービスアカウントのフルネームです。--role roles/compute.instanceAdmin
: 付与する役割(ロール)を指定します。この場合、Compute Engine インスタンスの管理者権限を付与しています。
このコードの効果:
- “sa-poc-terrafrom” という名前の新しいサービスアカウントが作成されます。
- 作成されたサービスアカウントに、Compute Engine インスタンスの管理者権限が付与されます。
このセットアップにより、Workload Identity プールを通じて認証された外部システム(例えばTerraform Cloud)が、このサービスアカウントの権限を使用してGCP上のCompute Engineリソースを管理できるようになります。ただし、セキュリティの観点から、必要最小限の権限のみを付与することが推奨されます。
おわりに
今日は、Workload Identity プール用のサービスアカウントを作成する方法について解説しました。
よっしー
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント