Fly.io plugin

The Fly.io plugin lets a Vaubaan Gateway mission use Fly.io without handing the agent a credential. Apps on Fly.io: machines, images, volumes and snapshots, secrets, IP addresses and certificates — one resource per app.

One account is one Fly organization token; one resource is one app of that organization. The owner labels each app staging or prod, and writes are held per label. Machines only run images pinned by digest under the allowed prefixes of the account, secret values are never read back, and running a command inside a machine is its own permission.

Permissions

Each permission is a named risk of the plugin's catalog: a mission holds an explicit list of them, never "all". The severity is computed from the permission's six axes (undo, blast radius, data, cost, visible to, lasts); nothing is decided from it.

PermissionWhat it allowsSeverityWhy it is a risk
fly.read-orgList the apps and regions of the organizationlowApp names, ids and networks, and the platform regions. In an organization that hosts one app per customer, the list of apps is the list of customers; the answer is filtered to the apps of the mission.
fly.read-runtimeRead machines, volumes, snapshots, IP addresses and certificateslowMachine configurations (image, region, size, services, plain environment variables), events, processes, volumes and their snapshots, the app's addresses and certificates. People sometimes put secrets in plain environment variables.
fly.read-secret-namesList the names of the app secretslowNames, digests and dates of the secrets set on an app, never their values: any value in Fly's answer is replaced before the agent sees it.
fly.read-logsRead the app logslowWhat the app printed recently. Logs can carry customer data, and secrets when an app prints them.
fly.app-createCreate an app in the organizationmediumA new app on a private network of its own. Costs nothing until it runs machines. It is not part of the mission until its owner labels it and adds it.
fly.app-destroyDestroy an appcritical (only for staging, prod)Removes the app with its machines, addresses, certificates, volumes and their snapshots. For a customer instance, its data is gone for good.
fly.machine-createCreate a machinelow (only for staging, prod)A new VM in the app, billed while it runs. A creation sets a whole configuration and an image: a mission needs those two permissions too.
fly.machine-config-writeSet a machine configurationhigh (medium on staging; only for staging, prod)Environment variables, start command, files written at boot, mounted volumes, autostop and the services the machine exposes. A configuration can start any command with the app's secrets in its environment.
fly.deployChange the image a machine runsmedium (low on staging; only for staging, prod)The machine restarts on the new image, which runs with the app's secrets and volume. Only images pinned by digest under the connection's allowed prefixes are accepted, and a mounted volume needs a fresh snapshot first.
fly.scaleResize a machinelow (only for staging, prod)CPU and memory of a machine, billed while it runs. The machine restarts.
fly.machine-powerStart, stop, restart, suspend or cordon a machinelow (only for staging, prod)A stopped or cordoned machine serves no traffic until it starts again or a request wakes it. Changes no data.
fly.machine-destroyDestroy a machinemedium (only for staging, prod)The machine and its root filesystem are gone; a volume it mounted stays. A stopped machine only: a running one must be stopped first.
fly.machine-execRun a command inside a machinehigh (only for staging, prod)Any command, with the app's secrets in its environment and its volume mounted; the output comes back to the agent. On a Vaubaan instance this reaches the master key and every account it seals.
fly.volume-createCreate an empty volumelowPersistent storage billed by size, in one region. Holds no data yet.
fly.volume-restoreCreate a volume from a snapshot or another volumemedium (only for staging, prod)Copies data into a new volume. A machine that mounts it serves that data, which may be older than the live one. The source must belong to the same app.
fly.volume-extendExtend a volumemedium (only for staging, prod)A volume grows and never shrinks: the extra size is billed for as long as it exists.
fly.volume-backup-settingsChange automatic snapshots of a volumemedium (only for staging, prod)Turns daily snapshots on or off and sets how many days they are kept. Off, or a shorter retention, leaves less to restore from.
fly.volume-snapshotTake a volume snapshotlowA point-in-time copy, kept for the volume retention period. Changes nothing that runs.
fly.volume-destroyDestroy a volumehigh (only for staging, prod)Cannot be undone. The data survives only in snapshots still within their retention period.
fly.secret-writeSet or remove app secretsmedium (only for staging, prod)Machines pick up new values when they are next updated. A wrong or missing value, such as a master key or a sign-in setting, can lock everyone out of an instance or make its sealed data unreadable.
fly.ip-writeAllocate an IP addressmedium (only for staging, prod)A public address makes the app reachable from the internet; a dedicated IPv4 address is billed monthly.
fly.ip-releaseRelease an IP addressmedium (only for staging, prod)The app stops answering on that address and DNS pointing at it breaks. A released dedicated address is not given back.
fly.certificate-writeRequest or re-check a certificatemedium (only for staging, prod)Asks Fly to issue a certificate for a hostname, or to validate it again. Issuance succeeds only when the hostname's DNS points at the app.
fly.certificate-removeRemove a certificatemedium (only for staging, prod)HTTPS on that hostname fails until a certificate is issued again.
fly.uncategorized-writeUncategorized writemedium (the catch-all: touched only by a call no other permission covers)Catch-all for a write no other entry covers. Seeing it in the activity means the catalog misses an entry.

Presets

A preset pre-fills the permissions of a mission for one account, with a limit per period, a rate and whether each permission runs freely or asks the mission creator first. The person creating the mission adjusts it; the mission stores the explicit list.

Read-only

read-only — Look at apps, machines, volumes, secret names and logs. Changes nothing.

PermissionWhat it allowsLimit per periodRateRuns
fly.read-orgList the apps and regions of the organization200060 per minuteruns freely
fly.read-runtimeRead machines, volumes, snapshots, IP addresses and certificates5000120 per minuteruns freely
fly.read-secret-namesList the names of the app secrets50030 per minuteruns freely
fly.read-logsRead the app logs100030 per minuteruns freely

Operator

operator — Day-to-day care of existing instances: staging runs freely; production configuration, upgrades, resizes, secrets, commands inside a machine and anything destructive ask first.

PermissionWhat it allowsLimit per periodRateRuns
fly.read-orgList the apps and regions of the organization200060 per minuteruns freely
fly.read-runtimeRead machines, volumes, snapshots, IP addresses and certificates5000120 per minuteruns freely
fly.read-secret-namesList the names of the app secrets50030 per minuteruns freely
fly.read-logsRead the app logs100030 per minuteruns freely
fly[staging].machine-config-write5010 per minuteruns freely
fly[prod].machine-config-write102 per minuteask me first
fly[staging].deploy10010 per minuteruns freely
fly[prod].deploy205 per minuteask me first
fly[staging].scale205 per minuteruns freely
fly[prod].scale102 per minuteask me first
fly[staging].machine-power20020 per minuteruns freely
fly[prod].machine-power20020 per minuteruns freely
fly[staging].machine-destroy205 per minuteruns freely
fly[prod].machine-destroy51 per minuteask me first
fly[staging].machine-exec102 per minuteask me first
fly[prod].machine-exec102 per minuteask me first
fly.volume-createCreate an empty volume102 per minuteruns freely
fly[staging].volume-restore51 per minuteask me first
fly[prod].volume-restore51 per minuteask me first
fly[staging].volume-extend102 per minuteruns freely
fly[prod].volume-extend51 per minuteask me first
fly[staging].volume-backup-settings102 per minuteask me first
fly[prod].volume-backup-settings102 per minuteask me first
fly.volume-snapshotTake a volume snapshot10010 per minuteruns freely
fly[staging].volume-destroy51 per minuteask me first
fly[staging].secret-write205 per minuteask me first
fly[prod].secret-write205 per minuteask me first
fly[staging].ip-write51 per minuteask me first
fly[prod].ip-write51 per minuteask me first
fly[staging].ip-release51 per minuteask me first
fly[prod].ip-release51 per minuteask me first
fly[staging].certificate-write205 per minuteruns freely
fly[prod].certificate-write205 per minuteruns freely
fly[staging].certificate-remove51 per minuteask me first
fly[prod].certificate-remove51 per minuteask me first

Fleet upgrade

fleet-upgrade — Roll a new image across many instances: snapshot each volume, then change the image and restart, without asking each time. Only pinned images under the allowed prefixes, after a fresh snapshot. Nothing else.

PermissionWhat it allowsLimit per periodRateRuns
fly.read-orgList the apps and regions of the organization200060 per minuteruns freely
fly.read-runtimeRead machines, volumes, snapshots, IP addresses and certificates5000120 per minuteruns freely
fly.read-logsRead the app logs100030 per minuteruns freely
fly.volume-snapshotTake a volume snapshot50010 per minuteruns freely
fly[staging].deploy20010 per minuteruns freely
fly[prod].deploy50010 per minuteruns freely
fly[staging].machine-power50020 per minuteruns freely
fly[prod].machine-power50020 per minuteruns freely

Provisioner

provisioner — Create and configure customer instances: apps, machines, volumes, addresses, certificates. Secrets, restores and destruction ask first; commands inside a machine are not included.

PermissionWhat it allowsLimit per periodRateRuns
fly.read-orgList the apps and regions of the organization200060 per minuteruns freely
fly.read-runtimeRead machines, volumes, snapshots, IP addresses and certificates5000120 per minuteruns freely
fly.read-secret-namesList the names of the app secrets50030 per minuteruns freely
fly.read-logsRead the app logs100030 per minuteruns freely
fly.app-createCreate an app in the organization102 per minuteruns freely
fly[staging].app-destroy51 per minuteask me first
fly[prod].app-destroy21 per minuteask me first
fly[staging].machine-create205 per minuteruns freely
fly[prod].machine-create205 per minuteruns freely
fly[staging].machine-config-write5010 per minuteruns freely
fly[prod].machine-config-write205 per minuteruns freely
fly[staging].deploy5010 per minuteruns freely
fly[prod].deploy205 per minuteruns freely
fly[staging].scale205 per minuteruns freely
fly[prod].scale205 per minuteruns freely
fly[staging].machine-power10020 per minuteruns freely
fly[prod].machine-power10020 per minuteruns freely
fly[staging].machine-destroy205 per minuteruns freely
fly[prod].machine-destroy102 per minuteask me first
fly.volume-createCreate an empty volume205 per minuteruns freely
fly[staging].volume-restore51 per minuteask me first
fly[prod].volume-restore51 per minuteask me first
fly[staging].volume-extend102 per minuteruns freely
fly[prod].volume-extend102 per minuteruns freely
fly[staging].volume-backup-settings205 per minuteruns freely
fly[prod].volume-backup-settings205 per minuteruns freely
fly.volume-snapshotTake a volume snapshot5010 per minuteruns freely
fly[staging].volume-destroy51 per minuteask me first
fly[prod].volume-destroy21 per minuteask me first
fly[staging].secret-write5010 per minuteask me first
fly[prod].secret-write5010 per minuteask me first
fly[staging].ip-write205 per minuteruns freely
fly[prod].ip-write205 per minuteruns freely
fly[staging].ip-release51 per minuteask me first
fly[prod].ip-release51 per minuteask me first
fly[staging].certificate-write205 per minuteruns freely
fly[prod].certificate-write205 per minuteruns freely
fly[staging].certificate-remove51 per minuteask me first
fly[prod].certificate-remove51 per minuteask me first

Tools

ToolWhat it does
fly__list_regionsList regions
fly__list_appsList apps
fly__get_appRead an app
fly__create_appCreate an app
fly__destroy_appDestroy an app
fly__list_machinesList machines
fly__get_machineRead a machine
fly__list_machine_eventsList machine events
fly__list_machine_processesList machine processes
fly__wait_machineWait for a machine state
fly__create_machineCreate a machine
fly__update_machineReplace a machine configuration
fly__deploy_imageChange the image of a machine
fly__scale_machineResize a machine
fly__start_machineStart a machine
fly__stop_machineStop a machine
fly__restart_machineRestart a machine
fly__suspend_machineSuspend a machine
fly__cordon_machineRoute traffic away from a machine
fly__uncordon_machineRoute traffic back to a machine
fly__destroy_machineDestroy a machine
fly__exec_machineRun a command inside a machine
fly__list_volumesList volumes
fly__get_volumeRead a volume
fly__list_snapshotsList volume snapshots
fly__create_volumeCreate a volume
fly__extend_volumeExtend a volume
fly__update_volumeChange automatic snapshots
fly__create_snapshotTake a volume snapshot
fly__destroy_volumeDestroy a volume
fly__list_secretsList secret names
fly__set_secretsSet app secrets
fly__unset_secretRemove an app secret
fly__list_ipsList IP addresses
fly__allocate_ipAllocate an IP address
fly__release_ipRelease an IP address
fly__list_certificatesList certificates
fly__get_certificateRead a certificate
fly__request_certificateRequest a certificate
fly__check_certificateCheck a certificate
fly__remove_certificateRemove a certificate
fly__get_logsRead app logs

Health

Health: not enough reports yet. A plugin version is deemed validated by the community with at least 200 reports and 90 % of them successful, over the last 90 days, as reported by the instances whose operators turned community telemetry on. It is a community signal, not a security guarantee.

Last changed 2026-10-16. This page as Markdown: /plugins/fly.md