Excessive granting of GCP IAM permissions can allow attackers to exploit an organization’s cloud resources with malicious intent.
To prevent improper creation or deletion of resources after an account is compromised, proactive measures include both following GCP Security Insights and ensuring custom roles contain as few privileges as possible.
After gaining a foothold in the target infrastructure, sophisticated attacks typically consist of two major parts.
First, attackers must deploy
new resources to carry out their malicious intent. To guard against this, operations teams must control what unexpectedly appears in the
infrastructure, such as what is:
Once the malicious intent is executed, attackers must avoid detection at all costs.
To counter attackers' attempts to remove their
fingerprints, operations teams must control what unexpectedly disappears from the infrastructure, such as what is:
For operations teams to be resilient in this scenario, their organization must apply both:
This rule raises an issue when a custom role grants a number of sensitive permissions (read-write or destructive permission) that is greater than a given parameter.
There is a risk if you answered yes to any of these questions.
To reduce the risks associated with this role after a compromise:
This custom role grants more than 5 sensitive permissions:
resource "google_project_iam_custom_role" "example" {
permissions = [ # Sensitive
"resourcemanager.projects.create", # Sensitive permission
"resourcemanager.projects.delete", # Sensitive permission
"resourcemanager.projects.get",
"resourcemanager.projects.list",
"run.services.create", # Sensitive permission
"run.services.delete", # Sensitive permission
"run.services.get",
"run.services.getIamPolicy",
"run.services.setIamPolicy", # Sensitive permission
"run.services.list",
"run.services.update", # Sensitive permission
]
}
This custom role grants less than 5 sensitive permissions:
resource "google_project_iam_custom_role" "example" {
permissions = [
"resourcemanager.projects.get",
"resourcemanager.projects.list",
"run.services.create",
"run.services.delete",
"run.services.get",
"run.services.getIamPolicy",
"run.services.list",
"run.services.update",
]
}