Introduction
Best practices for securing an AWS environment have been well-documented and generally accepted, such as AWS’s guidance. However, organizations may still find it challenging on how to begin applying this guidance to their specific environments.
- Which controls should be applied out-of-the-box vs. customized?
- What pitfalls exist in implementing the various controls or checks?
- How do you prioritize remediation of the “sea of red” violations?
In this blog series, we’ll analyze anonymized data from Netskope customers that include security settings of 650,000 entities from 1,143 AWS accounts across several hundred organizations. We’ll look at the configuration from the perspective of the best practices, see what’s commonly occurring in the real world, and:
- Discuss specific risk areas that should be prioritized
- Identify underlying root causes and potential pitfalls
- Focus on practical guidance for applying the Benchmark to your specific environment
This blog post focuses on IAM security controls related to IAM Policies. Based on the Netskope dataset analyzed, we will highlight four opportunities to improve security by making simple IAM changes:
- IAM Policies are over-privileged with 4% of the policies in use having full administrative privileges and more than 60% of these using the AWS AdministratorAccess role, which increases the potential impact from compromised credentials and increases the assets at risk.
- 1,401 (11.2%) of 12,478 IAM Users have inline policies, which leads to errors in policies because they are difficult to manage and maintain in a consistent manner.
- 5,886 (47%) of IAM Users have policies directly attached to the user, which also are difficult to manage and maintain.
- 769 (67.3%) accounts do not have the AWSSupportAccess policy attached to a role or user for incident response, which could slow down response if an incident occurs.
IAM Policy: overall, over-privileged, all over
“Power corrupts. Absolute power is kind of neat.”
— John F. Lehman, Jr.
The following five best practices related to IAM Policy were analyzed in this dataset, which contained 35,950 IAM Policies across all accounts:
# | Best Practice | # Violations | % |
---|---|---|---|
1 | Ensure IAM policies that allow full "*:*" administrative privileges are not attached | 1,411 | 4.2 |
2 | Ensure IAM Users Receive Permissions Only Through Groups (no inline) | 12,401 | 11.2 |
3 | Ensure IAM Users Receive Permissions Only Through Groups (no direct attach) | 5,886 | 47.2 |
4 | Ensure IAM instance roles are used for AWS resource access from instances | 34 | .03 |
5 | Ensure a support role has been created to manage incidents with AWS Support | 769 | 67.3 |
1. Full Administrator Privileges
Background: Minimal privileges are a key security practice to prevent unauthorized access and to make escalation of privileges and lateral movement harder for malicious actors. Policies with overly broad privileges should not be created. In this case, overly broad is defined as all actions (*) for all resources (*) being allowed in a policy.
Data: 1,511 (4%) out of 35,950 policies have full administrative privileges with any action on any resource i.e. Action=*, Resource=*.
Analysis: 926 (61%) of the 1,511 have full admin privileges due to the direct use of the AWS AdministratorAccess policy.
Controls:
- Detection/Audit
- Overly broad administrator roles can be detected with the AWS Config Rule: iam-policy-no-statements-with-admin-access.
- Prevention/Mitigation
- The recommendation is to create more granular and limited least-privilege policies and roles. Do not use the AWS AdministratorAccess policy, instead use more limited Administrator policies.
2. No Inline Policies and 3. No Direct Attachment of Policies to Users
Background: Policies should be attached to groups or roles, not directly to users. Similarly, inline policies should not be used. Both of these practices make the management of policies and permissions more error-prone and less repeatable. Inline policies are hard-coded policies that exist for only that IAM User and are difficult to track and update. Direct attachment of policies is hard to maintain across multiple users who require the same privileges.
Data:
- 1,401 (11.2%) of 12,478 IAM Users have inline policies.
- 5,886 (47%) of IAM Users have policies directly attached to the user.
Analysis: 47% or almost half of IAM Users have policies directly attached, rather than through groups or roles. Over 11% of IAM Users have inline policies. Both of these practices are quite common but should be avoided. If inline policies are duplicated among users and need to be updated, then mistakes can occur during this process, leading to inconsistent policies. Similarly, for policies directly attached to users, if multiple users require the same policy updates, errors can occur since all of the specified users need to be modified. However, if the policies were attached to a group or role, only one modification would be needed at the group or role level.
Controls:
- Detection/Audit
- Inline policies can be detected with the AWS Config Rule: iam-no-inline-policy-check. Alternatively, auditing of IAM Users and their
- Prevention/Mitigation
- To remediate the situation, it is recommended to remove any directly attached policies or inline policies and replace them with managed policies attached to groups or roles, not users. Policies are more manageable and maintainable, reducing errors.
4. EC2 Instances Profiles
Background: EC2 instances can run with a specified profile and role, rather than the privileges of the user or service account used to launch the EC2 instance. The impact can be several-fold: users can accidentally run EC2 instances with broader privileges (the user’s privileges) increasing the risk should the EC2 instance be compromised, and it allows attackers to utilize EC2 instances for further actions should credentials be compromised. It is recommended to use instance profiles for all EC2 instances so that the runtime privileges of the EC2 instance are clear and explicit, and so that it is easier to implement minimal privileges.
Data: 34 (.03%) out of 112,323 total EC2 instances are not using instance profiles/roles.
Analysis: Only a very small number of EC2 instances do not have instance profiles/roles assigned. There is no reason not to remediate these and ensure a limited privilege instance profile/role is created and used for each EC2 instance.
Controls:
- Detection/Audit
- EC2 instances can be audited with
aws ec2 describe-iam-instance-profile-associations
- EC2 instances can be audited with
- Prevention/Mitigation
- The recommended practice is to ensure that every EC2 instance has an instance profile/role created and associated with it.
5. AWS Support Role
Background: It is recommended to create an IAM Role that allows authorized users to manage incidents with AWS Support. A built-in managed policy, AWSSupportAccess, should be attached to a role.
Data: Out of the 1,143 accounts in this dataset, 769 (67.3%) accounts do not have the AWSSupportAccess policy attached to a role or user for incident response.
Analysis: The impact of this is during incident response. Likely, organizations work around this by using over-privileged accounts e.g. AdministratorAccess, to engage with AWS Support. It is recommended to remediate the situation and create an appropriate role with the AWSSupportAccess policy.
Controls:
- Detection/Audit
- The IAM Policies can be audited for inclusion of the AWSSupportAccess ARN and attachment to a role via CLI:
aws iam list-policies --query "Policies[?PolicyName == 'AWSSupportAccess']"
aws iam list-entities-for-policy --policy-arn arn:aws:iam::aws:policy/AWSSupportAccess
- The IAM Policies can be audited for inclusion of the AWSSupportAccess ARN and attachment to a role via CLI:
Conclusion
Many best practices have been codified but many AWS environments lag behind in implementing these best practices. Remediating the issues is straightforward for many of the security settings, and there exists specific prescriptive guidance on auditing and remediating your configurations in these areas, which can result in a large reduction in risk.
Here are some basic measures that can be done to address some of the common risk areas due to IAM configuration in your AWS environment:
- Creating IAM Policies and roles with only the minimum privileges necessary.
- Inline policies should be replaced with managed roles that are centrally managed.
- IAM Policies should be attached to groups or roles, instead of users.
- A support role should be created with the AWSupportAcess policy so that incident response is optimized.
In upcoming blogs, we’ll explore other best practices and how individual organizations can apply these best practices to their specific environment.
Additionally, Netskope’s Public Cloud Security platform also can automate configuration checking of your AWS environment, implementing both compliance standards, as well as custom configuration checks.
Dataset and Methodology
Time Period: Data was sampled/analyzed from January 24, 2021.
Source: The analysis presented in this blog post is based on anonymized usage data collected by the Netskope Security Cloud platform relating to a subset of Netskope customers with prior authorization.
Data Scope: The data included 1,143 AWS accounts and several hundred organizations.
The data was composed of configuration settings across tens of thousands of AWS entities including IAM users, IAM policies, password policy, buckets, databases, CloudTrail logs, compute instances, and security groups.
Logic: The analysis followed the logic of core root account security checks found in best practices regarding AWS configuration settings with a few adjustments for the dataset and methodology. Some best practices might define “recent usage” for the root account as a last logged-in time occurring within the past 24 hours to determine whether the root account has been used recently. Because this dataset comes from a point-in-time snapshot, this was changed to within the past seven days prior to the audit date.