---
subcategory: "Cloud Platform"
description: |-
  Get the service account from a project.
---

# google\_service\_account

Get the service account from a project. For more information see
the official [API](https://cloud.google.com/compute/docs/access/service-accounts) documentation.

## Example Usage

```hcl
data "google_service_account" "object_viewer" {
  account_id = "object-viewer"
}
```

## Example Usage, save key in Kubernetes secret
```hcl
data "google_service_account" "myaccount" {
  account_id = "myaccount-id"
}

resource "google_service_account_key" "mykey" {
  service_account_id = data.google_service_account.myaccount.name
}

resource "kubernetes_secret" "google-application-credentials" {
  metadata {
    name = "google-application-credentials"
  }
  data = {
    credentials.json = base64decode(google_service_account_key.mykey.private_key)
  }
}
```

## Argument Reference

The following arguments are supported:

* `account_id` - (Required) The Google service account ID. This be one of:

    * The name of the service account within the project (e.g. `my-service`)

    * The fully-qualified path to a service account resource (e.g.
      `projects/my-project/serviceAccounts/...`)

    * The email address of the service account (e.g.
      `my-service@my-project.iam.gserviceaccount.com`)

* `project` - (Optional) The ID of the project that the service account is present in.
    Defaults to the provider project configuration.

## Attributes Reference

In addition to the arguments listed above, the following computed attributes are
exported:

* `email` - The e-mail address of the service account. This value
    should be referenced from any `google_iam_policy` data sources
    that would grant the service account privileges.

* `unique_id` - The unique id of the service account.

* `name` - The fully-qualified name of the service account.

* `display_name` - The display name for the service account.

* `member` - The Identity of the service account in the form `serviceAccount:{email}`. This value is often used to refer to the service account in order to grant IAM permissions.
