| name | aws-preflight-checks |
| description | Preflight validation for AWS CLI operations. Use before executing any AWS action to verify resource existence, permissions, quotas, and readiness. Covers Amazon S3, Amazon EC2, Amazon RDS, AWS Lambda, AWS IAM, Amazon ECS, Amazon DynamoDB, and other services. |
AWS Preflight Checks Skill
Overview
Validate before executing. This skill provides checks to confirm targets exist, permissions are sufficient, quotas allow the action, and dependencies are met.
Security: Always verify that target resources meet or exceed the security configuration of the source resources. Refer to SECURITY.md for security requirements.
S3 Checks
Customer responsibility — security baseline: Customers must configure all Amazon Simple Storage Service (Amazon S3) buckets used for AWS operations with Block Public Access enabled (all four settings true), default encryption configured, and a bucket policy enforcing TLS-only access.
aws s3api head-bucket --bucket <bucket> --region <region> 2>&1
aws s3api head-object --bucket <bucket> --key <key> --region <region> 2>&1
aws s3api get-bucket-policy --bucket <bucket> --region <region> 2>&1
aws s3api get-bucket-acl --bucket <bucket> --region <region>
aws s3api get-bucket-versioning --bucket <bucket> --region <region>
aws s3api get-bucket-encryption --bucket <bucket> --region <region> 2>&1
aws s3 ls s3://<bucket>/<prefix> --recursive --summarize --region <region>
aws s3api get-public-access-block --bucket <bucket> --region <region>
aws s3api get-bucket-policy --bucket <bucket> --region <region> --query Policy --output text 2>&1
aws s3api get-bucket-logging --bucket <bucket> --region <region>
EC2 Checks
aws ec2 describe-instances --instance-ids <id> --region <region> --query 'Reservations[0].Instances[0].{State:State.Name,Type:InstanceType,AZ:Placement.AvailabilityZone}'
aws ec2 describe-security-groups --group-ids <sg-id> --region <region> 2>&1
aws ec2 describe-subnets --subnet-ids <subnet-id> --region <region> --query 'Subnets[0].{CIDR:CidrBlock,AvailableIPs:AvailableIpAddressCount,AZ:AvailabilityZone}'
aws ec2 describe-key-pairs --key-names <key-name> --region <region> 2>&1
aws ec2 describe-images --image-ids <ami-id> --region <region> --query 'Images[0].{State:State,Name:Name}'
aws ec2 describe-instance-type-offerings --location-type availability-zone --filters "Name=instance-type,Values=<type>" --region <region> --query 'InstanceTypeOfferings[*].Location'
aws ec2 describe-volumes --volume-ids <vol-id> --region <region> --query 'Volumes[0].{State:State,Size:Size,AZ:AvailabilityZone}'
aws ec2 describe-addresses --allocation-ids <alloc-id> --region <region> 2>&1
RDS Checks
aws rds describe-db-instances --db-instance-identifier <id> --region <region> --query 'DBInstances[0].{Status:DBInstanceStatus,Engine:Engine,Class:DBInstanceClass,AZ:AvailabilityZone}'
aws rds describe-db-clusters --db-cluster-identifier <id> --region <region> --query 'DBClusters[0].{Status:Status,Engine:Engine,Members:DBClusterMembers[*].DBInstanceIdentifier}'
aws rds describe-db-snapshots --db-snapshot-identifier <snap-id> --region <region> --query 'DBSnapshots[0].{Status:Status,Engine:Engine,Size:AllocatedStorage}'
aws rds describe-db-subnet-groups --db-subnet-group-name <name> --region <region> 2>&1
aws rds describe-db-parameter-groups --db-parameter-group-name <name> --region <region> 2>&1
Lambda Checks
aws lambda get-function --function-name <name> --region <region> --query '{State:Configuration.State,Runtime:Configuration.Runtime,Memory:Configuration.MemorySize}'
aws lambda get-layer-version --layer-name <name> --version-number <ver> --region <region> 2>&1
aws lambda get-account-settings --region <region> --query 'AccountLimit.{ConcurrentExecutions:ConcurrentExecutions,UnreservedConcurrent:UnreservedConcurrentExecutions}'
IAM Checks
Customer responsibility: Configure IAM roles, policies, and permissions for AWS operations. Implement role trust policies that restrict AssumeRole to specific principals, attached policies that follow least-privilege principles, and MFA requirements for sensitive operations.
Verification: Use these checks to verify your IAM configuration before executing AWS operations.
Security controls to verify: Role trust policy restricts AssumeRole to specific principals. Attached policies follow least-privilege (no overly permissive wildcards). MFA is required for sensitive operations.
aws iam get-role --role-name <role> 2>&1
aws iam get-policy --policy-arn <arn> 2>&1
aws sts get-caller-identity
aws iam simulate-principal-policy --policy-source-arn <caller-arn> --action-names <action> --resource-arns <resource-arn>
aws iam list-mfa-devices --user-name <user> 2>&1
ECS Checks
aws ecs describe-clusters --clusters <cluster> --region <region> --query 'clusters[0].{Status:status,Running:runningTasksCount,Pending:pendingTasksCount}'
aws ecs describe-services --cluster <cluster> --services <service> --region <region> --query 'services[0].{Status:status,Desired:desiredCount,Running:runningCount}'
aws ecs describe-task-definition --task-definition <td> --region <region> --query 'taskDefinition.{Status:status,CPU:cpu,Memory:memory}'
DynamoDB Checks
aws dynamodb describe-table --table-name <table> --region <region> --query 'Table.{Status:TableStatus,ItemCount:ItemCount,Size:TableSizeBytes}'
aws dynamodb describe-table --table-name <table> --region <region> --query 'Table.ProvisionedThroughput.{ReadCU:ReadCapacityUnits,WriteCU:WriteCapacityUnits}'
AWS KMS Checks
aws kms describe-key --key-id <key-id> --region <region> --query 'KeyMetadata.{State:KeyState,Manager:KeyManager,Spec:KeySpec}'
aws kms get-key-policy --key-id <key-id> --policy-name default --region <region>
Service Quotas
aws service-quotas get-service-quota --service-code <service> --quota-code <code> --region <region>
aws service-quotas list-service-quotas --service-code <service> --region <region> --query 'Quotas[*].{Name:QuotaName,Value:Value}'
Generic Preflight Pattern
For any AWS action, follow this order:
- Identity:
aws sts get-caller-identity — confirm who you are
- Target exists:
describe-* or head-* on the target resource
- Permissions:
iam simulate-principal-policy if uncertain
- Quotas:
service-quotas get-service-quota if creating resources
- Dependencies: check subnets, SGs, roles, KMS keys referenced by the action
- Dry run (EC2): add
--dry-run flag to test without executing