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.
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 |
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-fnlambda.amazonaws.comAWSLambdaBasicExecutionRole| Effect | Actions | Scoped to |
|---|---|---|
| Allow | s3:CreateBuckets3:HeadBuckets3:PutBucketPolicys3:PutBucketPublicAccessBlocks3:PutEncryptionConfigurations3:PutLifecycleConfigurations3:PutBucketOwnershipControlss3:PutBucketTaggings3:GetBucketLocation |
arn:aws:s3:::autonoma-(this stack's CustomerId)-logs-${AWS::AccountId}-${AWS::Region} |
(this stack's RoleNamePrefix)(this stack's CustomerId)-dbinit-fnExecution 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.
lambda.amazonaws.comAWSLambdaBasicExecutionRole| 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-executionECS 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.
ecs-tasks.amazonaws.comAmazonECSTaskExecutionRolePolicy| Effect | Actions | Scoped to |
|---|---|---|
| Allow | ecr:CreateRepositoryecr: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-fnlambda.amazonaws.comAWSLambdaBasicExecutionRole| Effect | Actions | Scoped to |
|---|---|---|
| Allow | servicequotas:GetServiceQuotaservicequotas: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-fnExecution 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.
lambda.amazonaws.comAWSLambdaBasicExecutionRole| Effect | Actions | Scoped to |
|---|---|---|
| Allow | secretsmanager:PutSecretValuesecretsmanager: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-taskECS 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.
ecs-tasks.amazonaws.com| Effect | Actions | Scoped to |
|---|---|---|
| Allow | elasticfilesystem:ClientMountelasticfilesystem:ClientWriteelasticfilesystem:ClientRootAccess |
(this stack's EfsFileSystem) |
| Allow | ecs:DescribeServicesecs: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:CreateLogStreamlogs:PutLogEventslogs:DescribeLogStreams |
(this stack's OtelMetricsLogGroup) (this stack's OtelMetricsLogGroup): (this stack's OtelLogsLogGroup) (this stack's OtelLogsLogGroup): |
| Allow | xray:PutTraceSegmentsxray:PutTelemetryRecordsxray:GetSamplingRulesxray: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:DescribeTasksecs: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-runnerecs-tasks.amazonaws.com| Effect | Actions | Scoped to |
|---|---|---|
| Deny | secretsmanager:*ssm:GetParameterssm:GetParametersssm:GetParametersByPathsts:AssumeRolests:GetFederationTokeniam:*ecr:GetAuthorizationToken |
* |
| Allow | codeartifact:GetAuthorizationTokencodeartifact:GetRepositoryEndpointcodeartifact: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.
Resource: "*" grant, and whyAutonoma'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.
ELBSecurityPolicy-TLS13-1-2-2021-06); port 80 exists solely to issue a 301 redirect to 443. There is no plaintext path. You supply the certificate (AcmCertificateArn) and the hostname it covers (PublicHostname); the certificate lives in your ACM, in your account and Region, and Autonoma never holds it.AllowedIngressCidr is a required parameter with no default — set it to a single address, your office or VPN range, or 0.0.0.0/0. If you narrow it, the range must still include 107.20.163.23/32, the address Autonoma delivers GitHub webhook events from, or that delivery stops.EnableAccessLogs) and written to an S3 bucket the stack creates in your account, with a 90-day lifecycle rule. The bucket is retained if you delete the stack. AWS WAF is available (EnableWaf) and is off by default, because it adds AWS WAF charges to your bill.GenerateSecretString) and stored in AWS Secrets Manager. They are never transmitted to Autonoma.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.
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.
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.
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. |
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:
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.
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.