---
# ----------------------------------------------------------------------------
#
#     ***     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: "Backup for GKE"
description: |-
  A datasource to retrieve the IAM policy state for Backup for GKE RestorePlan
---


# `google_gke_backup_restore_plan_iam_policy`
Retrieves the current IAM policy data for restoreplan



## example

```hcl
data "google_gke_backup_restore_plan_iam_policy" "policy" {
  project = google_gke_backup_restore_plan.all_ns.project
  location = google_gke_backup_restore_plan.all_ns.location
  name = google_gke_backup_restore_plan.all_ns.name
}
```

## Argument Reference

The following arguments are supported:

* `name` - (Required) Used to find the parent resource to bind the IAM policy to
* `location` - (Required) The region of the Restore Plan.
 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.

## Attributes Reference

The attributes are exported:

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

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