Google CloudCloud IAMSecurity

google_project_iam_binding cost estimation

Grants a role to a set of members at the project level, authoritatively for that role. IAM is always free. Cost lives in what the granted access lets members create and consume, and in the audit logs it can generate.

The google_project_iam_binding resource grants a single IAM role (for example roles/compute.admin) to a list of members across an entire project. Identity and Access Management on Google Cloud is free. There is no charge for roles, bindings, policies, service accounts, or permission checks. So the binding itself will never appear on an invoice.

What makes IAM cost-relevant is that access is the gate on spend. A binding that grants roles/compute.admin or roles/bigquery.admin at the project level lets every listed member create expensive resources: GPU VMs, large BigQuery reservations, Spanner instances, and more. Over-broad project-level bindings are a direct cost-governance risk, because the people who can create the most expensive resources are exactly the ones a binding like this authorizes. Least-privilege IAM is as much a cost control as a security control.

The behavioral gotcha that specifically bites with this resource is that google_project_iam_binding is authoritative for its role. It replaces the entire member list for that role on the project every time it applies. If someone grants access through the console or a different binding, the next terraform apply silently removes it, and conversely a poorly scoped binding can hand broad rights to more members than intended. For additive, non-destructive grants use google_project_iam_member instead. Getting this wrong can either lock people out (operational cost) or over-grant (spend risk).

The cost-adjacent line item near IAM is audit logging. Admin Activity audit logs are free, but Data Access audit logs, which record reads of data and metadata, are off by default and, once enabled broadly, generate large volumes into Cloud Logging. Cloud Logging bills ingestion at about $0.50/GB after the free 50 GB per project each month. Enabling Data Access logs across many services to satisfy a compliance ask can quietly become a meaningful bill.

c3x flags google_project_iam_binding as free and treats it as an access-governance signal: the cost sits in the resources the granted roles let members create and in any audit logging that access produces.

Terraform example

A minimal but realistic configuration that C3X can estimate.

resource "google_project_iam_binding" "compute_admins" {
  project = "my-project-id"
  role    = "roles/compute.admin"

  members = [
    "group:platform-team@example.com",
    "serviceAccount:deployer@my-project-id.iam.gserviceaccount.com",
  ]
}

resource "google_project_iam_binding" "log_viewers" {
  project = "my-project-id"
  role    = "roles/logging.viewer"

  members = [
    "group:oncall@example.com",
  ]
}

Pricing dimensions

What you actually pay for when you provision google_project_iam_binding.

DimensionUnitWhat's being charged
IAM bindingfreeRoles, bindings, policies, and permission evaluation carry no charge on Google Cloud.
$0 (free)
Resources the access enablesvariesThe roles you grant let members create and run billed resources. Broad admin roles authorize the most expensive ones.
depends on what is created
Data Access audit logsper GBOptional data-read audit logs, off by default, ingested into Cloud Logging beyond the free 50 GB per project.
about $0.50/GB

Optimization tips

Common ways to reduce google_project_iam_binding cost without changing the workload.

Grant least privilege to limit spend authority

Project-level admin roles let members create the most expensive resources. Grant narrower predefined or custom roles so only the right people can spin up GPUs, large BigQuery reservations, or Spanner, keeping cost authority scoped.

Use google_project_iam_member for additive grants

google_project_iam_binding is authoritative and overwrites the whole member list for its role on each apply. That can silently remove access granted elsewhere or over-grant. Prefer google_project_iam_member when you want additive, non-destructive changes.

Enable Data Access audit logs selectively

Avoids large Cloud Logging ingestion bills

Data Access logs are off by default for good reason. Turning them on across every service floods Cloud Logging at about $0.50/GB. Enable them only for the services and data your compliance requirement actually covers.

Use IAM Recommender to trim unused roles

Policy Intelligence is free and flags over-granted roles based on actual usage. Removing unused broad grants tightens both security and the set of people who can create costly resources.

FAQ

Does Google Cloud IAM cost anything?

No. Roles, bindings, policies, service accounts, and permission checks are all free. A google_project_iam_binding never appears on your bill. The cost is indirect, in what the granted access allows members to create and consume.

Why is IAM a cost concern at all?

Access is the gate on spend. A project-level admin binding authorizes members to create the most expensive resources in the project. Least-privilege IAM limits who can incur large charges, so it functions as a cost control as well as a security one.

What is the difference between iam_binding and iam_member?

google_project_iam_binding is authoritative: it sets the complete member list for a role and overwrites any other grants of that role on every apply. google_project_iam_member is additive: it adds a single member without touching the rest. Use member for non-destructive grants.

Where can IAM lead to an actual charge?

Audit logging. Admin Activity logs are free, but enabling Data Access audit logs broadly generates large volumes into Cloud Logging, billed at about $0.50/GB after the free 50 GB per project. Enable them only where required.

Related resources

Estimate this resource in your own Terraform

Free, open source, no API key. C3X parses your Terraform and shows line-item cost for every resource, including google_project_iam_binding.