-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(autoscaling): add new check `autoscaling_group_multiple_instance…
…_types` (#5325) Co-authored-by: Sergio <[email protected]>
- Loading branch information
1 parent
c0ac4c7
commit 45c32ab
Showing
6 changed files
with
609 additions
and
0 deletions.
There are no files selected for viewing
Empty file.
32 changes: 32 additions & 0 deletions
32
...ing_group_multiple_instance_types/autoscaling_group_multiple_instance_types.metadata.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
{ | ||
"Provider": "aws", | ||
"CheckID": "autoscaling_group_multiple_instance_types", | ||
"CheckTitle": "EC2 Auto Scaling Group should use multiple instance types in multiple Availability Zones.", | ||
"CheckType": [ | ||
"Software and Configuration Checks/AWS Security Best Practices" | ||
], | ||
"ServiceName": "autoscaling", | ||
"SubServiceName": "", | ||
"ResourceIdTemplate": "arn:partition:autoscaling:region:account-id:autoScalingGroupName/resource-name", | ||
"Severity": "medium", | ||
"ResourceType": "AwsAutoScalingAutoScalingGroup", | ||
"Description": "This control checks whether an Amazon EC2 Auto Scaling group uses multiple instance types in all the Availability Zones, meaning that there should be multiple Availability Zones with multiple instances on each one. The control fails if the Auto Scaling group has only one instance type defined.", | ||
"Risk": "Using only one instance type in an Auto Scaling group reduces the flexibility to launch new instances when there is insufficient capacity for that specific type, potentially affecting the availability of the application.", | ||
"RelatedUrl": "https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-mixed-instances-groups.html", | ||
"Remediation": { | ||
"Code": { | ||
"CLI": "aws autoscaling create-auto-scaling-group --mixed-instances-policy ...", | ||
"NativeIaC": "", | ||
"Other": "https://docs.aws.amazon.com/securityhub/latest/userguide/autoscaling-controls.html#autoscaling-6", | ||
"Terraform": "" | ||
}, | ||
"Recommendation": { | ||
"Text": "Configure your EC2 Auto Scaling group to use multiple instance types across multiple Availability Zones.", | ||
"Url": "https://www.trendmicro.com/cloudoneconformity/knowledge-base/aws/AutoScaling/asg-multiple-instance-type-az.html" | ||
} | ||
}, | ||
"Categories": [], | ||
"DependsOn": [], | ||
"RelatedTo": [], | ||
"Notes": "" | ||
} |
34 changes: 34 additions & 0 deletions
34
...ng/autoscaling_group_multiple_instance_types/autoscaling_group_multiple_instance_types.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
from prowler.lib.check.models import Check, Check_Report_AWS | ||
from prowler.providers.aws.services.autoscaling.autoscaling_client import ( | ||
autoscaling_client, | ||
) | ||
|
||
|
||
class autoscaling_group_multiple_instance_types(Check): | ||
def execute(self): | ||
findings = [] | ||
for group in autoscaling_client.groups: | ||
report = Check_Report_AWS(self.metadata()) | ||
report.region = group.region | ||
report.resource_id = group.name | ||
report.resource_arn = group.arn | ||
report.resource_tags = group.tags | ||
report.status = "FAIL" | ||
report.status_extended = f"Autoscaling group {group.name} does not have multiple instance types in multiple Availability Zones." | ||
|
||
failing_azs = [] | ||
|
||
for az, types in group.az_instance_types.items(): | ||
if len(types) < 2: | ||
failing_azs.append(az) | ||
|
||
if not failing_azs and len(group.az_instance_types) > 1: | ||
report.status = "PASS" | ||
report.status_extended = f"Autoscaling group {group.name} has multiple instance types in each of its Availability Zones." | ||
elif failing_azs: | ||
azs_str = ", ".join(failing_azs) | ||
report.status_extended = f"Autoscaling group {group.name} has only one or no instance types in Availability Zone(s): {azs_str}." | ||
|
||
findings.append(report) | ||
|
||
return findings |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.