---
# ----------------------------------------------------------------------------
#
#     ***     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: "Dataplex"
description: |-
  Collection of resources to manage IAM policy for Dataplex Asset
---

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

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

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

* `google_dataplex_asset_iam_policy`: Retrieves the IAM policy for the asset

~> **Note:** `google_dataplex_asset_iam_policy` **cannot** be used in conjunction with `google_dataplex_asset_iam_binding` and `google_dataplex_asset_iam_member` or they will fight over what your policy should be.

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




## google\_dataplex\_asset\_iam\_policy

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

resource "google_dataplex_asset_iam_policy" "policy" {
  project = google_dataplex_asset.example.project
  location = google_dataplex_asset.example.location
  lake = google_dataplex_asset.example.lake
  dataplex_zone = google_dataplex_asset.example.dataplex_zone
  asset = google_dataplex_asset.example.name
  policy_data = data.google_iam_policy.admin.policy_data
}
```

## google\_dataplex\_asset\_iam\_binding

```hcl
resource "google_dataplex_asset_iam_binding" "binding" {
  project = google_dataplex_asset.example.project
  location = google_dataplex_asset.example.location
  lake = google_dataplex_asset.example.lake
  dataplex_zone = google_dataplex_asset.example.dataplex_zone
  asset = google_dataplex_asset.example.name
  role = "roles/viewer"
  members = [
    "user:jane@example.com",
  ]
}
```

## google\_dataplex\_asset\_iam\_member

```hcl
resource "google_dataplex_asset_iam_member" "member" {
  project = google_dataplex_asset.example.project
  location = google_dataplex_asset.example.location
  lake = google_dataplex_asset.example.lake
  dataplex_zone = google_dataplex_asset.example.dataplex_zone
  asset = google_dataplex_asset.example.name
  role = "roles/viewer"
  member = "user:jane@example.com"
}
```


## Argument Reference

The following arguments are supported:

* `asset` - (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_dataplex_asset_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_dataplex_asset_iam_policy`) The policy data generated by
  a `google_iam_policy` data source.

## 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}}/locations/{{location}}/lakes/{{lake}}/zones/{{dataplex_zone}}/assets/{{name}}
* {{project}}/{{location}}/{{lake}}/{{dataplex_zone}}/{{name}}
* {{location}}/{{lake}}/{{dataplex_zone}}/{{name}}
* {{name}}

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

Dataplex asset 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_dataplex_asset_iam_member.editor "projects/{{project}}/locations/{{location}}/lakes/{{lake}}/zones/{{dataplex_zone}}/assets/{{asset}} roles/viewer user:jane@example.com"
```

IAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.
```
$ terraform import google_dataplex_asset_iam_binding.editor "projects/{{project}}/locations/{{location}}/lakes/{{lake}}/zones/{{dataplex_zone}}/assets/{{asset}} roles/viewer"
```

IAM policy imports use the identifier of the resource in question, e.g.
```
$ terraform import google_dataplex_asset_iam_policy.editor projects/{{project}}/locations/{{location}}/lakes/{{lake}}/zones/{{dataplex_zone}}/assets/{{asset}}
```

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