Terraform: Error Creating IAM Role. MalformedPolicyDocument: Has Prohibited Field Resource
TLDR
The "MalformedPolicyDocument: Has prohibited field Resource" error occurs when creating an IAM role with a policy that includes a Resource field in a Condition block. To fix this, remove the Resource field or adjust the policy structure.
When creating IAM roles in Terraform, you might encounter the error "MalformedPolicyDocument: Has prohibited field Resource." This error is caused by including a Resource field in a context where it is not allowed, such as within a Condition block. This guide will show you how to resolve this issue.
Why Does This Error Occur?
- Invalid Policy Structure: The
Resourcefield is not allowed in certain parts of an IAM policy, such as within aConditionblock. - Misconfigured Policy: The policy might include a
Resourcefield where it is not required or expected.
Steps to Fix the Error
To resolve the "MalformedPolicyDocument: Has prohibited field Resource" error, follow these steps:
Step 1: Review the Policy
Check the IAM policy for any Resource fields in invalid contexts. For example:
resource "aws_iam_role" "example" {
name = "example-role"
assume_role_policy = jsonencode({
Version = "2012-10-17",
Statement = [
{
Action = "sts:AssumeRole",
Effect = "Allow",
Principal = {
Service = "ec2.amazonaws.com"
},
Condition = {
StringEquals = {
"aws:ResourceTag/Environment" = "production"
}
}
}
]
})
}
In this example, the Resource field is incorrectly placed in the Condition block.
Step 2: Remove or Adjust the Resource Field
Remove the Resource field from invalid contexts or adjust the policy structure. For example:
resource "aws_iam_role" "example" {
name = "example-role"
assume_role_policy = jsonencode({
Version = "2012-10-17",
Statement = [
{
Action = "sts:AssumeRole",
Effect = "Allow",
Principal = {
Service = "ec2.amazonaws.com"
}
}
]
})
}
Step 3: Validate the Policy
Use the AWS IAM Policy Simulator or the terraform validate command to ensure the policy is valid.
terraform validate
Best Practices
- Use Policy Simulators: Test your policies in the AWS IAM Policy Simulator to catch errors early.
- Follow AWS Documentation: Refer to the AWS IAM policy documentation for valid policy structures.
- Validate Configuration: Run
terraform validateto check for syntax errors and misconfigurations.
By following these steps, you can resolve the "MalformedPolicyDocument: Has prohibited field Resource" error and create valid IAM roles in Terraform.
We earn commissions when you shop through the links below.
DigitalOcean
Cloud infrastructure for developers
Simple, reliable cloud computing designed for developers
DevDojo
Developer community & tools
Join a community of developers sharing knowledge and tools
Acronis
The most secure backup
Acronis: the most secure backup solution for your data
Want to support DevOps Daily and reach thousands of developers?
Become a SponsorFound an issue?