サービス アカウント

このページでは、サービス アカウント、アクセス スコープ、およびサービス アカウントに適用される Identity and Access Management(IAM)の役割について説明します。サービス アカウントの作成方法と使用方法の詳細については、インスタンスのサービス アカウントの作成と有効化のドキュメントを参照してください。

サービス アカウントとは、Google Compute Engine のインスタンス上で実行されるサービスやアプリケーションが使用し、他の Google Cloud Platform API と対話することを可能にする特殊なアカウントです。アプリケーションは、それ自体を認証して API を設定するためにサービス アカウントの資格情報を使用し、サービス アカウントおよび仮想マシンのインスタンスに付与された権限の範囲内でアクションを実行することができます。

はじめに

サービス アカウントとは

サービス アカウントは、仮想マシン インスタンス上で実行中のアプリケーションを他の Google Cloud Platform サービスに対して認証します。たとえば、Google Cloud Storage 上でファイルを読み取り / 書き込みするアプリケーションを書く場合、最初に Google Cloud Storage API に認証される必要があります。そこで、サービス アカウントを作成し、サービス アカウントに Cloud Storage API にアクセスすることを許可させることができます。次に、使用するアプリケーション コードを更新して、サービス アカウントの資格情報を Cloud Storage API に渡すことになります。この方法では、使用するインスタンス イメージまたはアプリケーション コードに秘密鍵やユーザーの資格情報を埋め込むことなく、アプリケーションが API をシームレスに認証することができます。

Compute Engine インスタンスに使用可能なサービス アカウントには次の 2 種類があります。それは、ユーザー管理サービス アカウントと Google-管理サービス アカウントです。

ユーザー管理サービス アカウント

ユーザー管理サービス アカウントには、明示的に作成された新しいサービス アカウントと、Compute Engine のデフォルト サービス アカウントが挙げられます。

新しいサービス アカウント

自分自身のサービス アカウントを、Google Identity and Access Management を使用して作成できます。アカウントを作成したら、アカウントに IAM の役割を許可し、サービス アカウントとして実行するようにインスタンスを設定します。サービス アカウントによって、インスタンス上で実行されることが有効になったアプリケーションは、他の Google API へのリクエストを行うために、アカウントの資格情報を使用することができます。

サービス アカウントを作成して設定する方法は、インスタンスのサービス アカウントの作成と有効化を参照してください。

Compute Engine のデフォルトのサービス アカウント

歴史的な理由により、すべてのプロジェクトには、このメールを使用して識別が可能な Compute Engine のデフォルトのサービス アカウントが設定されています。

[PROJECT_NUMBER]-compute@developer.gserviceaccount.com

デフォルトのサービス アカウントは Google によって作成され、自動的にアカウントに追加されますが、アカウントに対してフル コントロールが可能です。

gcloud コマンドライン ツールまたは Google Cloud Platform Console を使用してインスタンスを作成すると、以下のアクセス スコープでデフォルトのサービス アカウントとして実行されるようにインスタンスが自動的に有効になります。

  • Google Cloud Storage への読み取り専用アクセス権:
    https://www.googleapis.com/auth/devstorage.read_only
  • Compute Engine ログに書き込むための書き込みアクセス権:
    https://www.googleapis.com/auth/logging.write
  • Google Cloud プロジェクトに指標データを公開するための書き込みアクセス権:
    https://www.googleapis.com/auth/monitoring.write
  • Google Cloud Endpoints に必要な Service Management 機能への読み取り専用アクセス権(Alpha):
    https://www.googleapis.com/auth/service.management.readonly
  • Google Cloud Endpoint に必要な Service Control 機能への読み取り / 書き込みアクセス権(Alpha):
    https://www.googleapis.com/auth/servicecontrol

gcloud コマンドライン ツールまたは Google Cloud Platform Console を使用しないで、API に直接リクエストを行ってインスタンスを作成すると、デフォルト サービス アカウントはそのインスタンスで有効になりません。ただし、リクエスト ペイロードの一部として明示的に指定することで、デフォルトのサービス アカウントを有効にすることもできます。

使用プロジェクトからサービス アカウントを削除することはできますが、それを行うと、サービス アカウントの資格情報に依存しているすべてのアプリケーションが使用できない原因となる可能性があります。デフォルトのサービス アカウントを誤って削除してしまった場合、Compute Engine チームに連絡してアカウントを追加し、プロジェクトにそのアカウントを戻すことができます。

要約すると、デフォルトのサービス アカウントは以下の属性を備えています。

  • Google Cloud Platform Console プロジェクトによって自動的に作成されていて、自動生成された名前とメールアドレスがある。
  • プロジェクトにプロジェクト編集者として自動的に追加されている。
  • 特定の権限セットのある Cloud Platform Console および gcloud コマンドライン ツールで作成されたすべてのインスタンスで有効になる。この設定は、インスタンスの作成時に別のサービス アカウントを指定するか、またはインスタンスのサービス アカウントを明示的に無効にすることでオーバーライドできます。

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

これらのサービス アカウントは Google によって作成および管理され、自動的にプロジェクトに割り当てられます。これらのアカウントはさまざまな Google サービスを表し、各アカウントは Google Cloud Platform プロジェクトに一定のレベルでアクセスが可能です。

Google API サービス アカウント

デフォルトのサービス アカウントは別として、Compute Engine により有効にされたすべてのプロジェクトには、このメールを使用して識別な可能な Google API サービス アカウントが設定されています。

[PROJECT_NUMBER]@cloudservices.gserviceaccount.com

これは、Google の内部プロセスを実行するために特別に設計されたサービス アカウントです。アカウントは Google が所有し、Cloud Platform Console のサービス アカウント セクションにはリストされません。デフォルトでは、アカウントは、プロジェクトに対する編集者の役割りが自動的に付与され、Google Platform Console の IAM セクションにリスト表示されます。このサービス アカウントは、プロジェクトが削除された場合にのみ削除されます。ただし、プロジェクトへのすべてのアクセス権を取り消すなど、このアカウントに付与されている役割を変更することはできます。

一部のリソースは、このサービス アカウントに依存しており、デフォルトの編集者の権限がこのサービス アカウントに付与されています。たとえば、管理対象インスタンス グループと自動スケーリングでは、このアカウントの認証情報を使用して、インスタンスの作成、削除、管理が行われます。このサービス アカウントに対する権限を取り消すか、またはインスタンスの作成権限を付与しないように権限を変更すると、管理対象インスタンス グループと自動スケーリングが機能しなくなります。

このような理由から、このサービス アカウントの役割は変更しないでください。

サービス アカウント権限

インスタンスをサービス アカウントとして実行するように設定すると、サービス アカウントのアクセス権レベルは、インスタンスに許可されたアクセス スコープと、サービス アカウントに許可された IAM の役割の組み合わせによって決まります。アクセス スコープと IAM の役割の両方を設定して、インスタンスが、サービス アカウントとして実行するように適正に設定されることが必要です。以下は基本です。

  • アクセス スコープは、インスタンスが持つ潜在的なアクセス権を承認します。
  • IAM は、サービス アカウントに付与されている役割へのアクセスを制限します。

アクセス スコープと IAM の役割は、どちらも、以下のセクションで詳細に説明されます。

選択可能なアクセス スコープは数多くありますが、すべての Cloud Platform サービスへのアクセスを承認する cloud-platform アクセス スコープを設定するだけで、その後 IAM の役割を付与してアクセスを制限することもできます。

https://www.googleapis.com/auth/cloud-platform

たとえば、あるインスタンスで cloud-platform のアクセス スコープを有効にして、次の 3 つの IAM の役割を付与した場合、

  • roles/compute.instanceAdmin.v1
  • roles/storage.objectViewer
  • roles/compute.networkAdmin

サービス アカウントは、この 3 つの IAM の役割によって付与される権限のみ保持します。そのアカウントでは、Cloud Platform のアクセス スコープがある場合でも、3 つの役割のスコープ外の操作は実行できません。

対照的に、Cloud Storage の読み取り専用スコープ(https://www.googleapis.com/auth/devstorage.read_only)など、より制限的なスコープを付与し、roles/storage.objectAdmin の役割をサービス アカウントに設定した場合には、roles/storage.ObjectAdmin の役割が付与されている場合でも、インスタンスで Google Cloud Storage オブジェクトを管理することができません。これは、Cloud Storage の読み取り専用スコープでは、Cloud Storage データを操作するためのインスタンスが承認されないためです。

一般的に、それぞれの API メソッドのドキュメントは、そのメソッドに必要なスコープもリストします。たとえば、instances.insert メソッドでは、有効なスコープのリストが承認セクションに提供されます。

アクセス スコープ

アクセス スコープは、インスタンスの権限を指定するレガシーな方法です。IAM の役割が存在する前は、アクセス スコープは、サービス アカウントに権限を付与する唯一のメカニズムでした。今では、それらは権限を付与するメインの方法ではありませんが、インスタンスがサービス アカウントとして実行されるように設定する場合は、まだアクセス スコープを設定する必要があります。

アクセス スコープは、インスタンスごとに適用されます: インスタンスを作成する際はアクセス スコープを設定しますが、アクセス スコープは、インスタンスの使用期間のみ持続します。アクセス スコープでは、サービス アカウントが属しているプロジェクト上で個別の API が有効になっている場合のみ機能します。たとえば、仮想マシン インスタンス上の Google Cloud Storage へのアクセス スコープを付与すると、プロジェクト上で Cloud Storage API を有効にしている場合のみ、インスタンスが Cloud Storage API を呼び出すことができます。プロジェクト上で API が有効になっていない場合、アクセス スコープは影響しません。

アクセス スコープの例をいくつか示します。

  • https://www.googleapis.com/auth/cloud-platform - すべての Google Cloud Platform リソースへの完全アクセス権。
  • https://www.googleapis.com/auth/compute - Google Compute Engine メソッドへのフル コントロール アクセス権。
  • https://www.googleapis.com/auth/compute.readonly - Google Compute Engine メソッドへの読み取り専用アクセス権。
  • https://www.googleapis.com/auth/devstorage.read_only - Google Cloud Storage への読み取り専用アクセス権。
  • https://www.googleapis.com/auth/logging.write - Google Compute Engine ログへの書き込みアクセス。

IAM の役割

アクセス スコープの設定に加えて、アカウントのアクセス権レベルを判定するために、サービス アカウントに正しい IAM の役割を付与する必要があります。たとえば、サービス アカウントに、Google Cloud Storage オブジェクトを管理するため、Google Cloud Storage バケットを管理するため、または、両方のために IAM の役割を付与し、アカウントに、これらの役割によって付与された権限を制限することができます。

IAM の役割はアカウント固有です。すなわち、サービス アカウントに IAM の役割を一旦付与すれば、そのサービス アカウントとして実行されるすべてのインスタンスはその役割を使用できます。また、注意すべき点は、

  • 一部の IAM の役割は現在ベータ版です。

    必要なアクセス レベルの IAM の役割が存在しない場合は、プロジェクトの編集者などの基本の役割の 1 つを付与することができます。

  • インスタンスにアクセス スコープを設定して、アクセス権限を承認する必要があります。

    サービス アカウントに IAM の役割のみを設定し、仮想マシン インスタンスを作成する際に、アクセス スコープを省略することはできません。サービス アカウントのアクセス権のレベルは、アクセス スコープと IAM の役割の組み合わせによって決まります。そのため、アクセス スコープと IAM の役割の両方をサービス アカウントに設定し、適正に作動できるようにすることが必要です。

次のステップ

外出先でもリソースをモニタリング

Google Cloud Console アプリを入手して、プロジェクトの管理にお役立てください。

フィードバックを送信...

Compute Engine ドキュメント