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

サービス アカウントは次のカテゴリに分類できます。

  • ユーザー管理サービス アカウント。ユーザーが作成して管理するサービス アカウント。
  • サービス エージェント。Google Cloud によって作成、管理されます。

このページでは、それぞれのタイプのサービス アカウントの作成方法と使用方法について説明します。

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

ユーザー管理サービス アカウントは、プロジェクト内に作成するサービス アカウントです。必要に応じて、これらのサービス アカウントの更新、無効化、有効化、削除を行うことができます。また、これらのサービス アカウントに対する他のプリンシパルのアクセス権を管理できます。

プロジェクトでユーザー管理サービス アカウントを作成するには、IAM API、Google Cloud コンソール、または Google Cloud CLI を使用します。

デフォルトでは、1 つのプロジェクトに最大 100 個のユーザー管理サービス アカウントを作成できます。この割り当てがニーズを満たしていない場合は、Google Cloud コンソールを使用して割り当ての増加をリクエストできます。この割り当ての対象はユーザー作成のサービス アカウントのみです。デフォルトのサービス アカウントサービス エージェントは、カウントの対象に含まれません。

プロジェクトでユーザー管理サービス アカウントを作成するときには、サービス アカウントの名前を選んでください。この名前は、サービス アカウントを識別するメールアドレスに次の形式で表示されます。

service-account-name@project-id.iam.gserviceaccount.com

サービス アカウントの作成方法については、サービス アカウントを作成するをご覧ください。

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

デフォルトのサービス アカウントは、特定の Google Cloud サービスを有効にするとき、または使用するときに自動的に作成されるユーザー管理のサービス アカウントです。これらのサービス アカウントを使用すると、他の Google Cloud リソースにアクセスするジョブをデプロイできます。デフォルトのサービス アカウントが作成された後、このアカウントの管理はお客様自身で行う必要があります。

デフォルトのサービス アカウントがある Google Cloud 環境内でアプリケーションが実行される場合、アプリケーションはデフォルトのサービス アカウントの認証情報を使用して Google Cloud APIs を呼び出すことができます。または、独自のユーザー管理サービス アカウントを作成し、そのアカウントを使用して認証することもできます。詳細については、アプリケーションのデフォルト認証情報を設定するをご覧ください。

組織のポリシーの構成によっては、デフォルトのサービス アカウントにプロジェクトの編集者のロールが自動的に付与される場合があります。iam.automaticIamGrantsForDefaultServiceAccounts 組織ポリシー制約を適用して、自動的なロール付与を無効にすることを強くおすすめします。2024 年 5 月 3 日以降に組織を作成した場合、この制約はデフォルトで適用されます。

自動ロール付与を無効にする場合、デフォルトのサービス アカウントに付与するロールを決定し、これらのロールを付与する必要があります。

デフォルトのサービス アカウントにすでに編集者ロールが設定されている場合は、編集者ロールを権限の低いロールに置き換えることをおすすめします。サービス アカウントのロールを安全に変更するには、Policy Simulator を使用して変更の影響を確認してから、適切なロールを付与または取り消す操作を行います。

次の表に、デフォルト サービス アカウントを作成するサービスを示します。

サービス サービス アカウント名 メールアドレス
App Engine、および App Engine を使用する Google Cloud サービス App Engine デフォルト サービス アカウント project-id@appspot.gserviceaccount.com
Compute Engine、および Compute Engine を使用する Google Cloud サービス Compute Engine のデフォルトのサービス アカウント project-number-compute@developer.gserviceaccount.com

サービス エージェント

一部の Google Cloud サービスは、ユーザーに代わって処理を行うためにリソースにアクセスする必要があります。たとえば、Cloud Run でコンテナを実行する場合、このサービスはコンテナをトリガーする Pub/Sub トピックにアクセスする必要があります。

このニーズに応えるために、Google Cloud では多くの Google Cloud サービスにサービス アカウントを作成し、管理しています。これらのサービス アカウントは、サービス エージェントとも呼ばれます。サービス エージェントは、プロジェクトの許可ポリシー、監査ログ、または Google Cloud コンソールの IAM ページに表示されます。

サービス エージェントはプロジェクトに作成されないため、プロジェクトのサービス アカウントを表示する際に表示されません。これらに直接アクセスすることはできません。

デフォルトでは、サービス エージェントは、プロジェクトに対するロールが付与されている場合でも、Google Cloud コンソールの [IAM] ページには表示されません。サービス エージェントに付与されたロールを表示するには、[Google 提供のロール付与を含める] チェックボックスをオンにします。

Google Cloud には、次の種類のサービス エージェントがあります。

サービス固有のサービス エージェント

ほとんどのサービス エージェントはサービス固有であり、個々のサービスに代わって動作します。多くの場合、サービスを正常に機能させるには、これらのサービス エージェントが必要になります。たとえば、Cloud Logging シンクが Cloud Storage バケットにログを書き込むことができるのは、サービス エージェントのおかげです。

各サービス エージェントはリソースに関連付けられます。このリソースは通常はプロジェクト、フォルダ、組織のいずれかですが、サービス固有のリソース(Cloud SQL インスタンスなど)にすることもできます。このリソースは、サービス エージェントのアクションのスコープを定義します。たとえば、サービス エージェントがプロジェクトに関連付けられている場合、そのサービス エージェントは、そのプロジェクトならびにその子孫リソースのサービスに代わって動作します。

サービス エージェントが関連付けられているリソースの種類は、メールアドレスで確認できます。

  • サービス エージェントがプロジェクト、フォルダ、または組織に関連付けられている場合、そのメールアドレスにはそのプロジェクト、フォルダ、または組織の数値 ID が含まれます。
  • サービス エージェントがサービス固有のリソースに関連付けられている場合、そのメールアドレスには、数値のプロジェクト ID と一意の識別子が含まれます。数値のプロジェクト ID は、サービス エージェントが関連付けられているリソースを所有するプロジェクトを示します。一意の識別子は、同一のプロジェクト内の類似したサービス エージェントを区別します。

Google API サービス エージェント

プロジェクトの許可ポリシーでは、Google API サービス エージェントという名前のサービス アカウントが言及されることがよくあります。そのサービス アカウントのメールアドレスは project-number@cloudservices.gserviceaccount.com という形式になります。

このサービス アカウントは内部の Google Cloud プロセスを実行します。これには、プロジェクトの編集者ロール(roles/editor)が自動的に付与されます

サービス エージェントのロール マネージャー

IAM の監査ログにサービス アカウント service-agent-manager@system.gserviceaccount.com が含まれることがあります。

このサービス アカウントは、他のサービス エージェントに付与されているロールを管理します。これは監査ログにのみ表示されます。

たとえば、新しい API を使用する場合、Google Cloud が新しいサービス エージェントを自動的に作成し、プロジェクトに対するロールを付与することがあります。これらのロールを付与すると、監査ログエントリが生成されます。これは、service-agent-manager@system.gserviceaccount.com がプロジェクトの許可ポリシーを設定していることを示しています。

サービス エージェントの作成

サービス エージェントが作成される正確な時間は、関連付けられているリソースの種類によって異なります。

サービス固有のリソースに関連付けられるサービス エージェントは、リソースの作成時に作成されます。それらのサービス エージェントを特定する方法や、構成する方法については、関連するリソースのドキュメントをご覧ください。

プロジェクト、フォルダ、組織に関連付けられるサービス エージェントは、必要に応じて(通常は初めてサービスを使用するときに)作成されます。サービスを使用する前に、必要に応じて、サービスのサービス エージェントを作成するように Google Cloud に指示することもできます。詳細については、ロールを作成してサービス エージェントに付与するをご覧ください。

サービス エージェントのロール

Google Cloud の一部のアクションでは、ユーザーの代理でサービス エージェントがリソースを作成したり、アクセスしたりする必要があります。たとえば、Dataproc クラスタを作成する場合、クラスタを作成するには、Dataproc サービス エージェントが、プロジェクト内に Compute Engine インスタンスを作成する権限を持っている必要があります。

このアクセス権を取得するには、サービス エージェントに特定の IAM ロールが必要です。多くのプロジェクト レベルのサービス エージェントには、必要なロールが自動的に付与されます。通常、これらの自動付与されるロールの名前は、serviceAgent または ServiceAgent で終わります。他のサービス エージェントの場合、サービスが正常に機能するためにはロールを付与する必要があります。自動的にロールが付与されるサービス エージェントを確認するには、サービス エージェントのリファレンスをご覧ください。

サービスを使用する前に Google Cloud にサービス エージェントの作成を指示する場合は、通常であれば自動的に付与されるロールを、自らサービス エージェントに付与する必要があります。これは、ユーザーのリクエストで作成されるサービス エージェントにはロールが自動的に付与されないためです。これらのロールをサービス エージェントに付与しないと、一部のサービスが正常に機能しない可能性があります。これらのロールをサービス エージェントに付与する方法については、ロールを作成してサービス エージェントに付与するをご覧ください。

プライマリ サービス エージェント

サービス エージェント リファレンスでは、一部のサービス エージェントがプライマリ サービス エージェントとして識別されています。プライマリ サービス エージェントは、サービスのサービス エージェント作成をトリガーしたときにメールアドレスが返されるサービス エージェントです。

監査ロギング

プリンシパルがオペレーションを開始すると、サービス エージェントがプリンシパルの代わりにアクションを実行することがあります。ただし、サービス エージェントの監査ログを確認する場合、サービス エージェントが誰の代わりにオペレーションを実行しているのかとその理由を特定するのは困難です。

サービス エージェントのアクションのコンテキストを把握できるように、一部のサービス エージェントは、アクションが関連付けられているジョブや、ジョブを作成したプリンシパルなどの詳細を監査ログに記録します。

次のサービス エージェントは、監査ログに追加の詳細情報を記録します。

これらの詳細情報は、監査ログの serviceDelegationHistory フィールドにあります(このフィールドは authenticationInfo フィールドにネストされています)。このフィールドには、次の情報が含まれます。

  • ジョブを作成した元のプリンシパル
  • アクションを実行したサービス エージェント
  • サービス エージェントが属するサービス
  • ジョブ ID

たとえば、example-user@example.com が BigQuery Connection API を使用してジョブを作成するとします。このジョブでは、BigQuery Connection API のサービス エージェントのいずれかによってアクションが実行されます。この場合、サービス エージェントのアクションの監査ログには、次のような serviceDelegationHistory フィールドが含まれます。

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "bqcx-442188550395-jujw@gcp-sa-bigquery-condel.iam.gserviceaccount.com",
      "serviceDelegationHistory": {
        "originalPrincipal": "user:my-user@example.com",
        "serviceMetadata": [
          {
            "principalSubject": "serviceAccount:bqcx-442188550395-jujw@gcp-sa-bigquery-condel.iam.gserviceaccount.com",
            "serviceDomain": "bigquery.googleapis.com",
          }
        ]
      }
    }
  }
}

次のステップ

使ってみる

Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。

無料で開始