Back to controls

Ensure IAM Users receive permissions only through Groups

IAM users are granted access to services, functions, and data through IAM policies. There are multiple ways to define policies for an user, such as:

Category

Controls

Medium

Applies to

AWS

Coverage

null controls, 1 queries

Asset types

1 covered

Overview

IAM users are granted access to services, functions, and data through IAM policies. There are multiple ways to define policies for an user, such as:

  • Add the user to an IAM group that has an attached policy.
  • Attach an inline policy directly to an user.
  • Attach a managed policy directly to an user.

Only the first implementation is recommended.

Assigning IAM policy only through groups simplifies permissions management to a single, flexible layer consistent with organizational functional roles. By simplifying permissions management, the likelihood of excessive permissions is reduced.

Remediation guidance

From Console

Perform the following to create an IAM group and assign a list of policies to it:

  1. Sign into the AWS console and open the IAM Dashboard.
  2. In the left navigation pane, click User groups and then click Create group.
  3. In the User group name box, type the name of the group.
  4. In the list of policies, select the check box for each policy that you want to apply to all members of the group (You can attach up to 10 policies to this user group).
  5. Click Create group. Group is created with the list of permissions.

Perform the following to add a user to a given group:

  1. Sign into the AWS console and open the IAM Dashboard.
  2. In the left navigation pane, click User groups.
  3. Select the Group name to add an user to.
  4. Click Add users to group.
  5. Select the users to be added to the group.
  6. Click Add users. Users are added to the group.

Perform the following to remove a direct association between an user and the policy:

  1. Sign into the AWS console and open the IAM Dashboard.
  2. In the left navigation pane, click on Users.
  3. For each user:
    • Select the user, it will take you to Permissions tab.
    • Expand Permissions policies.
    • Click X for each policy and then click Remove (depending on policy type).

Multiple Remediation Paths

AWS

SERVICE-WIDE (RECOMMENDED when many resources are affected): Deploy centralized guardrails and remediation using AWS Config Conformance Packs and (if applicable) AWS Organizations SCPs.

aws configservice put-organization-conformance-pack --organization-conformance-pack-name <pack-name> --template-s3-uri s3://<bucket>/<template>.yaml

ASSET-LEVEL: Apply the resource-specific remediation steps above to only the affected assets.

PREVENTIVE: Add CI/CD policy checks (CloudFormation/Terraform validation) before deployment to prevent recurrence.

References for Service-Wide Patterns

  • AWS Config Conformance Packs: https://docs.aws.amazon.com/config/latest/developerguide/conformance-packs.html
  • AWS Organizations SCP examples: https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html

Operational Rollout Workflow

Use this sequence to reduce risk and avoid repeated drift.

1. Contain at Service-Wide Scope First (Recommended)

  • AWS: deploy/adjust organization conformance packs and policy guardrails.
aws configservice put-organization-conformance-pack --organization-conformance-pack-name <pack-name> --template-s3-uri s3://<bucket>/<template>.yaml

2. Remediate Existing Affected Assets

  • Execute the control-specific Console/CLI steps documented above for each flagged resource.
  • Prioritize internet-exposed and production assets first.

3. Validate and Prevent Recurrence

  • Re-scan after each remediation batch.
  • Track exceptions with owner and expiry date.
  • Add preventive checks in IaC/CI pipelines.

Query logic

These are the stored checks tied to this control.

IAM Users receive permissions only through Groups

Connectors

AWS

Covered asset types

IAMUser

Expected check: eq []

iamUsers(where: { cloudProvider: "aws", iamPolicies_NOT: null }) {...AssetFragment}
Cyscale Logo
Cyscale is an agentless cloud-native application protection platform (CNAPP) that automates the contextual analysis of cloud misconfigurations, vulnerabilities, access, and data, to provide an accurate and actionable assessment of risk.

Stay connected

Receive new blog posts and product updates from Cyscale

By clicking Subscribe, I agree to Cyscale’s Privacy Policy


© 2026 Cyscale Limited

LinkedIn icon
Twitter icon
Facebook icon
crunch base icon
angel icon