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": "hao@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"
  }
}

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

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, julia@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": "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"
  }
}

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 jackie@example.com membuat instance yang menggunakan akun layanan my-service-account@my-project.iam.gserviceaccount.com. Akibatnya, kolom protoPayload.authenticationInfo.principalEmail ditetapkan ke jackie@example.com, dan kolom protoPayload.request.serviceAccounts[0].email ditetapkan ke 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"
  }
}

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 sam@example.com membuat kunci untuk akun layanan 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"
  }
}

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.iam.gserviceaccount.com, 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.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"
    }
  }
}

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 amara@example.com membuat token akses untuk akun layanan 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"
  }
}

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 yoon@example.com membuat kredensial bermasa aktif singkat untuk akun layanan my-service-account@my-project.iam.gserviceaccount.com. 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.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"
  }
}

Langkah selanjutnya