Log di esempio per gli account di servizio

Questa pagina mostra esempi di audit log generati quando gestisci o utilizzare un account di servizio.

Per ulteriori informazioni sull'abilitazione e la visualizzazione degli audit log, consulta Log di controllo IAM.

Log per la creazione di account di servizio

Quando crei o modifichi un account di servizio, Identity and Access Management (IAM) genera voci di log. L'esempio seguente mostra una voce di log per la creazione di un account di servizio:

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

Log per la concessione dei ruoli

Questa sezione mostra le voci di log che ricevi quando concedi ruoli correlati agli account di servizio.

Log per l'assegnazione del ruolo Utente account di servizio

Un'entità può ottenere le stesse autorizzazioni di un account di servizio simulazione dell'identità dell'account di servizio. Per consentire a un'entità di simulare l'identità di un account di servizio, puoi [concedere il ruolo Utente account di servizio]sa-user-role all'entità per l'account di servizio.

L'esempio seguente mostra una voce di log per la concessione del ruolo Utente account di servizio a un'entità:

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

Quando [concedi il ruolo Creatore token account di servizio]sa-token-creator-role, che consente a un'entità di creare le credenziali di breve durata, IAM genera una voce di log simile.

Log per la concessione dell'accesso a un account di servizio su una risorsa

Puoi concedi un ruolo a un account di servizio su una risorsa specifica, che consente all'account di servizio di accedere alla risorsa. Se il servizio proprietario della risorsa supporta anche l'audit logging, quindi concedendo un ruolo al l'account di servizio genera una voce di audit log. La voce di log include il campo protoPayload.authenticationInfo.principalEmail, che identifica l'entità che ha concesso il ruolo all'account di servizio.

L'esempio seguente mostra una voce del log di controllo per la concessione di un ruolo a un account di servizio per un progetto. In questo esempio, example-user@example.com ha concesso nel ruolo Visualizzatore organizzazione (roles/resourcemanager.organizationViewer) l'account di servizio. Il campo protoPayload.serviceName è impostato su cloudresourcemanager.googleapis.com, perché Resource Manager è Servizio Google Cloud che gestisce i progetti. Inoltre, resource.type è impostato su 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"
  }
}

Log per il collegamento degli account di servizio alle risorse

Se un utente dispone del ruolo Utente account di servizio (roles/iam.serviceAccountUser) in un account di servizio, può collegare l'account di servizio alle risorse. Quando il codice in esecuzione sulla risorsa accede ai servizi e alle risorse Google Cloud, utilizza l'account di servizio collegato alla risorsa come identità. Ad esempio, se colleghi un account di servizio a un'istanza Compute Engine e le applicazioni nell'istanza utilizzano una libreria client per chiamare le API Google Cloud, queste applicazioni utilizzeranno automaticamente l'account di servizio collegato per l'autenticazione e l'autorizzazione.

Questa sezione mostra alcuni dei log generati quando colleghi un servizio a una risorsa.

Log per l'utilizzo dell'autorizzazione iam.serviceAccounts.actAs

L'associazione di un account di servizio a una risorsa richiede l'autorizzazioneiam.serviceAccounts.actAs. Quando un principale utilizza questa autorizzazione per collegare un account di servizio a una risorsa, viene generato un log di controllo.

L'esempio seguente mostra una voce di log per un'entità che utilizza l'autorizzazione iam.serviceAccounts.actAs per collegare un account di servizio a un'istanza 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"
}

Log per la configurazione di un'istanza Compute Engine per l'esecuzione come account di servizio

Se un utente ha il ruolo Utente account di servizio (roles/iam.serviceAccountUser) in un account di servizio, l'utente può crea un'istanza di una macchina virtuale (VM) Compute Engine eseguito con quell'account di servizio. In questo scenario, l'utente crea l'istanza VM con le proprie credenziali e la richiesta specifica un account di servizio da utilizzare per l'istanza VM.

Quando un utente crea un'istanza VM, Compute Engine crea più log le voci corrispondenti. L'esempio seguente mostra la prima voce di log, che identifica l'utente che ha creato l'istanza VM e l'account di servizio utilizzato dall'istanza. In questo esempio, l'utente example-user@example.com ha creato un'istanza che utilizza l'account servizio my-service-account@my-project.iam.gserviceaccount.com. Di conseguenza, il campo protoPayload.authenticationInfo.principalEmail è impostato su example-user@example.com e il campo protoPayload.request.serviceAccounts[0].email su 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"
  }
}

Log per l'accesso a Google Cloud con una chiave dell'account di servizio

Questa sezione mostra le voci di log che ricevi quando crei una chiave dell'account di servizio e poi la utilizzi per accedere a Google Cloud.

Log per la creazione di una chiave dell'account di servizio

Se hai il ruolo Amministratore chiavi account di servizio (roles/iam.serviceAccountKeyAdmin) su un account di servizio, puoi creare una la chiave dell'account di servizio, quindi usala autenticare le richieste ai servizi Google Cloud.

L'esempio seguente mostra una voce di log per la creazione di una chiave dell'account di servizio. Nella in questo esempio, l'utente example-user@example.com ha creato una chiave per l'account di servizio 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"
  }
}

Log per l'autenticazione con una chiave dell'account di servizio

Dopo aver creato una chiave dell'account di servizio, puoi utilizzarla per richiedere un token di accesso OAuth 2.0 per un account di servizio, quindi utilizzare il token di accesso per autenticare le richieste ai servizi Google Cloud. In generale, i log di controllo di questi servizi includono le seguenti informazioni:

  • protoPayload.authenticationInfo.principalEmail: l'indirizzo email dell'account servizio rappresentato dal token di accesso.
  • protoPayload.authenticationInfo.serviceAccountKeyName: l'account di servizio utilizzata per richiedere il token di accesso OAuth 2.0. Questo campo identifica la chiave dell'account di servizio in base al nome completo della risorsa, utilizza il formato //iam.googleapis.com/projects/project-id/serviceAccounts/service-account-email/keys/key-id.

L'esempio seguente mostra una voce di audit log per una richiesta di creazione di un Istanza Memorystore for Redis. La richiesta è stata autenticata con un token di accesso OAuth 2.0 per un account di servizio. In questo esempio, l'account di servizio si chiama my-service-account@my-project.iam.gserviceaccount.com e l'ID chiave dell'account di servizio è 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 per l'usurpazione di identità di un account di servizio per accedere a Google Cloud

Questa sezione mostra le voci di log ricevute quando crei applicazioni di breve durata le credenziali di un account di servizio, quindi usale per impersonare un account di servizio e accedere a Google Cloud.

Log per la creazione di credenziali di breve durata

Se disponi del ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator) per un account di servizio, puoi creare credenziali di breve durata per l'account di servizio, quindi utilizzare le credenziali per impersonare l'account di servizio. Ad esempio, puoi creare credenziali di breve durata per chiamare un'API Google Cloud da un'applicazione che non viene eseguita su Google Cloud.

IAM può generare audit log quando le entità creano credenziali di breve durata. Per ricevere questi log di controllo, devi attivare i log di controllo IAM per l'attività di accesso ai dati.

Dopo aver abilitato gli audit log IAM per l'attività di accesso ai dati, IAM genera una voce di audit log ogni volta che un'entità crea credenziali di breve durata. La voce include i seguenti campi:

  • protoPayload.authenticationInfo.principalEmail: il principale che ha creato le credenziali di breve durata.
  • resource.labels.email_id: l'account di servizio per il quale di breve durata sono state generate.

L'esempio seguente mostra una voce del log di controllo per una richiesta di generazione di un token di accesso OAuth 2.0 di breve durata. In questo esempio, l'utente example-user@example.com ha creato un token di accesso per l'account di servizio 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"
  }
}

Log per l'autenticazione con credenziali di breve durata

Dopo aver creato le credenziali di breve durata per un account di servizio, puoi utilizzarle per impersonare l'account di servizio quando chiami le API Google Cloud.

Alcuni dei metodi chiamati potrebbero generare log di controllo. In generale, questi le voci di log mostrano le seguenti identità:

  • L'account di servizio impersonato dalle credenziali di breve durata
  • L'identità che ha creato le credenziali di breve durata

Ad esempio, supponiamo che l'utente example-user@example.com crei credenziali di breve durata per l'account di serviziomy-service-account@my-project.iam.gserviceaccount.com. L'utente crea quindi un'istanza un nuovo argomento Pub/Sub, utilizzando le credenziali di breve durata per impersonare il l'account di servizio. Pub/Sub genera una voce di log che identifica l'account di servizio, nonché l'utente che sta rubando l'identità dell'account di servizio:

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

Log per le azioni intraprese dagli agenti di servizio

A volte, quando un principale avvia un'operazione, un agente di servizio esegue un'azione per conto del principale. Tuttavia, quando esamini i log di controllo di un agente di servizio, sia difficile stabilire chi fosse l'agente di servizio e perché.

Per aiutarti a comprendere il contesto delle azioni di un agente di servizio, alcuni agenti di servizio includono dettagli aggiuntivi nei log di controllo, ad esempio il job a cui è associata l'azione e l'entità che ha creato il job.

I seguenti agenti di servizio includono questi dettagli aggiuntivi nei loro log di controllo:

Questi dettagli aggiuntivi si trovano nel campo serviceDelegationHistory dell'audit log, che è nidificato nel campo authenticationInfo. Questo campo contiene le seguenti informazioni:

  • L'amministratore originale che ha creato il job
  • L'agente di servizio che ha eseguito l'azione
  • Il servizio a cui appartiene l'agente di servizio
  • ID job

Ad esempio, supponiamo che example-user@example.com crei un job utilizzando l'API BigQuery Connection. Questo job richiede che uno degli agenti di servizio dell'API BigQuery Connection esegua un'azione. In questo caso, il log di controllo per l'azione dell'agente di servizio conterrà un campo serviceDelegationHistory simile al seguente:

{
  "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",
          }
        ]
      }
    }
  }
}

Passaggi successivi