服務帳戶的記錄範例

本頁面提供範例,說明管理或使用服務帳戶時產生的稽核記錄。

如要進一步瞭解如何啟用及查看稽核記錄,請參閱「IAM 稽核記錄」。

建立服務帳戶的記錄

建立或修改服務帳戶時,身分與存取權管理 (IAM) 會產生記錄項目。以下範例顯示建立服務帳戶的記錄項目:

{   "protoPayload": {     "@type": "type.googleapis.com/google.cloud.audit.AuditLog",     "authenticationInfo": {       "principalEmail": "[email protected]"     },     "methodName": "google.iam.admin.v1.CreateServiceAccount",     "response": {       "email": "[email protected]",       "@type": "type.googleapis.com/google.iam.admin.v1.ServiceAccount",       "display_name": "My service account."     }   },   "resource": {     "type": "service_account"   } }

授予角色的記錄

本節顯示您授予與服務帳戶相關角色時收到的記錄項目。

授予服務帳戶使用者角色的記錄

主體可以模擬服務帳戶,取得與服務帳戶相同的權限。如要允許主體模擬服務帳戶,可以將服務帳戶使用者角色授予主體 (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/[email protected]"     },     "resourceName": "projects/-/serviceAccounts/123456789012345678901",     "response": {       "@type": "type.googleapis.com/google.iam.v1.Policy",       "bindings": [         {           "members": [             "user:[email protected]"           ],           "role": "roles/iam.serviceAccountUser"         }       ]     }   },   "resource": {     "type": "service_account"   } }

授予服務帳戶權杖建立者角色 (roles/iam.serviceAccountTokenCreator) 時,IAM 會產生類似的記錄項目,允許主體建立短期憑證。

授予服務帳戶資源存取權的記錄

您可以將角色授予特定資源的服務帳戶,允許服務帳戶存取該資源。如果擁有資源的服務也支援稽核記錄,則授予服務帳戶角色會產生稽核記錄項目。記錄項目包含 protoPayload.authenticationInfo.principalEmail 欄位,可識別將角色授予服務帳戶的主體。

以下範例顯示為專案的服務帳戶授予角色的稽核記錄項目。在本範例中,[email protected]將機構檢視者角色 (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": "[email protected]"     },     "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:[email protected]"           ],           "role": "roles/resourcemanager.organizationViewer"         }       ]     },     "serviceName": "cloudresourcemanager.googleapis.com"   },   "resource": {     "type": "project"   } }

將服務帳戶附加至資源的記錄

如果使用者擁有服務帳戶的服務帳戶使用者角色 (roles/iam.serviceAccountUser),就能將服務帳戶附加至資源。當在資源上執行的程式碼存取 Google Cloud 服務和資源時,會使用附加至資源的服務帳戶做為身分。舉例來說,如果您將服務帳戶附加至 Compute Engine 執行個體,且執行個體上的應用程式使用用戶端程式庫呼叫 API,這些應用程式就會自動使用附加的服務帳戶進行驗證和授權。 Google Cloud

本節顯示將服務帳戶附加至資源時產生的一些記錄。

使用 iam.serviceAccounts.actAs 權限的記錄

如要將服務帳戶附加至資源,您必須具備 iam.serviceAccounts.actAs 權限。主體使用這項權限將服務帳戶附加至資源時,系統會產生稽核記錄。

以下範例顯示主體使用 iam.serviceAccounts.actAs 權限,將服務帳戶附加至 Compute Engine 執行個體的記錄項目。

{   "protoPayload": {     "@type": "type.googleapis.com/google.cloud.audit.AuditLog",     "authenticationInfo": {       "principalEmail": "[email protected]"     },     "serviceName": "iam.googleapis.com",     "methodName": "iam.serviceAccounts.actAs",     "authorizationInfo": [       {         "resource": "projects/-/serviceAccounts/[email protected]",         "permission": "iam.serviceAccounts.actAs",         "granted": true,         "permissionType": "ADMIN_WRITE"       }     ],     "resourceName": "projects/-/serviceAccounts/[email protected]",     "request": {       "name": "[email protected]",       "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 執行個體的使用者,以及執行個體使用的服務帳戶。在這個範例中,使用者 [email protected] 建立的執行個體使用服務帳戶 [email protected]。因此,protoPayload.authenticationInfo.principalEmail 欄位會設為 [email protected],而 protoPayload.request.serviceAccounts[0].email 欄位會設為 [email protected]

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

使用服務帳戶金鑰存取 Google Cloud 的記錄

本節顯示您在建立服務帳戶金鑰,然後使用該金鑰存取 Google Cloud時收到的記錄項目。

建立服務帳戶金鑰的記錄

如果您在服務帳戶中擁有服務帳戶金鑰管理員角色 (roles/iam.serviceAccountKeyAdmin),可以建立服務帳戶金鑰,然後使用該金鑰驗證對 Google Cloud 服務的要求。

以下範例顯示建立服務帳戶金鑰的記錄項目。在本範例中,使用者 [email protected] 為服務帳戶 [email protected] 建立金鑰:

{   "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Factivity",   "protoPayload": {     "@type": "type.googleapis.com/google.cloud.audit.AuditLog",     "authenticationInfo": {       "principalEmail": "[email protected]",     },     "methodName": "google.iam.admin.v1.CreateServiceAccountKey",     "request": {       "@type": "type.googleapis.com/google.iam.admin.v1.CreateServiceAccountKeyRequest",       "name": "projects/-/serviceAccounts/[email protected]"     },     "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 存取權杖完成驗證。在本範例中,服務帳戶名為 [email protected],服務帳戶金鑰 ID 則為 c71e040fb4b71d798ce4baca14e15ab62115aaef

{   "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Factivity",   "protoPayload": {     "@type": "type.googleapis.com/google.cloud.audit.AuditLog",     "authenticationInfo": {       "principalEmail": "[email protected]",       "serviceAccountKeyName": "//iam.googleapis.com/projects/my-project/serviceAccounts/[email protected]/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 CloudAPI。

主體建立短期憑證時,IAM 可以產生稽核記錄。如要接收這些稽核記錄,請啟用資料存取活動的 IAM 稽核記錄

為資料存取活動啟用 IAM 稽核記錄後,每當主體建立短期憑證,IAM 就會產生稽核記錄項目。項目包含下列欄位:

  • protoPayload.authenticationInfo.principalEmail:建立短期憑證的主體。
  • resource.labels.email_id:產生短期憑證的服務帳戶。

以下範例顯示產生短期 OAuth 2.0 存取權杖的要求稽核記錄項目。在本例中,使用者 [email protected] 為服務帳戶 [email protected] 建立存取權杖:

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

使用短期憑證進行驗證的記錄

為服務帳戶建立短期憑證後,您可以在呼叫 Google CloudAPI 時,使用憑證模擬服務帳戶。

您呼叫的部分方法可能會產生稽核記錄。一般來說,這些記錄項目會顯示下列身分:

  • 短期憑證模擬的服務帳戶
  • 建立短期憑證的身分

舉例來說,假設使用者 [email protected] 為服務帳戶 [email protected] 建立短期憑證。接著,使用者會使用短期憑證模擬服務帳戶,建立新的 Pub/Sub 主題。Pub/Sub 會產生記錄項目,識別服務帳戶和模擬服務帳戶的使用者:

{   "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Factivity",   "protoPayload": {     "@type": "type.googleapis.com/google.cloud.audit.AuditLog",     "authenticationInfo": {       "principalEmail": "[email protected]",       "serviceAccountDelegationInfo": [         {           "firstPartyPrincipal": {             "principalEmail": "[email protected]"           }         }       ]     },     "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

舉例來說,假設 [email protected] 使用 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:[email protected]",         "serviceMetadata": [           {             "principalSubject": "serviceAccount:bqcx-442188550395-jujw@gcp-sa-bigquery-condel.iam.gserviceaccount.com",             "serviceDomain": "bigquery.googleapis.com",           }         ]       }     }   } }

後續步驟