Governance, Security and Compliance
|
This content was generated with the assistance of AI and should be verified against the official documentation before being relied on in production. See the section bibliography for the reference material consulted while preparing these pages. |
Commands and console steps on this page were checked on 2026-10-01 against the AWS CLI v2 command reference (the 2.37
line, which already contains the securityhub v2 commands and the artifact service) and the AWS Config, Security
Hub, GuardDuty, Inspector, Macie, WAF and Artifact user guides. Security services are renamed, split and retired
faster than most of AWS, so re-verify service names, plan names and flags against aws --version and the linked
reference pages before relying on them in a pipeline. Examples use us-east-1 and the placeholder account ID
111122223333; both are stand-ins for your own values.
The earlier pages of this section each covered the security controls of one service: identities on Identity and Access, keys and secrets on Secrets Manager, Parameter Store and KMS, network filtering on VPC Networking, bucket protection on S3 Security and Static Hosting. This page covers what applies across the whole Bookshelf environment: who is responsible for what, how the controls are layered, how configuration is continuously evaluated (AWS Config), how threats and vulnerabilities are detected (GuardDuty, Inspector, Macie, Detective), how findings are consolidated (AWS Security Hub), and how you answer "is this environment compliant" (AWS Artifact, conformance packs and the compliance programs). It closes with a baseline checklist for a new account. The Azure counterpart is Governance and Compliance, where Azure Policy and Microsoft Defender for Cloud play roles that AWS splits across several services.
Shared responsibility
AWS operates under a shared responsibility model: AWS is responsible for the security of the cloud — the facilities, hardware, global network and the software layers it operates — and you are responsible for security in the cloud — your data, identities, configuration and the guest software you run. The conceptual model is introduced on Cloud Concepts; what matters operationally is that the line moves with the service you pick:
| Service | AWS is responsible for | You are responsible for |
|---|---|---|
Amazon EC2 (IaaS) |
Physical hosts, hypervisor, network fabric, the facility. |
Guest OS patching, software, security groups, IAM roles, disk encryption choices, data. |
Amazon RDS / Aurora (managed) |
Host and engine patching (within the maintenance windows you set), backups infrastructure, Multi-AZ failover plumbing. |
Network exposure (subnet groups, security groups), database users and IAM authentication, encryption settings, parameter choices, the data and its classification. |
AWS Lambda / Fargate (serverless) |
Runtime and OS patching, isolation between functions or tasks, scaling infrastructure. |
Your code and its dependencies, execution/task roles, event source permissions, secrets handling, data. |
Amazon S3 (managed storage) |
Durability, the service itself, physical security. |
Bucket policies, Block Public Access, encryption and key policy choices, object-level data, access logging. |
Two practical consequences. First, "managed" never means "nothing to configure": nearly every public data exposure on AWS is a customer-side configuration (a public bucket, an open security group, an over-broad role), which is exactly what the services below detect. Second, responsibilities are inherited or shared for some controls: patching is shared (AWS patches the host, you patch the guest), and compliance is shared (AWS provides audited evidence for its layer through AWS Artifact; you provide evidence for yours). Older tutorials sometimes describe the model as a single diagram with a fixed line; the current documentation stresses that the line depends on the service and on the controls you choose.
Defence in depth
No single control is enough, so AWS security is layered. A request or an attacker has to get through several independent layers, each with its own detective counterpart:
| Layer | Services and controls | Covered on |
|---|---|---|
Edge |
Route 53, CloudFront, AWS Shield (Standard on by default), AWS WAF, AWS Firewall Manager. |
[Edge protection], CloudFront and CDN Delivery, Route 53, DNS and ACM Certificates |
Network |
Security groups, network ACLs, VPC endpoints, AWS Network Firewall, private subnets. |
|
Compute |
Amazon Inspector, Systems Manager Patch Manager and Session Manager, IMDSv2, task and execution roles. |
|
Data and identity |
IAM and MFA, KMS, Secrets Manager, ACM, Macie, S3 Block Public Access. |
Identity and Access, Secrets Manager, Parameter Store and KMS, [Amazon Macie] |
Detection and governance |
CloudTrail, AWS Config, GuardDuty, Security Hub, Detective, Trusted Advisor. |
The rest of this page and Monitoring and Observability |
AWS Config
AWS Config records the configuration of supported resources over time and evaluates it against rules. Where CloudTrail answers "who called which API", Config answers "what did this resource look like, and was it compliant, at a given moment". Its parts:
- Configuration recorder
-
Records configuration items (CIs) for the resource types you choose — all supported types (the default for new setups), or a selected list — either continuously on every change or daily. One recorder per Region per account.
- Delivery channel
-
Where snapshots and history go: an S3 bucket and, optionally, an SNS topic.
- Rules
-
Evaluations of recorded resources. Managed rules are prebuilt (for example
S3_BUCKET_PUBLIC_READ_PROHIBITED,ENCRYPTED_VOLUMES,ROOT_ACCOUNT_MFA_ENABLED,CLOUD_TRAIL_ENABLED); custom rules are written with Lambda or CloudFormation Guard. Rules trigger on configuration changes or periodically. - Remediation
-
A rule’s non-compliant resources can be fixed by a Systems Manager Automation document, manually or automatically.
- Conformance packs
-
A YAML template bundling rules and remediation actions into one deployable unit, mapped to a framework or best-practice set; AWS publishes sample packs for frameworks such as PCI DSS, HIPAA and NIST. Can be deployed to every account in an organization.
- Aggregators
-
A central account and Region that collects configuration and compliance data from many accounts and Regions (organization-wide when linked to AWS Organizations).
- Advanced queries
-
SQL-like queries over current configuration, for inventory ("which volumes are unencrypted").
Config is also the engine under other services: Security Hub’s CSPM controls and AWS Control Tower’s detective controls are mostly implemented as Config rules, which is why enabling them without a recorder produces no findings. Control Tower sets up Config for every account in a landing zone (see Accounts and Organizations).
In the AWS Management Console
-
Open AWS Config in the Region you want to record (Config is Regional; use the Region selector).
-
Choose 1-click setup or Get started: select the resource types (all supported types is the usual choice), an S3 bucket for delivery, and an IAM role (let Config create the service-linked role).
-
Choose Rules → Add rule, pick AWS managed rule, and search for
s3-bucket-public-read-prohibited. -
Choose Conformance packs → Deploy conformance pack to start from a sample template.
-
Use Aggregators to add an organization-wide aggregator from the management or delegated administrator account.
With the AWS CLI
Create the recorder and delivery channel, then start recording. The delivery bucket must already exist and carry a
bucket policy that lets config.amazonaws.com write to it (see the Config user guide for the exact policy).
export AWS_REGION=us-east-1
ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
CONFIG_BUCKET="bookshelf-config-$ACCOUNT_ID"
aws iam create-service-linked-role --aws-service-name config.amazonaws.com
aws configservice put-configuration-recorder \
--configuration-recorder "name=default,roleARN=arn:aws:iam::$ACCOUNT_ID:role/aws-service-role/config.amazonaws.com/AWSServiceRoleForConfig" \
--recording-group "allSupported=true,includeGlobalResourceTypes=false"
aws configservice put-delivery-channel \
--delivery-channel "name=default,s3BucketName=$CONFIG_BUCKET"
aws configservice start-configuration-recorder --configuration-recorder-name default
Add a managed rule that flags public S3 buckets and read the result:
aws configservice put-config-rule --config-rule '{
"ConfigRuleName": "s3-bucket-public-read-prohibited",
"Source": {
"Owner": "AWS",
"SourceIdentifier": "S3_BUCKET_PUBLIC_READ_PROHIBITED"
},
"Scope": { "ComplianceResourceTypes": ["AWS::S3::Bucket"] }
}'
aws configservice describe-compliance-by-config-rule \
--config-rule-names s3-bucket-public-read-prohibited
aws configservice get-compliance-details-by-config-rule \
--config-rule-name s3-bucket-public-read-prohibited \
--compliance-types NON_COMPLIANT \
--query 'EvaluationResults[].EvaluationResultIdentifier.EvaluationResultQualifier.ResourceId'
Deploy a conformance pack from a local template (sample templates are listed in the Config user guide) and ask an organization-wide aggregator for non-compliant rules:
aws configservice put-conformance-pack \
--conformance-pack-name bookshelf-best-practices \
--template-body file://operational-best-practices.yaml
aws configservice describe-conformance-pack-compliance \
--conformance-pack-name bookshelf-best-practices
aws configservice select-resource-config \
--expression "SELECT resourceId, resourceType WHERE resourceType = 'AWS::EC2::Volume' AND configuration.encrypted = false"
AWS Security Hub
AWS Security Hub was relaunched in December 2025 as a unified cloud security service: it ingests findings from AWS
detection services (GuardDuty, Inspector, Macie and others), from Security Hub CSPM and from partner products,
normalizes them into the Open Cybersecurity Schema Framework (OCSF), correlates related signals into prioritized
exposure findings and shows potential attack paths, so a team triages a handful of correlated issues instead of
thousands of individual alerts. The earlier service is not gone: it continues as AWS Security Hub CSPM (Cloud
Security Posture Management), the part that runs continuous configuration checks against security standards and
emits findings in the older AWS Security Finding Format (ASFF). Older articles and tutorials that say "Security Hub"
almost always mean what is now called Security Hub CSPM; the CLI mirrors the split with the original
enable-security-hub, batch-enable-standards, get-findings family (CSPM) and the new enable-security-hub-v2,
get-findings-v2 family.
- Security Hub CSPM
-
Security standards (AWS Foundational Security Best Practices, CIS AWS Foundations Benchmark, PCI DSS, NIST SP 800-53) made of controls, most of them evaluated by service-linked AWS Config rules — so AWS Config must be recording in each Region and account. Produces a security score, supports cross-Region finding aggregation, central configuration across an organization, automation rules and EventBridge custom actions. A 30-day free trial starts when you first enable it in an account.
- Security Hub (unified)
-
Enabled per account and Region with one call; works with delegated administration through AWS Organizations; priced in plans (a baseline "Essentials" plan plus add-on capabilities) rather than per ingested finding — check the pricing page for the current plan structure.
In the AWS Management Console
-
Open AWS Security Hub, choose the Region, and choose Enable Security Hub (the unified service) or, for standards-based checks, Security Hub CSPM → Enable and pick the standards (start with AWS Foundational Security Best Practices).
-
Under Settings → Configuration (or Organizations for the unified service), designate a delegated administrator account in your security account and enable auto-enrollment of new member accounts.
-
In CSPM, use Settings → Regions to choose an aggregation Region so findings from all Regions appear in one place.
-
Open Findings or Exposures and filter by severity; route a finding to a ticket with an automation rule or a custom action.
With the AWS CLI
# Unified Security Hub (v2)
aws securityhub enable-security-hub-v2
# Security Hub CSPM: enable the service with the default standards, then add another
aws securityhub enable-security-hub --enable-default-standards
aws securityhub batch-enable-standards --standards-subscription-requests \
"StandardsArn=arn:aws:securityhub:$AWS_REGION::standards/cis-aws-foundations-benchmark/v/3.0.0"
# Aggregate findings from all Regions into the current one (CSPM)
aws securityhub create-finding-aggregator --region-linking-mode ALL_REGIONS
# Show critical, active CSPM findings
aws securityhub get-findings \
--filters '{"SeverityLabel":[{"Value":"CRITICAL","Comparison":"EQUALS"}],"RecordState":[{"Value":"ACTIVE","Comparison":"EQUALS"}]}' \
--query 'Findings[].[Title,Resources[0].Id]' --output text
Derived from
AWS CLI reference — enable-security-hub-v2,
enable-security-hub,
batch-enable-standards and
What is AWS Security Hub CSPM.
The standard version in the ARN changes over time; list the current ones with aws securityhub describe-standards.
Amazon GuardDuty
GuardDuty is a threat-detection service: it analyses CloudTrail management events, VPC flow logs and DNS query logs (the foundational data sources, which it reads itself with nothing to configure) with threat intelligence and machine learning, and produces findings such as credential exfiltration, cryptomining and communication with known malicious hosts. Extended Threat Detection correlates events over time into attack-sequence findings and is on by default at no extra cost. Optional protection plans widen what is watched:
| Protection plan | What it adds |
|---|---|
S3 Protection |
CloudTrail S3 data events: exfiltration and destruction attempts on buckets. |
EKS Protection and Runtime Monitoring |
Kubernetes audit logs, plus OS-level runtime events on EKS, ECS on Fargate and EC2. |
Malware Protection (EC2, S3, AWS Backup) |
Agentless scans of EBS volumes, newly uploaded S3 objects and backup resources. The S3 variant can be used without enabling the rest of GuardDuty. |
RDS Protection |
Anomalous login activity on supported Aurora and RDS engines. |
Lambda Protection |
Network activity of Lambda functions (for example cryptomining callbacks). |
AI Protection |
CloudTrail events for Amazon Bedrock, Bedrock AgentCore and SageMaker AI workloads (anomalous model invocation). |
GuardDuty never blocks anything; it detects. Pair findings with EventBridge to trigger a remediation Lambda or an SNS notification (see Messaging and Integration). It is Regional: enable it in every Region you use, and in unused Regions as well, because attackers like Regions nobody watches. A 30-day free trial applies to a first-time activation.
In the AWS Management Console
-
Open GuardDuty and choose Get started → Enable GuardDuty.
-
Under Protection plans, review what was enabled by default and turn on S3 Protection, EKS Protection or Runtime Monitoring as needed.
-
Under Settings, choose Generate sample findings to see what a finding looks like.
-
From the management account, open Accounts (or Organizations settings) to delegate an administrator and enable GuardDuty for all current and future members.
With the AWS CLI
DETECTOR_ID=$(aws guardduty create-detector --enable \
--finding-publishing-frequency FIFTEEN_MINUTES \
--query DetectorId --output text)
# Turn on S3 data-event protection
aws guardduty update-detector --detector-id "$DETECTOR_ID" \
--features '[{"Name":"S3_DATA_EVENTS","Status":"ENABLED"}]'
# Generate a harmless sample finding and list findings
aws guardduty create-sample-findings --detector-id "$DETECTOR_ID" \
--finding-types Recon:EC2/PortProbeUnprotectedPort
aws guardduty list-findings --detector-id "$DETECTOR_ID" \
--finding-criteria '{"Criterion":{"severity":{"Gte":7}}}'
# From the management account: delegate administration and auto-enable members
aws guardduty enable-organization-admin-account --admin-account-id 111122223333
aws guardduty update-organization-configuration --detector-id "$DETECTOR_ID" \
--auto-enable-organization-members ALL
Derived from
AWS CLI reference — create-detector,
update-detector and
What is Amazon GuardDuty?.
Run enable-organization-admin-account from the organization’s management account and the other commands from the
delegated administrator.
[[Amazon Inspector]] == Amazon Inspector
Amazon Inspector is a vulnerability-management service. Once activated it automatically discovers and continuously
scans Amazon EC2 instances (through the Systems Manager agent, or agentless), container images in Amazon ECR and AWS
Lambda functions (dependencies and, optionally, code) for software vulnerabilities (CVEs) and unintended network
exposure. It rescans when a package changes, a patch lands or a new CVE is published, adjusts the CVSS score to your
environment (the Inspector risk score), closes findings that are remediated and publishes findings to EventBridge
and Security Hub. Bookshelf’s bookshelf/ images in ECR (see Container Registry) are
scanned on push and continuously afterwards — this is the *enhanced scanning mode, which replaces the older
basic ECR scanning. Inspector Classic, the assessment-template-and-agent service older guides describe, has been shut
down; only the current service exists, in the aws inspector2 CLI namespace.
In the AWS Management Console
-
Open Amazon Inspector and choose Activate Inspector, selecting EC2, ECR, Lambda and Lambda code scanning.
-
Under General settings → Delegated administrator, set a security account for the organization.
-
Open Resource coverage to check each instance, repository and function is Scanning, and Findings to review results sorted by Inspector score.
With the AWS CLI
aws inspector2 enable --resource-types EC2 ECR LAMBDA LAMBDA_CODE
aws inspector2 batch-get-account-status
aws inspector2 list-coverage \
--query 'coveredResources[].[resourceType,resourceId,scanStatus.statusCode]' --output text
aws inspector2 list-findings \
--filter-criteria '{"severity":[{"comparison":"EQUALS","value":"CRITICAL"}],"findingStatus":[{"comparison":"EQUALS","value":"ACTIVE"}]}' \
--query 'findings[].[title,severity,resources[0].id]' --output text
Derived from AWS CLI reference — inspector2 enable and What is Amazon Inspector?.
[[Amazon Macie]] == Amazon Macie
Amazon Macie discovers sensitive data in Amazon S3 with machine learning and pattern matching (managed data
identifiers for personal, financial and credential data, plus your own custom data identifiers as regular
expressions) and evaluates S3 general purpose buckets for security posture — public access, sharing and encryption
settings. Two findings families result: policy findings (a bucket became public, encryption was disabled) and
sensitive data findings (an object contains a card number or a key). Discovery runs two ways: automated sensitive
data discovery continually samples objects across the whole estate, and sensitive data discovery jobs analyse
chosen buckets once or on a schedule. For Bookshelf, the bookshelf-uploads-<account-id> bucket (user-uploaded
covers and documents) is the candidate; the private static site bucket holds no user data. Macie reads objects, so
customer managed KMS keys need a key policy that allows Macie’s service-linked role to decrypt, and the cost scales
with the volume of data inspected rather than the number of findings.
In the AWS Management Console
-
Open Amazon Macie and choose Get started → Enable Macie.
-
Open S3 buckets to see the inventory and each bucket’s public-access and encryption evaluation.
-
Open Jobs → Create job, select
bookshelf-uploads-<account-id>, choose One-time job and the managed data identifiers, and review the estimated cost before submitting. -
Open Findings to review results; findings go to EventBridge and, when enabled, to Security Hub.
With the AWS CLI
aws macie2 enable-macie --status ENABLED --finding-publishing-frequency FIFTEEN_MINUTES
aws macie2 update-automated-discovery-configuration --status ENABLED
aws macie2 create-classification-job \
--job-type ONE_TIME \
--name bookshelf-uploads-scan \
--s3-job-definition "{\"bucketDefinitions\":[{\"accountId\":\"$ACCOUNT_ID\",\"buckets\":[\"bookshelf-uploads-$ACCOUNT_ID\"]}]}"
aws macie2 list-findings --finding-criteria '{"criterion":{"severity.description":{"eq":["High"]}}}'
Derived from AWS CLI reference — enable-macie, create-classification-job and What is Amazon Macie?.
Amazon Detective and other investigation aids
Amazon Detective is the investigation companion: it automatically collects CloudTrail, VPC flow and GuardDuty data into a behaviour graph so that, starting from a GuardDuty or Security Hub finding, you can see which role made which calls from which address over time, instead of querying logs by hand. It does not detect anything by itself, so it is usually enabled after GuardDuty. AWS Trusted Advisor runs checks in cost optimization, performance, resilience, security and service limits; the security checks that matter most (for example an open security group or a publicly accessible snapshot) are available on every support plan, the full set requires a paid one (see Cost Management and Support). AWS Health shows events affecting your resources and is covered with CloudWatch and CloudTrail on Monitoring and Observability.
[[Edge protection]] == Edge protection
AWS WAF is a web application firewall attached to a protected resource: CloudFront, an Application Load Balancer,
an API Gateway REST API, AppSync, Cognito user pools, Verified Access and a few others. A web ACL holds ordered
rules — AWS managed rule groups (OWASP-style protections, known bad inputs, IP reputation, bot control), your own
rate-based rules, geo and IP-set matches — each with an action (allow, block, count, CAPTCHA). Always start new
rules in count mode and promote to block after reviewing sampled requests. AWS WAF Classic is the pre-2019
generation; it has been retired and its resources must be migrated to the current AWS WAF (see the migration page in
the WAF guide), so ignore any tutorial using aws waf rather than aws wafv2. The WAF web ACL for CloudFront must
be created in us-east-1 with scope CLOUDFRONT; Regional resources use scope REGIONAL in the Region of the
resource. WAF wiring for each front end is on CloudFront and CDN Delivery,
Load Balancers and Gateways and API Gateway.
AWS Shield defends against DDoS. Shield Standard is automatic and free on every account for network and transport layer attacks against CloudFront and Route 53 and, to a degree, other public endpoints; Shield Advanced is a paid subscription adding larger-event detection and mitigation, the AWS Shield Response Team, cost protection for scaling caused by attacks, and application-layer protection with WAF. AWS Firewall Manager applies WAF web ACLs, Shield Advanced, security-group policies, Network Firewall and Route 53 Resolver DNS Firewall rules across every account of an organization from a delegated administrator, automatically covering new resources and accounts; it depends on AWS Config. AWS Network Firewall is a managed stateful network firewall for VPC traffic, deployed in dedicated firewall subnets (network-layer detail on VPC Networking).
# Regional web ACL with an AWS managed rule group, starting in count mode
aws wafv2 create-web-acl \
--name bookshelf-alb-acl --scope REGIONAL --region "$AWS_REGION" \
--default-action Allow={} \
--visibility-config SampledRequestsEnabled=true,CloudWatchMetricsEnabled=true,MetricName=bookshelf-alb-acl \
--rules '[{
"Name": "common",
"Priority": 0,
"Statement": { "ManagedRuleGroupStatement": { "VendorName": "AWS", "Name": "AWSManagedRulesCommonRuleSet" } },
"OverrideAction": { "Count": {} },
"VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "common" }
}]'
Derived from AWS CLI reference — wafv2 create-web-acl and AWS WAF.
Governance tools in brief
AWS Organizations, service control policies, resource control policies, Control Tower and tag policies are the account-level governance tools and are covered on Accounts and Organizations. Two further services complete the picture and are mentioned only briefly:
- AWS Service Catalog
-
Lets a central team publish approved, parameterized CloudFormation (or Terraform) products in portfolios that other accounts and teams can launch without needing broad IAM permissions — a self-service guardrail alternative to giving every developer the right to create arbitrary stacks (see Infrastructure as Code).
- AWS License Manager
-
Tracks and enforces software license usage (for example bring-your-own-license rules for EC2 and Dedicated Hosts) across accounts, with alerts before a limit is breached.
A preventive guardrail is the strongest governance control because it applies even to administrators of a member account. The following service control policy, attached to the Bookshelf workload OU, stops anyone in the member accounts from switching off the detective services above or leaving the organization (the example is a starting point; test it in a sandbox OU first, as an SCP mistake can lock out your own pipelines):
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ProtectSecurityServices",
"Effect": "Deny",
"Action": [
"guardduty:DeleteDetector",
"guardduty:DisassociateFromMasterAccount",
"guardduty:UpdateDetector",
"config:StopConfigurationRecorder",
"config:DeleteConfigurationRecorder",
"config:DeleteDeliveryChannel",
"cloudtrail:StopLogging",
"cloudtrail:DeleteTrail",
"organizations:LeaveOrganization"
],
"Resource": "*",
"Condition": {
"ArnNotLike": { "aws:PrincipalArn": "arn:aws:iam::*:role/SecurityAdmin" }
}
}
]
}
Derived from the SCP examples in the AWS Organizations user guide.
AWS Artifact and the compliance programs
AWS Artifact is the self-service portal for AWS’s own audit evidence: on-demand downloads of third-party audit reports and certifications (SOC 1, 2 and 3, ISO/IEC 27001 and related standards, PCI DSS attestation of compliance, C5, HIPAA-related documents and many more), and a place to review, accept and track agreements with AWS, such as a Business Associate Addendum for HIPAA workloads or a non-disclosure agreement that unlocks restricted reports. Agreements can be accepted for a single account or for all accounts of an organization. Some reports require accepting a confidentiality term before download. Documents and agreements are free of charge; access is controlled with IAM, so give auditors a read-only role. Artifact also offers an Assurance Assistant that drafts answers to compliance and due-diligence questionnaires from the available evidence. Reports say what AWS secured; they do not prove anything about your own workloads, which is where the remaining services come in.
AWS maintains a long list of compliance programs — certifications and attestations such as ISO/IEC 27001, 27017 and 27018, SOC 1/2/3, PCI DSS, HIPAA eligibility, FedRAMP, C5 in Germany, and regional or sector programs — and a published services in scope list per program. A service not in scope of a program must not process regulated data for that program, so check the list before choosing a service for regulated data. The Customer Compliance Center collects whitepapers, auditor-learning paths and per-industry and per-country guidance. AWS Regions also differ in which programs they hold: GovCloud and China are separate partitions (see AWS Global Infrastructure), and the AWS European Sovereign Cloud, generally available since January 2026, is an independently operated infrastructure in the European Union for workloads with strict sovereignty requirements.
In the AWS Management Console
-
Open AWS Artifact (search for it in the console search bar) and choose Reports.
-
Search for a report such as SOC 2 or ISO 27001, select it, accept the terms if prompted, and choose Download report.
-
Choose Agreements to review, accept or manage an agreement for the account or, from the management account, the organization.
With the AWS CLI
The artifact service has its own CLI namespace, which is useful for pulling the latest reports into an audit
evidence bucket from a pipeline:
aws artifact list-reports --query 'reports[].[id,name,category]' --output text
REPORT_ID=<report-id-from-list-reports>
aws artifact get-report-metadata --report-id "$REPORT_ID"
TERM_TOKEN=$(aws artifact get-term-for-report --report-id "$REPORT_ID" --query termToken --output text)
aws artifact get-report --report-id "$REPORT_ID" --term-token "$TERM_TOKEN" \
--query documentPresignedUrl --output text
The last command returns a time-limited presigned URL; fetch it with curl or a browser immediately.
A least-privilege read-only policy for an auditor role:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"artifact:ListReports",
"artifact:GetReportMetadata",
"artifact:GetTermForReport",
"artifact:GetReport"
],
"Resource": "*"
}
]
}
Derived from AWS CLI reference — artifact and What is AWS Artifact?. Verify the exact action names against the Artifact IAM documentation, because the console’s older permission names differ.
Audit Manager and conformance packs
AWS Audit Manager automates evidence collection for audits: you create an assessment from a prebuilt framework (PCI DSS, HIPAA, SOC 2, GDPR, CIS and others), it gathers evidence from API calls, CloudTrail, Config rules and Security Hub checks, and produces an assessment report for the auditor. Its status has changed. AWS is moving Audit Manager to maintenance mode: from 2026-04-30 it can no longer be set up in new accounts, and an account that already uses it can keep creating assessments but cannot extend it to new Regions (organization deployments can still add member accounts). AWS continues to maintain it and does not remove it, and recommends AWS Config conformance packs for new compliance work. The two are not equivalent: a conformance pack evaluates only the technical controls expressible as Config rules and has no audit report, no SOC 2 or GDPR packs and no evidence for procedural controls, so it does not replace the whole audit workflow. For the policies, procedures and documentation an auditor also expects, the availability notice points to partner compliance-automation tools used with Config. Treat the two options as follows: for a new account, deploy conformance packs (and the Security Hub CSPM standards) and keep evidence in an S3 bucket; for an account already using Audit Manager, keep using it, and plan the move.
# Existing Audit Manager customers only: list assessments
aws auditmanager list-assessments --query 'assessmentMetadata[].[name,status]' --output text
Derived from AWS Audit Manager availability change.
A security baseline for a new account
A practical order of work for a fresh account (or a new account in the organization), each item linking to where it is covered. Many are automated by Control Tower for accounts created through Account Factory.
-
Secure the root user: strong password, MFA, no access keys, or use centralized root access (Accounts and Organizations).
-
Use IAM Identity Center for people and roles for workloads; no long-lived access keys (Identity and Access).
-
Create an organization trail in CloudTrail delivered to a protected bucket in a log-archive account (Monitoring and Observability).
-
Turn on AWS Config recording and deploy a conformance pack or Security Hub CSPM standard.
-
Enable GuardDuty, Inspector and, where S3 holds personal data, Macie; delegate all three to a security account.
-
Enable Security Hub (and CSPM if you need standards) with aggregation to one Region.
-
Keep S3 Block Public Access on at account level, require IMDSv2, enable default EBS encryption (S3 Security and Static Hosting, Block and File Storage on AWS).
-
Create customer managed KMS keys with explicit key policies for sensitive data (Secrets Manager, Parameter Store and KMS).
-
Attach preventive SCPs such as the one above and restrict unused Regions.
-
Put WAF in front of public web endpoints and keep workloads in private subnets ([Edge protection], VPC Networking).
-
Set a budget and cost-anomaly alert so abuse of the account shows up quickly (Cost Management and Support).
-
Route findings to a human: EventBridge rules to SNS, a chat tool or a ticketing system.
Pricing, limits and recent changes
Pricing model (no prices here; follow the dated links in the references):
-
Config charges per configuration item recorded (continuous recording costs more than daily, so record only the resource types you need in non-production) and per rule evaluation; conformance pack rules are billed as rule evaluations. Recording every resource in every Region is the usual surprise.
-
Security Hub CSPM charges per security check and per ingested finding after a 30-day trial; the unified Security Hub is priced in plans plus add-on capabilities.
-
GuardDuty charges by volume analysed per data source (events, flow-log and DNS volume, S3 data events, scanned GB, monitored vCPUs and so on), with a 30-day trial.
-
Inspector charges per scanned instance, per image scan and per Lambda function, per month.
-
Macie charges per bucket monitored, per object monitored for automated discovery and per GB inspected by jobs.
-
WAF charges per web ACL, rule and million requests inspected; Shield Standard is free, Shield Advanced is a monthly subscription with a one-year commitment plus data-transfer fees.
-
Artifact is free. Audit Manager charges per evidence item collected (existing customers only).
Limits and quotas: each service has Regional quotas (for example Config rules per Region, conformance packs per Region, GuardDuty member accounts per administrator, WAF web ACL capacity units) listed on its endpoints-and-quotas page; request increases through Service Quotas. GuardDuty, Inspector, Macie, Security Hub and Config are all Regional — coverage in one Region says nothing about another.
Recent changes (verified 2026-10-01, re-check the lifecycle page):
-
AWS Security Hub relaunched as a unified service in December 2025; the previous service continues as Security Hub CSPM.
-
AWS Audit Manager entered maintenance mode and closed to new accounts on 2026-04-30.
-
AWS European Sovereign Cloud generally available in January 2026.
-
Inspector Classic and AWS WAF Classic are retired; guides using
aws inspectororaws wafare outdated. -
GuardDuty gained AI Protection, Malware Protection for S3 and AWS Backup, and Extended Threat Detection.
-
AWS Artifact gained an Assurance Assistant and a dedicated CLI service.
Older guides are also outdated in showing only the original Security Hub (now CSPM), treating shared responsibility as a single fixed diagram, and presenting Audit Manager as the default compliance tool.
Clean up
Security services bill while enabled; disable what you enabled for a throwaway account. Do this only in a test account — turning off detection in a real one is itself a security finding.
aws securityhub disable-security-hub-v2
aws securityhub disable-security-hub
aws guardduty delete-detector --detector-id "$DETECTOR_ID"
aws inspector2 disable --resource-types EC2 ECR LAMBDA LAMBDA_CODE
aws macie2 disable-macie
aws configservice delete-conformance-pack --conformance-pack-name bookshelf-best-practices
aws configservice delete-config-rule --config-rule-name s3-bucket-public-read-prohibited
aws configservice stop-configuration-recorder --configuration-recorder-name default
aws configservice delete-delivery-channel --delivery-channel-name default
aws configservice delete-configuration-recorder --configuration-recorder-name default
aws wafv2 list-web-acls --scope REGIONAL
# then: aws wafv2 delete-web-acl --name bookshelf-alb-acl --scope REGIONAL --id <id> --lock-token <token>
Empty and delete the Config delivery bucket last (versioned buckets need all versions removed; see S3 Object Storage). Evidence retained by Config and Macie in S3 is not deleted automatically.
Related pages
-
Accounts and Organizations covers Organizations, SCPs and Control Tower, which preventively enforce what this page detects.
-
Identity and Access covers IAM, Identity Center and Access Analyzer.
-
Monitoring and Observability covers CloudTrail, CloudWatch and EventBridge-based alerting.
-
Secrets Manager, Parameter Store and KMS and S3 Security and Static Hosting cover the data-protection layer.
-
Cost Management and Support covers budgets, support plans and Trusted Advisor tiers.
-
Governance and Compliance is the Azure counterpart (Azure Policy and Defender for Cloud).