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

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

監査ログの有効化と表示の詳細については、Cloud IAM 監査ログを参照してください。

ロールの付与

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

サービス アカウント ユーザーのロールの付与

メンバーはサービス アカウントに成り代わることにより、サービス アカウントと同じ権限を得ることができます。メンバーがサービス アカウントに成り代わることができるようにするには、サービス アカウントのメンバーにサービス アカウント ユーザーのロール(roles/iam.serviceAccountUser)を付与します。

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

{
      "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:srini@example.com"
              ],
              "role": "roles/iam.serviceAccountUser"
            }
          ]
        }
      },
      "resource": {
        "type": "service_account"
      }
    }

サービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator)を付与すると、メンバーは有効期間が短い認証情報を作成でき、Cloud IAM も同様のログエントリを生成します。

サービス アカウントにリソースに対するアクセス権を付与する

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

次の例は、プロジェクトのサービス アカウントにロールを付与する監査ログエントリを示しています。この例では、julia@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": "julia@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"
      }
    }

サービス アカウントとして実行する Compute Engine インスタンスの設定

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

ユーザーが VM インスタンスを作成すると、Compute Engine によって複数のログエントリが作成されます。次の例は、VM インスタンスを作成したユーザーとインスタンスが使用するサービス アカウントを識別する最初のログエントリを示しています。この例では、jackie@example.com ユーザーがサービス アカウント my-service-account@my-project.iam.gserviceaccount.com を使用するインスタンスを作成しています。その結果、protoPayload.authenticationInfo.principalEmail フィールドが jackie@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": "jackie@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 サービスに対するリクエストを認証できます。

次の例は、サービス アカウント キー作成のログエントリを示したものです。この例では、ユーザー sam@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": "sam@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 を呼び出すために、有効期間の短い認証情報を作成できます。

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

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

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

次の例は、有効期間の短い OAuth 2.0 アクセス トークンを生成するリクエストの監査ログエントリを示したものです。この例では、ユーザー amara@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": "amara@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

たとえば、ユーザー yoon@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": "yoon@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"
      }
    }

次のステップ