Files
inecs f8d3cbdd59 Initial commit: VMware vSphere API simulator scaffold.
Add the FastAPI app, PostgreSQL migrations, Docker/Helm packaging, API
contracts, docs, client examples, and the unit/integration/compatibility
test suite for local client and tooling labs without a real vCenter.
2026-07-18 04:42:11 +03:00

2.8 KiB
Raw Permalink Blame History

Language / Язык: English | Русский

Авторизация

Gate роль → privilege для мутирующих REST-эндпоинтов (и decorator-style hook для SOAP): app/vsphere/security/authz.py, platform_rest.py.

Эндпоинты

Метод Путь Заметки
GET /api/vcenter/privilege Каталог привилегий
GET /api/vcenter/authorization/roles Role → набор privilege
GET/POST/DELETE /api/vcenter/authorization/permissions[/{permission_id}] Привязки principal ↔ role ↔ entity
GET/POST/PATCH/DELETE /api/vcenter/identity/providers[/{provider}] Stand-in'ы identity-provider LocalOS + OIDC + SAML

Роли (seed)

Роль Область
Administrator Каждая привилегия в каталоге
ReadOnly System.Anonymous, System.Read, System.View, Datastore.Browse
VirtualMachinePowerUser Read + взаимодействия power/snapshot/clone
VirtualMachineAdministrator Набор power-user + привилегии create/delete/reconfigure/tag/content-library

ROLE_PRIVILEGES в authz.py задаёт точные наборы привилегий; неполный пример gated-привилегий: VirtualMachine.Inventory.Create, VirtualMachine.Inventory.Delete, VirtualMachine.Interact.PowerOn, VirtualMachine.Config.CPUCount, VirtualMachine.Provisioning.Clone, Datastore.FileManagement, Network.Assign, InventoryService.Tagging.CreateTag, ContentLibrary.AddLibraryItem, Authorization.ModifyPermissions.

Как работает gating

  • require_privilege(*needed) — фабрика зависимостей FastAPI: резолвит сессию, загружает роли (из сессии или vsphere_credentials, если нет), и поднимает HTTP 403 (unauthorized), если отсутствует любая из перечисленных привилегий.
  • require_read — сокращение для require_privilege("System.Read").
  • Permissions также могут ограничить роль конкретным entity MOID (PermissionSpec(principal, role, entity_moid, propagate)); seed ограничивает readonly@vsphere.local datacenter'ом, а двух VM-admin принципалов — папкой VM.

Seeded-принципалы

Четыре принципала @vsphere.local и их роли — в Аутентификация; как permissions скоупятся по профилю — в Профили seed.