cli icon indicating copy to clipboard operation
cli copied to clipboard

Steps skipped even if attribute is present / defined in plan.out.json

Open ranopriyo-neogy opened this issue 3 years ago • 5 comments

When running Terraform compliance command with required paths, it shows steps getting skipped even if the required attribute is defined in my module and present in plan.out.json. Am I doing something incorrectly? Note : I am running the terraform-compliance from my example folder calling the main module with the inputs.

My Main Module:

resource "aws_iam_policy" "this" {
  count = var.iam_policy_permission == null ? 0 : 1

  description = var.description_iam_policy

  name        = var.name == null ? null : var.name
  name_prefix = var.name == null ? format("%s-%s-", var.customer_id, var.environment) : null
  path        = var.policy_path
  policy      = var.iam_policy_permission
}

Present in plan.out.json

Screen Shot 2021-06-03 at 11 32 19 AM

My Example directory - calling the main module with inputs:

###################################################################
# AWS IAM role and policy
###################################################################

// IAM Role

module "iam_role" {
  source = "../"

  account_id              = local.account_id
  create_instance_profile = var.create_instance_profile
  customer_id             = local.customer_id
  description_iam_role    = var.description_iam_role
  description_iam_policy  = var.description_iam_policy
  environment             = local.environment
  policy_path             = var.policy_path
  role                    = "web"
  tags                    = local.common_tags

  // Data source example - assume role policy
  assume_role_policy = data.aws_iam_policy_document.iam_assume_role_policy_doc_ec2.json

  // Uncomment EITHER the 'Data source example' OR the 'AWS Managed permission policy'.

  // Data source example - permission policy
  #iam_policy_permission = data.aws_iam_policy_document.clusterautoscaler.json

  // AWS Managed permission policy
  // As a result of 'The "count" value depends on resource attributes that cannot be determined until apply...', this MUST be the ARN path AND NOT an interpolation.
  policy_arn = "arn:aws:iam::aws:policy/AmazonEKSFargatePodExecutionRolePolicy"
}


###################################################################
# AWS IAM Policy Attachment only
###################################################################

module "iam_ec2_cwa" {
  source = "../policy-attachment/"

  attached_role = module.iam_role.iam_role_name
  policy_arn    = "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy"
}

SKIPPING: Can not find aws_iam_policy defined in target terraform plan.

Screen Shot 2021-06-03 at 11 36 35 AM

ranopriyo-neogy avatar Jun 03 '21 15:06 ranopriyo-neogy

Hi @ranopriyo-neogy,

Thanks for reporting!

I am having trouble recreating the issue, is it possible to share an anonymized version of the plan?

Kudbettin avatar Jun 08 '21 13:06 Kudbettin

Here is the state file:

{
   "format_version":"0.1",
   "terraform_version":"0.13.6",
   "variables":{
      "account_id":{
         "value":"111111"
      },
      "aws_region":{
         "value":"us-east-1"
      },
      "create_instance_profile":{
         "value":false
      },
      "customer_id":{
         "value":"sys"
      },
      "description_iam_policy":{
         "value":"This is a POLICY description."
      },
      "description_iam_role":{
         "value":"This is a ROLE description."
      },
      "environment":{
         "value":"EXample"
      },
      "iam_policy_description":{
         "value":null
      },
      "iam_policy_permission":{
         "value":null
      },
      "policy_path":{
         "value":"/ec2/"
      },
      "role":{
         "value":null
      },
      "tags":{
         "value":{
            "Environment":"TAG VALUE",
            "Name":"tag_key"
         }
      }
   },
   "planned_values":{
      "outputs":{
         "iam_instance_profile_id":{
            "sensitive":false,
            "value":""
         },
         "iam_role_arn":{
            "sensitive":false
         },
         "iam_role_name":{
            "sensitive":false
         },
         "tags":{
            "sensitive":false,
            "value":[
               {
                  "account_id":"00000",
                  "environment":"exampl"
               }
            ]
         }
      },
      "root_module":{
         "resources":[
            {
               "address":"data.aws_iam_policy_document.clusterautoscaler",
               "mode":"data",
               "type":"aws_iam_policy_document",
               "name":"clusterautoscaler",
               "provider_name":"registry.terraform.io/hashicorp/aws",
               "schema_version":0,
               "values":{
                  "id":"1111111111111",
                  "json":"{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Sid\": \"kubernetesClusterautoscaler\",\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"autoscaling:TerminateInstanceInAutoScalingGroup\",\n        \"autoscaling:SetDesiredCapacity\",\n        \"autoscaling:DescribeTags\",\n        \"autoscaling:DescribeLaunchConfigurations\",\n        \"autoscaling:DescribeAutoScalingInstances\",\n        \"autoscaling:DescribeAutoScalingGroups\"\n      ],\n      \"Resource\": \"*\"\n    }\n  ]\n}",
                  "override_json":null,
                  "override_policy_documents":null,
                  "policy_id":null,
                  "source_json":null,
                  "source_policy_documents":null,
                  "statement":[
                     {
                        "actions":[
                           "autoscaling:DescribeAutoScalingGroups",
                           "autoscaling:DescribeAutoScalingInstances",
                           "autoscaling:DescribeLaunchConfigurations",
                           "autoscaling:DescribeTags",
                           "autoscaling:SetDesiredCapacity",
                           "autoscaling:TerminateInstanceInAutoScalingGroup"
                        ],
                        "condition":[
                           
                        ],
                        "effect":"Allow",
                        "not_actions":[
                           
                        ],
                        "not_principals":[
                           
                        ],
                        "not_resources":[
                           
                        ],
                        "principals":[
                           
                        ],
                        "resources":[
                           "*"
                        ],
                        "sid":"kubernetesClusterautoscaler"
                     }
                  ],
                  "version":"2012-10-17"
               }
            },
            {
               "address":"data.aws_iam_policy_document.iam_assume_role_policy_doc_ec2",
               "mode":"data",
               "type":"aws_iam_policy_document",
               "name":"iam_assume_role_policy_doc_ec2",
               "provider_name":"registry.terraform.io/hashicorp/aws",
               "schema_version":0,
               "values":{
                  "id":"0000000000",
                  "json":"{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Sid\": \"ec2\",\n      \"Effect\": \"Allow\",\n      \"Action\": \"sts:AssumeRole\",\n      \"Principal\": {\n        \"Service\": \"ec2.amazonaws.com\"\n      }\n    }\n  ]\n}",
                  "override_json":null,
                  "override_policy_documents":null,
                  "policy_id":null,
                  "source_json":null,
                  "source_policy_documents":null,
                  "statement":[
                     {
                        "actions":[
                           "sts:AssumeRole"
                        ],
                        "condition":[
                           
                        ],
                        "effect":"Allow",
                        "not_actions":[
                           
                        ],
                        "not_principals":[
                           
                        ],
                        "not_resources":[
                           
                        ],
                        "principals":[
                           {
                              "identifiers":[
                                 "ec2.amazonaws.com"
                              ],
                              "type":"Service"
                           }
                        ],
                        "resources":[
                           
                        ],
                        "sid":"ec2"
                     }
                  ],
                  "version":"2012-10-17"
               }
            }
         ],
         "child_modules":[
            {
               "resources":[
                  {
                     "address":"module.iam_ec2_cwa.aws_iam_role_policy_attachment.this",
                     "mode":"managed",
                     "type":"aws_iam_role_policy_attachment",
                     "name":"this",
                     "provider_name":"registry.terraform.io/hashicorp/aws",
                     "schema_version":0,
                     "values":{
                        "policy_arn":"arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy"
                     }
                  }
               ],
               "address":"module.iam_ec2_cwa"
            },
            {
               "resources":[
                  {
                     "address":"module.iam_role.aws_iam_role.this",
                     "mode":"managed",
                     "type":"aws_iam_role",
                     "name":"this",
                     "provider_name":"registry.terraform.io/hashicorp/aws",
                     "schema_version":0,
                     "values":{
                        "assume_role_policy":"{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Sid\": \"ec2\",\n      \"Effect\": \"Allow\",\n      \"Action\": \"sts:AssumeRole\",\n      \"Principal\": {\n        \"Service\": \"ec2.amazonaws.com\"\n      }\n    }\n  ]\n}",
                        "description":"This is a ROLE description.",
                        "force_detach_policies":false,
                        "max_session_duration":3600,
                        "name_prefix":"sys-exampl-web-",
                        "path":"/ec2/",
                        "permissions_boundary":null,
                        "tags":{
                           "account_id":"00000",
                           "environment":"exampl"
                        },
                        "tags_all":{
                           "account_id":"00000",
                           "environment":"exampl"
                        }
                     }
                  },
                  {
                     "address":"module.iam_role.aws_iam_role_policy_attachment.this[0]",
                     "mode":"managed",
                     "type":"aws_iam_role_policy_attachment",
                     "name":"this",
                     "index":0,
                     "provider_name":"registry.terraform.io/hashicorp/aws",
                     "schema_version":0,
                     "values":{
                        "policy_arn":"arn:aws:iam::aws:policy/AmazonEKSFargatePodExecutionRolePolicy"
                     }
                  }
               ],
               "address":"module.iam_role"
            }
         ]
      }
   },
   "resource_changes":[
      {
         "address":"data.aws_iam_policy_document.clusterautoscaler",
         "mode":"data",
         "type":"aws_iam_policy_document",
         "name":"clusterautoscaler",
         "provider_name":"registry.terraform.io/hashicorp/aws",
         "change":{
            "actions":[
               "no-op"
            ],
            "before":{
               "id":"111111111",
               "json":"{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Sid\": \"kubernetesClusterautoscaler\",\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"autoscaling:TerminateInstanceInAutoScalingGroup\",\n        \"autoscaling:SetDesiredCapacity\",\n        \"autoscaling:DescribeTags\",\n        \"autoscaling:DescribeLaunchConfigurations\",\n        \"autoscaling:DescribeAutoScalingInstances\",\n        \"autoscaling:DescribeAutoScalingGroups\"\n      ],\n      \"Resource\": \"*\"\n    }\n  ]\n}",
               "override_json":null,
               "override_policy_documents":null,
               "policy_id":null,
               "source_json":null,
               "source_policy_documents":null,
               "statement":[
                  {
                     "actions":[
                        "autoscaling:DescribeAutoScalingGroups",
                        "autoscaling:DescribeAutoScalingInstances",
                        "autoscaling:DescribeLaunchConfigurations",
                        "autoscaling:DescribeTags",
                        "autoscaling:SetDesiredCapacity",
                        "autoscaling:TerminateInstanceInAutoScalingGroup"
                     ],
                     "condition":[
                        
                     ],
                     "effect":"Allow",
                     "not_actions":[
                        
                     ],
                     "not_principals":[
                        
                     ],
                     "not_resources":[
                        
                     ],
                     "principals":[
                        
                     ],
                     "resources":[
                        "*"
                     ],
                     "sid":"kubernetesClusterautoscaler"
                  }
               ],
               "version":"2012-10-17"
            },
            "after":{
               "id":"1111111111111",
               "json":"{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Sid\": \"kubernetesClusterautoscaler\",\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"autoscaling:TerminateInstanceInAutoScalingGroup\",\n        \"autoscaling:SetDesiredCapacity\",\n        \"autoscaling:DescribeTags\",\n        \"autoscaling:DescribeLaunchConfigurations\",\n        \"autoscaling:DescribeAutoScalingInstances\",\n        \"autoscaling:DescribeAutoScalingGroups\"\n      ],\n      \"Resource\": \"*\"\n    }\n  ]\n}",
               "override_json":null,
               "override_policy_documents":null,
               "policy_id":null,
               "source_json":null,
               "source_policy_documents":null,
               "statement":[
                  {
                     "actions":[
                        "autoscaling:DescribeAutoScalingGroups",
                        "autoscaling:DescribeAutoScalingInstances",
                        "autoscaling:DescribeLaunchConfigurations",
                        "autoscaling:DescribeTags",
                        "autoscaling:SetDesiredCapacity",
                        "autoscaling:TerminateInstanceInAutoScalingGroup"
                     ],
                     "condition":[
                        
                     ],
                     "effect":"Allow",
                     "not_actions":[
                        
                     ],
                     "not_principals":[
                        
                     ],
                     "not_resources":[
                        
                     ],
                     "principals":[
                        
                     ],
                     "resources":[
                        "*"
                     ],
                     "sid":"kubernetesClusterautoscaler"
                  }
               ],
               "version":"2012-10-17"
            },
            "after_unknown":{
               
            }
         }
      },
      {
         "address":"data.aws_iam_policy_document.iam_assume_role_policy_doc_ec2",
         "mode":"data",
         "type":"aws_iam_policy_document",
         "name":"iam_assume_role_policy_doc_ec2",
         "provider_name":"registry.terraform.io/hashicorp/aws",
         "change":{
            "actions":[
               "no-op"
            ],
            "before":{
               "id":"0000000000",
               "json":"{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Sid\": \"ec2\",\n      \"Effect\": \"Allow\",\n      \"Action\": \"sts:AssumeRole\",\n      \"Principal\": {\n        \"Service\": \"ec2.amazonaws.com\"\n      }\n    }\n  ]\n}",
               "override_json":null,
               "override_policy_documents":null,
               "policy_id":null,
               "source_json":null,
               "source_policy_documents":null,
               "statement":[
                  {
                     "actions":[
                        "sts:AssumeRole"
                     ],
                     "condition":[
                        
                     ],
                     "effect":"Allow",
                     "not_actions":[
                        
                     ],
                     "not_principals":[
                        
                     ],
                     "not_resources":[
                        
                     ],
                     "principals":[
                        {
                           "identifiers":[
                              "ec2.amazonaws.com"
                           ],
                           "type":"Service"
                        }
                     ],
                     "resources":[
                        
                     ],
                     "sid":"ec2"
                  }
               ],
               "version":"2012-10-17"
            },
            "after":{
               "id":"00000000000",
               "json":"{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Sid\": \"ec2\",\n      \"Effect\": \"Allow\",\n      \"Action\": \"sts:AssumeRole\",\n      \"Principal\": {\n        \"Service\": \"ec2.amazonaws.com\"\n      }\n    }\n  ]\n}",
               "override_json":null,
               "override_policy_documents":null,
               "policy_id":null,
               "source_json":null,
               "source_policy_documents":null,
               "statement":[
                  {
                     "actions":[
                        "sts:AssumeRole"
                     ],
                     "condition":[
                        
                     ],
                     "effect":"Allow",
                     "not_actions":[
                        
                     ],
                     "not_principals":[
                        
                     ],
                     "not_resources":[
                        
                     ],
                     "principals":[
                        {
                           "identifiers":[
                              "ec2.amazonaws.com"
                           ],
                           "type":"Service"
                        }
                     ],
                     "resources":[
                        
                     ],
                     "sid":"ec2"
                  }
               ],
               "version":"2012-10-17"
            },
            "after_unknown":{
               
            }
         }
      },
      {
         "address":"module.iam_ec2_cwa.aws_iam_role_policy_attachment.this",
         "module_address":"module.iam_ec2_cwa",
         "mode":"managed",
         "type":"aws_iam_role_policy_attachment",
         "name":"this",
         "provider_name":"registry.terraform.io/hashicorp/aws",
         "change":{
            "actions":[
               "create"
            ],
            "before":null,
            "after":{
               "policy_arn":"arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy"
            },
            "after_unknown":{
               "id":true,
               "role":true
            }
         }
      },
      {
         "address":"module.iam_role.aws_iam_role.this",
         "module_address":"module.iam_role",
         "mode":"managed",
         "type":"aws_iam_role",
         "name":"this",
         "provider_name":"registry.terraform.io/hashicorp/aws",
         "change":{
            "actions":[
               "create"
            ],
            "before":null,
            "after":{
               "assume_role_policy":"{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Sid\": \"ec2\",\n      \"Effect\": \"Allow\",\n      \"Action\": \"sts:AssumeRole\",\n      \"Principal\": {\n        \"Service\": \"ec2.amazonaws.com\"\n      }\n    }\n  ]\n}",
               "description":"This is a ROLE description.",
               "force_detach_policies":false,
               "max_session_duration":3600,
               "name_prefix":"sys-exampl-web-",
               "path":"/ec2/",
               "permissions_boundary":null,
               "tags":{
                  "account_id":"00000",
                  "environment":"exampl"
               },
               "tags_all":{
                  "account_id":"00000",
                  "environment":"exampl"
               }
            },
            "after_unknown":{
               "arn":true,
               "create_date":true,
               "id":true,
               "inline_policy":true,
               "managed_policy_arns":true,
               "name":true,
               "tags":{
                  
               },
               "tags_all":{
                  
               },
               "unique_id":true
            }
         }
      },
      {
         "address":"module.iam_role.aws_iam_role_policy_attachment.this[0]",
         "module_address":"module.iam_role",
         "mode":"managed",
         "type":"aws_iam_role_policy_attachment",
         "name":"this",
         "index":0,
         "provider_name":"registry.terraform.io/hashicorp/aws",
         "change":{
            "actions":[
               "create"
            ],
            "before":null,
            "after":{
               "policy_arn":"arn:aws:iam::aws:policy/AmazonEKSFargatePodExecutionRolePolicy"
            },
            "after_unknown":{
               "id":true,
               "role":true
            }
         }
      }
   ],
   "output_changes":{
      "iam_instance_profile_id":{
         "actions":[
            "create"
         ],
         "before":null,
         "after":"",
         "after_unknown":false
      },
      "iam_role_arn":{
         "actions":[
            "create"
         ],
         "before":null,
         "after_unknown":true
      },
      "iam_role_name":{
         "actions":[
            "create"
         ],
         "before":null,
         "after_unknown":true
      },
      "tags":{
         "actions":[
            "create"
         ],
         "before":null,
         "after":[
            {
               "account_id":"00000",
               "environment":"exampl"
            }
         ],
         "after_unknown":false
      }
   },
   "prior_state":{
      "format_version":"0.1",
      "terraform_version":"0.13.6",
      "values":{
         "root_module":{
            "resources":[
               {
                  "address":"data.aws_iam_policy_document.clusterautoscaler",
                  "mode":"data",
                  "type":"aws_iam_policy_document",
                  "name":"clusterautoscaler",
                  "provider_name":"registry.terraform.io/hashicorp/aws",
                  "schema_version":0,
                  "values":{
                     "id":"1111111111111",
                     "json":"{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Sid\": \"kubernetesClusterautoscaler\",\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"autoscaling:TerminateInstanceInAutoScalingGroup\",\n        \"autoscaling:SetDesiredCapacity\",\n        \"autoscaling:DescribeTags\",\n        \"autoscaling:DescribeLaunchConfigurations\",\n        \"autoscaling:DescribeAutoScalingInstances\",\n        \"autoscaling:DescribeAutoScalingGroups\"\n      ],\n      \"Resource\": \"*\"\n    }\n  ]\n}",
                     "override_json":null,
                     "override_policy_documents":null,
                     "policy_id":null,
                     "source_json":null,
                     "source_policy_documents":null,
                     "statement":[
                        {
                           "actions":[
                              "autoscaling:DescribeAutoScalingGroups",
                              "autoscaling:DescribeAutoScalingInstances",
                              "autoscaling:DescribeLaunchConfigurations",
                              "autoscaling:DescribeTags",
                              "autoscaling:SetDesiredCapacity",
                              "autoscaling:TerminateInstanceInAutoScalingGroup"
                           ],
                           "condition":[
                              
                           ],
                           "effect":"Allow",
                           "not_actions":[
                              
                           ],
                           "not_principals":[
                              
                           ],
                           "not_resources":[
                              
                           ],
                           "principals":[
                              
                           ],
                           "resources":[
                              "*"
                           ],
                           "sid":"kubernetesClusterautoscaler"
                        }
                     ],
                     "version":"2012-10-17"
                  }
               },
               {
                  "address":"data.aws_iam_policy_document.iam_assume_role_policy_doc_ec2",
                  "mode":"data",
                  "type":"aws_iam_policy_document",
                  "name":"iam_assume_role_policy_doc_ec2",
                  "provider_name":"registry.terraform.io/hashicorp/aws",
                  "schema_version":0,
                  "values":{
                     "id":"0000000000",
                     "json":"{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Sid\": \"ec2\",\n      \"Effect\": \"Allow\",\n      \"Action\": \"sts:AssumeRole\",\n      \"Principal\": {\n        \"Service\": \"ec2.amazonaws.com\"\n      }\n    }\n  ]\n}",
                     "override_json":null,
                     "override_policy_documents":null,
                     "policy_id":null,
                     "source_json":null,
                     "source_policy_documents":null,
                     "statement":[
                        {
                           "actions":[
                              "sts:AssumeRole"
                           ],
                           "condition":[
                              
                           ],
                           "effect":"Allow",
                           "not_actions":[
                              
                           ],
                           "not_principals":[
                              
                           ],
                           "not_resources":[
                              
                           ],
                           "principals":[
                              {
                                 "identifiers":[
                                    "ec2.amazonaws.com"
                                 ],
                                 "type":"Service"
                              }
                           ],
                           "resources":[
                              
                           ],
                           "sid":"ec2"
                        }
                     ],
                     "version":"2012-10-17"
                  }
               },
               {
                  "address":"data.template_file.idpa",
                  "mode":"data",
                  "type":"template_file",
                  "name":"idpa",
                  "provider_name":"registry.terraform.io/hashicorp/template",
                  "schema_version":0,
                  "values":{
                     "filename":null,
                     "id":"0000000000",
                     "rendered":"{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Principal\": {\n        \"Federated\": \"cognito-identity.amazonaws.com\"\n      },\n      \"Action\": \"sts:AssumeRoleWithWebIdentity\",\n      \"Condition\": {\n        \"StringEquals\": {\n          \"cognito-identity.amazonaws.com:aud\": \"example\"\n        },\n        \"ForAnyValue:StringLike\": {\n          \"cognito-identity.amazonaws.com:amr\": \"authenticated\"\n        }\n      }\n    }\n  ]\n}",
                     "template":"{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Principal\": {\n        \"Federated\": \"cognito-identity.amazonaws.com\"\n      },\n      \"Action\": \"sts:AssumeRoleWithWebIdentity\",\n      \"Condition\": {\n        \"StringEquals\": {\n          \"cognito-identity.amazonaws.com:aud\": \"${idpa}\"\n        },\n        \"ForAnyValue:StringLike\": {\n          \"cognito-identity.amazonaws.com:amr\": \"authenticated\"\n        }\n      }\n    }\n  ]\n}",
                     "vars":{
                        "idpa":"example"
                     }
                  }
               }
            ]
         }
      }
   },
   "configuration":{
      "provider_config":{
         "aws":{
            "name":"aws",
            "expressions":{
               "region":{
                  "references":[
                     "var.aws_region"
                  ]
               }
            }
         }
      },
      "root_module":{
         "outputs":{
            "iam_instance_profile_id":{
               "expression":{
                  "references":[
                     "module.iam_role.iam_instance_profile_id"
                  ]
               }
            },
            "iam_role_arn":{
               "expression":{
                  "references":[
                     "module.iam_role.iam_role_arn"
                  ]
               }
            },
            "iam_role_name":{
               "expression":{
                  "references":[
                     "module.iam_role.iam_role_arn"
                  ]
               }
            },
            "tags":{
               "expression":{
                  "references":[
                     "module.iam_role.tags"
                  ]
               },
               "description":"The tags attached to the role"
            }
         },
         "resources":[
            {
               "address":"data.aws_iam_policy_document.clusterautoscaler",
               "mode":"data",
               "type":"aws_iam_policy_document",
               "name":"clusterautoscaler",
               "provider_config_key":"aws",
               "expressions":{
                  "statement":[
                     {
                        "actions":{
                           "constant_value":[
                              "autoscaling:DescribeAutoScalingGroups",
                              "autoscaling:DescribeAutoScalingInstances",
                              "autoscaling:DescribeLaunchConfigurations",
                              "autoscaling:DescribeTags",
                              "autoscaling:SetDesiredCapacity",
                              "autoscaling:TerminateInstanceInAutoScalingGroup"
                           ]
                        },
                        "effect":{
                           "constant_value":"Allow"
                        },
                        "resources":{
                           "constant_value":[
                              "*"
                           ]
                        },
                        "sid":{
                           "constant_value":"kubernetesClusterautoscaler"
                        }
                     }
                  ]
               },
               "schema_version":0
            },
            {
               "address":"data.aws_iam_policy_document.iam_assume_role_policy_doc_ec2",
               "mode":"data",
               "type":"aws_iam_policy_document",
               "name":"iam_assume_role_policy_doc_ec2",
               "provider_config_key":"aws",
               "expressions":{
                  "statement":[
                     {
                        "actions":{
                           "constant_value":[
                              "sts:AssumeRole"
                           ]
                        },
                        "principals":[
                           {
                              "identifiers":{
                                 "constant_value":[
                                    "ec2.amazonaws.com"
                                 ]
                              },
                              "type":{
                                 "constant_value":"Service"
                              }
                           }
                        ],
                        "sid":{
                           "constant_value":"ec2"
                        }
                     }
                  ]
               },
               "schema_version":0
            },
            {
               "address":"data.template_file.idpa",
               "mode":"data",
               "type":"template_file",
               "name":"idpa",
               "provider_config_key":"template",
               "expressions":{
                  "template":{
                     "references":[
                        "path.module"
                     ]
                  },
                  "vars":{
                     "constant_value":{
                        "idpa":"example"
                     }
                  }
               },
               "schema_version":0
            }
         ],
         "module_calls":{
            "iam_ec2_cwa":{
               "source":"../policy-attachment/",
               "expressions":{
                  "attached_role":{
                     "references":[
                        "module.iam_role.iam_role_name"
                     ]
                  },
                  "policy_arn":{
                     "constant_value":"arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy"
                  }
               },
               "module":{
                  "resources":[
                     {
                        "address":"aws_iam_role_policy_attachment.this",
                        "mode":"managed",
                        "type":"aws_iam_role_policy_attachment",
                        "name":"this",
                        "provider_config_key":"iam_ec2_cwa:aws",
                        "expressions":{
                           "policy_arn":{
                              "references":[
                                 "var.policy_arn"
                              ]
                           },
                           "role":{
                              "references":[
                                 "var.attached_role"
                              ]
                           }
                        },
                        "schema_version":0
                     }
                  ],
                  "variables":{
                     "attached_role":{
                        "description":"Custom variable: specify the role name where this policy will be attached."
                     },
                     "policy_arn":{
                        "default":null,
                        "description":"The ARN of the policy you want to apply."
                     }
                  }
               }
            },
            "iam_role":{
               "source":"../",
               "expressions":{
                  "account_id":{
                     "references":[
                        "local.account_id"
                     ]
                  },
                  "assume_role_policy":{
                     "references":[
                        "data.aws_iam_policy_document.iam_assume_role_policy_doc_ec2"
                     ]
                  },
                  "create_instance_profile":{
                     "references":[
                        "var.create_instance_profile"
                     ]
                  },
                  "customer_id":{
                     "references":[
                        "local.customer_id"
                     ]
                  },
                  "description_iam_policy":{
                     "references":[
                        "var.description_iam_policy"
                     ]
                  },
                  "description_iam_role":{
                     "references":[
                        "var.description_iam_role"
                     ]
                  },
                  "environment":{
                     "references":[
                        "local.environment"
                     ]
                  },
                  "policy_arn":{
                     "constant_value":"arn:aws:iam::aws:policy/AmazonEKSFargatePodExecutionRolePolicy"
                  },
                  "policy_path":{
                     "references":[
                        "var.policy_path"
                     ]
                  },
                  "role":{
                     "constant_value":"web"
                  },
                  "tags":{
                     "references":[
                        "local.common_tags"
                     ]
                  }
               },
               "module":{
                  "outputs":{
                     "iam_instance_profile_id":{
                        "expression":{
                           "references":[
                              "aws_iam_instance_profile.this"
                           ]
                        },
                        "description":"The ID of the IAM instance"
                     },
                     "iam_permission_policy_arn":{
                        "expression":{
                           "references":[
                              "aws_iam_policy.this"
                           ]
                        },
                        "description":"The ARN specifying the policy"
                     },
                     "iam_role_arn":{
                        "expression":{
                           "references":[
                              "aws_iam_role.this"
                           ]
                        },
                        "description":"The ARN specifying the role"
                     },
                     "iam_role_name":{
                        "expression":{
                           "references":[
                              "aws_iam_role.this"
                           ]
                        },
                        "description":"The name of the role"
                     },
                     "tags":{
                        "expression":{
                           "references":[
                              "aws_iam_role.this"
                           ]
                        },
                        "description":"The tags attached to the role"
                     }
                  },
                  "resources":[
                     {
                        "address":"aws_iam_instance_profile.this",
                        "mode":"managed",
                        "type":"aws_iam_instance_profile",
                        "name":"this",
                        "provider_config_key":"iam_role:aws",
                        "expressions":{
                           "name":{
                              "references":[
                                 "var.name",
                                 "var.name"
                              ]
                           },
                           "name_prefix":{
                              "references":[
                                 "var.name",
                                 "var.customer_id",
                                 "var.environment"
                              ]
                           },
                           "role":{
                              "references":[
                                 "aws_iam_role.this"
                              ]
                           }
                        },
                        "schema_version":0,
                        "count_expression":{
                           "references":[
                              "var.create_instance_profile"
                           ]
                        }
                     },
                     {
                        "address":"aws_iam_policy.this",
                        "mode":"managed",
                        "type":"aws_iam_policy",
                        "name":"this",
                        "provider_config_key":"iam_role:aws",
                        "expressions":{
                           "description":{
                              "references":[
                                 "var.description_iam_policy"
                              ]
                           },
                           "name":{
                              "references":[
                                 "var.name",
                                 "var.name"
                              ]
                           },
                           "name_prefix":{
                              "references":[
                                 "var.name",
                                 "var.customer_id",
                                 "var.environment"
                              ]
                           },
                           "path":{
                              "references":[
                                 "var.policy_path"
                              ]
                           },
                           "policy":{
                              "references":[
                                 "var.iam_policy_permission"
                              ]
                           }
                        },
                        "schema_version":0,
                        "count_expression":{
                           "references":[
                              "var.iam_policy_permission"
                           ]
                        }
                     },
                     {
                        "address":"aws_iam_role.this",
                        "mode":"managed",
                        "type":"aws_iam_role",
                        "name":"this",
                        "provider_config_key":"iam_role:aws",
                        "expressions":{
                           "assume_role_policy":{
                              "references":[
                                 "var.assume_role_policy"
                              ]
                           },
                           "description":{
                              "references":[
                                 "var.description_iam_role"
                              ]
                           },
                           "name":{
                              "references":[
                                 "var.name",
                                 "var.name"
                              ]
                           },
                           "name_prefix":{
                              "references":[
                                 "var.name",
                                 "var.customer_id",
                                 "var.environment",
                                 "var.role"
                              ]
                           },
                           "path":{
                              "references":[
                                 "var.policy_path"
                              ]
                           },
                           "tags":{
                              "references":[
                                 "var.tags"
                              ]
                           }
                        },
                        "schema_version":0
                     },
                     {
                        "address":"aws_iam_role_policy_attachment.this",
                        "mode":"managed",
                        "type":"aws_iam_role_policy_attachment",
                        "name":"this",
                        "provider_config_key":"iam_role:aws",
                        "expressions":{
                           "policy_arn":{
                              "references":[
                                 "var.iam_policy_permission",
                                 "aws_iam_policy.this[0]",
                                 "var.policy_arn"
                              ]
                           },
                           "role":{
                              "references":[
                                 "aws_iam_role.this"
                              ]
                           }
                        },
                        "schema_version":0,
                        "count_expression":{
                           "references":[
                              "var.iam_policy_permission",
                              "var.policy_arn"
                           ]
                        }
                     }
                  ],
                  "variables":{
                     "account_id":{
                        "description":"Custom variable: specify a `account_id`, or `111111` (six one) for internal use."
                     },
                     "assume_role_policy":{
                        "description":"The policy that grants an entity permission to assume the role."
                     },
                     "create_instance_profile":{
                        "default":false,
                        "description":"Custom variable: boolean - specify `true` to create and IAM instance profile. Default is `false`."
                     },
                     "customer_id":{
                        "description":"Custom variable: specify the 3-character customer ID."
                     },
                     "description_iam_policy":{
                        "default":null,
                        "description":"The description of the role policy."
                     },
                     "description_iam_role":{
                        "default":null,
                        "description":"The description of the role."
                     },
                     "environment":{
                        "description":"Specify the environment. Can be one of `dev`, `stg`, `uat`, `oat`, `prd`."
                     },
                     "force_detach_policies":{
                        "default":null,
                        "description":"Specifies to force detaching any policies the role has before destroying it. Defaults to false."
                     },
                     "iam_policy_permission":{
                        "default":null,
                        "description":"Custom variable: The permission policy document."
                     },
                     "max_session_duration":{
                        "default":12,
                        "description":"(Optional) The maximum session duration (in seconds) that you want to set for the specified role. If you do not specify a value for this setting, the default maximum of one hour is applied. This setting can have a value from 1 hour to 12 hours."
                     },
                     "name":{
                        "default":null,
                        "description":"The name of the resource. This is an override."
                     },
                     "path":{
                        "default":null,
                        "description":"The path to the role."
                     },
                     "policy_arn":{
                        "default":null,
                        "description":"The ARN of the policy you want to apply."
                     },
                     "policy_path":{
                        "default":null,
                        "description":"The path of the policy in IAM."
                     },
                     "role":{
                        "default":null,
                        "description":"Custom variable: specify a descriptive role / purpose for the resource."
                     },
                     "tags":{
                        "default":{
                           
                        },
                        "description":"Specify a map of tags."
                     }
                  }
               }
            }
         },
         "variables":{
            "account_id":{
               "description":"Specify the 5-digit customer account ID below."
            },
            "aws_region":{
               "description":"Instantiate the `aws_region` variable. This will be passed either from the CLI or Terraform Enterprise Workspace Terraform variables."
            },
            "create_instance_profile":{
               "default":false,
               "description":"Custom variable: boolean - specify `true` to create and IAM instance profile. Default is `false`."
            },
            "customer_id":{
               "description":"Specify a customer name."
            },
            "description_iam_policy":{
               "default":null,
               "description":"The description of the role policy."
            },
            "description_iam_role":{
               "default":null,
               "description":"The description of the role."
            },
            "environment":{
               "description":"Specify the environment. Can be one of `dev`, `stg`, `uat`, `oat`, `prd`."
            },
            "iam_policy_description":{
               "default":null,
               "description":"Description of the IAM policy (forces new resource)."
            },
            "iam_policy_permission":{
               "default":null,
               "description":"Custom variable: IAM permission policy (typically passed in from infrastructure module)."
            },
            "policy_path":{
               "default":null,
               "description":"Path in which to create the policy."
            },
            "role":{
               "default":null,
               "description":"Custom variable: specify a descriptive role / purpose for the resource."
            },
            "tags":{
               "default":{
                  
               },
               "description":"Specify a map of tags."
            }
         }
      }
   }
}

ranopriyo-neogy avatar Jun 08 '21 13:06 ranopriyo-neogy

hello, went through the state file thoroughly, couldn't find any aws_iam_policy resource created. Yes, there is a reference within a module which is referencing to module.iam_role.iam_permission_policy_arn, but there is no resource record related with aws_iam_policy resource here. Either, I am seeing something wrong, or its referenced but not created.

Can you please confirm if you see module.iam_role.aws_iam_policy.this resource created/modified/deleted within your plan ?

eerkunt avatar Jun 09 '21 20:06 eerkunt

hello, went through the state file thoroughly, couldn't find any aws_iam_policy resource created. Yes, there is a reference within a module which is referencing to module.iam_role.iam_permission_policy_arn, but there is no resource record related with aws_iam_policy resource here. Either, I am seeing something wrong, or its referenced but not created.

Can you please confirm if you see module.iam_role.aws_iam_policy.this resource created/modified/deleted within your plan ?

I don't see that in plan either, is there a way I can refer to aws_iam_policy below:

{
                        "address":"aws_iam_policy.this",
                        "mode":"managed",
                        "type":"aws_iam_policy",
                        "name":"this",
                        "provider_config_key":"iam_role:aws",
                        "expressions":{
                           "description":{
                              "references":[
                                 "var.description_iam_policy"
                              ]
                           },
                           "name":{
                              "references":[
                                 "var.name",
                                 "var.name"
                              ]
                           },
                           "name_prefix":{
                              "references":[
                                 "var.name",
                                 "var.customer_id",
                                 "var.environment"
                              ]
                           },
                           "path":{
                              "references":[
                                 "var.policy_path"
                              ]
                           },
                           "policy":{
                              "references":[
                                 "var.iam_policy_permission"
                              ]
                           }
                        },
                        "schema_version":0,
                        "count_expression":{
                           "references":[
                              "var.iam_policy_permission"
                           ]
                        }
                     },

ranopriyo-neogy avatar Jun 09 '21 21:06 ranopriyo-neogy

I see something similar to this with an assume_role_policy setting when it points to another resource. It then ends up in expressions in the configuration section of the json plan file and not in the main variables of the role resource.

So it skips the check.

Attached is the zipped up json plan

And here is the actual terraform and the output from terraform-compliance showing the assume_role_policy getting completely missed.

Terraform:

resource "aws_iam_openid_connect_provider" "dummy" {
  url = "https://dummy"

  client_id_list = []

  thumbprint_list = []
}

resource "aws_iam_role" "dummy" {
  name               = "dummy"
  assume_role_policy = data.aws_iam_policy_document.dummy_assume_role_policy.json
}

data "aws_iam_policy_document" "dummy_assume_role_policy" {
  statement {
    actions = ["sts:AssumeRole"]
    principals {
      identifiers = [aws_iam_openid_connect_provider.dummy.arn]
      type        = "Federated"
    }
  }
}

Terraform compliance output:

This feature checks stuff about the role

Scenario: Reject if something about the role
    Given I have aws_iam_role defined

Press enter to continue 💡 SKIPPING: Can not find any assume_role_policy property for aws_iam_role resource in terraform plan. 💡 SKIPPING: Skipping the step since resource type does not have assume_role_policy property. When it has assume_role_policy

Feature:

    Scenario: Reject if something about the role
        Given I have aws_iam_role defined
        When it has assume_role_policy
        Then it must contain assume_role_policy

So I believe it is because the link to the assume_role_policy document is not in the main resources section but in the configuration section which has this:

              {
                "address": "aws_iam_role.dummy",
                "mode": "managed",
                "type": "aws_iam_role",
                "name": "dummy",
                "provider_config_key": "secondary:aws",
                "expressions": {
                  "assume_role_policy": {
                    "references": [
                      "data.aws_iam_policy_document.dummy_assume_role_policy.json",
                      "data.aws_iam_policy_document.dummy_assume_role_policy"
                    ]
                  },
                  "name": { "constant_value": "dummy" }
                },
                "schema_version": 0
              },

mungojam avatar Feb 13 '22 16:02 mungojam