Cross-Account Role Security Model
CloudBooster uses an AWS cross-account IAM role to discover and import your existing infrastructure.
Cross-Account Role Security Model
CloudBooster uses an AWS cross-account IAM role to discover and import your existing infrastructure. This page documents the security model, the permissions that role holds, how access is scoped, and the operational procedures for managing it.
IAM Permissions
The CloudBooster CloudFormation template creates a cross-account IAM role with a curated set of permissions. Each action is scoped to the minimum set required for read-only infrastructure discovery.
| Action | Resource | Justification |
|---|---|---|
ec2:DescribeInstances | * | Discover compute instances and their configurations. |
ec2:DescribeVpcs | * | Map network topology (VPCs, subnets, route tables). |
ec2:DescribeSecurityGroups | * | Read firewall rules for dependency mapping. |
s3:GetBucketLocation | * | Identify region placement of S3 buckets. |
s3:GetBucketPolicy | * | Read bucket policies for access analysis. |
s3:ListBucket | * | Enumerate objects for bucket inventory. |
rds:DescribeDBInstances | * | Discover managed database instances. |
rds:DescribeDBClusters | * | Discover Aurora and RDS cluster resources. |
elasticloadbalancing:DescribeLoadBalancers | * | Map load-balancer frontends and targets. |
iam:GetRole | * | Read role metadata for identity mapping. |
iam:ListRoles | * | Enumerate IAM roles in the account. |
iam:GetPolicy | * | Read managed policy documents. |
iam:ListAttachedRolePolicies | * | Map policy attachments to roles. |
cloudformation:DescribeStacks | * | Discover stacks provisioned outside CloudBooster. |
cloudformation:ListStacks | * | Enumerate all CloudFormation stacks. |
lambda:GetFunction | * | Read Lambda function configurations. |
lambda:ListFunctions | * | Enumerate serverless functions. |
What CloudBooster Does and Does Not Do
The cross-account role is used exclusively for read-only infrastructure discovery and import. The following table clarifies the boundaries of that access.
CloudBooster DOES
| Activity | Detail |
|---|---|
| Read metadata | Execute Describe*, Get*, and List* API calls to build an inventory of your resources. |
| Map relationships | Follow resource references (e.g., security-group attachments, subnet associations) to build a dependency graph. |
| Audit every call | Every AWS API call made via the role is written to CloudBooster's audit log with request ID, timestamp, and calling principal. |
| Assume role on demand | The platform does not store long-lived AWS credentials. It assumes the cross-account role via AWS STS for each discovery session. |
CloudBooster DOES NOT
| Activity | Detail |
|---|---|
| Write to your account | No Create*, Put*, Update*, or Delete* actions are performed during import. |
| Modify resources | The role cannot change configurations, tags, or policies. |
| Access data | The role does not read object contents from S3, table data from RDS, or disk data from EBS volumes. |
| Store credentials | AWS access keys are never persisted in CloudBooster's database. |
| Provision infrastructure | Resource creation happens later through GitOps (Crossplane claims) and uses a separate provider configuration. |
Account ↔ Environment Binding Rule
CloudBooster enforces a strict one-to-one mapping between an AWS account and a CloudBooster environment.
Binding Rules
| Rule | Behavior |
|---|---|
| 1:1 Binding | One CloudBooster environment binds to exactly one AWS account. |
| No Re-binding | An AWS account already bound to an environment cannot be bound to a second environment. |
| Explicit Unbind | Removing an environment frees the AWS account for re-import into a different environment after a cooling-off period. |
| Multi-Env Support | Customers with multiple environments must run the CloudFormation template once per AWS account. |
Why Duplicate-Account Binding Is Rejected
Allowing a single AWS account to be imported into multiple CloudBooster environments creates unacceptable risks:
- State Conflicts — Two environments could generate conflicting provisioning instructions for the same physical resource.
- Ownership Ambiguity — It becomes unclear which environment is the source of truth for a given resource's desired state.
- Blast-Radius Expansion — A misconfiguration or destructive action in one environment could affect resources shared with another.
Setting Up Multiple Environments
If your organization needs multiple CloudBooster environments (e.g., staging and production), provision separate AWS accounts and run the CloudFormation template in each:
Retention and Storage Policy
Metadata Retention
| Data Type | Retention Period | Storage Location |
|---|---|---|
| Resource inventory (discovered metadata) | Duration of environment membership + 30 days | CloudBooster managed database |
| Audit logs (API calls made via role) | 90 days | CloudBooster managed database |
| Import snapshots | 30 days after successful import | Encrypted object storage |
Encryption at Rest
All discovered metadata is encrypted at rest:
- Database encryption — AES-256-GCM using cloud-provider-managed keys (AWS KMS / GCP Cloud KMS).
- Object storage encryption — Server-side encryption (SSE-S3 or equivalent) for import snapshots and artifacts.
- Encryption in transit — All data moving between CloudBooster services and your AWS account is protected by TLS 1.3.
Rotation Playbook
Rotating the cross-account role and its external ID is a recommended security hygiene practice. The steps below ensure zero-downtime rotation without breaking CloudBooster tracking.
Prerequisites
- AWS CLI access to the target account with permissions to update CloudFormation stacks.
- CloudBooster admin access to the target environment.
Step 1: Generate a New External ID
In the CloudBooster portal:
- Navigate to Environment Settings → AWS Import → Rotation.
- Click Generate New External ID.
- Copy the newly generated external ID (e.g.,
extid-2025-abc123).
Step 2: Update the CloudFormation Stack
Wait for the stack update to complete:
Step 3: Validate the Connection
- Return to the CloudBooster portal.
- Click Test Connection in the environment settings.
- Confirm that the import wizard successfully lists resources from the updated role.
Step 4: Revoke the Old External ID
Once validation passes:
- In the portal, click Revoke Old External ID.
- The previous external ID is immediately invalidated.
- Only the new external ID is accepted for future STS assume-role calls.
Threat Model Summary
What a Compromised CloudBooster Platform Could Do
If an attacker gained control of the CloudBooster platform and obtained valid STS credentials for your cross-account role, they could:
- Enumerate infrastructure — List VPCs, subnets, EC2 instances, RDS databases, S3 buckets, and Lambda functions.
- Read configurations — View security-group rules, IAM policies, route tables, and resource tags.
- Map dependencies — Understand how resources relate to each other (e.g., which instances are attached to which load balancers).
What a Compromised CloudBooster Platform Could NOT Do
The cross-account role is intentionally scoped to limit blast radius:
- No write access — The role does not include
Create*,Put*,Update*,Delete*, orModify*permissions. - No data access — The role cannot read object contents from S3, query RDS tables, or access EBS volume data.
- No privilege escalation — The role does not include
iam:PassRole,sts:AssumeRole, or permissions to edit its own trust policy. - No lateral movement — The role is scoped to a single AWS account and cannot access other accounts in your organization.
- No long-lived credentials — STS credentials are short-lived (default 1 hour, minimum 15 minutes) and cannot be reused after expiration.
Mitigations
| Control | Description |
|---|---|
| External ID | A unique secret per environment prevents confused-deputy attacks. AWS STS will reject assume-role requests that do not include the correct external ID. |
| Session duration | Role sessions are limited to 1 hour by default and can be reduced to 15 minutes for highly sensitive accounts. |
| Audit logging | Every API call is logged with full request context and is available for SIEM ingestion via the CloudBooster API. |
| Least privilege | Permissions are restricted to read-only Describe*, Get*, and List* actions. |
| Optional IP allow-list | Customers can restrict the role's trust policy to CloudBooster's published egress IP ranges. |
| Role rotation | The external ID and role can be rotated at any time via the portal without interrupting ongoing operations. |