Control: 2.5 Ensure AWS Config is enabled in all regions
Description
AWS Config is a web service that performs configuration management of supported AWS resources within your account and delivers log files to you. The recorded information includes the configuration item (AWS resource), relationships between configuration items (AWS resources), any configuration changes between resources. It is recommended to enable AWS Config be enabled in all regions.
The AWS configuration item history captured by AWS Config enables security analysis, resource change tracking, and compliance auditing.
Remediation
To implement AWS Config configuration:
Via AWS Management Console:
- Select the region you want to focus on in the top right of the console.
- Click
Services
. - Click
Config
. - Define which resources you want to record in the selected region.
- Choose to include global resources (IAM resources).
- Specify an S3 bucket in the same account or in another managed AWS account.
- Create an SNS Topic from the same AWS account or another managed AWS account.
Via AWS Command Line Interface:
- Ensure there is an appropriate S3 bucket, SNS topic, and IAM role per the AWS Config Service prerequisites.
- Run this command to set up the configuration recorder
aws configservice subscribe --s3-bucket my-config-bucket --sns-topic arn:aws:sns:us-east-1:012345678912:my-config-notice --iam-role arn:aws:iam::012345678912:role/myConfigRole
- Run this command to start the configuration recorder:
start-configuration-recorder --configuration-recorder-name <value>
Usage
Run the control in your terminal:
powerpipe control run aws_compliance.control.cis_v120_2_5
Snapshot and share results via Turbot Pipes:
powerpipe loginpowerpipe control run aws_compliance.control.cis_v120_2_5 --share
SQL
This control uses a named query:
-- pgFormatter-ignore-- Get count for any region with all matching criteriawith global_recorders as ( select count(*) as global_config_recorders from aws_config_configuration_recorder where recording_group -> 'IncludeGlobalResourceTypes' = 'true' and recording_group -> 'AllSupported' = 'true' and status ->> 'Recording' = 'true' and status ->> 'LastStatus' = 'SUCCESS')select 'arn:aws::' || a.region || ':' || a.account_id as resource, case -- When any of the region satisfies with above CTE -- In left join of <aws_config_configuration_recorder> table, regions now having -- 'Recording' and 'LastStatus' matching criteria can be considered as OK when g.global_config_recorders >= 1 and status ->> 'Recording' = 'true' and status ->> 'LastStatus' = 'SUCCESS' then 'ok' -- Skip any regions that are disabled in the account. when a.opt_in_status = 'not-opted-in' then 'skip' else 'alarm' end as status, -- Below cases are for citing respective reasons for control state case when a.opt_in_status = 'not-opted-in' then a.region || ' region is disabled.' else case when recording_group -> 'IncludeGlobalResourceTypes' = 'true' then a.region || ' IncludeGlobalResourceTypes enabled,' else a.region || ' IncludeGlobalResourceTypes disabled,' end || case when recording_group -> 'AllSupported' = 'true' then ' AllSupported enabled,' else ' AllSupported disabled,' end || case when status ->> 'Recording' = 'true' then ' Recording enabled' else ' Recording disabled' end || case when status ->> 'LastStatus' = 'SUCCESS' then ' and LastStatus is SUCCESS.' else ' and LastStatus is not SUCCESS.' end end as reason , a.region, a.account_idfrom global_recorders as g, aws_region as a left join aws_config_configuration_recorder as r on r.account_id = a.account_id and r.region = a.name;