Skip to main content
emnode / learn
Compliance

Enable AWS security tooling (Config, Access Analyzer, SSM)

One capability across AWS Config, IAM Access Analyzer and Systems Manager: switch on the services that record, detect and manage your estate so the rest of your security posture has something to stand on.

14 min·10 sections·AWS

Last reviewed

Remediates AWS Security Hub: Config.1IAM.28SSM.1SSM.3

Enabling security tooling: the basics

What does it mean to switch the foundational services on?

Most security controls assume that a handful of foundational services are already running. AWS Config records what exists in your estate and every change to it. IAM Access Analyzer tells you which of your resources are reachable from outside your account. Systems Manager (SSM) gives you a managed plane to patch, inventory and shell into EC2 without opening a port. This capability is about making sure those switches are on, because everything downstream depends on them.

AWS Security Hub turns each switch into its own control, so an estate that has never enabled these services fails several at once. Config.1 checks that AWS Config is recording with the service-linked role. IAM.28 checks that an external access analyzer exists in the Region. SSM.1 checks that EC2 instances are enrolled and managed by Systems Manager. SSM.3 checks that managed instances are compliant with their declared State Manager associations. They read as separate findings, but they are one capability: turn on the tooling that records, detects and manages.

The danger here is the silent one. A disabled recorder, a missing analyzer or an unmanaged instance does not break anything. The dashboard stays green, the application keeps serving, nobody gets paged. The gap only becomes visible the day an auditor asks for evidence, an attacker finds an exposed bucket before you do, or a critical patch cannot be pushed to a box nobody knew was unmanaged. Switching the tooling on is what makes the rest of your posture real rather than assumed.

In this lesson you will learn what each foundational service records, detects or manages, why Security Hub cannot function without them, and how to confirm they are switched on across an estate. The Controls this lesson covers section lists every Security Hub control in this capability, each linking to a deep page with the exact check and a copy-and-paste fix.

Fun fact

The all-green account that could see nothing

A security team onboarding a newly acquired business unit opened its Security Hub dashboard and found an almost spotless score, a handful of low findings and nothing critical. It looked like the cleanest account in the portfolio. The reason was that AWS Config had never been enabled there: with no configuration items recorded, the vast majority of controls had simply never run. The best account in the org was the only one nobody could see into. Once Config was switched on with the service-linked role, the score dropped from 96% to 61% overnight, not because anything changed but because the recorder could finally see what was there.

Confirming the foundations are on across an estate

Devin is setting up Security Hub across a new workload account and notices the posture score is suspiciously high, 94% with barely any findings. Before celebrating, he checks the one thing that explains an unexpectedly clean account: whether the foundational tooling is actually running.

Rather than work the findings one by one, he starts with the recorder, because if Config is off the rest of the score is built on nothing. An empty configuration-recorder list is the silent blind-spot case the whole capability exists to catch.

Start with AWS Config, the service everything else reads from. An empty recorder list means the posture score is built on missing data.

$ aws configservice describe-configuration-recorders --query 'ConfigurationRecorders[].{Name:name,AllSupported:recordingGroup.allSupported}' --output table
-----------------------------------------------
| DescribeConfigurationRecorders |
+----------------------------------------------+
| (empty) |
+----------------------------------------------+
# No recorder configured. Config.1 fails and every control that reads Config has nothing to evaluate.

An empty recorder list is the dangerous case. The dashboard looks clean because nothing is being recorded.

How AWS decides the tooling is ondeep dive

Each control resolves to a presence-or-state check. Config.1 wants a configuration recorder that is in the started state and bound to the service-linked role AWSServiceRoleForConfig, because a hand-rolled role can silently lack permissions and skip resource types. IAM.28 wants an external access analyzer to exist in the Region, since IAM Access Analyzer is Regional and an analyzer in one Region tells you nothing about another. SSM.1 wants each running EC2 instance to appear in describe-instance-information, which means the SSM agent has authenticated with the AmazonSSMManagedInstanceCore policy over a reachable endpoint. SSM.3 then wants those managed instances to be compliant with their State Manager associations.

These controls are evaluated through AWS Config, mostly on a periodic cycle, so switching a service on does not flip the finding to PASSED instantly. The control-plane change is immediate; the report catches up on the next evaluation. That lag matters when you are gathering audit evidence against a deadline, so query the underlying service directly to confirm state rather than waiting on Security Hub.

The strongest version of this capability is central enablement. AWS Config enabled via AWS Organizations, Access Analyzer baked into the account-provisioning baseline, and Systems Manager Default Host Management Configuration that auto-enrolls every new EC2 instance at launch turn these from a thing someone remembers into a property of how accounts are built. That is the difference between checking the tooling is on today and guaranteeing it is on tomorrow.

What is the impact of leaving the tooling off?

The first impact is a false sense of security. With AWS Config off or partially recording, the controls that depend on it produce no findings, and the posture score reflects only the handful of controls that do not need Config. A 95% score on an account with no recorder is not a 95%; it is an unknown wearing a 95% costume, and decisions made on it are made blind.

The second impact is undetected exposure and unreachable compute. Without an external access analyzer you have no continuous answer to which resources are reachable from outside the account, so a stray cross-account grant goes unnoticed until a third party or a breach surfaces it. Without Systems Manager enrollment, Patch Manager cannot push to an instance, Session Manager cannot reach it, and when a Log4Shell-scale CVE lands the unmanaged fleet is the part you cannot fix from the console.

On the compliance side, every modern framework, SOC 2, ISO 27001, HIPAA, PCI DSS and FedRAMP, expects evidence that you record configuration, detect external access and patch your fleet. A passing set of foundational controls across every account is the cheapest and most defensible artefact you can hand an auditor; a failing set is a gap that stalls a certification or a customer security review at exactly the wrong moment.

How do you switch the foundations on safely?

Work the capability as one loop rather than chasing individual findings. Confirm what is missing, switch each service on with the right role, then enforce it centrally so a new account cannot ship without it.

1. Inventory what is off, in every Region and account

For each Region you use Security Hub in, check that a configuration recorder exists and is recording, that an external access analyzer is present, and that every running EC2 instance appears in the SSM managed list. Do not assume a service is on because it is on somewhere; Config and Access Analyzer are evaluated per Region, and a launch Region or a sandbox account spun up outside the baseline is the usual culprit.

2. Enable AWS Config with the service-linked role

Create the recorder bound to AWSServiceRoleForConfig with allSupported recording, attach a delivery channel, and start it. Record IAM global resources in the home Region only to avoid duplicate configuration items. The service-linked role always carries the permissions Config needs, including for newly supported resource types, so avoid hand-rolled recording roles that can silently skip resources.

3. Create an external access analyzer and enroll EC2 in SSM

Create an ACCOUNT-type (or one ORGANIZATION-type) external access analyzer in every Region you operate in; the first scan runs within minutes and surfaces any genuinely exposed resources to triage. For Systems Manager, attach AmazonSSMManagedInstanceCore to instance roles and confirm the agent, network path and clock so each instance checks in. Resolve any non-compliant State Manager associations once the instances are managed.

4. Make it durable with central enablement

Enable AWS Config via AWS Organizations, bake the analyzer into your landing-zone baseline, and turn on Systems Manager Default Host Management Configuration so new instances enroll at launch. Back each with an AWS Config rule or Service Control Policy so the foundations cannot be quietly disabled. The goal is that the tooling being on everywhere is the enforced default, not a thing someone remembers to do.

# 1. AWS Config: bind to the service-linked role, record all resources, then start.
ACCOUNT=$(aws sts get-caller-identity --query Account --output text)
aws iam create-service-linked-role --aws-service-name config.amazonaws.com 2>/dev/null || true
aws configservice put-configuration-recorder \
  --configuration-recorder "name=default,roleARN=arn:aws:iam::${ACCOUNT}:role/aws-service-role/config.amazonaws.com/AWSServiceRoleForConfig,recordingGroup={allSupported=true,includeGlobalResourceTypes=true}"
aws configservice start-configuration-recorder --configuration-recorder-name default

# 2. IAM Access Analyzer: create an external access analyzer in this Region.
aws accessanalyzer create-analyzer --analyzer-name external-access --type ACCOUNT

# 3. Systems Manager: enroll an instance role, then confirm it is managed.
aws iam attach-role-policy --role-name app-instance-role \
  --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
aws ssm describe-instance-information \
  --query 'InstanceInformationList[].{Id:InstanceId,Ping:PingStatus}' --output table

Quick quiz

Question 1 of 5

A newly acquired account shows a 94% Security Hub posture score with almost no findings, and describe-configuration-recorders returns an empty list. What is the right interpretation?

You can now treat the foundational tooling as one capability rather than a scatter of findings: confirm what is off in every Region, switch AWS Config on with the service-linked role, create an external access analyzer and enroll EC2 in Systems Manager, then enforce central enablement so a new account cannot ship without it. The Controls this lesson covers section below links every control in this group to its deep page and fix.

Back to the library

Controls this lesson covers

One capability, many AWS Security Hub controls. This lesson is the shared playbook; each control below keeps its own deep page with the exact check, severity and a copy-and-paste fix.