Registros de ejemplo para cuentas de servicio

En esta página, se muestran ejemplos de los registros de auditoría que se generan cuando administras o usas una cuenta de servicio.

Para obtener más información sobre cómo habilitar y ver los registros de auditoría, consulta Registros de auditoría de IAM.

Registros para crear cuentas de servicio

Cuando creas o modificas una cuenta de servicio, Identity and Access Management (IAM) genera entradas de registro. En el siguiente ejemplo, se muestra una entrada de registro para crear una cuenta de servicio:

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

Registros para otorgar roles

En esta sección, se muestran las entradas de registro que recibes cuando otorgas roles relacionadas con cuentas de servicio.

Registros para otorgar el rol de usuario de cuenta de servicio

Una principal puede obtener los mismos permisos que una cuenta de servicio si actúa en nombre de esta. Para permitir que una principal actúe en nombre de una cuenta de servicio, puedes [otorgar el rol de usuario de la cuenta de servicio]sa-user-role a la principal de la cuenta de servicio.

En el siguiente ejemplo, se muestra una entrada de registro para otorgar el rol de usuario de la cuenta de servicio a una principal:

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

Cuando [otorgas el rol de creador de tokens de la cuenta de servicio]sa-token-creator-role, que permite que una principal cree credenciales de corta duración, IAM genera una entrada de registro similar.

Registros para otorgar acceso a una cuenta de servicio en un recurso

Puedes otorgar una función a una cuenta de servicio en un recurso específico, lo que permite que la cuenta de servicio acceda al recurso. Si el servicio que posee el recurso también admite los registros de auditoría, otorgar una función a la cuenta de servicio generará una entrada de registro de auditoría. En la entrada de registro, se incluye el campo protoPayload.authenticationInfo.principalEmail, que identifica a la principal que le otorgó la función a la cuenta de servicio.

En el siguiente ejemplo, se muestra una entrada de registro de auditoría para otorgar una función a una cuenta de servicio en un proyecto. En este ejemplo, example-user@example.com le otorgó la función de visualizador de la organización (roles/resourcemanager.organizationViewer) a la cuenta de servicio. El campo protoPayload.serviceName se establece en cloudresourcemanager.googleapis.com, ya que Resource Manager es el servicio de Google Cloud que administra los proyectos. Además, el campo resource.type se establece en 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"
  }
}

Registros para conectar cuentas de servicio a recursos

Si un usuario tiene el rol de usuario de cuenta de servicio (roles/iam.serviceAccountUser) en una cuenta de servicio, puede adjuntar la cuenta de servicio a los recursos. Cuando el código que se ejecuta en el recurso accede a los servicios y recursos de Google Cloud, utiliza la cuenta de servicio adjunta al recurso como su identidad. Por ejemplo, si conectas una cuenta de servicio a una instancia de Compute Engine, y las aplicaciones en la instancia usan una biblioteca cliente para llamar a las API de Google Cloud, esas aplicaciones utilizan automáticamente la cuenta de servicio conectada para la autenticación y la autorización.

En esta sección, se muestran algunos de los registros que se generan cuando conectas una cuenta de servicio a un recurso.

Registros para usar el permiso iam.serviceAccounts.actAs

Para conectar una cuenta de servicio a un recurso, se requiere el permiso iam.serviceAccounts.actAs. Cuando un principal usa este permiso para conectar una cuenta de servicio a un recurso, se genera un registro de auditoría.

En el siguiente ejemplo, se muestra una entrada de registro de un principal que usa el permiso iam.serviceAccounts.actAs para adjuntar una cuenta de servicio a una instancia de 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"
}

Registros para configurar una instancia de Compute Engine para que se ejecute como una cuenta de servicio

Si un usuario tiene la función de usuario de cuenta de servicio (roles/iam.serviceAccountUser) en una cuenta de servicio, puede crear una instancia de máquina virtual (VM) de Compute Engine que se ejecute como esa cuenta de servicio. En esta situación, el usuario crea la instancia de VM con sus propias credenciales y, en la solicitud, se especifica una cuenta de servicio para la instancia de VM que se usará.

Cuando un usuario crea una instancia de VM, Compute Engine crea varias entradas de registro. En el siguiente ejemplo, se muestra la primera entrada de registro, en la que se identifica al usuario que creó la instancia de VM y la cuenta de servicio que usa la instancia. En este ejemplo, el usuario example-user@example.com creó una instancia que usa la cuenta de servicio my-service-account@my-project.iam.gserviceaccount.com. Como resultado, el campo protoPayload.authenticationInfo.principalEmail se establece en example-user@example.com y el campo protoPayload.request.serviceAccounts[0].email se establece en 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"
  }
}

Registros para acceder a Google Cloud con una clave de cuenta de servicio

En esta sección, se muestran las entradas de registro que recibes cuando creas una clave de cuenta de servicio y, luego, la usas para acceder a Google Cloud.

Registros para crear una clave de cuenta de servicio

Si tienes la función de administrador de claves de una cuenta de servicio (roles/iam.serviceAccountKeyAdmin) en una cuenta de servicio, puedes crear una clave de una cuenta de servicio y, luego, usarla con el fin de autenticar solicitudes para los servicios de Google Cloud.

En el siguiente ejemplo, se muestra una entrada de registro para crear una clave de una cuenta de servicio. En este ejemplo, el usuario example-user@example.com creó una clave para la cuenta de servicio 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"
  }
}

Registros para autenticar con una clave de cuenta de servicio

Después de crear una clave de una cuenta de servicio, puedes usarla con el fin de solicitar un token de acceso de OAuth 2.0 para una cuenta de servicio y, luego, usarlo a fin de autenticar solicitudes en los servicios de Google Cloud. En general, en los registros de auditoría de esos servicios, se incluye la siguiente información:

  • protoPayload.authenticationInfo.principalEmail: Es la dirección de correo electrónico de la cuenta de servicio que representa el token de acceso.
  • protoPayload.authenticationInfo.serviceAccountKeyName: Es la clave de la cuenta de servicio que se usó para solicitar el token de acceso de OAuth 2.0. Este campo identifica la clave de la cuenta de servicio por su nombre de recurso completo, en el que se usa el formato //iam.googleapis.com/projects/project-id/serviceAccounts/service-account-email/keys/key-id.

En el siguiente ejemplo, se muestra una entrada de registro de auditoría de una solicitud para crear una instancia de Memorystore para Redis. La solicitud se autenticó con un token de acceso de OAuth 2.0 de una cuenta de servicio. En este ejemplo, la cuenta de servicio se llama my-service-account@my-project.iam.gserviceaccount.com y el ID de la clave de la cuenta de servicio es 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"
    }
  }
}

Registros para usar la identidad de una cuenta de servicio a fin de acceder a Google Cloud

En esta sección, se muestran las entradas de registro que recibes cuando creas credenciales de corta duración en una cuenta de servicio y, luego, las usas para actuar en nombre de la cuenta de servicio y acceder a Google Cloud.

Registros para crear credenciales de corta duración

Si tienes la función de creador de tokens de una cuenta de servicio (roles/iam.serviceAccountTokenCreator) en una cuenta de servicio, puedes crear credenciales de corta duración en la cuenta de servicio y, luego, usarlas para actuar en nombre de la cuenta de servicio. Por ejemplo, puedes crear credenciales de corta duración para llamar a una API de Google Cloud desde una aplicación que no se ejecuta en Google Cloud.

IAM puede generar registros de auditoría cuando las principales crean credenciales de corta duración. Para recibir estos registros de auditoría, debes habilitar los registros de auditoría de IAM de la actividad de acceso a los datos.

Después de habilitar los registros de auditoría de IAM de la actividad de acceso a datos, IAM generará una entrada de registro de auditoría cada vez que una principal cree credenciales de corta duración. En la entrada, se incluyen los siguientes campos:

  • protoPayload.authenticationInfo.principalEmail: la principal que creó las credenciales de corta duración.
  • resource.labels.email_id: La cuenta de servicio para la que se generaron las credenciales de corta duración.

En el siguiente ejemplo, se muestra una entrada de registro de auditoría de una solicitud para generar un token de acceso de OAuth 2.0 de corta duración. En este ejemplo, el usuario example-user@example.com creó un token de acceso para la cuenta de servicio 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"
  }
}

Registros para autenticar con credenciales de corta duración

Después de crear credenciales de corta duración para una cuenta de servicio, puedes usar las credenciales con el fin de actuar en nombre de la cuenta de servicio cuando llames a las API de Google Cloud.

Puede que algunos de los métodos que llames generen registros de auditoría. En general, en estas entradas de registro, se muestran las siguientes identidades:

  • La cuenta de servicio que suplantan las credenciales de corta duración
  • La identidad que creó las credenciales de corta duración

Por ejemplo, supongamos que el usuario example-user@example.com crea credenciales de corta duración para la cuenta de servicio my-service-account@my-project.iam.gserviceaccount.com. Luego, el usuario crea un tema nuevo de Pub/Sub mediante las credenciales de corta duración para actuar en nombre de la cuenta de servicio. Pub/Sub genera una entrada de registro que identifica la cuenta de servicio, así como el usuario que la suplanta:

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

Registros de las acciones que realizan los agentes de servicio

A veces, cuando un principal inicia una operación, un agente de servicio ejecuta una acción en su nombre. Sin embargo, cuando revisas los registros de auditoría de un agente de servicio, puede ser difícil saber en nombre de quién actuaba el agente de servicio y por qué.

Para ayudarte a comprender el contexto de las acciones de un agente de servicio, algunos agentes de servicio incluyen detalles adicionales en sus registros de auditoría, como la tarea con la que está asociada la acción y el principal que la creó.

Los siguientes agentes de servicio incluyen estos detalles adicionales en sus registros de auditoría:

Estos detalles adicionales se encuentran en el campo serviceDelegationHistory del registro de auditoría, que está anidado en el campo authenticationInfo. Este campo contiene la siguiente información:

  • El director original que creó el trabajo
  • El agente de servicio que ejecutó la acción
  • El servicio al que pertenece el agente de servicio
  • El ID del trabajo.

Por ejemplo, supongamos que example-user@example.com crea un trabajo con la API de BigQuery Connection. Esta tarea requiere que uno de los agentes de servicio de la API de BigQuery Connection ejecute una acción. En este caso, el registro de auditoría de la acción del agente de servicio contendrá un campo serviceDelegationHistory similar al siguiente:

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

¿Qué sigue?