AWS Config  sandbox 

What is it?

AWS Config records and saves configuration of supported resources.

You can use these records to audit whether the resources align to best practices, or org specific patterns/rules. It can also highlight 2-way relationships between different resources. For ex - an instance is related to a vpc, a subnet, and a security group. This relation will show up in both the instance, and vpc records under relationships.

Resource Schema

https://github.com/awslabs/aws-config-resource-schema/tree/master

Advanced Query

Run a sql like query against the records in AWS Config. It does not support some query types.

If you run the query against an aggregator you can query for resources across multiple accounts, even your entire organization.

This only works for current state query - does not work for historical search.

Not supported

  • advanced query limitations
    • wildcard matches beginning with a wildcard character or having character sequences of less than length 3 are unsupported
    • configuration.publicDnsName like “%11-12-13-14%” will not work
    • configuration.publicDnsName like “11%” will not work
    • configuration.publicDnsName like “ec2-11-12-13-14%” will work
  • No way to kick off an on-demand evaluation of organization config rule without doing this for each account individually
  • CloudFormation drift detection is not supported for config recorders and delivery channels

Examples

List all tags of instances in specific account

SELECT
  resourceId,
  awsRegion,
  tags
WHERE
  resourceType = 'AWS::EC2::Instance'
  AND accountId = '12345678912'

List all instances with a specific private IP

note: configuration.networkInterfaces is an array, so all elements are searched. configuration.networkInterfaces.privateIpAddress will be an array of ip addresses as found

SELECT
  resourceId,
  resourceType,
  configuration.instanceType,
  configuration.placement.tenancy,
  configuration.networkInterfaces.privateIpAddress,
  configuration.imageId,
  availabilityZone
WHERE
  resourceType = 'AWS::EC2::Instance'
  AND configuration.networkInterfaces.privateIpAddress = '1.1.1.1'

public ip

SELECT
  resourceId,
  resourceType,
  configuration.instanceType,
  configuration.placement.tenancy,
  configuration.imageId,
  availabilityZone
WHERE
  configuration.ServerHostname = 'ec2-11-12-13-14.compute-1.amazonaws.com'

Search for instances with a specific tag

select
  resourceId,
  tags
where
  resourceType = 'AWS::EC2::Instance'
  and tags.key = 'Owner'
  and tags.value = 'bruce.wayne'

Wildcard search for instances

select
  resourceId,
  tags.tag
where
  resourceType = 'AWS::EC2::Instance'
  and tags.tag like 'Owner=bruce%' # matches bruce.wayne, bruce.willis

Find all RDS instances not running with rds-ca-rsa2048-g1 CA

SELECT
  configuration.cACertificateIdentifier,
  resourceId,
  resourceName,
  accountId,
  awsRegion,
  tags.tag
WHERE
  resourceType = 'AWS::RDS::DBInstance'
  and configuration.cACertificateIdentifier != 'rds-ca-rsa2048-g1'

Aggregator

Aggregates resource records from different accounts and regions. A default set up is done by [[AWS Control Tower]], if you don’t want to set it up from scratch yourself.

Conformance Packs

Recorder

Delivery Channel

Rules

What is a rule?

Triggers

Custom rules

Implement custom rules in Lambda to validate the resource record.

Managed rules

Use AWS managed rules to validate the resource record. Full list of managed rules is here.

Record software changes on EC2

You can use AWS Config to record software inventory changes on Amazon EC2 instances and on-premises servers

  • Turn on recording for the managed instance inventory resource type in AWS Config.
  • Configure EC2 and on-premises servers as managed instances in AWS Systems Manager. A managed instance is a machine that has been configured for use with Systems Manager.
  • Initiate collection of software inventory from your managed instances using the Systems Manager Inventory capability.

References