Log di esempio per gli account di servizio

Questa pagina mostra esempi dei log di controllo generati quando gestisci o utilizzi un account di servizio.

Per ulteriori informazioni su come attivare e visualizzare i log di controllo, 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. Il seguente esempio 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 impersonificando l'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 (roles/iam.serviceAccountUser) 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 (roles/iam.serviceAccountTokenCreator), che consente a un entità di creare credenziali di breve durata, IAM genera una voce di log simile.

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

Puoi concedere un ruolo a un account di servizio in una risorsa specifica, che consente all'account di servizio di accedere alla risorsa. Se il servizio che possiede la risorsa supporta anche la registrazione di controllo, la concessione di un ruolo all'account di servizio genera una voce di log di controllo. 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 di 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 il ruolo Visualizzatore organizzazione (roles/resourcemanager.organizationViewer) all'account di servizio. Il campo protoPayload.serviceName è impostato su cloudresourcemanager.googleapis.com, perché Resource Manager è il servizio Google Cloud che gestisce i progetti. Inoltre, il campo 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 l'attacco 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 nella 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 account 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 da eseguire come account di servizio

Se un utente dispone del ruolo Utente account di servizio (roles/iam.serviceAccountUser) su un account di servizio, può creare un'istanza di macchina virtuale (VM) Compute Engine che viene eseguita come 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ù voci di log. 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 di 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 disponi del ruolo Amministratore chiavi account di servizio (roles/iam.serviceAccountKeyAdmin) su un account di servizio, puoi creare una chiave dell'account di servizio e utilizzarla per 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. 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 genere, i log di controllo di questi servizi includono le seguenti informazioni:

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

L'esempio seguente mostra una voce di log di controllo 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 che ricevi quando crei credenziali di breve durata per un account di servizio, quindi le utilizzi per rubare l'identità dell'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 log di controllo quando i principali 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 attivato gli audit log IAM per l'attività di accesso ai dati, IAM genera una voce di log di controllo 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 cui sono state generate le credenziali di breve durata.

L'esempio seguente mostra una voce di 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 rubare l'identità dell'account di servizio quando chiami le API Google Cloud.

Alcuni dei metodi chiamati potrebbero generare log di controllo. In genere, queste voci del log mostrano le seguenti identità:

  • L'account di servizio di cui le credenziali di breve durata simulano l'identità
  • 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 nuovo argomento Pub/Sub utilizzando le credenziali temporanee per rubare l'identità dell'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 gli audit log di un agente di servizio, può essere difficile capire per conto di chi agiva 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 del log di controllo, 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
  • L'ID job

Ad esempio, supponiamo che example-user@example.com crei un job utilizzando l'API BigQuery Connection. Questo job richiede uno degli agenti di servizio dell'API BigQuery Connection per eseguire un'azione. In questo caso, il log di controllo dell'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