サービス アカウントのログの例

このページには、サービス アカウントの管理または使用時に生成される監査ログの例が表示されます。

監査ログの有効化と表示については、IAM 監査ロギングをご覧ください。

サービス アカウントを作成した場合のログ

サービス アカウントを作成または変更すると、Identity and Access Management(IAM)によってログエントリが生成されます。次の例は、サービス アカウント作成のログエントリを示したものです。

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "example-user@example.com"
    },
    "methodName": "google.iam.admin.v1.CreateServiceAccount",
    "response": {
      "email": "my-service-account@my-project.iam.gserviceaccount.com",
      "@type": "type.googleapis.com/google.iam.admin.v1.ServiceAccount",
      "display_name": "My service account."
    }
  },
  "resource": {
    "type": "service_account"
  }
}

ロールを付与した場合のログ

このセクションでは、サービス アカウントに関連するロールを付与したときに生成されるログエントリを示します。

サービス アカウント ユーザーのロールを付与した場合のログ

プリンシパルはサービス アカウントの権限を借用することにより、サービス アカウントと同じ権限を得ることができます。プリンシパルがサービス アカウントの権限を借用できるようにするには、[サービス アカウント ユーザー ロール]sa-user-role をサービス アカウントのプリンシパルに付与します。

次の例は、サービス アカウント ユーザーのロールをプリンシパルに付与するためのログエントリを示しています。

{
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Factivity",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "methodName": "google.iam.admin.v1.SetIAMPolicy",
    "request": {
      "@type": "type.googleapis.com/google.iam.v1.SetIamPolicyRequest",
      "resource": "projects/-/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com"
    },
    "resourceName": "projects/-/serviceAccounts/123456789012345678901",
    "response": {
      "@type": "type.googleapis.com/google.iam.v1.Policy",
      "bindings": [
        {
          "members": [
            "user:my-user@example.com"
          ],
          "role": "roles/iam.serviceAccountUser"
        }
      ]
    }
  },
  "resource": {
    "type": "service_account"
  }
}

プリンシパルが有効期間の短い認証情報を作成できるように、[サービス アカウント トークン作成者のロール]sa-token-creator-role を付与すると、IAM は同様のログエントリを生成します。

サービス アカウントに対するアクセス権をリソースに付与した場合のログ

特定のリソースに対するロールをサービス アカウントに付与すると、そのサービス アカウントが対象のリソースにアクセスするのを許可できます。リソースを所有するサービスが監査ロギングもサポートしている場合、サービス アカウントにロールを付与すると、監査ログエントリが生成されます。ログエントリには、サービス アカウントにロールを付与したプリンシパルを識別する protoPayload.authenticationInfo.principalEmail フィールドが含まれます。

次の例は、プロジェクトのサービス アカウントにロールを付与する監査ログエントリを示しています。この例では、example-user@example.com によって組織閲覧者のロール(roles/resourcemanager.organizationViewer)がサービス アカウントに付与されています。protoPayload.serviceName フィールドは cloudresourcemanager.googleapis.com に設定されています。これは Resource Manager がプロジェクトを管理する Google Cloud サービスであるためです。また、resource.type フィールドが project に設定されています。

{
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Factivity",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "example-user@example.com"
    },
    "methodName": "SetIamPolicy",
    "request": {
      "@type": "type.googleapis.com/google.iam.v1.SetIamPolicyRequest",
      "resource": "my-project"
    },
    "resourceName": "projects/my-project",
    "response": {
      "@type": "type.googleapis.com/google.iam.v1.Policy",
      "bindings": [
        {
          "members": [
            "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com"
          ],
          "role": "roles/resourcemanager.organizationViewer"
        }
      ]
    },
    "serviceName": "cloudresourcemanager.googleapis.com"
  },
  "resource": {
    "type": "project"
  }
}

サービス アカウントとリソースの関連付けに関するログ

ユーザーがサービス アカウントに対するサービス アカウント ユーザーロール(roles/iam.serviceAccountUser)を持っている場合、ユーザーはサービス アカウントをリソースに接続できます。リソースで実行されているコードが Google Cloud のサービスとリソースにアクセスすると、そのリソースに関連付けられているサービス アカウントが ID として使用されます。たとえば、サービス アカウントを Compute Engine インスタンスに接続し、そのインスタンスのアプリケーションがクライアント ライブラリを使用して Google Cloud APIs を呼び出す場合、これらのアプリケーションは、認証と認可に接続されたサービス アカウントを自動的に使用します。

このセクションでは、サービス アカウントをリソースに接続するときに生成されるログの一部を示します。

iam.serviceAccounts.actAs 権限の使用に関するログ

サービス アカウントをリソースに関連付けるには、iam.serviceAccounts.actAs 権限が必要です。プリンシパルがこの権限を使用してサービス アカウントをリソースに接続すると、監査ログが生成されます。

次の例は、iam.serviceAccounts.actAs 権限を使用してサービス アカウントを Compute Engine インスタンスに接続するプリンシパルのログエントリを示しています。

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "example-user@example.com"
    },
    "serviceName": "iam.googleapis.com",
    "methodName": "iam.serviceAccounts.actAs",
    "authorizationInfo": [
      {
        "resource": "projects/-/serviceAccounts/sample-service-account@sample-project.iam.gserviceaccount.com",
        "permission": "iam.serviceAccounts.actAs",
        "granted": true,
        "permissionType": "ADMIN_WRITE"
      }
    ],
    "resourceName": "projects/-/serviceAccounts/sample-service-account@sample-project.iam.gserviceaccount.com",
    "request": {
      "name": "sample-service-account@sample-project.iam.gserviceaccount.com",
      "project_number": "787155667719",
      "@type": "type.googleapis.com/CanActAsServiceAccountRequest"
    },
    "response": {
      "success": true,
      "@type": "type.googleapis.com/CanActAsServiceAccountResponse"
    }
  },
  "insertId": "vojt0vd4fdy",
  "resource": {
    "type": "audited_resource",
    "labels": {
      "project_id": "sample-project",
      "method": "iam.serviceAccounts.actAs",
      "service": "iam.googleapis.com"
    }
  },
  "timestamp": "2024-08-05T21:56:56.097601933Z",
  "severity": "NOTICE",
  "logName": "projects/sample-project/logs/cloudaudit.googleapis.com%2Factivity",
  "receiveTimestamp": "2024-08-05T21:56:56.097601933Z"
}

サービス アカウントとして実行するよう Compute Engine インスタンスを設定した場合のログ

ユーザーがサービス アカウントでサービス アカウント ユーザーのロール(roles/iam.serviceAccountUser)を持つ場合、ユーザーは対象のサービス アカウントとして実行される Compute Engine 仮想マシン(VM)のインスタンスを作成できます。このシナリオでは、ユーザーが自身の認証情報を使用して VM インスタンスを作成し、使用する VM インスタンスのサービス アカウントを指定します。

ユーザーが VM インスタンスを作成すると、Compute Engine によって複数のログエントリが作成されます。次の例は、VM インスタンスを作成したユーザーとインスタンスが使用するサービス アカウントを識別する最初のログエントリを示しています。この例では、example-user@example.com ユーザーがサービス アカウント my-service-account@my-project.iam.gserviceaccount.com を使用するインスタンスを作成しています。その結果、protoPayload.authenticationInfo.principalEmail フィールドが example-user@example.com に、protoPayload.request.serviceAccounts[0].email フィールドが my-service-account@my-project.iam.gserviceaccount.com に設定されています。

{
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Factivity",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "example-user@example.com"
    },
    "methodName": "v1.compute.instances.insert",
    "request": {
      "@type": "type.googleapis.com/compute.instances.insert",
      "serviceAccounts": [
        {
          "email": "my-service-account@my-project.iam.gserviceaccount.com"
        }
      ]
    },
    "resourceName": "projects/my-project/zones/us-central1-a/instances/my-instance"
  },
  "resource": {
    "type": "gce_instance"
  }
}

サービス アカウント キーを使用して Google Cloud にアクセスした場合のログ

このセクションでは、サービス アカウント キーを作成し、そのキーを使用して Google Cloud にアクセスしたときに生成されるログエントリを示します。

サービス アカウント キーを作成した場合のログ

サービス アカウントでサービス アカウント キー管理者のロール(roles/iam.serviceAccountKeyAdmin)を所有している場合は、サービス アカウント キーを作成し、そのキーを使用して Google Cloud サービスに対するリクエストを認証できます。

次の例は、サービス アカウント キー作成のログエントリを示したものです。この例では、ユーザー example-user@example.com がサービス アカウント my-service-account@my-project.iam.gserviceaccount.com のキーを作成しています。

{
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Factivity",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "example-user@example.com",
    },
    "methodName": "google.iam.admin.v1.CreateServiceAccountKey",
    "request": {
      "@type": "type.googleapis.com/google.iam.admin.v1.CreateServiceAccountKeyRequest",
      "name": "projects/-/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com"
    },
    "resourceName": "projects/-/serviceAccounts/123456789012345678901"
  },
  "resource": {
    "type": "service_account"
  }
}

サービス アカウント キーで認証した場合のログ

サービス アカウント キーを作成したら、そのキーを使用してサービス アカウントの OAuth 2.0 アクセス トークンをリクエストし、そのアクセス トークンを使用して Google Cloud サービスへのリクエストを認証します。一般的に、このようなサービスの監査ログには次の情報が含まれます。

  • protoPayload.authenticationInfo.principalEmail: アクセス トークンが表すサービス アカウントのメールアドレス。
  • protoPayload.authenticationInfo.serviceAccountKeyName: OAuth 2.0 アクセス トークンのリクエストに使用されたサービス アカウント キー。このフィールドでは、完全なリソース名によってサービス アカウント キーを識別します。リソース名は、//iam.googleapis.com/projects/project-id/serviceAccounts/service-account-email/keys/key-id という形式です。

次の例は、Memorystore for Redis インスタンスを作成するリクエストの監査ログエントリを示したものです。リクエストは、サービス アカウントの OAuth 2.0 アクセス トークンによって認証されています。この例では、サービス アカウントの名前は my-service-account@my-project.iam.gserviceaccount.com で、サービス アカウント キーの ID は c71e040fb4b71d798ce4baca14e15ab62115aaef です。

{
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Factivity",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "my-service-account@my-project.iam.gserviceaccount.com",
      "serviceAccountKeyName": "//iam.googleapis.com/projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/c71e040fb4b71d798ce4baca14e15ab62115aaef"
    },
    "methodName": "google.cloud.redis.v1.CloudRedis.CreateInstance",
    "request": {
      "@type": "type.googleapis.com/google.cloud.redis.v1.CreateInstanceRequest"
    }
  }
}

Google Cloud にアクセスするためにサービス アカウントの権限を借用した場合のログ

このセクションでは、有効期間が短いサービス アカウントの認証情報を作成し、その認証情報を使用してサービス アカウントに成り代わり、Google Cloud にアクセスしたときに生成されるログエントリを示します。

有効期間の短い認証情報を作成した場合のログ

サービス アカウントのサービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator)がある場合、サービス アカウント用に有効期間の短い認証情報を作成し、認証情報を使用してサービス アカウントの権限を借用できます。たとえば、Google Cloud 上で実行されないアプリケーションから Google Cloud APIs を呼び出すために、有効期間の短い認証情報を作成できます。

プリンシパルが有効期間の短い認証情報を作成すると、IAM は監査ログを生成する場合があります。この監査ログを受信するには、データ アクセス アクティビティの IAM 監査ログを有効にする必要があります

データ アクセス アクティビティの IAM 監査ログを有効にすると、プリンシパルが有効期限の短い認証情報を作成するたびに監査ログエントリが生成されます。このエントリは、次のフィールドで構成されています。

  • protoPayload.authenticationInfo.principalEmail: 有効期間の短い認証情報を作成したプリンシパル。
  • resource.labels.email_id: 有効期間の短い認証情報が生成されたサービス アカウント。

次の例は、有効期間の短い OAuth 2.0 アクセス トークンを生成するリクエストの監査ログエントリを示したものです。この例では、ユーザー example-user@example.com はサービス アカウント my-service-account@my-project.iam.gserviceaccount.com のアクセス トークンを作成しました。

{
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Fdata_access",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "example-user@example.com"
    },
    "methodName": "GenerateAccessToken",
    "request": {
      "@type": "type.googleapis.com/google.iam.credentials.v1.GenerateAccessTokenRequest",
      "name": "projects/-/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com"
    },
    "serviceName": "iamcredentials.googleapis.com"
  },
  "resource": {
    "labels": {
      "email_id": "my-service-account@my-project.iam.gserviceaccount.com",
      "project_id": "my-project",
      "unique_id": "123456789012345678901"
    },
    "type": "service_account"
  }
}

有効時間が短い認証情報で認証を行った場合のログ

有効期間が短いサービス アカウントの認証情報を作成したら、その認証情報を使用してサービス アカウントの権限を借用し、Google Cloud APIs を呼び出すことができます。

メソッドによっては、呼び出すと監査ログが生成される場合があります。一般的に、このようなログエントリには次の ID が示されます。

  • 有効期間の短い認証情報が成り代わるサービス アカウント
  • 有効期間の短い認証情報を作成した ID

たとえば、ユーザー example-user@example.com がサービス アカウント my-service-account@my-project.iam.gserviceaccount.com の有効期間が短い認証情報を作成するとします。このユーザーは、作成した有効期間が短い認証情報を使用してサービス アカウントに成り代わり、新しい Pub/Sub トピックを作成します。Pub/Sub が生成するログエントリには、サービス アカウントと、そのサービス アカウントに成り代わっているユーザーを識別する情報が示されます。

{
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Factivity",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "my-service-account@my-project.iam.gserviceaccount.com",
      "serviceAccountDelegationInfo": [
        {
          "firstPartyPrincipal": {
            "principalEmail": "example-user@example.com"
          }
        }
      ]
    },
    "methodName": "google.pubsub.v1.Publisher.CreateTopic",
    "request": {
      "@type": "type.googleapis.com/google.pubsub.v1.Topic",
      "name": "projects/my-project/topics/my-topic"
    },
    "resourceName": "projects/my-project/topics/my-topic"
  },
  "resource": {
    "type": "pubsub_topic"
  }
}

サービス エージェントが行ったアクションのログ

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

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

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

これらの詳細情報は、監査ログの 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",
          }
        ]
      }
    }
  }
}

次のステップ