Registros de auditoría 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.

Otorga funciones

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

Otorga la función de usuario de cuenta de servicio

Un miembro puede obtener los mismos permisos que una cuenta de servicio si actúa como esta. Si deseas permitir que un miembro actúe como una cuenta de servicio, puedes otorgar la función de usuario de la cuenta de servicio (roles/iam.serviceAccountUser) al miembro en la cuenta de servicio.

En el siguiente ejemplo, se muestra una entrada de registro para otorgar la función de usuario de la cuenta de servicio a un miembro:

{
  "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:srini@example.com"
          ],
          "role": "roles/iam.serviceAccountUser"
        }
      ]
    }
  },
  "resource": {
    "type": "service_account"
  }
}

Cuando otorgas la función de creador de tokens de la cuenta de servicio (roles/iam.serviceAccountTokenCreator), que permite que un miembro cree credenciales de corta duración, IAM genera una entrada de registro similar.

Otorga 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 al miembro 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, julia@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": "julia@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"
  }
}

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

Si un usuario tiene la función de usuario de una 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 jackie@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 jackie@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": "jackie@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"
  }
}

Accede 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.

Crea 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 sam@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": "sam@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"
  }
}

Autentica 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, usar el token de acceso 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: La dirección de correo electrónico de la cuenta de servicio que representa el token de acceso.
  • protoPayload.authenticationInfo.serviceAccountKeyName: 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"
    }
  }
}

Actúa como una cuenta de servicio para 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.

Crea credenciales de corta duración

Si tienes la función de creador de token 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 los miembros 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 un miembro cree credenciales de corta duración. En la entrada, se incluyen los siguientes campos:

  • protoPayload.authenticationInfo.principalEmail: El miembro 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 amara@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": "amara@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"
  }
}

Autentica 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 yoon@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": "yoon@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"
  }
}

Próximos pasos