Contoh log untuk akun layanan

Halaman ini menampilkan contoh log audit yang dibuat saat Anda mengelola atau menggunakan akun layanan.

Untuk informasi selengkapnya tentang cara mengaktifkan dan melihat log audit, lihat logging audit IAM.

Log untuk membuat akun layanan

Saat Anda membuat atau mengubah akun layanan, Identity and Access Management (IAM) akan menghasilkan entri log. Contoh berikut menunjukkan entri log untuk membuat akun layanan:

{
  "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.",
      "@type": "type.googleapis.com/google.iam.admin.v1.ServiceAccount",
      "display_name": "My service account."
    }
  },
  "resource": {
    "type": "service_account"
  }
}

Log untuk memberikan peran

Bagian ini menunjukkan entri log yang Anda terima saat memberikan peran yang terkait dengan akun layanan.

Log untuk memberikan peran Service Account User

Entity utama dapat memperoleh izin yang sama seperti akun layanan dengan meniru identitas akun layanan. Agar akun utama dapat meniru identitas akun layanan, Anda dapat memberikan peran Service Account User (roles/iam.serviceAccountUser) kepada akun utama untuk akun layanan tersebut.

Contoh berikut menunjukkan entri log untuk memberikan peran Service Account User ke akun utama:

{
  "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."
    },
    "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"
  }
}

Saat Anda memberikan peran Service Account Token Creator (roles/iam.serviceAccountTokenCreator), yang memungkinkan akun utama membuat kredensial dengan masa berlaku singkat, di saat itu IAM akan menghasilkan entri log yang serupa.

Log untuk memberikan akses ke akun layanan pada suatu resource

Anda dapat memberikan peran ke akun layanan pada resource tertentu, agar akun layanan dapat mengakses resource tersebut. Jika layanan yang memiliki resource juga mendukung logging audit, pemberian peran ke akun layanan akan menghasilkan entri log audit. Entri log ini mencakup kolom protoPayload.authenticationInfo.principalEmail, yang mengidentifikasi akun utama yang memberikan peran ke akun layanan.

Contoh berikut menunjukkan entri log audit untuk memberikan peran ke akun layanan untuk suatu project. Dalam contoh ini, example-user@example.com memberikan peran Organization Viewer (roles/resourcemanager.organizationViewer) ke akun layanan. Kolom protoPayload.serviceName disetel ke cloudresourcemanager.googleapis.com, karena Resource Manager adalah layanan Google Cloud yang mengelola project. Selain itu, kolom resource.type disetel ke 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."
          ],
          "role": "roles/resourcemanager.organizationViewer"
        }
      ]
    },
    "serviceName": "cloudresourcemanager.googleapis.com"
  },
  "resource": {
    "type": "project"
  }
}

Log untuk melampirkan akun layanan ke resource

Jika pengguna memiliki peran Pengguna Akun Layanan (roles/iam.serviceAccountUser) pada akun layanan, pengguna tersebut dapat melampirkan akun layanan ke resource. Saat kode yang berjalan pada resource mengakses layanan dan resource Google Cloud, kode tersebut akan menggunakan akun layanan yang terkait dengan resource tersebut sebagai identitasnya. Misalnya, jika Anda melampirkan akun layanan ke instance Compute Engine, dan aplikasi pada instance tersebut menggunakan library klien untuk memanggil Google Cloud API, aplikasi tersebut akan otomatis menggunakan akun layanan yang terpasang untuk autentikasi dan otorisasi.

Bagian ini menampilkan beberapa log yang dibuat saat Anda melampirkan akun layanan ke resource.

Log untuk menggunakan izin iam.serviceAccounts.actAs

Melampirkan akun layanan ke resource memerlukan izin iam.serviceAccounts.actAs. Saat akun utama menggunakan izin ini untuk melampirkan akun layanan ke resource, akun utama akan membuat log audit.

Contoh berikut menunjukkan entri log untuk akun utama yang menggunakan izin iam.serviceAccounts.actAs untuk melampirkan akun layanan ke instance 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.",
        "permission": "iam.serviceAccounts.actAs",
        "granted": true,
        "permissionType": "ADMIN_WRITE"
      }
    ],
    "resourceName": "projects/-/serviceAccounts/sample-service-account@sample-project.",
    "request": {
      "name": "sample-service-account@sample-project.",
      "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"
}

Log untuk menyiapkan instance Compute Engine agar dijalankan sebagai akun layanan

Jika pengguna memiliki peran Service Account User (roles/iam.serviceAccountUser) pada akun layanan, pengguna tersebut dapat membuat instance virtual machine (VM) Compute Engine yang berjalan sebagai akun layanan tersebut. Dalam skenario ini, pengguna membuat instance VM dengan kredensialnya sendiri, dan permintaan tersebut menentukan akun layanan untuk digunakan oleh instance VM.

Saat pengguna membuat instance VM, Compute Engine membuat beberapa entri log. Contoh berikut menunjukkan entri log pertama, yang mengidentifikasi pengguna yang membuat instance VM dan akun layanan yang digunakan instance tersebut. Dalam contoh ini, pengguna example-user@example.com membuat instance yang menggunakan akun layanan my-service-account@my-project.. Akibatnya, kolom protoPayload.authenticationInfo.principalEmail ditetapkan ke example-user@example.com, dan kolom protoPayload.request.serviceAccounts[0].email ditetapkan ke my-service-account@my-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": "v1.compute.instances.insert",
    "request": {
      "@type": "type.googleapis.com/compute.instances.insert",
      "serviceAccounts": [
        {
          "email": "my-service-account@my-project."
        }
      ]
    },
    "resourceName": "projects/my-project/zones/us-central1-a/instances/my-instance"
  },
  "resource": {
    "type": "gce_instance"
  }
}

Log untuk mengakses Google Cloud dengan kunci akun layanan

Bagian ini menunjukkan entri log yang Anda terima saat membuat kunci akun layanan, lalu kunci tersebut digunakan untuk mengakses Google Cloud.

Log untuk membuat kunci akun layanan

Jika memiliki peran Service Account Key Admin (roles/iam.serviceAccountKeyAdmin) pada akun layanan, Anda dapat membuat kunci akun layanan, lalu menggunakan kunci tersebut untuk mengautentikasi permintaan ke Google Cloud.

Contoh berikut menunjukkan entri log untuk membuat kunci akun layanan. Dalam contoh ini, pengguna example-user@example.com membuat kunci untuk akun layanan my-service-account@my-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": "google.iam.admin.v1.CreateServiceAccountKey",
    "request": {
      "@type": "type.googleapis.com/google.iam.admin.v1.CreateServiceAccountKeyRequest",
      "name": "projects/-/serviceAccounts/my-service-account@my-project."
    },
    "resourceName": "projects/-/serviceAccounts/123456789012345678901"
  },
  "resource": {
    "type": "service_account"
  }
}

Log untuk mengautentikasi dengan kunci akun layanan

Setelah membuat kunci akun layanan, Anda dapat menggunakan kunci tersebut untuk meminta token akses OAuth 2.0 untuk akun layanan, lalu menggunakan token akses tersebut untuk mengautentikasi permintaan ke layanan Google Cloud. Secara umum, log audit untuk layanan tersebut menyertakan informasi berikut:

  • protoPayload.authenticationInfo.principalEmail: Alamat email akun layanan yang diwakili oleh token akses.
  • protoPayload.authenticationInfo.serviceAccountKeyName: Kunci akun layanan yang digunakan untuk meminta token akses OAuth 2.0. Kolom ini mengidentifikasi kunci akun layanan berdasarkan nama resource lengkap, yang menggunakan format //iam.googleapis.com/projects/project-id/serviceAccounts/service-account-email/keys/key-id.

Contoh berikut menunjukkan entri log audit untuk permintaan pembuatan instance Memorystore for Redis. Permintaan telah diautentikasi dengan token akses OAuth 2.0 untuk akun layanan. Dalam contoh ini, akun layanan diberi nama my-service-account@my-project., dan ID kunci akun layanannya adalah 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.",
      "serviceAccountKeyName": "//iam.googleapis.com/projects/my-project/serviceAccounts/my-service-account@my-project./keys/c71e040fb4b71d798ce4baca14e15ab62115aaef"
    },
    "methodName": "google.cloud.redis.v1.CloudRedis.CreateInstance",
    "request": {
      "@type": "type.googleapis.com/google.cloud.redis.v1.CreateInstanceRequest"
    }
  }
}

Log untuk meniru identitas akun layanan untuk mengakses Google Cloud

Bagian ini menampilkan entri log yang Anda terima saat membuat kredensial dengan masa aktif singkat untuk akun layanan, lalu menggunakan kredensial tersebut untuk meniru identitas akun layanan dan mengakses Google Cloud.

Log untuk membuat kredensial dengan masa aktif singkat

Jika memiliki peran Service Account Token Creator (roles/iam.serviceAccountTokenCreator) untuk akun layanan, Anda dapat membuat kredensial dengan masa aktif singkat untuk akun layanan tersebut, lalu gunakan kredensial untuk meniru identitas akun layanan. Misalnya, Anda dapat membuat kredensial yang memiliki masa aktif singkat untuk memanggil Google Cloud API dari aplikasi yang tidak berjalan di Google Cloud.

IAM dapat menghasilkan log audit saat akun utama membuat kredensial dengan masa aktif singkat. Untuk menerima log audit ini, Anda harus mengaktifkan log audit IAM untuk aktivitas Akses Data.

Setelah Anda mengaktifkan log audit IAM untuk aktivitas Akses Data, IAM membuat entri log audit setiap kali akun utama membuat kredensial dengan masa aktif singkat. Entri ini mencakup kolom berikut:

  • protoPayload.authenticationInfo.principalEmail: Entity utama yang membuat kredensial dengan masa aktif singkat.
  • resource.labels.email_id: Akun layanan tempat dibuatnya kredensial dengan masa aktif singkat.

Contoh berikut menunjukkan entri log audit untuk permintaan pembuatan token akses OAuth 2.0 dengan masa aktif singkat. Dalam contoh ini, pengguna example-user@example.com membuat token akses untuk akun layanan my-service-account@my-project.:

{
  "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."
    },
    "serviceName": "iamcredentials.googleapis.com"
  },
  "resource": {
    "labels": {
      "email_id": "my-service-account@my-project.",
      "project_id": "my-project",
      "unique_id": "123456789012345678901"
    },
    "type": "service_account"
  }
}

Log untuk autentikasi dengan kredensial dengan masa aktif singkat

Setelah membuat kredensial yang memiliki masa aktif singkat untuk akun layanan, Anda dapat menggunakan kredensial tersebut untuk meniru identitas akun layanan saat memanggil Google Cloud API.

Beberapa metode yang Anda panggil mungkin menghasilkan log audit. Secara umum, entri log ini menunjukkan identitas berikut:

  • Akun layanan dengan kredensial singkat yang ditiru identitasnya
  • Identitas yang membuat kredensial dengan masa aktif singkat

Misalnya, anggaplah pengguna example-user@example.com membuat kredensial bermasa aktif singkat untuk akun layanan my-service-account@my-project.. Pengguna kemudian membuat topik Pub/Sub baru, menggunakan kredensial yang memiliki masa aktif singkat untuk meniru identitas akun layanan. Pub/Sub menghasilkan entri log yang mengidentifikasi akun layanan, serta pengguna yang meniru identitas akun layanan:

{
  "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.",
      "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"
  }
}

Log untuk tindakan yang dilakukan oleh agen layanan

Terkadang, saat akun utama memulai operasi, agen layanan akan menjalankan tindakan atas nama akun utama. Namun, saat Anda meninjau log audit untuk agen layanan, akan sulit untuk mengetahui atas nama siapa agen layanan tersebut bertindak, dan alasannya.

Untuk membantu Anda memahami konteks tindakan agen layanan, beberapa agen layanan menyertakan detail tambahan dalam log auditnya, seperti tugas yang terkait dengan tindakan dan akun utama yang membuat tugas.

Agen layanan berikut menyertakan detail tambahan ini dalam log auditnya:

Detail tambahan ini ada di kolom serviceDelegationHistory log audit, yang disusun bertingkat di kolom authenticationInfo. Kolom ini berisi informasi berikut:

  • Prinsipal asli yang membuat tugas
  • Agen layanan yang menjalankan tindakan
  • Layanan yang menjadi milik agen layanan
  • ID tugas

Misalnya, example-user@example.com membuat tugas menggunakan BigQuery Connection API. Tugas ini memerlukan salah satu agen layanan BigQuery Connection API untuk menjalankan tindakan. Dalam hal ini, log audit untuk tindakan agen layanan akan berisi kolom serviceDelegationHistory yang mirip dengan berikut ini:

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

Langkah selanjutnya