Trust
Security and AWS permissions
Last updated October 31, 2026
1. How SynqTune connects to your account
You create one CloudFormation stack in your AWS account from our template. You can read the template before you create it; it is the whole of SynqTune's access. It creates three things:
- An IAM role,
CustomerTrainingRole, that SynqTune uses to act in your account. Only SynqTune's AWS account can assume it, and only together with your organization's External ID, so another SynqTune customer can't point SynqTune at your account. - An instance profile with the same name, so the instances that run your pipelines can use the role.
- A private S3 bucket,
slm-customer-bucket-<account-id>, for your datasets, models and evaluation examples: encrypted (AES-256), public access blocked, versioned, and accepting browser uploads only from the SynqTune web app.
You never give SynqTune AWS access keys. Each time SynqTune acts, AWS STS gives it short-lived credentials for the role. SynqTune's own servers reach AWS through an IAM user that works only from our hosting provider's IP addresses and can only switch to a backend role.
2. Every permission the role has
The template grants these and nothing else. Anything not listed, such as your other buckets, your other instances, IAM changes or billing, is out of reach.
| Service | What the role can do |
|---|---|
| S3 | Read and write only the SynqTune bucket. Read-only access to other buckets only if you list them in the stack's DataSourceBuckets setting. |
| EC2 | Start instances only if it tags them, and their disks, synqtune:managed=true at launch; terminate only instances with that tag; read instance status and find the AWS Deep Learning AMI. Tags can only be set at launch, so the role can't tag, and then stop, one of your own instances. |
| CloudWatch | Create and delete alarms named synqtune-idle-* (see Shutting instances down), and write worker logs and metrics with AWS's managed CloudWatchAgentServerPolicy. |
| Parameter Store | Save and delete LLM provider keys under /synqtune/. Reading a key is allowed only with an instance's own credentials, and explicitly denied to SynqTune's servers. See Your LLM provider keys. |
| IAM | Read its own role (to check the stack version) and attach itself to the instances it starts. It can't create or change any IAM role or policy. |
| CloudFormation | Propose an update to its own stack as a change set named synqtune-update-*. It can't execute a change set or update the stack; only you can. |
The role can also create two AWS service-linked roles, once per account, that AWS needs for Spot instances and for alarms that act on instances. The trust policy also lets EC2 instances use the role (that is how your pipeline instances get it) and AWS Lambda; SynqTune doesn't run anything on Lambda today.
3. What SynqTune does during a run
- Checks the stack. Before every launch, SynqTune reads the version tag on its role. If your stack is older than SynqTune needs, the launch stops before anything starts and tells you how to update it (see Updates).
- Starts an instance in your account in us-east-1 (the region SynqTune runs in today, wherever your bucket is), tagged
synqtune:managed=true, with the instance profile attached, IMDSv2 required (which blocks a common way of stealing instance credentials) and set to terminate on shutdown. Spot instances terminate if AWS reclaims them. No inbound ports are opened: the instance only calls out. - Gives it the pipeline. The instance downloads its settings and the pipeline code from SynqTune through short-lived links. The settings name your provider keys only by their Parameter Store location, never the key itself.
- The instance does the work with its own credentials: it reads your data from your bucket, reads the keys the run needs from your Parameter Store into memory, and writes datasets, checkpoints, models and evaluation examples to your bucket.
- Reports back. The instance sends step progress, training metrics and evaluation scores to SynqTune. Each run has its own random secret, and SynqTune rejects any report that doesn't carry it.
Shutting instances down. An instance terminates itself when its run ends or fails. If it stops reporting for 10 minutes, SynqTune terminates it. As a backstop that works even if SynqTune is unreachable, SynqTune puts a CloudWatch alarm in your account on each training and data instance: after 60 minutes averaging under 1% CPU, AWS terminates the instance. Chat sessions with a model end after the inactivity time you choose.
In the app: uploads from your browser go straight to your bucket through links signed with your role that expire after an hour. Evaluation examples are shown through links that expire after 10 minutes; your browser reads them from your bucket, not from us.
4. Your LLM provider keys
Keys you save for Claude, OpenAI, Gemini or Langfuse are written to your account's Parameter Store as encrypted SecureStrings, at /synqtune/provider-keys/<provider>. SynqTune keeps only where each key is.
SynqTune can save and delete keys, but it can't read one back. The role allows reading a key only when the request carries ec2:SourceInstanceARN, which AWS adds only to calls made with an EC2 instance's own credentials, and explicitly denies every way of reading one otherwise. So your pipeline instances can use your keys, and SynqTune's servers can't. SynqTune saves keys only in accounts whose stack has this rule.
A key typed into a single run, without saving it, goes to /synqtune/runs/<run-id>/ in the same account. Before a run that compares with your current LLM, SynqTune's servers can send that provider one fixed test request (“Reply with OK.”) with such a typed key, to catch a key with no credits; you can turn that test off for any run.
5. What reaches SynqTune
Your datasets and models never leave your account. This is everything that does reach SynqTune's systems:
| What | Where it is kept |
|---|---|
| Account details | Your name, email and organization, in our database (Supabase, Singapore). |
| Your AWS connection | Your account ID and the role's ARN. Never access keys. |
| Pipeline settings | The settings you chose, and each run's secret. Provider keys appear only as Parameter Store locations. |
| Run results | Step progress, training metrics and evaluation scores and counts. No example text. |
| Error messages | What a failed step reports. A setup failure can include a few log lines. |
| Chat messages | When you chat with a trained model, messages are relayed through our servers in memory and not saved. |
Two optional steps send records outside AWS, only when you turn them on: grading with an LLM, and the comparison with your current LLM. They go to the provider you choose, with your own key. The Privacy Policy has the details.
6. Updates to the role
SynqTune can't change its own permissions in your account. When it needs a newer stack, it prepares the update as a change set in your account and opens it in your CloudFormation console: you see exactly what changes, and nothing changes until you choose Execute. You can also update it yourself with one CLI command; the steps are on the Cloud accounts page. Updating keeps the role, the bucket and its data, and your saved keys.
7. Checking it yourself
- Read the CloudFormation template, or the role's policies in the IAM console after you create the stack.
- In CloudTrail, every call SynqTune makes appears as the role
CustomerTrainingRolewith the session nameSLMSaaSOrchestrator. Calls from your pipeline instances show the instance ID instead. - Instances, disks and alarms SynqTune creates are tagged
synqtune:managed=trueor namedsynqtune-idle-*.
8. Removing SynqTune's access
Delete the CloudFormation stack, or just the role. SynqTune loses access immediately. To leave nothing behind:
- first terminate any running instances tagged
synqtune:managed=true, since without the role SynqTune can no longer stop them; - delete the Parameter Store entries under
/synqtune/and thesynqtune-idle-*alarms: SynqTune created them, not the stack, so deleting the stack keeps them; - the bucket and its data are kept on purpose; delete the bucket yourself if you don't need them.
9. Reporting a security issue
Email support@synqtune.com with what you found. We will reply as soon as we can and tell you when it is fixed. Please don't test against other customers' accounts or data.