Головна/Рецепти (Cookbook)/Адмініструйте platform-credentials ENУКРРУС API-довідник (ReDoc) ↗

Адмініструйте platform-credentials

Як названий оператор на сервісній площині: збережіть platform-fallback і перегляньте credentials усіх рівнів.

Місце оператора: Internal Admin API з admin-scoped токеном і міткою X-Admin-Actor, створення platform-рівневого ключа, на який усі провалюються.

Мета

Створити platform-default-credential, атрибутований названому оператору, а потім побачити credentials різних рівнів власності в одному списку.

Передумови

  • Сервісний токен зі scope provider-credentials.admin: export ADMIN_TOKEN=... (Service Plane Tokens).

Кроки

1. Прочитайте каталог зі схемами

Викличте GET /internal/v1/admin/providers. Очікуване 200: кожен провайдер із credential_schema inline — create-форма рендериться прямо з цього (Provider Schemas).

2. Створіть platform-credential — з явним власником

Викличте POST /internal/v1/admin/credentials. Адмін-площина називає власника в тілі; platform не бере owner_id:

curl -s -X POST "$CREDS_BASE/internal/v1/admin/credentials" \
  -H "Authorization: Bearer $ADMIN_TOKEN" \
  -H "X-Admin-Actor: panel:olha" \
  -H "Content-Type: application/json" \
  -d '{
    "provider_code": "'$CODE'",
    "owner_type": "platform",
    "name": "Shared fallback",
    "credentials": {"api_key": "sk-platform-0123456789"},
    "make_default": true
  }'

Очікуване 201: owner_type: "platform", owner_id: null, is_default: true, маскований секрет. Невідповідні координати власника — platform з owner_id, або user/organization без нього — були б 400.

3. Один список — кожен рівень

Викличте GET /internal/v1/admin/credentials без фільтрів, потім звужено:

all_records = httpx.get(f"{CREDS_BASE}/internal/v1/admin/credentials",
                        headers=admin_headers).json()
platform_only = httpx.get(f"{CREDS_BASE}/internal/v1/admin/credentials",
                          params={"owner_type": "platform"}, headers=admin_headers).json()

Очікувано: нефільтрований список змішує записи user, organization і platform (лише маски); owner_type=platform звужує до fallback-ключів.

4. Атрибуція справжня

Create з кроку 2 ліг в audit-стрічку з actor_id = "service:<client_id>!panel:olha" — відфільтруйте його в сценарії 09. Анонімний виклик (без X-Admin-Actor) тут би спрацював — на відміну від reveal — але панель завжди надсилає мітку: бюджети на кожного оператора й читабельна стрічка варті одного заголовка.

Перевірено тестом test_s07_administer_platform_credentials.