---
subcategory: "Cloud Pub/Sub"
description: |-
 Collection of resources to manage IAM policy for a Pubsub subscription.
---

# IAM policy for Pubsub Subscription

Three different resources help you manage your IAM policy for pubsub subscription. Each of these resources serves a different use case:

* `google_pubsub_subscription_iam_policy`: Authoritative. Sets the IAM policy for the subscription and replaces any existing policy already attached.
* `google_pubsub_subscription_iam_binding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the subscription are preserved.
* `google_pubsub_subscription_iam_member`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the subscription are preserved.

~> **Note:** `google_pubsub_subscription_iam_policy` **cannot** be used in conjunction with `google_pubsub_subscription_iam_binding` and `google_pubsub_subscription_iam_member` or they will fight over what your policy should be.

~> **Note:** `google_pubsub_subscription_iam_binding` resources **can be** used in conjunction with `google_pubsub_subscription_iam_member` resources **only if** they do not grant privilege to the same role.

## google\_pubsub\_subscription\_iam\_policy

```hcl
data "google_iam_policy" "admin" {
  binding {
    role = "roles/editor"
    members = [
      "user:jane@example.com",
    ]
  }
}

resource "google_pubsub_subscription_iam_policy" "editor" {
  subscription = "your-subscription-name"
  policy_data  = data.google_iam_policy.admin.policy_data
}
```

## google\_pubsub\_subscription\_iam\_binding

```hcl
resource "google_pubsub_subscription_iam_binding" "editor" {
  subscription = "your-subscription-name"
  role         = "roles/editor"
  members = [
    "user:jane@example.com",
  ]
}
```

## google\_pubsub\_subscription\_iam\_member

```hcl
resource "google_pubsub_subscription_iam_member" "editor" {
  subscription = "your-subscription-name"
  role         = "roles/editor"
  member       = "user:jane@example.com"
}
```

## Argument Reference

The following arguments are supported:

* `subscription` - (Required) The subscription name or id to bind to attach IAM policy to.

* `member/members` - (Required) Identities that will be granted the privilege in `role`.
  Each entry can have one of the following values:
  * **allUsers**: A special identifier that represents anyone who is on the internet; with or without a Google account.
  * **allAuthenticatedUsers**: A special identifier that represents anyone who is authenticated with a Google account or a service account.
  * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com.
  * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com.
  * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com.
  * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com.

* `role` - (Required) The role that should be applied. Only one
    `google_pubsub_subscription_iam_binding` can be used per role. Note that custom roles must be of the format
    `[projects|organizations]/{parent-name}/roles/{role-name}`.

* `policy_data` - (Required only by `google_pubsub_subscription_iam_policy`) The policy data generated by
  a `google_iam_policy` data source.

- - -

* `project` - (Optional) The project in which the resource belongs. If it
    is not provided, the provider project is used.

## Attributes Reference

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

* `etag` - (Computed) The etag of the subscription's IAM policy.

## Import

-> **Custom Roles**: If you're importing a IAM resource with a custom role, make sure to use the
 full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.

### Importing IAM members

IAM member imports use space-delimited identifiers that contains the `subscription`, `role`, and `member`. For example:

* `"projects/{{project_id}}/subscriptions/{{subscription}} roles/editor jane@example.com"`

An [`import` block](https://developer.hashicorp.com/terraform/language/import) (Terraform v1.5.0 and later) can be used to import IAM members:

```tf
import {
  id = "projects/{{project_id}}/subscriptions/{{subscription}} roles/editor jane@example.com"
  to = google_pubsub_subscription_iam_member.default
}
```

The [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import) can also be used:

```
$ terraform import google_pubsub_subscription_iam_member.default "projects/{{project_id}}/subscriptions/{{subscription}} roles/editor jane@example.com"
```

### Importing IAM bindings

IAM binding imports use space-delimited identifiers that contain the resource's `subscription` and `role`. For example:

* `"projects/{{project_id}}/subscriptions/{{subscription}} roles/editor"`

An [`import` block](https://developer.hashicorp.com/terraform/language/import) (Terraform v1.5.0 and later) can be used to import IAM bindings:

```tf
import {
  id = "projects/{{project_id}}/subscriptions/{{subscription}} roles/editor"
  to = google_pubsub_subscription_iam_binding.default
}
```

The [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import) can also be used:

```
$ terraform import google_pubsub_subscription_iam_binding.default "projects/{{project_id}}/subscriptions/{{subscription}} roles/editor"
```

### Importing IAM policies

IAM policy imports use the identifier of the Pubsub Subscription resource. For example:

* `"projects/{{project_id}}/subscriptions/{{subscription}}"`

An [`import` block](https://developer.hashicorp.com/terraform/language/import) (Terraform v1.5.0 and later) can be used to import IAM policies:

```tf
import {
  id = "projects/{{project_id}}/subscriptions/{{subscription}}"
  to = google_pubsub_subscription_iam_policy.default
}
```

The [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import) can also be used:

```
$ terraform import google_pubsub_subscription_iam_policy.default projects/{{project_id}}/subscriptions/{{subscription}}
```