AWS Security Checks
cloud-audit runs 94 security checks across 23 AWS services. Each check includes copy-paste remediation in AWS CLI and Terraform. Browse by service below.
IAM (16 checks)
Root account MFA
Checks if the AWS root account has MFA enabled.
IAM users MFA
Checks if all IAM users with console access have MFA enabled..
Access key rotation
Checks if active access keys are older than 90 days..
Unused access keys
Checks for active access keys that haven't been used in 30+ days or have never been used..
Overly permissive IAM policies
Checks for customer-managed IAM policies with Action: * and Resource: *, granting full admin access to all AWS services..
Password policy strength
Checks if the account password policy meets CIS requirements (min 14 chars, uppercase, lowercase, numbers, symbols)..
OIDC trust policy without sub condition
Checks IAM roles with OIDC federation (GitHub Actions, GitLab CI, etc.) for missing 'sub' condition.
Root account access keys
Checks if the root account has active access keys.
Multiple active access keys
Checks if any IAM user has more than one active access key.
Direct user policies
Checks if IAM users have policies attached directly instead of through groups.
Support role exists
Checks if an IAM role, user, or group has the AWSSupportAccess managed policy attached.
IAM Access Analyzer enabled
Checks if IAM Access Analyzer is enabled in all active regions.
Expired SSL/TLS certificates
Checks for expired SSL/TLS certificates stored in IAM.
CloudShell full access restricted
Checks if AWSCloudShellFullAccess managed policy is attached to any IAM entity.
Root hardware MFA
Checks if the root account uses a hardware MFA device instead of virtual MFA.
EC2 instance IAM roles
Checks if running EC2 instances have IAM instance profiles attached.
S3 (7 checks)
Public S3 buckets
Checks for S3 buckets that do not have all four public access block settings enabled..
S3 bucket encryption
Checks if S3 buckets use SSE-KMS encryption instead of default SSE-S3.
S3 bucket versioning
Checks if S3 buckets have versioning enabled to protect against accidental deletion or overwrites..
S3 bucket lifecycle policy
Checks if S3 buckets have lifecycle rules configured to automatically transition or expire objects..
S3 access logging
Checks if S3 buckets have server access logging enabled to track requests..
S3 bucket denies HTTP
Checks if S3 buckets have a bucket policy that denies non-HTTPS (HTTP) requests using the aws:SecureTransport condition..
S3 MFA Delete
Checks if S3 buckets have MFA Delete enabled to prevent accidental or malicious deletion of versioned objects..
EC2 (6 checks)
Public AMIs
Checks for AMIs owned by your account that are publicly shared to all AWS accounts..
Unencrypted EBS volumes
Checks for EBS volumes that are not encrypted at rest..
Stopped EC2 instances (cost)
Checks for EC2 instances in stopped state.
EC2 IMDSv1 enabled
Checks for running EC2 instances that allow IMDSv1 (HttpTokens not set to 'required').
EC2 termination protection
Checks for running EC2 instances without API termination protection enabled..
EBS default encryption
Checks if EBS default encryption is enabled in each scanned region.
VPC (5 checks)
Default VPC usage
Checks if the default VPC has active resources (network interfaces).
Open security groups
Checks for security groups with unrestricted inbound access (0.0.0.0/0 or ::/0) on sensitive ports like SSH, RDP, databases, or all traffic..
VPC flow logs
Checks if non-default VPCs have flow logs enabled.
Unrestricted NACL
Checks for non-default Network ACLs that allow all inbound traffic from 0.0.0.0/0 or ::/0..
Default security group restricts all traffic
Checks if the default security group of every VPC restricts all inbound and outbound traffic.
RDS (4 checks)
Public RDS instances
Checks for RDS instances with PubliclyAccessible set to true..
RDS encryption at rest
Checks for RDS instances without storage encryption enabled..
RDS Multi-AZ
Checks for non-micro/small RDS instances (likely production) without Multi-AZ failover enabled..
RDS auto minor upgrade
Checks for RDS instances with automatic minor version upgrade disabled..
CloudTrail (7 checks)
CloudTrail enabled
Checks if CloudTrail is enabled with multi-region logging.
CloudTrail log validation
Checks if CloudTrail trails have log file integrity validation enabled..
CloudTrail S3 bucket public access
Checks if S3 buckets used by CloudTrail have all public access block settings enabled..
CloudTrail S3 bucket access logging
Checks if the S3 bucket used by CloudTrail has server access logging enabled.
CloudTrail KMS encryption
Checks if CloudTrail logs are encrypted with a KMS Customer Managed Key (CMK).
S3 object-level write logging
Checks if CloudTrail is configured to log S3 object-level write events (PutObject, DeleteObject, etc.).
S3 object-level read logging
Checks if CloudTrail is configured to log S3 object-level read events (GetObject).
CloudWatch (15 checks)
Root account usage alarm
Checks if a CloudWatch metric filter and alarm exist to detect root account usage..
Unauthorized API calls alarm
Checks if a CloudWatch metric filter and alarm exist to detect unauthorized API calls (AccessDenied, UnauthorizedAccess).
Console sign-in without MFA alarm
Checks if a CloudWatch metric filter and alarm exist to detect console sign-ins without MFA.
IAM policy changes alarm
Checks if a CloudWatch metric filter and alarm exist to detect IAM policy changes (CreatePolicy, DeletePolicy, AttachRolePolicy, etc.).
CloudTrail config changes alarm
Checks if a CloudWatch metric filter and alarm exist to detect CloudTrail configuration changes (CreateTrail, DeleteTrail, UpdateTrail, StopLogging).
Console auth failures alarm
Checks if a CloudWatch metric filter and alarm exist to detect console authentication failures.
CMK disable/deletion alarm
Checks if a CloudWatch metric filter and alarm exist to detect KMS Customer Master Key disabling or scheduled deletion.
S3 bucket policy changes alarm
Checks if a CloudWatch metric filter and alarm exist to detect S3 bucket policy changes (PutBucketPolicy, PutBucketAcl, DeleteBucketPolicy).
Config changes alarm
Checks if a CloudWatch metric filter and alarm exist to detect AWS Config configuration changes (StopConfigurationRecorder, DeleteDeliveryChannel).
Security group changes alarm
Checks if a CloudWatch metric filter and alarm exist to detect security group changes (AuthorizeSecurityGroupIngress, CreateSecurityGroup, etc.).
NACL changes alarm
Checks if a CloudWatch metric filter and alarm exist to detect Network ACL changes (CreateNetworkAcl, DeleteNetworkAcl, ReplaceNetworkAclEntry).
Network gateway changes alarm
Checks if a CloudWatch metric filter and alarm exist to detect network gateway changes (CreateCustomerGateway, AttachInternetGateway, DeleteInternetGateway).
Route table changes alarm
Checks if a CloudWatch metric filter and alarm exist to detect route table changes (CreateRoute, DeleteRoute, ReplaceRoute, CreateRouteTable).
VPC changes alarm
Checks if a CloudWatch metric filter and alarm exist to detect VPC changes (CreateVpc, DeleteVpc, ModifyVpcAttribute, AcceptVpcPeeringConnection).
Organizations changes alarm
Checks if a CloudWatch metric filter and alarm exist to detect AWS Organizations changes (InviteAccountToOrganization, CreateOrganization, etc.).
Config (2 checks)
ECS (3 checks)
ECS privileged containers
Checks for ECS task definitions with containers running in privileged mode, which gives root-level access to the host..
ECS task logging
Checks for ECS task definitions with containers that have no log configuration.
ECS Exec enabled
Checks for ECS services with executeCommand enabled, which allows interactive shell access to running containers..
EFS (1 check)
EIP (1 check)
GuardDuty (2 checks)
KMS (2 checks)
Lambda (3 checks)
Lambda public function URL
Checks for Lambda functions with public function URLs (AuthType=NONE), allowing anyone on the internet to invoke them..
Lambda deprecated runtime
Checks for Lambda functions using deprecated/end-of-life runtimes that no longer receive security patches..
Lambda env var secrets
Checks for Lambda functions with environment variable names matching secret patterns (SECRET, PASSWORD, API_KEY, TOKEN, etc.)..
Secrets Manager (2 checks)
Security Hub (1 check)
SSM (2 checks)
EC2 not managed by SSM
Checks for running EC2 instances that are not registered with AWS Systems Manager for patching and remote management..
SSM insecure parameters
Checks for SSM parameters with secret-like names (password, api_key, token, etc.) that are stored as plain String instead of SecureString..
Account (1 check)
Bedrock (2 checks)
Bedrock model invocation logging
Checks if Amazon Bedrock model invocation logging is enabled.
Bedrock guardrails
Checks if Amazon Bedrock guardrails are configured to filter harmful content, enforce topic restrictions, and prevent sensitive information disclosure..
SageMaker (3 checks)
SageMaker notebook root access
Checks if SageMaker notebook instances have root access disabled.
SageMaker notebook direct internet access
Checks if SageMaker notebook instances have direct internet access disabled.
SageMaker endpoint encryption
Checks if SageMaker endpoints use KMS encryption for data at rest.
These checks are part of cloud-audit - install with pip install cloud-audit