feat: manage bounded automation service accounts

This commit is contained in:
2026-07-29 17:48:35 +02:00
parent 984a015704
commit 6b0dd8beab
10 changed files with 1633 additions and 113 deletions
+11 -1
View File
@@ -93,6 +93,8 @@ ACCESS_PERMISSIONS: tuple[PermissionDefinition, ...] = (
_permission("access:api_key:read", "View API keys", "List API keys without revealing secrets.", "Tenant access", "tenant"),
_permission("access:api_key:create", "Create API keys", "Create tenant API keys within delegation limits.", "Tenant access", "tenant"),
_permission("access:api_key:revoke", "Revoke API keys", "Revoke tenant API keys.", "Tenant access", "tenant"),
_permission("access:service_account:read", "View service accounts", "List non-login automation principals and their current scope ceilings.", "Tenant access", "tenant"),
_permission("access:service_account:write", "Manage service accounts", "Create, update, suspend, and retire scope-bounded automation principals.", "Tenant access", "tenant"),
_permission("access:setting:read", "View settings", "Read access and governance settings.", "Tenant access", "tenant"),
_permission("access:setting:write", "Manage settings", "Update access and governance settings.", "Tenant access", "tenant"),
_permission("access:credential:read", "View credentials", "List reusable credential envelopes without revealing secret values.", "Tenant access", "tenant"),
@@ -192,6 +194,8 @@ ACCESS_ROLE_TEMPLATES: tuple[RoleTemplate, ...] = (
"access:api_key:read",
"access:api_key:create",
"access:api_key:revoke",
"access:service_account:read",
"access:service_account:write",
"access:setting:read",
"access:setting:write",
"access:credential:read",
@@ -244,6 +248,7 @@ ADMIN_READ_SCOPES = (
"admin:groups:read",
"admin:roles:read",
"admin:api_keys:read",
"access:service_account:read",
"admin:settings:read",
"system:tenants:read",
"system:accounts:read",
@@ -619,10 +624,14 @@ def _route_factory(context: ModuleContext):
from govoplan_access.backend.api.v1.auth import router as auth_router
from govoplan_access.backend.api.v1.routes import router as access_admin_router
from govoplan_access.backend.api.v1.service_accounts import (
router as service_account_router,
)
router = APIRouter()
router.include_router(auth_router)
router.include_router(access_admin_router)
router.include_router(service_account_router)
return router
@@ -641,7 +650,7 @@ manifest = ModuleManifest(
ModuleInterfaceProvider(name=CAPABILITY_ACCESS_PEOPLE_SEARCH, version="0.1.0"),
ModuleInterfaceProvider(
name="auth.automation_principal",
version="0.1.0",
version="0.2.0",
),
),
permissions=ACCESS_PERMISSIONS,
@@ -660,6 +669,7 @@ manifest = ModuleManifest(
access_models.User,
access_models.Group,
access_models.Role,
access_models.ServiceAccount,
access_models.OrganizationUnit,
access_models.Function,
access_models.FunctionRoleAssignment,