carlos / carloku Public

Clone
git clone https://amadan.net/carlos/carloku

Plain git — no account needed to clone.

Download

Download this file

1# Members and service credentials
2
3Two kinds of thing act on your apps. A person is a Keymail address with a
4role in the account. A credential is something a server holds — a CI runner,
5a job, a router — with its reach decided when it was minted and no human
6attached to it. They are administered in different places, and the mistakes
7they invite are different too.
8
9## People
10
11Invites go out from the Team page in the console, addressed to a Keymail
12address. The invitation lands in that person's Keymail Apps inbox — the same
13sealed path a sign-in confirmation takes — so inviting somebody sends them no
14email. It works once and expires after seven days, and an owner can revoke a
15pending one before it is used. If the delivery itself fails the console hands
16you the link to pass on yourself; the invitation is real by then either way.
17
18There are two roles. A member does the day-to-day work on the account's apps
19— deploy, promote, roll back, config, domains, logs. An owner does all of
20that plus everything that changes who can act or ends something permanently:
21inviting, removing a member, handing ownership over, deleting an app or the
22account, and every credential in the next section. Handing over ownership is
23a single transaction that steps you down to member as it lifts them up, so
24there is no moment with two owners or none.
25
26Some of those actions ask for your passkey again even though you are already
27signed in — removing a member, transferring ownership, deleting the account,
28approving a terminal or revoking one, minting or rotating a credential. The
29gesture has to be within the last five minutes. A session cookie proves who
30you are and not that you are still at the keyboard, which is the whole
31question when the action is irreversible.
32
33None of this has a `carlos` verb. Membership is console work, deliberately:
34the passkey prompt is the point of it, and a terminal has nowhere to put one.
35
36## Credentials a server holds
37
38```sh
39carlos services create -role publish -app hello ci-runner
40```
41
42The secret prints once, right there in your terminal, and only its hash is
43stored. There is no page and no command that will show it to you again — a
44lost secret means rotating, not re-running. Get it into the app the way you
45get any credential in:
46
47```sh
48carlos secrets set -app hello CARLOS_SERVICE_TOKEN=<the secret>
49```
50
51Pick the narrowest role that does the job. `publish` is the deploy loop:
52claim an app, ship, promote, roll back, manage hostnames, retire. `operate`
53is runtime work with no release authority — restart, config, logs. `instance`
54is the older app-token shape, kept for what already depends on it. `admin` is
55the union of those plus ledgers, storage and placement. It also grants
56object-store access, and that mints a real IAM user — hand one out only when
57you mean to hand over.
58
59`-app hello` binds the credential to one app; it cannot claim new ones.
60Leave it off for an account-wide credential. Either way the reach is fixed at
61mint: if you join another account next month, the credential you minted does
62not follow you there. Its rate budgets are its own, separate from yours — see
63[Limits](/docs/limits/) — and it never expires, so revoking is the control.
64
65## Rotate replaces, revoke stops
66
67This is the distinction to have straight before you need it.
68
69```sh
70carlos services rotate ci-runner
71```
72
73Rotation mints a fresh secret and prints it once, keeping the name, the role,
74the scope and the history. The old secret is refused on the credential's
75*next* call — work already in flight is unaffected. That makes rotation a
76hygiene move: something you schedule.
77
78```sh
79carlos services revoke ci-runner
80```
81
82Revocation is the hard stop: the credential's next call fails whatever secret
83it is holding. It is idempotent, so revoking a name twice, or one that never
84existed, answers the same way. And unlike minting and rotating, it does not
85ask for your passkey — one step, at whatever hour you find out.
86
87If you suspect a secret has leaked, revoke. Then mint a replacement under a
88new name if the work still needs doing.
89
90To see what exists:
91
92```sh
93carlos services ls
94```
95
96Live credentials only — name, role, scope, when it was minted, when its
97current secret began, when it was last used, and who minted it. A revoked one
98disappears from the list entirely, so this is inventory, not history.
99
100Every verb here is owner-only, and closed to service credentials themselves:
101no credential can mint, rotate or revoke any credential, not even its own.
102A leaked one therefore cannot quietly issue itself a quieter sibling. The
103console's Account settings page carries the same list, the same mint form,
104and rotate and revoke controls per row.
105
106Each verb takes `-account` when you belong to more than one; with a single
107account you can leave it off.
108[carlos services](https://carlosframework.com/docs/cli/#carlos-services) has
109the rest of the flags.
110