Autonoma — AWS resources and IAM permissions deployed in your account

Buyer-facing disclosure for the Autonoma AWS Marketplace listings (BUILD, OPERATE, SECURE, PLATFORM), which deploy a data plane into your own AWS account via AWS Marketplace Quick Launch.

This file is generated by scripts/marketplace/generate-resource-disclosure.py from the CloudFormation templates that are actually published. Do not edit it by hand — edit the generator.


1. AWS services and resources provisioned

Every resource below is created inside your AWS account, in the single AWS Region you launch the stack in, by a CloudFormation stack you own. Autonoma has no credentials in your account and cannot access these resources — see §2 and §7.

Counts are per product listing; you deploy one product.

AWS service Resource type BUILD OPERATE SECURE PLATFORM
AWS Cloud Map AWS::ServiceDiscovery::PrivateDnsNamespace 1 1 1 1
AWS Cloud Map AWS::ServiceDiscovery::Service 14 15 9 22
AWS CloudFormation AWS::CloudFormation::CustomResource 7 7 7 7
AWS IAM AWS::IAM::Role 7 7 7 7
AWS Lambda AWS::Lambda::Function 7 7 7 7
AWS Secrets Manager AWS::SecretsManager::RotationSchedule 1 1 1 1
AWS Secrets Manager AWS::SecretsManager::Secret 19 20 14 27
AWS Secrets Manager AWS::SecretsManager::SecretTargetAttachment 1 1 1 1
AWS::CodeArtifact AWS::CodeArtifact::Domain 1 1 1 1
AWS::CodeArtifact AWS::CodeArtifact::Repository 7 7 7 7
AWS::ECR AWS::ECR::PullThroughCacheRule 1 1 1 1
AWS::S3 AWS::S3::BucketPolicy 1 1 1 1
AWS::WAFv2 AWS::WAFv2::WebACL 1 1 1 1
AWS::WAFv2 AWS::WAFv2::WebACLAssociation 1 1 1 1
Amazon CloudWatch AWS::CloudWatch::Alarm 2 2 2 2
Amazon CloudWatch Logs AWS::Logs::LogGroup 4 4 4 4
Amazon ECS (AWS Fargate) AWS::ECS::Cluster 1 1 1 1
Amazon ECS (AWS Fargate) AWS::ECS::Service 14 15 9 22
Amazon ECS (AWS Fargate) AWS::ECS::TaskDefinition 16 17 11 24
Amazon EFS AWS::EFS::AccessPoint 2 2 2 2
Amazon EFS AWS::EFS::FileSystem 1 1 1 1
Amazon EFS AWS::EFS::MountTarget 2 2 2 2
Amazon ElastiCache for Redis AWS::ElastiCache::ParameterGroup 1 1 1 1
Amazon ElastiCache for Redis AWS::ElastiCache::ReplicationGroup 1 1 1 1
Amazon ElastiCache for Redis AWS::ElastiCache::SubnetGroup 1 1 1 1
Amazon RDS for PostgreSQL AWS::RDS::DBInstance 1 1 1 1
Amazon RDS for PostgreSQL AWS::RDS::DBSubnetGroup 1 1 1 1
Amazon SNS AWS::SNS::Subscription 1 1 1 1
Amazon SNS AWS::SNS::Topic 1 1 1 1
Amazon VPC / EC2 networking AWS::EC2::EIP 2 2 2 2
Amazon VPC / EC2 networking AWS::EC2::InternetGateway 1 1 1 1
Amazon VPC / EC2 networking AWS::EC2::NatGateway 2 2 2 2
Amazon VPC / EC2 networking AWS::EC2::Route 3 3 3 3
Amazon VPC / EC2 networking AWS::EC2::RouteTable 3 3 3 3
Amazon VPC / EC2 networking AWS::EC2::SecurityGroup 8 8 8 8
Amazon VPC / EC2 networking AWS::EC2::SecurityGroupEgress 5 5 5 5
Amazon VPC / EC2 networking AWS::EC2::SecurityGroupIngress 17 17 17 17
Amazon VPC / EC2 networking AWS::EC2::Subnet 6 6 6 6
Amazon VPC / EC2 networking AWS::EC2::SubnetRouteTableAssociation 6 6 6 6
Amazon VPC / EC2 networking AWS::EC2::VPC 1 1 1 1
Amazon VPC / EC2 networking AWS::EC2::VPCEndpoint 7 7 7 7
Amazon VPC / EC2 networking AWS::EC2::VPCGatewayAttachment 1 1 1 1
Elastic Load Balancing AWS::ElasticLoadBalancingV2::Listener 2 2 2 2
Elastic Load Balancing AWS::ElasticLoadBalancingV2::LoadBalancer 1 1 1 1
Elastic Load Balancing AWS::ElasticLoadBalancingV2::TargetGroup 1 1 1 1
Total 184 188 164 216

2. IAM roles created, and how they are used

The stack creates seven IAM roles. All seven are assumed only by AWS services (ecs-tasks.amazonaws.com, lambda.amazonaws.com) inside your account. No role trusts an Autonoma AWS account, and no role can be assumed by a principal outside your account. No IAM users and no long-lived access keys are created.

Role names are prefixed with the deployment identifier you choose at launch (CustomerId), so they never collide with your existing roles.

(this stack's RoleNamePrefix)(this stack's CustomerId)-alb-logs-fn

Effect Actions Scoped to
Allow s3:CreateBucket
s3:HeadBucket
s3:PutBucketPolicy
s3:PutBucketPublicAccessBlock
s3:PutEncryptionConfiguration
s3:PutLifecycleConfiguration
s3:PutBucketOwnershipControls
s3:PutBucketTagging
s3:GetBucketLocation
arn:aws:s3:::autonoma-(this stack's CustomerId)-logs-${AWS::AccountId}-${AWS::Region}

(this stack's RoleNamePrefix)(this stack's CustomerId)-dbinit-fn

Execution role for the one-shot database-initialisation Lambda, which runs the schema bootstrap as an ECS task. Scoped to running that single task definition in this stack's cluster.

Effect Actions Scoped to
Allow ecs:RunTask (this stack's DbInitTaskDefinition)
(constrained by an IAM condition — see §3)
Allow ecs:DescribeTasks *
(constrained by an IAM condition — see §3)
Allow iam:PassRole {'Fn::If': ['CreateExecutionRole', '', '']}
{'Fn::If': ['CreateTaskRole', '', '']}

(this stack's RoleNamePrefix)(this stack's CustomerId)-ecs-execution

ECS task execution role. Used by the Fargate agent (not by our code) to pull container images and to resolve the secrets block of each task definition at container start. Its only inline grant is secretsmanager:GetSecretValue, enumerated to the exact secret ARNs this stack creates.

Effect Actions Scoped to
Allow ecr:CreateRepository
ecr:BatchImportUpstreamImage
arn:${AWS::Partition}:ecr:${AWS::Region}:${AWS::AccountId}:repository/(this stack's PullThroughPrefix)/*
Allow secretsmanager:GetSecretValue (this stack's DbPasswordSecret)
(this stack's LlmProxyTokenSecret)
(this stack's GatewayJwtSecret)
(this stack's MeteringTokenSecret)
(this stack's AttestationSecret)
(this stack's RigorSigningSecret)
(this stack's InterServiceJwtSecret)
(this stack's AgentJwtSecret)
(this stack's ForwardingSecret)
(this stack's NatsSecretSecurityAi)
(this stack's NatsSecretThreathunterAi)
(this stack's NatsSecretOrchestratorAi)
(this stack's NatsSecretApiGateway)
(this stack's NatsSecretKnowledgeGraph)

(this stack's RoleNamePrefix)(this stack's CustomerId)-quota-check-fn

Effect Actions Scoped to
Allow servicequotas:GetServiceQuota
servicequotas:GetAWSDefaultServiceQuota
*
Allow secretsmanager:GetSecretValue arn:aws:secretsmanager:${AWS::Region}:${AWS::AccountId}:secret:marketplace-deployment!*
Allow ec2:DescribePrefixLists *

(this stack's RoleNamePrefix)(this stack's CustomerId)-register-fn

Execution role for the registration Lambda, which calls the Autonoma control plane once at stack creation and stores the returned forwarding secret. Its only grant is read/write of that one secret.

Effect Actions Scoped to
Allow secretsmanager:PutSecretValue
secretsmanager:GetSecretValue
(this stack's ForwardingSecret)
Allow secretsmanager:GetSecretValue arn:aws:secretsmanager:${AWS::Region}:${AWS::AccountId}:secret:marketplace-deployment!*

(this stack's RoleNamePrefix)(this stack's CustomerId)-ecs-task

ECS task role — the identity Autonoma's own containers run as. Grants EFS access to the single file system this stack creates, read of the forwarding secret, and OpenTelemetry export to the two log groups this stack creates plus AWS X-Ray.

Effect Actions Scoped to
Allow elasticfilesystem:ClientMount
elasticfilesystem:ClientWrite
elasticfilesystem:ClientRootAccess
(this stack's EfsFileSystem)
Allow ecs:DescribeServices
ecs:UpdateService
arn:${AWS::Partition}:ecs:${AWS::Region}:${AWS::AccountId}:service/autonoma-(this stack's CustomerId)/*
(constrained by an IAM condition — see §3)
Allow secretsmanager:GetSecretValue (this stack's ForwardingSecret)
Allow logs:CreateLogStream
logs:PutLogEvents
logs:DescribeLogStreams
(this stack's OtelMetricsLogGroup)
(this stack's OtelMetricsLogGroup):
(this stack's OtelLogsLogGroup)
(this stack's OtelLogsLogGroup):
Allow xray:PutTraceSegments
xray:PutTelemetryRecords
xray:GetSamplingRules
xray:GetSamplingTargets
*
Allow securityhub:BatchImportFindings arn:${AWS::Partition}:securityhub:${AWS::Region}:${AWS::AccountId}:product/${AWS::AccountId}/default
Allow ecs:RunTask arn:${AWS::Partition}:ecs:${AWS::Region}:${AWS::AccountId}:task-definition/autonoma-(this stack's CustomerId)-test-runner:*
(constrained by an IAM condition — see §3)
Allow ecs:DescribeTasks
ecs:StopTask
arn:${AWS::Partition}:ecs:${AWS::Region}:${AWS::AccountId}:task/autonoma-(this stack's CustomerId)/*
(constrained by an IAM condition — see §3)
Allow iam:PassRole {'Fn::If': ['CreateExecutionRole', '', '']}
{'Fn::If': ['CreateTestRunnerTaskRole', '', '']}
(constrained by an IAM condition — see §3)

(this stack's RoleNamePrefix)(this stack's CustomerId)-ecs-task-test-runner

Effect Actions Scoped to
Deny secretsmanager:*
ssm:GetParameter
ssm:GetParameters
ssm:GetParametersByPath
sts:AssumeRole
sts:GetFederationToken
iam:*
ecr:GetAuthorizationToken
*
Allow codeartifact:GetAuthorizationToken
codeartifact:GetRepositoryEndpoint
codeartifact:ReadFromRepository
arn:${AWS::Partition}:codeartifact:${AWS::Region}:${AWS::AccountId}:domain/autonoma-(this stack's CustomerId)
arn:${AWS::Partition}:codeartifact:${AWS::Region}:${AWS::AccountId}:repository/autonoma-(this stack's CustomerId)/
arn:${AWS::Partition}:codeartifact:${AWS::Region}:${AWS::AccountId}:package/autonoma-(this stack's CustomerId)/
Allow sts:GetServiceBearerToken *
(constrained by an IAM condition — see §3)

A Deny row is a restriction, not a permission. Denies on Resource: "*" are deliberately the broadest possible scope — this role runs third-party code and is blocked from reaching credentials or identity APIs anywhere in your account.

The other product listings (BUILD, OPERATE, PLATFORM) create the same seven roles. Two things differ, both because each product runs a different set of agents: the number of secrets the execution role reads, and securityhub:BatchImportFindings, which is granted only on SECURE and PLATFORM because only those two deploy the security agent that imports findings. BUILD and OPERATE do not carry that permission.


3. Every Resource: "*" grant, and why

Autonoma's deployed roles contain no service:* action wildcards. Four actions are granted at Resource: "*", in each case because AWS does not support resource-level permissions for them:

Action Why it cannot be scoped
xray:PutTraceSegments AWS X-Ray does not support resource-level permissions for trace submission. AWS's own AWSXRayDaemonWriteAccess managed policy uses the same Resource: "*".
xray:PutTelemetryRecords Same as xray:PutTraceSegments — no resource-level permission support.
xray:GetSamplingRules Sampling rules are an account-level construct with no ARN to scope to.
xray:GetSamplingTargets Sampling targets are an account-level construct with no ARN to scope to.
ecs:DescribeTasks ecs:DescribeTasks takes a task ARN that does not exist until the task is started. The grant is instead constrained by an ArnEquals condition on ecs:cluster, restricting it to this stack's cluster.
servicequotas:GetServiceQuota Read-only. Service Quotas does not support resource-level permissions on its read actions. Used once at launch by the pre-flight gate that checks your account's Fargate vCPU quota before the stack builds services it cannot run.
servicequotas:GetAWSDefaultServiceQuota Same as servicequotas:GetServiceQuota — read-only, no resource-level permission support. Reads the AWS default so the gate can report both your quota and the default.
ec2:DescribePrefixLists Read-only. Every EC2 Describe* action is account-scoped and cannot be restricted to an ARN. Used to resolve the AWS-managed prefix list for VPC endpoint routing.
sts:GetServiceBearerToken No resource-level permission support. Constrained instead by a StringEquals condition on sts:AWSServiceName = codeartifact.amazonaws.com, so it can mint a bearer token for CodeArtifact and nothing else — the package mirror the test runner resolves dependencies through when egress to the public internet is off.

There are no other unscoped grants. Every other statement names the exact ARNs the stack itself creates.


4. Network exposure

5. Data handling

6. What Autonoma can see

Three things travel from your deployment to Autonoma. Nothing else does.

Two of the three are on unless you turn them off. That is an opt-out arrangement, and this document calls it that. There is no single master switch: the three flows are controlled in three different places, because they are different kinds of data with different consequences, and one control would mean either over-blocking the billing signal or under-disclosing the prompt text.

What crosses Default What it carries The control, and where it lives
Deployment health On Your deployment and customer id, the orchestrator id, the agent version, and whether each service is up. Sent at startup, when a service changes state, and every five minutes as a keepalive. TelemetrySharingEnabled — a CloudFormation parameter, set at launch or by updating the stack. In your account, under your change control.
Usage metering On, and required Token and request counts per model call, attributed to your customer id. No prompt text. None. This is what AWS Marketplace bills from; switching it off would mean you could not be charged for what you use, so it is not offered as an option.
Model prompts and completions On The text of your requests and the models’ replies, kept and used to improve the models. Model training in the Autonoma dashboard. Turning it off stops collection immediately and excludes what was already collected from future training runs.

Deployment health carries no source code, no prompts, no scan results and no application data. It is deployment metadata: which build is running and whether it is healthy. We ask for it because the data plane runs in your account — we cannot force an upgrade, so knowing which builds are in the field is how a fix reaches the deployments that need it.

Your traces and logs stay with you. OpenTelemetry traces go to AWS X-Ray and logs to CloudWatch Logs, both in your own account. They are not forwarded to Autonoma.

On prompts, plainly. Model calls are routed through the Autonoma proxy so usage can be metered and so model access matches the tier you bought. Routing is not the same as keeping — but we do keep them: prompts and completions are stored and used to improve the models unless you turn model training off. If your prompts routinely contain material you cannot share, turn it off before you start, not after.

Turning it off applies to what we already hold. Collection stops immediately, and your existing datapoints are excluded from every future training run — consent is re-read each time a run selects its data, rather than trusted from when the data was captured. A model already trained cannot be untrained; that is why the switch is worth setting before the first run rather than after.

What never crosses at all: your repositories, your databases, your scan results and your traces and logs. They stay in the RDS instance, EFS file system, X-Ray and CloudWatch Logs this stack creates in your own account, whatever these three settings say — see §5.

7. Connections between your deployment and Autonoma

Outbound — your data plane calls the Autonoma control plane over public TLS:

When Call Purpose
Once, at stack creation POST /api/customer/agents/register Registers the deployment and receives a forwarding secret. Sends the deployment id, the load balancer DNS name, your AWS account id and region, and the agent version.
Per developer session JWKS fetch Verifies developer session tokens. Read-only, no payload.
Per LLM request LLM proxy Routes model calls and meters usage for AWS Marketplace billing.
On startup, on status change, every 5 min POST /api/admin/agent-heartbeat Deployment health telemetry — on by default, see §6. Disable with TelemetrySharingEnabled=false.

Inbound — the Autonoma control plane calls your data plane in exactly one case:

When Call Purpose
Only if you install the Autonoma GitHub App POST to the callback URL your stack registered (your load balancer) Relays GitHub webhook events to your deployment so agents can act on repository activity.

That relay is opt-in: it happens only for deployments with an enabled GitHub integration, and only to the callback URL your own stack supplied at registration. Each request carries an X-Autonoma-Signature-256 HMAC-SHA256 header computed with the per-deployment forwarding secret, so your data plane can verify the request genuinely originated from the Autonoma control plane and reject anything else. Autonoma holds no AWS credentials for your account and cannot reach any resource other than that one HTTPS endpoint.

8. Deployment-time permissions

The permissions an administrator needs once to create the stack are published here: https://autonoma-quicklaunch-templates-808773666646.s3.us-east-1.amazonaws.com/docs/autonoma-quicklaunch-buyer-iam-policy.json

That file is the exact policy embedded in this product's Quick Launch deployment template, so it is what your administrator will actually use — not a representative sample. AWS Marketplace also surfaces it in the Quick Launch experience at deploy time.

Those permissions are held by your administrator, are used only for stack creation, and are not granted to Autonoma. It grants no service:* wildcards; the Get*/List* prefixes it does contain are read-only verbs, collapsed to fit the AWS Marketplace 4,000-character field limit.

Your account must allow creating IAM roles

This template creates the seven roles in §2, so the administrator running it needs iam:CreateRole (it is in the policy above). If your account restricts role creation, check which restriction applies before you launch — the stack otherwise fails partway through and rolls back:

Your account requires Deploy today?
A permissions boundary on every new role Yes — set RolePermissionsBoundary to your boundary ARN and every role this stack creates is created with it.
Roles under a specific path Yes — set RolePath (e.g. /delegated/). See the note below: your administrator's own policy must cover that path.
A specific role-name prefix Yes — set RoleNamePrefix (max 24 characters; see the note below about your administrator's policy).
Tags present on every new role Yes — set up to three RoleTagKey/RoleTagValue pairs; they are applied to all seven.
No role creation at all, under any condition Yes, with preparation — your administrator deploys the IAM prerequisites template below once, then you pass the seven ARNs it outputs to the parameters below it.

Supplying roles you already have

If your account forbids creating roles outright, each of the seven can be supplied instead of created. Leave a parameter empty — the default — and the stack creates that role exactly as §2 describes; set it to an ARN and the stack uses yours and creates nothing:

Parameter Replaces
ExistingEcsExecutionRoleArn autonoma-<CustomerId>-ecs-execution
ExistingEcsTaskRoleArn autonoma-<CustomerId>-ecs-task
ExistingTestRunnerRoleArn autonoma-<CustomerId>-ecs-task-test-runner
ExistingQuotaCheckRoleArn autonoma-<CustomerId>-quota-check-fn
ExistingAlbLogsRoleArn autonoma-<CustomerId>-alb-logs-fn
ExistingDbInitRoleArn autonoma-<CustomerId>-dbinit-fn
ExistingRegisterRoleArn autonoma-<CustomerId>-register-fn

It is all-or-nothing per role, not per stack: supply the two ECS roles and let the stack create the rest if that is what your account requires.

You do not have to write those roles yourself. This template creates all seven with the right permissions and outputs their ARNs, named to match the parameters above:

https://autonoma-quicklaunch-templates-808773666646.s3.us-east-1.amazonaws.com/docs/autonoma-quicklaunch-iam-prerequisites.yaml

Deploy it once, with an identity that can create IAM roles, using the same CustomerId you will give the product template — these policies are scoped by that name, so a mismatch produces roles that cannot reach anything. RolePath, EnablePullThroughCache and PullThroughPrefix must match too, for the same reason.

It is generated from the same template that would otherwise create these roles, so it cannot drift from them. One difference is deliberate and your security review should see it: four of the roles grant on resources the product stack creates later, which do not exist yet when you deploy this one — fourteen secrets, the ECS cluster, the db-init task definition and two log groups. Those grants are scoped by name pattern (autonoma-<CustomerId>-*) instead of exact ARN. The EFS grant, which includes ClientRootAccess, is narrowed by the tag the product stack applies rather than left as a wildcard, so it cannot reach another file system in your account. The template header states all of this again, in place.

If a supplied role is missing a grant, the stack still deploys and then fails at runtime — a task that will not start, or a database that is never initialised. §2 lists what each role must be able to do if you would rather build them under your own controls.

If you change RolePath or RoleNamePrefix, the policy linked above no longer covers these roles: it is scoped to arn:aws:iam::*:role/autonoma-*, and either setting moves them — a path to arn:aws:iam::*:role/<your-path>autonoma-*, a prefix to arn:aws:iam::*:role/<your-prefix>*. Add the matching ARN alongside the existing one in your administrator's copy. Nothing else changes — the stack refers to every role by attribute, not by name.

Three tag pairs, not unlimited. Mandated tag sets are usually small, and CloudFormation cannot build a variable-length tag list without a template transform we would rather not put in front of your security review. If your policy requires more than three, use the IAM prerequisites template instead: it creates the same roles and you can tag them however you need before passing their ARNs back.

RolePermissionsBoundary is optional and empty by default, so a buyer launching with an administrator identity is unaffected. Supplying it caps what these roles can ever do regardless of the policies attached to them, which is the control AWS recommends for delegating role creation. Autonoma's own pre-publication launch gate runs under exactly this constraint: the role that gates each release may create roles only with a boundary attached, so every template shipped to you has been launched at least once with one.

9. Removal

Deleting the CloudFormation stack removes every resource listed in §1, with one deliberate exception.

The database is snapshotted, not discarded. The RDS instance carries DeletionPolicy: Snapshot, so deleting the stack takes a final snapshot and leaves it in your account rather than destroying your data. That snapshot survives the stack and continues to incur AWS storage charges until you delete it. Remove it yourself once you are satisfied you no longer need the data.

This is also why the deployment permissions in §8 include rds:CreateDBSnapshot: without it the stack cannot complete deletion.

The deployment's registration in the Autonoma control plane can be revoked from the Autonoma dashboard.