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
- Mengonfigurasi dan melihat log audit untuk IAM.
- Dapatkan informasi selengkapnya tentang Cloud Audit Logs.
- Pelajari akun layanan.
- Membuat dan mengelola akun layanan.
- Membuat kredensial dengan masa aktif singkat untuk meniru identitas akun layanan.