此页面展示了管理或使用服务账号时生成的审核日志示例。
如需详细了解如何启用和查看审核日志,请参阅 IAM 审核日志记录。
创建服务账号时生成的日志
当您创建或修改服务账号时,Identity and Access Management (IAM) 会生成日志条目。以下示例展示了创建服务账号时生成的日志条目:
{ "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.iam.gserviceaccount.com", "@type": "type.googleapis.com/google.iam.admin.v1.ServiceAccount", "display_name": "My service account." } }, "resource": { "type": "service_account" } }
授予角色时生成的日志
本部分展示您在授予与服务账号相关的角色时收到的日志条目。
授予 Service Account User 角色时生成的日志
主账号可以通过模拟服务账号,获得与服务账号相同的权限。要允许主账号模拟某个服务账号,您可以向该服务账号的主账号 [授予服务账号用户角色]sa-user-role。
以下示例展示了向主账号授予 Service Account User 角色的日志条目:
{
"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:my-user@example.com"
],
"role": "roles/iam.serviceAccountUser"
}
]
}
},
"resource": {
"type": "service_account"
}
}
当您 [授予 Service Account Token Creator 角色]sa-token-creator-role 时,主账号可创建短期有效的凭据,Cloud IAM 会生成类似的日志条目。
为服务账号授予资源的访问权限时生成的日志
您可以为服务账号授予特定资源的角色,从而允许服务账号访问该资源。如果拥有资源的服务也支持审核日志记录,则为服务账号授予角色会生成审核日志条目。日志条目包含字段 protoPayload.authenticationInfo.principalEmail
,该字段用来标识为服务账号授予角色的主账号。
以下示例展示了为项目的服务账号授予角色的审核日志条目。在此示例中,example-user@example.com
将 Organization Viewer 角色 (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": "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.iam.gserviceaccount.com"
],
"role": "roles/resourcemanager.organizationViewer"
}
]
},
"serviceName": "cloudresourcemanager.googleapis.com"
},
"resource": {
"type": "project"
}
}
将服务账号附加到资源时生成的日志
如果用户的服务账号拥有 Service Account User 角色 (roles/iam.serviceAccountUser
),则用户可以将服务账号附加到资源。当资源上运行的代码访问 Google Cloud 服务和资源时,它会使用关联到资源的服务账号作为其身份。例如,如果您将服务账号关联到某个 Compute Engine 实例,并且该实例上的应用使用客户端库来调用 Google Cloud API,则这些应用会自动使用关联的服务账号来进行身份验证和授权。
本部分展示了将服务账号附加到资源时生成的一些日志。
使用 iam.serviceAccounts.actAs
权限的日志
将服务账号关联到资源需要具有 iam.serviceAccounts.actAs
权限。当主账号使用此权限将服务账号附加到资源时,系统会生成审核日志。
以下示例展示了主账号使用 iam.serviceAccounts.actAs
权限将服务账号附加到 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.iam.gserviceaccount.com", "permission": "iam.serviceAccounts.actAs", "granted": true, "permissionType": "ADMIN_WRITE" } ], "resourceName": "projects/-/serviceAccounts/sample-service-account@sample-project.iam.gserviceaccount.com", "request": { "name": "sample-service-account@sample-project.iam.gserviceaccount.com", "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 实例以服务账号身份运行时生成的日志
如果用户的服务账号拥有 Service Account User 角色 (roles/iam.serviceAccountUser
),则用户可以创建以服务账号的身份运行的 Compute Engine 虚拟机 (VM) 实例。在这种情况下,用户使用自己的凭据创建虚拟机实例,并且该请求会指定虚拟机实例要使用的服务账号。
当用户创建虚拟机实例时,Compute Engine 会创建多个日志条目。以下示例展示了第一个日志条目,它标识了创建虚拟机实例的用户和实例使用的服务账号。在此示例中,用户 example-user@example.com
创建了一个使用服务账号 my-service-account@my-project.iam.gserviceaccount.com
的实例。结果是,protoPayload.authenticationInfo.principalEmail
字段设置为 example-user@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": "example-user@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 时收到的日志条目。
创建服务账号密钥时生成的日志
如果您的服务账号拥有 Service Account Key Admin 角色 (roles/iam.serviceAccountKeyAdmin
),则可以创建服务账号密钥,然后使用该密钥对发送到 Google Cloud 服务的请求进行身份验证。
以下示例展示了用于创建服务账号密钥的一个日志条目。在此示例中,用户 example-user@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": "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.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 时收到的日志条目。
创建短期有效的凭据时生成的日志
如果您拥有服务账号的 Service Account Token Creator 角色 (roles/iam.serviceAccountTokenCreator
),则可以为服务账号创建短期有效凭据,然后使用这些凭据模拟服务账号。例如,您可以创建短期有效凭据,以便从未在 Google Cloud 上运行的应用调用 Google Cloud API。
在主账号创建短期有效凭据时,IAM 可生成审核日志。如需接收这些审核日志,您必须为数据访问活动启用 IAM 审核日志。
为数据访问活动启用 IAM 审核日志后,主账号每次创建短期有效凭据时,IAM 都会生成审核日志条目。该条目包含以下字段:
protoPayload.authenticationInfo.principalEmail
:创建短期有效凭据的主账号。resource.labels.email_id
:为其生成短期有效凭据的服务账号。
以下示例展示了生成短期有效 OAuth 2.0 访问令牌的请求对应的审核日志条目。在此示例中,用户 example-user@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": "example-user@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 API 时使用这些凭据来模拟服务账号。
您调用的某些方法可能会生成审核日志。通常,这些日志条目会显示以下身份:
- 短期有效凭据所要模拟的服务账号
- 创建短期有效凭据的身份
例如,假设用户 example-user@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": "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"
}
}
服务代理执行操作的日志
有时,当主账号发起操作时,服务代理会代表主账号执行操作。但是,在查看服务代理的审核日志时,您可能很难判断服务代理代表谁执行了操作,以及原因。
为了帮助您了解服务代理操作的上下文,某些服务代理会在其审核日志中添加其他详细信息,例如操作所关联的作业以及创建作业的主账号。以下服务代理在其审核日志中包含这些额外详细信息:
这些其他详细信息位于审核日志的 serviceDelegationHistory
字段中,该字段嵌套在 authenticationInfo
字段中。此字段包含以下信息:
- 创建作业的原始主账号
- 执行操作的服务代理
- 服务代理所属的服务
- 作业 ID
例如,假设 example-user@example.com
使用 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:my-user@example.com", "serviceMetadata": [ { "principalSubject": "serviceAccount:bqcx-442188550395-jujw@gcp-sa-bigquery-condel.iam.gserviceaccount.com", "serviceDomain": "bigquery.googleapis.com", } ] } } } }
后续步骤
- 为 IAM 配置和查看审核日志。
- 详细了解 Cloud Audit Logs。
- 了解服务账号。
- 创建和管理服务账号。
- 创建短期有效凭据以模拟服务账号。