Registros de auditoria para contas de serviço

Nesta página, você verá exemplos de registros de auditoria que são gerados ao gerenciar ou usar uma conta de serviço.

Para mais informações sobre como ativar e visualizar registros de auditoria, consulte Geração de registros de auditoria do IAM.

Como conceder papéis

Esta seção mostra as entradas de registro recebidas quando você concede papéis relacionados a contas de serviço.

Como conceder o papel Usuário de conta de serviço

Um membro pode receber as mesmas permissões de uma conta de serviço representando a conta de serviço. Para permitir que um membro represente uma conta de serviço, conceda o papel Usuário de conta de serviço (roles/iam.serviceAccountUser) ao membro da conta de serviço.

O exemplo a seguir mostra uma entrada de registro para conceder o papel Usuário de conta de serviço a um membro:

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

Quando você concede o papel Criador de token da conta de serviço (roles/iam.serviceAccountTokenCreator), que permite a um membro criar credenciais de curta duração, o IAM gera uma entrada de registro semelhante.

Como conceder acesso a uma conta de serviço em um recurso

É possível conceder um papel a uma conta de serviço em um recurso específico, o que permite que a conta de serviço acesse esse recurso. Se o serviço que é proprietário do recurso também for compatível com a geração de registros de auditoria, a concessão de um papel à conta de serviço gerará uma entrada de registro de auditoria. A entrada de registro inclui o campo protoPayload.authenticationInfo.principalEmail, que identifica o membro que concedeu o papel à conta de serviço.

O exemplo a seguir mostra uma entrada de registro de auditoria para a concessão de um papel a uma conta de serviço de um projeto. Neste exemplo, julia@example.com concedeu o papel Leitor da organização (roles/resourcemanager.organizationViewer) para a conta de serviço. O campo protoPayload.serviceName está definido como cloudresourcemanager.googleapis.com, porque o Resource Manager é o serviço do Google Cloud que gerencia projetos. Além disso, o campo resource.type está definido como 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"
  }
}

Como configurar uma instância do Compute Engine a ser executada como uma conta de serviço

Se um usuário tiver o papel Usuário da conta de serviço (roles/iam.serviceAccountUser) em uma conta de serviço, ele conseguirá criar uma instância de máquina virtual (VM) do Compute Engine executada como essa conta de serviço. Nesse cenário, o usuário cria a instância de VM com as próprias credenciais, e a solicitação especifica uma conta de serviço para a instância de VM a ser usada.

Quando um usuário cria uma instância de VM, o Compute Engine cria várias entradas de registro. O exemplo a seguir mostra a primeira entrada de registro, que identifica o usuário que criou a instância de VM e a conta de serviço usada pela instância. Neste exemplo, o usuário jackie@example.com criou uma instância que usa a conta de serviço my-service-account@my-project.iam.gserviceaccount.com. Dessa maneira, o campo protoPayload.authenticationInfo.principalEmail está definido como jackie@example.com, e o campo protoPayload.request.serviceAccounts[0].email está definido como 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"
  }
}

Como acessar o Google Cloud com uma chave de conta de serviço

Nesta seção, você verá as entradas de registro que receberá ao criar uma chave de conta de serviço e, então, usá-la para acessar o Google Cloud.

Como criar uma chave de conta de serviço

Se você tiver o papel Administrador de chave de conta de serviço (roles/iam.serviceAccountKeyAdmin) em uma conta de serviço, conseguirá criar uma chave de conta de serviço e usá-la para autenticar solicitações para serviços do Google Cloud.

O exemplo a seguir mostra uma entrada de registro para criar uma chave de conta de serviço. Neste exemplo, o usuário sam@example.com criou uma chave para a conta de serviço 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"
  }
}

Como autenticar com uma chave de conta de serviço

Depois de criar uma chave de conta de serviço, use-a para solicitar um token de acesso do OAuth 2.0 para uma conta de serviço e, em seguida, use o token de acesso para autenticar solicitações para serviços do Google Cloud. Em geral, os registros de auditoria desses serviços incluem as seguintes informações:

  • protoPayload.authenticationInfo.principalEmail: o endereço de e-mail da conta de serviço que o token de acesso representa.
  • protoPayload.authenticationInfo.serviceAccountKeyName: a chave da conta de serviço usada para solicitar o token de acesso do OAuth 2.0. Esse campo identifica a chave da conta de serviço pelo nome completo do recurso, que usa o formato //iam.googleapis.com/projects/project-id/serviceAccounts/service-account-email/keys/key-id.

O exemplo a seguir mostra uma entrada de registro de auditoria para uma solicitação de criação de uma instância do Memorystore para Redis. A solicitação foi autenticada com um token de acesso do OAuth 2.0 para uma conta de serviço. Neste exemplo, a conta de serviço é chamada de my-service-account@my-project.iam.gserviceaccount.com, e a ID da chave da conta é 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"
    }
  }
}

Como representar uma conta de serviço para acessar o Google Cloud

Nesta seção, você verá as entradas de registro que receberá ao criar credenciais de curta duração para uma conta de serviço e, então, usá-las para representar a conta de serviço e acessar o Google Cloud.

Como criar credenciais de curta duração

Se você tiver o papel Criador de tokens de conta de serviço (roles/iam.serviceAccountTokenCreator) para uma conta de serviço, conseguirá criar credenciais de curta duração para a conta e, então, usá-las para representar a conta de serviço. Por exemplo, é possível criar credenciais de curta duração para chamar uma API do Google Cloud de um aplicativo que não é executado no Google Cloud.

O IAM pode gerar registros de auditoria quando os membros criarem credenciais de curta duração. Para receber esses registros de auditoria, é necessário ativar os registros de auditoria do IAM para a atividade de acesso a dados.

Depois de ativar registros de auditoria do IAM para a atividade de acesso a dados, o IAM gerará uma entrada de registro de auditoria sempre que um membro criar credenciais de curta duração. A entrada inclui os seguintes campos:

  • protoPayload.authenticationInfo.principalEmail: o membro que criou as credenciais de curta duração.
  • resource.labels.email_id: a conta de serviço para a qual foram geradas credenciais de curta duração.

O exemplo a seguir mostra uma entrada de registro de auditoria de uma solicitação para gerar um token de acesso do OAuth 2.0 de curta duração. Neste exemplo, o usuário amara@example.com criou um token de acesso para a conta de serviço 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"
  }
}

Como autenticar com credenciais de curta duração

Depois de criar credenciais de curta duração para uma conta de serviço, use-as para representar a conta de serviço ao chamar APIs do Google Cloud.

Alguns dos métodos chamados podem gerar registros de auditoria. Em geral, essas entradas de registro mostram as seguintes identidades:

  • A conta de serviço que as credenciais de curta duração estão representando
  • A identidade que criou as credenciais de curta duração

Por exemplo, suponha que o usuário yoon@example.com crie credenciais de curta duração para a conta de serviço my-service-account@my-project.iam.gserviceaccount.com. Em seguida, esse usuário cria um novo tópico do Pub/Sub, usando as credenciais de curta duração para representar a conta de serviço. O Pub/Sub gera uma entrada de registro que identifica a conta de serviço, bem como o usuário que está representando a conta de serviço:

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

A seguir