Automate cloud compliance. Covers continuous compliance monitoring, compliance-as-code, audit preparation, SOC 2, HIPAA, PCI-DSS, FedRAMP, and building compliance into CI/CD pipelines.
This page covers automation patterns for maintaining regulatory compliance in cloud infrastructure and applications. It applies when systems must meet specific legal, industry, or organizational standards that require automated auditing, enforcement, or reporting of configuration and operational state.
Use a configuration management system to detect changes that violate established compliance rules:
# Example: Check for public S3 bucket access
aws s3api get-bucket-acl --bucket example-bucket | \
jq '.Grants[] | select(.Grantee.URI == "http://acs.amazonaws.com/groups/global/AllUsers")'
When a bucket has public read access, the command returns grant information that must be flagged. The compliance check fails silently if the bucket's ACL is missing or malformed.
Implement automated checks for data placement and replication:
# Example: Verify zone assignment in Kubernetes
kubectl get pods -o jsonpath='{.items[*].spec.nodeSelector}' | \
jq '.["topology.kubernetes.io/zone"]'
If the zone selector is missing, pods may be scheduled in unauthorized regions. The check fails silently if the nodeSelector field doesn't exist.
Configure automated log collection with retention policies:
# Example: Set up CloudWatch log group retention
aws logs put-retention-policy --log-group-name /aws/lambda/my-function \
--retention-in-days 90
The system silently fails if the log group doesn't exist or the IAM role lacks logs:PutRetentionPolicy permissions.
Enforce policy compliance for user and service account permissions:
# Example: Check for overly permissive IAM policies
aws iam get-policy-version --policy-arn arn:aws:iam::123456789012:policy/MyPolicy \
--version-id v1 | jq '.PolicyVersion.Document.Statement[] | select(.Effect == "Allow" and .Action == "*")'
If the policy document structure is invalid, the command returns an error that must be handled by the automation script.
Automate regular reporting on system state:
# Example: Create compliance status report
curl -H "Authorization: Bearer $TOKEN" \
https://api.example.com/compliance/status \
| jq '.[] | select(.status != "compliant")'
The API endpoint returns a JSON array where each item has id, resource, and status fields. Reports fail silently if the token expires or the endpoint is unavailable.
Automate tagging of resources with required metadata:
# Example: Check for required tags on EC2 instances
aws ec2 describe-instances --filters Name=tag:Environment,Values=Production \
| jq '.Reservations[].Instances[] | select(.Tags == null or (.Tags | map(select(.Key == "Owner")) | length) == 0)'
The check fails silently if tags are missing or incorrectly formatted.
Enforce network access controls and monitoring:
# Example: Check for public subnets without NAT gateways
aws ec2 describe-subnets --filters Name=vpc-id,Values=vpc-12345678 \
| jq '.Subnets[] | select(.MapPublicIpOnLaunch == true and .AvailabilityZone != "us-west-2a")'
If a subnet is missing the required availability zone designation, it may be misconfigured for compliance.
Use infrastructure-as-code to automatically correct non-compliant configurations:
# Example: Terraform module for compliance enforcement
resource "aws_s3_bucket" "secure_bucket" {
bucket = "example-bucket"
acl = "private"
server_side_encryption_configuration {
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
}
The module silently fails if the bucket already exists with public ACL, requiring manual cleanup before applying changes.
Automate detection of unauthorized configuration changes:
# Example: Check for new IAM users without MFA
aws iam list-users --query 'Users[?MfaDevices[0] == null]' \
| jq '.Users[] | {UserName,CreateDate}'
The check fails silently if the IAM service is temporarily unavailable or the API key lacks required permissions.
Ensure backup configurations meet regulatory requirements:
# Example: Verify RDS backup retention
aws rds describe-db-instances --db-instance-identifier my-db \
| jq '.DBInstances[].BackupRetentionPeriod'
If backup retention is set to zero, the system silently fails to meet compliance requirements.
Automate classification and handling of sensitive data:
# Example: Verify encryption at rest for databases
aws rds describe-db-instances --db-instance-identifier my-db \
| jq '.DBInstances[].StorageEncrypted'
The check returns a boolean value that must be validated by the compliance automation.
Automate verification of incident response readiness:
# Example: Check for required CloudWatch alarms
aws cloudwatch describe-alarms --alarm-names "HighCPUUsage" \
| jq '.MetricAlarms[] | select(.AlarmActions | length == 0)'
If no actions are configured, the alarm silently fails to trigger incident response procedures.
Automate detection of compliance violations in real time:
# Example: Check for public S3 buckets using CloudTrail events
aws cloudtrail lookup-events \
--lookup-attributes AttributeKey=EventName,AttributeValue=PutObject \
--start-time 2023-01-01T00:00:00Z \
| jq '.Events[] | select(.Resources[].ResourceName | contains("public"))'
The system silently fails if the CloudTrail trail is not configured for the target region.
Automate retention and archival policies:
# Example: Configure S3 lifecycle rules
aws s3api put-bucket-lifecycle-configuration \
--bucket example-bucket \
--lifecycle-configuration '{
"Rules": [
{
"ID": "ArchiveOldObjects",
"Status": "Enabled",
"Filter": {"Prefix": "old/"},
"Transitions": [
{
"Days": 30,
"StorageClass": "STANDARD_IA"
}
]
}
]
}'
The configuration silently fails if the bucket name is incorrect or permissions are missing.
Ensure all configuration changes are tracked:
# Example: Check CloudTrail logging status
aws cloudtrail describe-trails \
| jq '.trailList[] | select(.IsLogging == false)'
If logging is disabled, the system silently fails to maintain required audit trails.
Automate checks for external service integrations:
# Example: Verify VPC endpoint configuration
aws ec2 describe-vpc-endpoints --filters Name=vpc-id,Values=vpc-12345678 \
| jq '.VpcEndpoints[] | select(.ServiceName != "com.amazonaws.us-west-2.s3")'
The check fails silently if the VPC endpoint configuration is missing or incorrect.
Automate verification of configuration integrity:
# Example: Check for required security groups
aws ec2 describe-security-groups \
| jq '.SecurityGroups[] | select(.GroupName == "default" and .IpPermissions | length == 0)'
If no ingress rules are defined, the security group silently fails to meet compliance requirements.
Implement robust error handling for compliance checks:
# Example: Validate multiple S3 buckets for compliance
for bucket in $(aws s3api list-buckets --query 'Buckets[].Name' --output text); do
aws s3api get-bucket-acl --bucket "$bucket" > /dev/null 2>&1 || \
echo "Bucket $bucket failed ACL check"
done
The script fails silently if the bucket name is invalid or the IAM permissions are insufficient.
This page was rewritten on 16 October 2026. It replaced a templated version that was not specific to its own title. How these pages are written and checked. If anything here is wrong, tell us at [email protected] and we will correct it.
We use cookies for analytics (Google Analytics) and advertising (Google AdSense) to improve your experience and support free content. Privacy Policy