Repository navigation
Conversation
|
Adversarial review (independent reviewer, checked against the server, console, auth service, and CLI on main) Docs-only diff. No blockers. Five claims were wrong or incomplete:
Checked and correct: endpoint paths and body fields ( |
|
I think the thing for you to decide, out of shock, is if you like where these drugs are put. They seem correct to me. Please feel free to move them around as needed, and otherwise just land. This is your PR to take over. |
…n lifetime after rule deletion
Matches the console's service account sheet (_shorebird#3607-#3609): the account is created by name with the Developer role and nothing that signs in; keys are created afterward under API keys, revoked with Revoke, rules removed with Remove, and the account deleted with Delete account. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
e6d4fdc to
faa7d24
Compare
|
Adversarial review: all five findings were fixed in 905f8b3.
|
|
Rebased on main and updated for the console's new service account sheet (_shorebird#3604 to #3609) in faa7d24:
No screenshots or embeds on these pages, so nothing to re-capture. Not merging: this should land after #3609 and #3605 are deployed (see Landing). |
|
lgtm |
#733 renamed #issue-and-revoke-keys to #create-and-revoke-keys, and the console now creates a service account with the Developer role first. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Landing check at faa7d24: CI is green and Eric has LGTM'd, but this can't land yet.
For Abhishek while reviewing: the page says a service account appears in the audit log as The renamed I'll merge through the queue once those PRs are deployed to the console and this has an approval. |
Why
Every API key today belongs to a person, so CI breaks or keeps too much access when that person leaves or changes role. Service accounts fix that: an organization owns them, they hold one role, and their keys and OIDC sign-ins act with that role. The console page for them exists, but the docs only reached it through the GitHub Actions OIDC walkthrough. This adds task-oriented pages so a reader can decide when to use a service account, set one up, and keep it narrow.
What
/account/service-accounts/: when to use one instead of a personal key, who can manage them, creating one (console andshorebird api; the console creates it by name, with no first key, and keys or workflows are added in its sheet afterward), choosing a role (Viewer, Developer, App Manager, Auditor; never Admin or Owner; all four on every plan), creating, rotating and revoking keys (default 1 year, at most 1 year or never), using a key viaSHOREBIRD_TOKENorAuthorization: Bearer, what a service account is refused (service_account_forbidden), deleting one./account/trust-rules/: when to use a trust rule, the plan requirement (adding needs Business or Enterprise; existing rules keep working after a downgrade), exactly what a rule matches (owner ID pinning, workflow file, reusable workflows, environment, ref pattern with a trailing*), the one-service-account-per-match rule, the 15-minute access token the CLI renews, listing and deleting rules, and the refusal messages. The setup walkthrough stays on the GitHub Actions page and is linked, not repeated.Audit log details (the Auditor role's use, how service account actions and
service_account.sign_inappear, OCSF export) are kept to a sentence and link to/account/audit-logs/, which is a separate docs PR. Those links use the absolutehttps://docs.shorebird.dev/account/audit-logs/URL so this PR builds on its own; they resolve once that page is published.No other docs PRs were open when this was written, so nothing overlaps.
Landing
After the console's service accounts sheet ships: _shorebird#3609 (top of the stack #3604, #3606, #3607, #3608, #3609) and #3605 (the Settings tab) merged and deployed to the console. The page describes that UI (Create service account, Create key, Revoke, Remove, Delete account) and Settings > Service Accounts.
Checks
npm run build(astro check plus link validation), Vale, cspell, Prettier, and the component label lint all pass locally.🤖 Generated with Claude Code