本頁面提供範例,說明管理或使用服務帳戶時產生的稽核記錄。
如要進一步瞭解如何啟用及查看稽核記錄,請參閱「IAM 稽核記錄」。
建立服務帳戶的記錄
建立或修改服務帳戶時,身分與存取權管理 (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" } }
授予角色的記錄
本節顯示您授予與服務帳戶相關角色時收到的記錄項目。
授予服務帳戶使用者角色的記錄
主體可以模擬服務帳戶,取得與服務帳戶相同的權限。如要允許主體模擬服務帳戶,可以將服務帳戶使用者角色授予主體 (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/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"
}
}
授予服務帳戶權杖建立者角色 (roles/iam.serviceAccountTokenCreator
) 時,IAM 會產生類似的記錄項目,允許主體建立短期憑證。
授予服務帳戶資源存取權的記錄
您可以將角色授予特定資源的服務帳戶,允許服務帳戶存取該資源。如果擁有資源的服務也支援稽核記錄,則授予服務帳戶角色會產生稽核記錄項目。記錄項目包含 protoPayload.authenticationInfo.principalEmail
欄位,可識別將角色授予服務帳戶的主體。
以下範例顯示為專案的服務帳戶授予角色的稽核記錄項目。在本範例中,example-user@example.com
將機構檢視者角色 (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"
}
}
將服務帳戶附加至資源的記錄
如果使用者擁有服務帳戶的服務帳戶使用者角色 (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": "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 執行個體以服務帳戶身分執行的記錄檔
如果使用者擁有服務帳戶的服務帳戶使用者角色 (roles/iam.serviceAccountUser
),就能建立以該服務帳戶身分執行的 Compute Engine 虛擬機器 (VM) 執行個體。在這個情境中,使用者會使用自己的憑證建立 VM 執行個體,且要求會指定 VM 執行個體要使用的服務帳戶。
使用者建立 VM 執行個體時,Compute Engine 會建立多個記錄檔項目。以下範例顯示第一筆記錄項目,其中會識別建立 VM 執行個體的使用者,以及執行個體使用的服務帳戶。在這個範例中,使用者 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時收到的記錄項目。
建立服務帳戶金鑰的記錄
如果您在服務帳戶中擁有服務帳戶金鑰管理員角色 (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時收到的記錄項目。
建立短期憑證的記錄
如果您擁有服務帳戶的服務帳戶憑證建立者角色 (roles/iam.serviceAccountTokenCreator
),可以為服務帳戶建立短期憑證,然後使用憑證模擬服務帳戶。舉例來說,您可能會建立短期憑證,從未在 Google Cloud上執行的應用程式呼叫 Google CloudAPI。
主體建立短期憑證時,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 CloudAPI 時,使用憑證模擬服務帳戶。
您呼叫的部分方法可能會產生稽核記錄。一般來說,這些記錄項目會顯示下列身分:
- 短期憑證模擬的服務帳戶
- 建立短期憑證的身分
舉例來說,假設使用者 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 稽核記錄。
- 瞭解服務帳戶。
- 建立及管理服務帳戶。
- 建立短期憑證,模擬服務帳戶。