Each controller, runner and client reads and writes the bucket with its own access key, and the computers need not be on one network. Below, the controller is on ctl and a runner on gpu.
Create the controller
ctl$corbie init --store 's3://my-bucket/main?region=eu-west-2' --ceiling exec --name cloud
ctl$corbie controller policy cloud-controller > controller-policy.json
the addressthe bucket's name, a path in the bucket and the region
the access keyread from AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY, or a profile in ~/.aws/credentials; never from the address
Run init with an access key that can write to the bucket.
corbie controller policy <name> prints an IAM policy that limits an access key to the objects one controller, runner or client reads and writes. For each, create an IAM user with its policy and an access key, and start its process with the key in the environment. These policies are the only access control between the processes on a bucket.
Under systemd, put the key in a file only root can read, named by EnvironmentFile= in the unit from One computer.
ctl$ corbie start controller
Add a runner or a client on another computer
gpu$corbie runner card | ssh ctl corbie controller enrol - --tags gpu | corbie runner trust - --ceiling exec
ctl$corbie controller policy gpu-runner > runner-policy.json
gpu$corbie start runner
ctl$corbie check --tag gpu
Served directory explains the first line and has the line for a client.
corbie start must stay running on each computer. It polls the bucket every --interval (default 2s), with a few requests each time. The computers' clocks must agree within five minutes.
Which services work
Amazon S3works, and its policies enforce the limits above
S3-compatible serviceworks if it has conditional writes (If-None-Match, If-Match)
An S3-compatible service's policies enforce the limits only if they support the condition key s3:if-none-match. Add &endpoint=https://host to its address.
Next: Functions runs the controller and the runners as serverless functions.