SKIX Root Binder Admission Core
결론
향후 ISkixFrameworkService의 모든 요청이 Control, Execution, Product-domain
ManagerService로 전달되기 전에 통과할 단일 fail-closed admission 경계를 구현했다.
권한·호출 범위·Runtime 준비 상태 판정을 각 ManagerService나 DeviceAgent handler에
복제하지 않는 기반이다.
공개 계약 SkixFrameworkContract에는 root service 이름 skix_framework, signature
permission 이름, API version 1과 24개 Manager ID가 정의돼 있다. 서버 내부의
FrameworkAdmissionController는 Android/Binder 타입에 의존하지 않는다.
판정 순서
Android에서 검증해 만든 caller identity + request metadata
-> 필수 metadata가 있는가
-> 지원 API version인가
-> 알려진 Manager ID인가
-> 신뢰된 caller인가
-> 해당 read/mutation 범위가 허용되는가
-> Runtime lifecycle이 요청을 받을 수 있는가
-> ALLOWED 또는 안정된 denial code
형식 오류, 알 수 없는 Manager, 신뢰되지 않은 호출자, 범위 밖 요청, 확인 불가능한
내부 오류는 모두 아래 서비스로 전달하지 않는다. 접근 정책 또는 lifecycle 조회 중
예외도 허용으로 흘려보내지 않고 retry 가능한 INTERNAL_ERROR로 닫는다.
| Runtime 상태 | discovery/health read | mutation |
|---|---|---|
READY |
허용 | 허용 |
DEGRADED |
허용 | 거부, retry 가능 |
CREATED, STARTING, RECOVERING, FAILED, STOPPING, STOPPED |
거부 | 거부 |
DEGRADED에서 discovery/health만 읽게 하는 이유는 실행을 안전하다고 오인하지 않으면서
복구 상태를 관측할 수 있게 하기 위해서다.
AOSP 정합성
로컬 Android 13 QSSI frameworks/base에서 SystemService.onStart()의 Binder publish와
boot phase 500·520·600·1000, 외곽 Binder 경계의 calling UID·permission 검사 패턴을
확인했다. SKIX는 승인한 하이브리드 구조에 따라 무거운 로보틱스 Runtime을
system_server 밖에 유지한다.
Android caller resolver는 Android UID/PID인 Binder.getCallingUid()/getCallingPid()와 UID 소유 package를 기준으로
CallerIdentity를 만들고, shared UID로 package가 모호하면 fail-closed 거부한다.
AndroidCallerAccessPolicy는 UID/package ownership,
com.sk.airbot.permission.ACCESS_SKIX_FRAMEWORK, framework package signature match를 검증하고
제품별 Manager operation grant는 주입된 ManagerScopePolicy에 위임한다.
payload 안의 package 이름을 신뢰해서는 안 된다.
구현됨 / 아직 아님
구현·JVM 검증:
- service·permission·API version·24개 Manager ID의 안정된 공개 계약
- immutable caller/request metadata와 안정된 admission/denial code
- identity·scope·lifecycle fail-closed 판정
READY/DEGRADED요청 matrix와 예외 차단 테스트- known ID만 허용하고 publish 뒤 변경을 막는 explicit
ManagerEndpointRegistry<T> - caller별 허용 Manager만 노출하는
FrameworkRootEndpoint<IBinder> - 구현된
ISkixFrameworkService.aidl, Android caller resolver와 generatedISkixFrameworkService.Stubdelegation/error mapping - Android permission·UID/package ownership·framework signature trust policy와
fail-closed
ManagerScopePolicy위임
후속 구현:
- 제품 package/user별
ManagerScopePolicygrant 구성 - 24 concrete Manager Binder와 도메인별 typed Binder 계약
SkixFrameworkSystemServicepublish 및 boot phase 연결- Runtime bind/death/generation 복구
- permission XML, service context, SELinux, product makefile/overlay 포함
- signed image, boot, denial UID, Binder death 및 실기기 검증
따라서 현재 판정은 root AIDL·caller resolver·trust policy·admission·root endpoint·Binder Stub의 source/JVM 및
Android release compile 검증 완료, SystemServer publish·제품 이미지·실기기 미검증이다.
제품의 service list에 skix_framework가 노출된다는 증거는 아직 아니다.
바로 다음 구현
구현된 versioned root AIDL과 얇은 Android Binder Stub/trust adapter 다음에는 제품별
ManagerScopePolicy grant, 24 concrete Manager Binder 조립과 SystemServer publication을 연결한다.
공개 SDK에는 도메인 구현체를 노출하지 않는다.
그 경계가 생긴 다음 MR6 producer를 MR7 StateManager로 dual-publish하여 legacy/typed 동등성을 측정한다. 이 순서가 cross-process seam 없이 DeviceAgent wiring부터 만드는 것을 막는다.