サービス アカウント

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

サービス アカウントとは、Compute Engine のインスタンス上で実行されるサービスやアプリケーションが他の Google Cloud Platform API と対話するために使用する特殊なアカウントです。アプリケーションではサービス アカウントの認証情報を使用して、一連の API に対し自身を認証します。認証されたアプリケーションは、サービス アカウントと仮想マシン インスタンスに付与された権限の範囲内でアクションを実行できます。さらに、各インスタンスに関連付けられたサービス アカウントに基づいて、インスタンスの上り / 下りトラフィックを許可または拒否するファイアウォール ルールを作成することもできます。

サービス アカウントとは

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

サービス アカウントでインスタンスやその他のリソースを作成して管理するには、そのサービス アカウントにこうした操作に必要な IAM 権限が割り当てられている必要があります。また、サービス アカウントでリソースを変更または削除できるのは、そのサービス アカウントに、プロジェクト レベルまたはリソースレベルで変更や削除の操作に必要な IAM 権限を付与した場合のみです。インスタンスに関連付けられているサービス アカウントは変更することもできます。

インスタンスには 1 つのサービス アカウントのみを関連付けることができます。インスタンスに関連付けるサービス アカウントは、そのインスタンスと同じプロジェクト内に作成されている必要があります。

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 機能に対する読み取り専用アクセス権(アルファ版):
    https://www.googleapis.com/auth/service.management.readonly
  • Google Cloud Endpoints に必要な Service Control 機能に対する読み取り / 書き込みアクセス権(アルファ版):
    https://www.googleapis.com/auth/servicecontrol

デフォルトのサービス アカウントは、Google Cloud Platform Console で変更できます。

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

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

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

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

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

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

Google API サービス アカウント

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

[PROJECT_NUMBER]@cloudservices.gserviceaccount.com

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

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

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

Compute Engine System サービス アカウント

Compute Engine API が有効なすべてのプロジェクトには、Compute Engine System サービス アカウントがあります。このアカウントは、次のアドレスを使用して識別できます。

service-[PROJECT_NUMBER]@compute-system.iam.gserviceaccount.com

このサービス アカウントは、プロジェクトでサービスに関して必要な処理を実行するための Google Compute Engine 専用のサービス アカウントです。これは、Google Cloud プロジェクトに付与されたサービス エージェントの IAM ポリシーに依存しています。また、VM インスタンス上の顧客が所有するサービス アカウントにアクセスするために Compute Engine が使用するサービス アカウントでもあります。このアカウントを所有しているのは Google ですが、プロジェクトに固有であり、GCP Console の [サービス アカウント] および [IAM] セクションに表示されます。デフォルトでは、このアカウントには自動的にプロジェクトでの compute.serviceAgent の役割が付与されます。

このサービス アカウントは、プロジェクトを削除した場合にのみ削除されます。このアカウントに付与された役割を変更して、プロジェクトへのすべてのアクセスをアカウントから取り消すことができます。このサービス アカウントの権限を取り消すか変更すると、Compute Engine は VM 上のサービス アカウントの ID にアクセスできなくなり、VM 内で実行されているソフトウェアが停止する可能性があります。

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

サービス アカウント権限

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

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

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

アクセス スコープの選択肢は数多くありますが、cloud-platform アクセス スコープのみを設定し、このスコープで Cloud Platform のすべてのサービスへのアクセスを承認したうえで、IAM の役割を付与してアクセス権を制限することもできます。

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

たとえば、インスタンスで cloud-platform アクセス スコープを有効にしてから、次の 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 オブジェクトを管理するための IAM 役割、Google Cloud Storage バケットを管理するための IAM 役割、またはこの両方の IAM 役割を付与すると、付与した役割に含まれる権限がアカウントに付与されます。

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

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

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

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

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

次のステップ

このページは役立ちましたか?評価をお願いいたします。

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

Compute Engine ドキュメント