---
# ----------------------------------------------------------------------------
#
#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***
#
# ----------------------------------------------------------------------------
#
#     This file is automatically generated by Magic Modules and manual
#     changes will be clobbered when the file is regenerated.
#
#     Please read more about how to change this file in
#     .github/CONTRIBUTING.md.
#
# ----------------------------------------------------------------------------
subcategory: "Compute Engine"
description: |-
  Collection of resources to manage IAM policy for Compute Engine Image
---

# IAM policy for Compute Engine Image
Three different resources help you manage your IAM policy for Compute Engine Image. Each of these resources serves a different use case:

* `google_compute_image_iam_policy`: Authoritative. Sets the IAM policy for the image and replaces any existing policy already attached.
* `google_compute_image_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 image are preserved.
* `google_compute_image_iam_member`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the image are preserved.

A data source can be used to retrieve policy data in advent you do not need creation

* `google_compute_image_iam_policy`: Retrieves the IAM policy for the image

~> **Note:** `google_compute_image_iam_policy` **cannot** be used in conjunction with `google_compute_image_iam_binding` and `google_compute_image_iam_member` or they will fight over what your policy should be.

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

~> **Note:**  This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions.



## google\_compute\_image\_iam\_policy

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

resource "google_compute_image_iam_policy" "policy" {
  project = google_compute_image.example.project
  image = google_compute_image.example.name
  policy_data = data.google_iam_policy.admin.policy_data
}
```

With IAM Conditions:

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

    condition {
      title       = "expires_after_2019_12_31"
      description = "Expiring at midnight of 2019-12-31"
      expression  = "request.time < timestamp(\"2020-01-01T00:00:00Z\")"
    }
  }
}

resource "google_compute_image_iam_policy" "policy" {
  project = google_compute_image.example.project
  image = google_compute_image.example.name
  policy_data = data.google_iam_policy.admin.policy_data
}
```
## google\_compute\_image\_iam\_binding

```hcl
resource "google_compute_image_iam_binding" "binding" {
  project = google_compute_image.example.project
  image = google_compute_image.example.name
  role = "roles/compute.imageUser"
  members = [
    "user:jane@example.com",
  ]
}
```

With IAM Conditions:

```hcl
resource "google_compute_image_iam_binding" "binding" {
  project = google_compute_image.example.project
  image = google_compute_image.example.name
  role = "roles/compute.imageUser"
  members = [
    "user:jane@example.com",
  ]

  condition {
    title       = "expires_after_2019_12_31"
    description = "Expiring at midnight of 2019-12-31"
    expression  = "request.time < timestamp(\"2020-01-01T00:00:00Z\")"
  }
}
```
## google\_compute\_image\_iam\_member

```hcl
resource "google_compute_image_iam_member" "member" {
  project = google_compute_image.example.project
  image = google_compute_image.example.name
  role = "roles/compute.imageUser"
  member = "user:jane@example.com"
}
```

With IAM Conditions:

```hcl
resource "google_compute_image_iam_member" "member" {
  project = google_compute_image.example.project
  image = google_compute_image.example.name
  role = "roles/compute.imageUser"
  member = "user:jane@example.com"

  condition {
    title       = "expires_after_2019_12_31"
    description = "Expiring at midnight of 2019-12-31"
    expression  = "request.time < timestamp(\"2020-01-01T00:00:00Z\")"
  }
}
```

## Argument Reference

The following arguments are supported:

* `image` - (Required) Used to find the parent resource to bind the IAM policy to

* `project` - (Optional) The ID of the project in which the resource belongs.
    If it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.

* `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.
  * **projectOwner:projectid**: Owners of the given project. For example, "projectOwner:my-example-project"
  * **projectEditor:projectid**: Editors of the given project. For example, "projectEditor:my-example-project"
  * **projectViewer:projectid**: Viewers of the given project. For example, "projectViewer:my-example-project"

* `role` - (Required) The role that should be applied. Only one
    `google_compute_image_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_compute_image_iam_policy`) The policy data generated by
  a `google_iam_policy` data source.

* `condition` - (Optional) An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding.
  Structure is documented below.

---

The `condition` block supports:

* `expression` - (Required) Textual representation of an expression in Common Expression Language syntax.

* `title` - (Required) A title for the expression, i.e. a short string describing its purpose.

* `description` - (Optional) An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.

~> **Warning:** Terraform considers the `role` and condition contents (`title`+`description`+`expression`) as the
  identifier for the binding. This means that if any part of the condition is changed out-of-band, Terraform will
  consider it to be an entirely different resource and will treat it as such.
## Attributes Reference

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

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

## Import

For all import syntaxes, the "resource in question" can take any of the following forms:

* projects/{{project}}/global/images/{{name}}
* {{project}}/{{name}}
* {{name}}

Any variables not passed in the import command will be taken from the provider configuration.

Compute Engine image IAM resources can be imported using the resource identifiers, role, and member.

IAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.
```
$ terraform import google_compute_image_iam_member.editor "projects/{{project}}/global/images/{{image}} roles/compute.imageUser user:jane@example.com"
```

IAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.
```
$ terraform import google_compute_image_iam_binding.editor "projects/{{project}}/global/images/{{image}} roles/compute.imageUser"
```

IAM policy imports use the identifier of the resource in question, e.g.
```
$ terraform import google_compute_image_iam_policy.editor projects/{{project}}/global/images/{{image}}
```

-> **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`.

## User Project Overrides

This resource supports [User Project Overrides](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference#user_project_override).
