【Google Cloud】サービスアカウントについて解説してみた!

Google Cloud

2024.9.13

Topics

はじめに

こんにちは、Shunです!

本記事では、Google Cloud のサービスアカウントについて解説をします。

サービスアカウントの概要

サービスアカウントとは?

サービスアカウントとは、ユーザーが使用する認証情報ではなく、Compute Engine やアプリケーションなどリソースが使用する特殊なアカウントです。
サービスアカウントは、ユーザーアカウントと同様にメールアドレスによって、識別されます。
ただしサービスアカウントは、Google Cloud コンソールなどの GUI へアクセスすることは出来ません。

サービスアカウントの使用方法

アプリケーションや Compute Engine などはサービスアカウントを使用して、認可された API 呼び出しを行います。
これは、以下のいずれかの方法で行われます。

  1. サービスアカウントとして認証:
    アプリケーションは、サービスアカウントの資格情報を使用して、Google Cloud に対して直接認証を行います。
  2. ドメイン全体の委任:
    Google Workspace または Cloud Identity ユーザーとして認証し、ドメイン全体の委任により、サービスアカウントにアクセス権を付与することができます。

アプリケーションや Compute Engine がサービスアカウントとして認証されると、サービスアカウントにアクセス権が付与されているすべてのリソースにアクセスできます。

サービスアカウントの使用例

一般的な例として、Compute Engine でアプリケーションを実行する場合があります。

  1. サービスアカウントを Compute Engine に関連付けます。
  2. サービスアカウントに IAM ロールを付与します。
  3. これにより、Compute Engine で実行されているアプリケーションが Google Cloud のリソースにアクセスできるようになります。

このように、サービスアカウントはアプリケーションや Compute Engine などが Google Cloud のリソースに安全かつ効率的にアクセスするための重要な要素となります。

参考: サービス アカウントの概要

サービスアカウントのタイプ

サービスアカウントは、その作成元や管理方法によっていくつかのタイプに分類されています。
それぞれのタイプには、異なる特性と使用用途があります。

①ユーザー管理のサービスアカウント
ユーザー管理のサービスアカウントは、ユーザーが作成して管理するサービスアカウントです。これらのアカウントは、ユーザーが所有し、ユーザーが直接操作します。

多くの場合、これらのサービスアカウントは「ワークロードの ID」として使用され、ユーザーがアプリケーションやリソースにアクセス権を付与する際に使用されます。
ユーザー管理のサービスアカウントは、Google Cloud Console または gcloud コマンドラインツールを使用して作成できます。

②デフォルトのサービスアカウント
デフォルトのサービスアカウントは、特定の Google Cloud サービスを有効にすると自動的に作成される、ユーザー管理のサービスアカウントです。これらのアカウントは、サービスが正常に機能するために必要なアクセス権限を持っているため、サービスを有効にすると自動的に作成されます。
たとえば、Compute Engine インスタンスを作成すると、そのインスタンスで使用するデフォルトのサービスアカウントが自動的に作成されます。これらのサービスアカウントは、ユーザーの責任で管理する必要があります。

③Google 管理のサービスアカウント
Google 管理のサービスアカウントは、Google が作成し、管理するサービスアカウントです。これらのアカウントは、ユーザーが直接操作することはできません。
Google 管理のサービスアカウントは、サービスがリソースにアクセスできるようにするために使用されます。
たとえば、Cloud Storage バケットにアクセスするサービスが、Google 管理のサービスアカウントを使用して認証を行う場合があります。これらのサービスアカウントは、ユーザーが所有または管理することはできません。

サービスアカウントの認証情報

サービスアカウントは、Google Cloud のリソースにアクセスするために認証情報を使用します。これらの認証情報は、サービスアカウントから発行されたサービスアカウントキーを使用して生成されます。

認証情報の取得

サービスアカウントの認証情報を取得するには、いくつかの方法があります。

  • gcloud CLI:
    gcloud コマンドラインツールを使用すると、--impersonate-service-account フラグを使用して、関連付けられたサービスアカウントの認証情報を取得できます。この場合、ユーザーは認証情報を自身で作成または管理する必要はありません。

  • サービスアカウントキー:
    サービスアカウントキーは、JSON ファイルとしてダウンロードできます。このキーは、サービスアカウントに関連付けられた秘密鍵が含まれており、サービスアカウントの認証情報を生成するために使用されます。

認証情報の使用方法

取得した認証情報は、Google Cloud のリソースにアクセスするために使用されます。
認証情報は、JWTとして生成され、アクセストークンと交換されます。

認証情報のセキュリティ

サービスアカウントキーは、秘密鍵が含まれているため、取り扱いには細心の注意を払う必要があります。キーが流出した場合、外部ユーザーはサービスアカウントとして認証を行い、Google Cloud リソースにアクセスできるようになります。

サービスアカウントの管理

サービスアカウントは、Google Cloud プロジェクトに作成されます。
一度作成されたサービスアカウントは、別のプロジェクトに移動することはできません。

サービスアカウントの管理方法

サービスアカウントを管理するには、プロジェクトにまとめる方法が推奨されています。
プロジェクトにまとめる方法は、主に2つあります。

(1). 同じプロジェクトにサービスアカウントとリソースを作成する

この手法は、サービスアカウントを簡単に使い始めることができます。サービスアカウントとリソースを同じプロジェクトに作成することで、簡単にアクセスして管理することができます。

しかしこの方法は、将来的に多くのプロジェクトを作成した際の管理が難しくなります。複数プロジェクトのサービスアカウントを追跡する際、複雑になり、セキュリティ上のリスクを高める可能性があります。

(2). サービスアカウントを別々のプロジェクトで一元管理する

この手法は、組織のすべてのサービスアカウントを少数のプロジェクトに分けて管理します。サービスアカウントを一元管理することで、アクセス権限の制御、キーの管理、アカウントの削除などを効率的に行うことができます。

ただしこのアプローチでは、他のプロジェクト内のリソースにサービスアカウントを接続する場合、追加の設定作業が必要になります。たとえば、あるプロジェクト内にあるサービスアカウントが別のプロジェクトのリソースにアクセスする場合、両方のプロジェクトでアクセスするリソースの API を有効にする必要があります。

サービスアカウントの追跡

Google Cloud を使用する時間とともに、作成したサービスアカウントの数が増えていきます。すると、どのサービスアカウントがどのような目的に使われているかの区別が難しくなります。そのため、サービスアカウントを追跡し、管理することが重要です。

サービスアカウントを追跡するために、以下の2つの方法が推奨されています。

1. サービスアカウントの表示

サービスアカウントの表示名は、サービスアカウントの目的や担当者などそのサービスアカウントに関する追加情報を管理するために利用できます。

  • 新規サービスアカウント: 新しいサービスアカウントを作成する際、表示名を入力できます。
  • 既存のサービスアカウント: 既存のサービスアカウントの場合、serviceAccounts.update を使用して表示名を変更することができます。

2. 未使用のサービスアカウントの特定

使わなくなったサービスアカウントが増えていくことも運用をする中であると思います。
未使用のサービスアカウントが増えていくことはセキュリティリスクを高めます。そのため、未使用のサービスアカウントを無効もしくは削除する必要があります。

未使用のサービスアカウントは次の方法で識別できます。

  • サービスアカウントの分析情報: Google Cloud Console の サービスアカウント ページで、プロジェクトで過去 90 日間に認証されていないサービスアカウントを確認できます。
  • Activity Analyzer: Activity Analyzer を使用すると、サービスアカウントまたはキーが最後に使用された日時を確認できます。

さいごに

サービスアカウントは、アプリケーションなどが Google Cloud のリソースにアクセスするためには不可欠です。しかし、サービスアカウントにはセキュリティリスクも伴います。

そのため、「アクセス権限の最小化」、「サービスアカウントキーの管理」、「サービスアカウントの追跡」などのセキュリティ対策をしっかりと行っていきましょう!

最後までお読みいただきありがとうございます!

テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!

Shun

週8バスケしたいです。Google Cloud11冠、2024 AWS All Cert

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら