Skip to main content
The AWS Cloud Account uses a cross-account IAM role to access your AWS infrastructure for resource autodiscovery and log forwarding.

What Formal Discovers

Automatically discover PostgreSQL, MySQL, and MongoDB RDS instances and add them as Formal resources.
Discover Redshift clusters and data warehouses.
Discover EKS clusters for Kubernetes access control.
Discover EC2 instances for SSH access.
Discover ECS clusters, services, and containers for SSH access via the Desktop App.
Discover S3 buckets for access via the Desktop App.
Forward Formal Connector logs to S3 buckets for long-term storage and compliance.

Architecture

Formal uses AWS’s Cross-Account IAM Role architecture:
  1. CloudFormation Stack: deploys an IAM role in your AWS account
  2. IAM Role: grants Formal specific, scoped permissions
  3. External ID: a unique identifier that prevents unauthorized access
  4. Role Chaining: Formal uses IAM User → IAM Role → your IAM Role for added security

Supported Regions

The CloudFormation stack can be deployed in:
  • us-east-1, us-east-2, us-west-1, us-west-2
  • eu-central-1, eu-west-1, eu-west-2, eu-west-3
The IAM role provides global access, allowing Formal to discover resources across all AWS regions.

Setup

1

Navigate to Cloud Accounts

2

Add Integration

Click Add Integration
3

Select AWS

Choose AWS as your cloud provider
4

Deploy CloudFormation

Click the provided link to deploy the CloudFormation template in your AWS account.The template creates an IAM role with the necessary permissions.
5

Configure Permissions

Enable the features you need:
  • RDS Autodiscovery
  • Redshift Autodiscovery
  • EKS Autodiscovery
  • EC2 Autodiscovery
  • ECS Autodiscovery
  • S3 Autodiscovery
  • S3 Write Access (for log forwarding)
6

Complete Setup

Once CloudFormation deployment completes, your AWS integration is active.

CloudFormation Parameters

Versioning

The CloudFormation template is versioned for stability:
Benefits of version pinning:
  • Predictable IAM permissions
  • Controlled feature adoption
  • Easier compliance auditing
  • Prevents unexpected changes
Using latest:
See the CloudFormation Changelog for version history.

Security

Formal implements multiple security layers:
  1. Role Chaining: IAM User → IAM Role in Formal account → IAM Role in your account
  2. External ID: a unique per-customer identifier that prevents cross-tenant access
  3. Least Privilege: CloudFormation grants only required permissions
  4. Scoped Permissions: enable only the features you need
Example: if you only enable RDS autodiscovery, the IAM role cannot access EKS, EC2, or S3.

Discovered Resources

Once the integration is active, Formal scans your AWS account and creates matching Formal resources:
  • RDS instance prod-postgres-1 → Formal resource prod-postgres-1
  • EKS cluster production-eks → Formal resource production-eks
  • EC2 instance i-abc123 → Formal resource ec2-i-abc123
Discovery is continuous and resource tags sync to Formal. See Resource Autodiscovery for how discovered resources behave and how to override them.

Multiple Accounts

Create a separate integration for each AWS account to keep environments isolated:

Troubleshooting

Possible causes:
  • Insufficient IAM permissions to create roles
  • Stack name conflict
  • Region not supported
Solution:
  1. Ensure the deploying user has IAM role creation permissions
  2. Use the unique stack name provided by Formal
  3. Deploy in a supported region
Possible causes:
  • Autodiscovery not enabled for that resource type
  • Resources in an unsupported region
  • IAM permissions insufficient
Solution:
  1. Verify the autodiscovery toggle is enabled in the Formal console
  2. Check the resources exist in AWS
  3. Review the CloudFormation IAM role permissions
  4. Wait a few minutes for the initial scan
Possible causes:
  • S3 bucket ARN incorrect
  • IAM role lacks S3 permissions
  • Log integration not configured
Solution:
  1. Verify s3_bucket_arn matches the permissions you want to grant on objects (e.g., use a /* suffix for all files)
  2. Ensure allow_s3_access is enabled
  3. Create a Log Integration pointing to this cloud integration

Next Steps

Log Integration

Forward logs to S3

Add Resources

Manually configure discovered resources

Terraform

Manage integrations as code

View Resources

See all autodiscovered resources