Persistent Compute is in private pilot on Mac.Join the waitlist

Your AWS

Run it in your own AWS account.

Our access role can't open a shell, read your disks or read your logs. Our software on your computers reports only setup and health, never your code, files or terminal output.

  1. 01

    Your account runs the computers, disks and network. AWS bills you directly.

  2. 02

    Our role is one you create, read and can revoke at any time.

  3. 03

    It can only launch and manage your team's computers, and run the named actions your stack defines.

  4. 04

    It can't open a shell, read logs, copy disks, add commands or change IAM.

  5. 05

    Support shell access exists only while you grant it, with an expiry, and ends on its own.

  6. 06

    Every action is logged in your account before it runs. We can't read or erase that log.

Where things run

Your account runs the computers. We run the controls.

  • Your AWS account

    • Cloud computers and their disks, encrypted with your account's EBS key
    • The network they use, with no inbound ports
    • Our access role
    • The named actions
    • Your security log
  • Persistent Compute

    • Sign-in and team admin
    • Billing for members
    • The service that asks your account to start, stop or update computers
  • Your private network

    • Your devices reach each cloud computer over an encrypted private network
    • No inbound ports are opened

The stack

Everything it creates. 69 resources at most.

Names match the stack's Resources tab in your AWS console. Cloud computers are launched later, tagged to your team.

AccessThe roles we can use in your account.4
  • ManagementRoleAWS::IAM::Role

    Our access role. It trusts only our service, only with your connection’s external ID, for at most an hour per session.

  • ManagementGuardrailsAWS::IAM::ManagedPolicy

    Everything our access role is refused, such as deleting disks, changing logs, alerts or backups, or opening a session. It’s attached as the role is created, and the role can’t change it.

  • ManagementContainmentAWS::IAM::ManagedPolicy

    More refusals for our access role: changing this stack or any IAM role, passing any role but the computers’ own, copying or exporting disks and images, reading parameters or logs, opening the network, and running the stack’s security collector.

  • SupportRoleAWS::IAM::Role

    Support access. Created only if you set SupportAccess to limited or full and a SupportAccessUntil time, and it stops working then. Only our audited staff console can use it.

    Only if you turn it on

Support diagnosticsRead-only checks Limited support access can run. Our access role can’t run them.7
  • SupportGrantAWS::SSM::Parameter

    Your current support access level and expiry. Support commands and sessions check it before starting and refuse missing, expired or revoked grants. Persistent Compute’s access, support and computer roles cannot change it.

  • SupportHealthDiagnosticAWS::SSM::Document

    Memory, disk, uptime, out-of-memory count and setup status.

  • SupportServicesDiagnosticAWS::SSM::Document

    Whether our service, the network client and SSH are running.

  • SupportLogsDiagnosticAWS::SSM::Document

    Recent log lines from our service, the network client and SSH.

  • SupportNetworkDiagnosticAWS::SSM::Document

    Private network state and outbound HTTPS.

  • SupportShellDocumentAWS::SSM::Document

    The only way Full support access can run a command. It writes the whole script to your security log first and refuses to run it if that write fails.

  • SupportSessionDocumentAWS::SSM::Document

    The only Session Manager session Full support access can open. It streams the whole session to your security log and closes if its opening entry can’t be written.

ComputersWhat each cloud computer runs as.4
  • ComputerRoleAWS::IAM::Role

    The computer’s own role: Systems Manager, its own setup key, and adding to the security log, including support session recordings.

  • ComputerProfileAWS::IAM::InstanceProfile

    Attaches the computer role to each cloud computer.

  • ComputerLaunchTemplateAWS::EC2::LaunchTemplate

    The only launch template our role can launch from: the computer role and required instance metadata tokens, with no user data.

  • EnrollmentKeyAWS::KMS::Key

    Encrypts each computer’s one-time network key. Owned by your account, rotated yearly.

    Kept if you delete the stack

Named actionsThe only commands our role can run on your computers.18
  • ActionInstalledRuntimeAWS::SSM::Document

    Report which version of our software is installed.

  • ActionImagePrerequisitesAWS::SSM::Document

    Check the computer image has what setup needs.

  • ActionBootstrapInstallAWS::SSM::Document

    Install our background service and network client, checked against fixed checksums.

  • ActionBootstrapStatusAWS::SSM::Document

    Report whether setup finished.

  • ActionNetworkEnrollAWS::SSM::Document

    Join the computer to your private network with a one-time key.

  • ActionBootstrapConnectionAWS::SSM::Document

    Check that the background service is connected.

  • ActionCodingToolsAWS::SSM::Document

    Install git, Python, ripgrep or jq.

  • ActionAuthorizedKeysAWS::SSM::Document

    Same as the approved key list below, kept so the switch to this stack version never drops a key change.

  • ActionGrowRootFilesystemAWS::SSM::Document

    Grow the file system after a disk is resized.

  • ActionIdleProbeAWS::SSM::Document

    Check whether the computer is idle.

  • ActionRuntimeUpdateSignedAWS::SSM::Document

    Update our background service and network client, checked against fixed checksums. Only signed releases unless you turn signature checks off, and only releases you accept, by the full digest of every file, if you pin them.

  • ActionAuthorizedKeysApprovedAWS::SSM::Document

    Set which SSH keys can sign in to the computer, keeping only keys your admin signed if you add an approval key.

  • ActionBootstrapInstallSignedAWS::SSM::Document

    Install our background service and network client from the computer image, checked against fixed checksums. Only images whose files we signed unless you turn signature checks off.

  • ActionRuntimeUpdateApprovedAWS::SSM::Document

    The same update, carrying your admin’s signature. If you add an approval key, both update actions refuse any release your admin didn’t sign, digest by digest, even one we signed.

  • ActionBootstrapInstallApprovedAWS::SSM::Document

    The same first install, carrying your admin’s signature. If you add an approval key, every first install refuses a release your admin didn’t sign, even one we signed.

  • ActionDocumentFingerprintAWS::SSM::Parameter

    Names the current version of these documents and your release and device settings. An older version refuses to run, and our role can’t change this value.

  • CommandOutputBucketAWS::S3::Bucket

    Holds the output of our named actions for one day, encrypted, with public access blocked. Our role reads only this bucket’s named-actions folder.

  • CommandOutputBucketPolicyAWS::S3::BucketPolicy

    Refuses any access to that bucket that isn’t over HTTPS.

Security logA record in your account that we can’t read or erase.3
  • SecurityLogAWS::Logs::LogGroup

    CloudWatch log group for every action and snapshot. Kept for 365 days unless you choose otherwise.

    Kept if you delete the stack

  • SecurityCollectorDocumentAWS::SSM::Document

    Records installed software, launch settings, SSH keys and SSH logins.

  • SecurityCollectorAssociationAWS::SSM::Association

    Runs that record on every cloud computer every 30 minutes.

Audit trailOn unless you set CreateTrail to false because an organization trail already covers the account.3
  • TrailAWS::CloudTrail::Trail

    Records read and write management events across Regions, with log file validation. Data events are not enabled by this template.

  • TrailBucketAWS::S3::Bucket

    Holds the trail’s logs, encrypted and versioned, with public access blocked.

    Kept if you delete the stack

  • TrailBucketPolicyAWS::S3::BucketPolicy

    Lets only this trail write to the bucket, over HTTPS.

Security alertsEmails SecurityAlertEmail, which every stack sets, when our role moves a disk, removes a computer, deletes a disk or launches a computer with its own user data, and when anyone changes your backups, this stack or the computers’ inbound rules.9
  • SecurityAlertTopicAWS::SNS::Topic

    Sends the alerts.

  • SecurityAlertSubscriptionAWS::SNS::Subscription

    Delivers them to SecurityAlertEmail, once you confirm the subscription.

  • SecurityAlertTopicPolicyAWS::SNS::TopicPolicy

    Lets only the stack’s alert rules publish.

  • DiskMoveAlertRuleAWS::Events::Rule

    Our role attaching, detaching or replacing a disk, or trying to change a computer's attributes. Disks move only for resizes and replacements.

  • UserDataLaunchAlertRuleAWS::Events::Rule

    Our role launching a computer with its own user data. We never send it, and our images ignore it.

  • DiskRemovalAlertRuleAWS::Events::Rule

    Our role or the disk custodian removing a computer, deleting a disk or touching a snapshot.

  • BackupChangeAlertRuleAWS::Events::Rule

    Anyone deleting a backup or changing a backup vault, its lock or a backup plan.

  • StackChangeAlertRuleAWS::Events::Rule

    Anyone updating or deleting this stack. Our role can’t, so this tells you when someone on your side changed a setting.

  • InboundRuleAlertRuleAWS::Events::Rule

    Anyone adding or changing an inbound rule on the computers’ security group, which needs none.

BackupsYour own copies of every cloud computer disk, in a vault our role can’t read, change or delete. Daily backups are off unless you set DailyBackups to true (about USD 3 per computer per month); a disk is always backed up before it’s deleted.4
  • BackupVaultAWS::Backup::BackupVault

    Holds the backups. Its lock refuses to delete one before BackupRetentionDays (14 by default), and its policy refuses every change from our roles. Choose compliance in BackupVaultLockMode to make the lock permanent after three days.

    Kept if you delete the stack

  • BackupRoleAWS::IAM::Role

    Lets AWS Backup take and restore the snapshots, with AWS’s own backup policies.

  • BackupPlanAWS::Backup::BackupPlan

    A backup of every disk once a day at 05:00 UTC, kept for BackupRetentionDays.

    Only if you turn it on

  • BackupSelectionAWS::Backup::BackupSelection

    Picks every disk tagged to this connection. Our role can’t remove those tags.

    Only if you turn it on

Disk custodianThe only way our role can delete a disk or remove a computer. You can read its code in the template.5
  • DiskCustodianFunctionAWS::Lambda::Function

    Removes a computer only after setting every disk to survive it, and deletes a detached disk only once a backup taken after the request is in your vault. Our role can call it and nothing else about it.

  • DiskCustodianRoleAWS::IAM::Role

    Lets the custodian delete and tag only your team’s disks, remove your team’s computers and start backups.

  • DiskCustodianLogGroupAWS::Logs::LogGroup

    The custodian’s log: each call’s action and outcome.

    Kept if you delete the stack

  • DiskCustodianSweepRuleAWS::Events::Rule

    Every 15 minutes, finishes deletions whose backup has completed.

  • DiskCustodianSweepPermissionAWS::Lambda::Permission

    Lets only that rule start the custodian.

Disk move approvalOnly if you set RequireDiskMoveApproval to true. Every disk move then needs a team admin's signature from a key in DeviceApprovalKeys.4
  • DiskMoveApprovalGateAWS::IAM::RolePolicy

    Denies our access role attaching any disk itself and lets it call only the approval function.

  • DiskMoveApprovalFunctionAWS::Lambda::Function

    Attaches a disk only to one of the two computers an admin signed for, before the approval expires, once each.

  • DiskMoveApprovalRoleAWS::IAM::Role

    The function's role: attach your team's tagged disks and record each use.

  • DiskMoveApprovalUsesAWS::DynamoDB::Table

    Records each approval's use so it can't be replayed.

NetworkOnly when you choose a new network. Otherwise you name your own subnet and security group.8
  • ComputerVpcAWS::EC2::VPC

    A dedicated VPC, 10.88.0.0/16.

  • ComputerInternetGatewayAWS::EC2::InternetGateway

    Outbound internet access.

  • ComputerGatewayAttachmentAWS::EC2::VPCGatewayAttachment

    Attaches the gateway to the VPC.

  • ComputerSubnetAWS::EC2::Subnet

    One subnet, 10.88.0.0/20, in one Availability Zone.

  • ComputerRouteTableAWS::EC2::RouteTable

    Routes for that subnet.

  • ComputerDefaultRouteAWS::EC2::Route

    Sends outbound traffic to the internet gateway.

  • ComputerSubnetRouteTableAssociationAWS::EC2::SubnetRouteTableAssociation

    Links the subnet to its routes.

  • ComputerSecurityGroupAWS::EC2::SecurityGroup

    No inbound connections. All outbound traffic.

Access role

What we can do. And what we can't.

One role, defined in your stack. Changing it takes a stack update that you apply.

Can

  • Launch cloud computersOnly through your stack’s launch template, from images you list in AllowedImageIds, in the instance families and disk cap your stack allows, in its subnet and security group, tagged to your team, with instance metadata tokens required. Bare-metal sizes are refused. AWS has no IAM condition for user data, so a launch request can still set its own, but our images ignore it and we never send it. The security log records each computer’s user data digest, and SecurityAlertEmail gets an email if our role sends any.
  • Start, stop and resize themOnly computers and disks tagged to your team. Nothing else in your account.
  • Ask your disk custodian to remove a computer or delete a diskYour stack’s custodian keeps every disk when a computer is removed, and deletes a disk only after your vault holds a backup taken after the request.
  • Run the named actionsOnly the documents your stack created, only on your team’s computers. Their output goes to your stack’s command output bucket, the only place our role reads results from.
  • Hand each computer a one-time network keyEncrypted with your stack’s key, readable only by the computer it was made for.
  • Read basic EC2 detailsInstances, images, subnets, routes, security groups, volumes and instance types, to run checks.

Can't

  • Open a shell or a Session Manager session
  • Use the serial console, EC2 Instance Connect, console output or screenshots
  • Change a computer's user data, launch template or root disk in place
  • Change or remove the security alerts
  • Create or change commands, or run any document your stack didn’t create or an older version of one
  • Create or change IAM users, roles or policies
  • Snapshot, image or export disks
  • Delete a disk or remove a computer itself, or reattach a disk waiting to be deleted
  • Read, change or delete your backups, the backup vault, its lock or the backup plan
  • Change the disk custodian
  • Read, change or delete any logs, including your security log
  • Read the output of any command other than our named actions, or list your parameters
  • Stop, change or delete the stack’s CloudTrail trail
  • Change a running computer’s settings or open inbound ports
  • Touch any S3 bucket but the stack’s command output bucket, or databases, secrets or anything else in your account
Every IAM permissionMost apply only to resources tagged to your team.38
  • ec2:DescribeInstances
  • ec2:DescribeRouteTables
  • ec2:DescribeNatGateways
  • ec2:DescribeImages
  • ec2:DescribeSubnets
  • ec2:DescribeSecurityGroups
  • ec2:DescribeVolumes
  • ec2:DescribeVolumesModifications
  • ec2:DescribeInstanceStatus
  • ec2:DescribeInstanceTypeOfferings
  • ec2:DescribeInstanceTypes
  • ec2:RunInstances
  • ec2:CreateTags
  • ec2:StartInstances
  • ec2:StopInstances
  • ec2:ModifyVolume
  • ec2:AttachVolume
  • ec2:DetachVolume
  • lambda:InvokeFunction
  • kms:Decrypt
  • kms:DescribeKey
  • kms:CreateGrant
  • kms:GenerateDataKeyWithoutPlaintext
  • kms:ReEncryptFrom
  • kms:ReEncryptTo
  • kms:Encrypt
  • kms:GenerateDataKey
  • iam:PassRole
  • iam:GetRole
  • iam:GetInstanceProfile
  • ssm:PutParameter
  • ssm:AddTagsToResource
  • ssm:GetParameter
  • ssm:DeleteParameter
  • ssm:GetParameterHistory
  • ssm:SendCommand
  • s3:GetObject
  • s3:ListBucket

Security log

A record you own. We can't erase it.

A CloudWatch log group in your account, created by your stack.

Every action, before it runs

Each named action first writes an event to your log: which action, which computer and its inputs. Long inputs are recorded as a hash. If the write fails, the action stops.

A snapshot every 30 minutes

Your stack also records our installed software, the launch settings, authorized SSH keys and SSH logins on each computer.

Append-only for us

Computers can only add events. Our role has no CloudWatch Logs permissions, so we can't read, change or delete anything in it. Only your own AWS admins control it.

It keeps events for 365 days by default, and you can choose from 30 days to 10 years. It stays if you delete the stack.

CloudTrail too

AWS CloudTrail records each command we send, with the role that sent it.

Before you create it

Review it in your own AWS console.

01

Open AWS CloudFormation

A team admin starts from Your cloud in the console sidebar and chooses Open AWS CloudFormation.

02

Read the template

AWS opens its own quick-create page in your account, with the template link shown. You can also download the template from the setup page.

03

Create the stack

Nothing exists until you acknowledge the IAM roles and choose Create stack. Afterwards, the stack's Resources tab lists everything it made.

04

Enter your account ID

We check the role, its external ID, the template version, the network, outbound HTTPS and the disk key before any computer launches.

Removing it

Delete the stack. Our access goes with it.

01

Delete your cloud computers

Delete them from the console, or terminate them yourself in EC2, where they're tagged to your team. They're launched by our role, not by the stack, so do this first.

02

Delete the stack

CloudFormation deletes our access role, the named actions and the network it made. With the role gone, we can't act in your account.

03

Keep or delete the rest

Your security log and the stack's encryption key stay, so the record outlives our access. Delete them yourself when you no longer need them.

FAQ

Questions and answers.

What do we still have to trust you with?

Three things. Runtime updates install software we build, and your security log records exactly which releases ran. We choose which device keys can sign in, and every change is in your security log. And we run the private network your devices use to reach your computers.

Who pays for what?

AWS bills you directly for your cloud computers and their storage. We bill your team per member.

Can you open a shell on our computers?

Not with the access role. Support access is a separate role that exists only if you choose Limited or Full support access and an end time on the stack. It stops working at that time, even mid-session, and every session is recorded in CloudTrail. Limited runs only read-only diagnostics; Full allows a shell.

How long can you hold access?

Each session with the access role lasts at most 60 minutes, and only works with your connection's external ID.

Can we use our own VPC?

Yes. Choose your own network during setup and name a subnet and security group. Computers need outbound HTTPS and no inbound access.

Why isn't the template published here?

Each template is made for one team and carries that team's connection details. Your admin can read and download yours before creating anything.

Who can set it up?

Team admins, from Your cloud in the console sidebar. If you don't see it, email hello@persistentcompute.ai.