AWS EC2 Non-Public Instance with Over-Permissive IAM Role


While AWS EC2 instances within private subnets (non-public) have an added layer of security due to their lack of direct exposure to the public internet, they shouldn't be seen as completely safe from threats. If a non-public instance has an IAM role with overly permissive access (such as granting access to all resources), it can still become a potential weak link if other security layers are breached. Such a misconfiguration could allow an attacker to pivot from a compromised public resource and utilize the excessive permissions on the private EC2 instance.


1. Review and Refine IAM Role Policies:

AWS Management Console:
  • Navigate to the IAM Dashboard.
  • In the navigation pane, choose Roles.
  • Find and click on the IAM role attached to the non-public EC2 instance.
  • Under the Permissions tab, review the policies attached.
  • Be wary of overly generous permissions, particularly ones like "Resource": "*" and modify them as needed.
  • Opt for policies that adhere strictly to the principle of least privilege.

To enumerate roles and their respective policies:

aws iam list-roles
aws iam list-role-policies --role-name [ROLE_NAME]
aws iam get-role-policy --role-name [ROLE_NAME] --policy-name [POLICY_NAME]

To modify or replace policies, use commands such as aws iam put-role-policy.


Ensure that the Terraform configuration for the IAM role connected to the EC2 instance doesn't grant overly broad permissions. Wildcard permissions ("*") should be substituted with granular ones:

resource "aws_iam_role_policy" "specific_policy" {
  name = "specific_policy"
  role =

  policy = jsonencode({
    Version = "2012-10-17",
    Statement = [
        Action = [
        Effect = "Allow",
        Resource = "arn:aws:s3:::specific-bucket-name"
      // ... other precise permissions ...


Even within private subnets, always observe the principle of least privilege when determining IAM role permissions for EC2 instances. Continually monitor IAM roles and their associated permissions, and employ tools such as AWS Config to maintain regular oversight of resource configurations and ensure compliance with security standards.