보안·권한·승인
릴리스 범위
이 페이지는 공통 권한 원칙과 릴리스별 보안 계약을 함께 설명합니다. Run·Apply와 PDF는 V1 계약이며, Marketplace·Organization Library, 다른 사용자와의 공유, Publication, App Deployment와 Embed는 V2 계획입니다.
목록에 보여도 실행할 수 없는 이유
PXFLOW나 설치한 Component catalog에서 항목을 찾을 수 있다는 사실과 실제로 사용할 수 있다는 사실은 서로 다릅니다. 다음 조건을 모두 만족해야 연결하거나 실행할 수 있습니다.
- 해당 입력이나 결과가 연결 대상으로 공개되어 있습니다.
- 현재 이용권에서 그 기능을 사용할 수 있습니다.
- 사용자가 Project와 Flow에 필요한 권한을 가지고 있습니다.
- Function이 요구하는 파일, 네트워크, 비밀값 또는 연산 장치 사용이 허용되어 있습니다.
선택 목록에는 보이지만 실행할 수 없는 항목이 있을 수 있습니다. 제품은 이때 항목을 조용히 숨기거나 관리자 권한으로 우회하지 않고, 부족한 권한과 해결 방법을 알려줍니다.
사용자가 승인하는 작업
| 작업 | 기본 동작 | 상태 |
|---|---|---|
| 항목 찾기, 설명 보기, 유효성 확인 | 별도 승인 없이 수행하며 문서나 실행 상태를 바꾸지 않음 | 공통 보안 계약 |
| 연결 또는 문서 변경 | 미리 보기를 확인한 뒤 Apply로 반영 | V1 계약 |
| 연결, Node 또는 실행 기록 삭제 | 영향을 받는 대상을 먼저 보여 주고 확인 | V1 계약 |
| 일반 계산 실행 | 사용자가 Run을 누르거나 승인한 Live 설정을 따름 | V1 계약 |
| network, secret 또는 외부 system을 사용하는 실행 | 대상과 영향 범위를 보여 주고 별도 승인 | V1 목표 계약 |
| Report PDF Preview | exact .pxreport revision과 포함할 Result read 권한 확인 | V1 계약 |
| Report PDF를 Project 또는 선택 file에 저장 | source Report revision, Result와 destination 충돌 범위를 보여 주고 승인 | V1 계약 |
| 선택 Component artifact Preview·Export | exact source artifact, Component output capability와 destination을 확인 | Component 기능 |
| frozen render 뒤 사용자 gesture로 host print dialog 열기 | V1 계약 | |
| 다른 사용자와 공유 또는 공개 | 일반 저장과 분리된 공유 화면에서 대상과 권한 확인 | V2 계획 |
| 외부 HTML에 PXFLOW 삽입 | exact 전달 version, 실행 허용 여부와 허용 website 확인 | V2 계획 |
AI가 제안한 작업도 같은 규칙을 따릅니다. AI가 연결이나 실행을 추천했다는 이유만으로 권한 확인이나 사용자 승인이 생략되지 않습니다.
템플릿을 보고 구매하고 사용하는 권한 · V2 계획
Marketplace와 Organization Library에서는 다음 권한을 한 단계로 합치지 않습니다. 이 절은 availability: contract_only인 Flow·Project template 계획이며, TemplateRelease의 전체 persisted shape는 아직 승인되지 않은 blocker입니다.
| 상태 | 허용되는 일 |
|---|---|
| Marketplace에서 보임 | 공개 설명과 안전한 미리보기 확인 |
| 개인 또는 조직이 확보함 | 고정된 템플릿 버전을 사용할 권리 보유 |
| 조직이 배정함 | 모든 구성원, 선택 그룹 또는 선택 사람이 사용 요청 가능 |
| 사용 승인이 완료됨 | 승인 정책이 있는 템플릿의 사용 가능 |
| destination 권한이 있음 | 새 Project 또는 Flow 생성 |
모두·그룹·사람은 사용 대상이고, 승인자는 요청을 결정하는 별도 역할입니다. 조직 관리자가 템플릿을 모두에게 배정해도 원본 Project 접근이나 새 Project 생성 권한을 자동으로 주지 않습니다. 구매 담당자, 승인자, Marketplace 운영자도 해당 역할만으로 Report나 PXFLOW 내용을 열 수 없습니다.
publication-sharing profile의 packTemplate row는 미래 vocabulary 예약일 뿐입니다. 현재 Component template의 settings/template application, renderer·preview asset, install 또는 execution을 허용하지 않습니다. 후속 Component template은 별도 versioned settings/template contract, RFC-014 rich-surface admission, exact ProjectScope isolation과 execution-trust P0 closure가 모두 승인된 뒤 새 contract version으로 정의해야 합니다.
무료·유료 획득, 조직 배정과 실제 생성 흐름은 템플릿 시작하기, exact 권한 판정은 Template Marketplace와 Organization Library 규격을 따릅니다. Component의 현재·후속 경계는 Component container V2와 서드파티 Node UI가 소유합니다.
Report 출력과 선택 Component export의 권한 경계
Report 출력은 px.Report 또는 Report Workbench에서 저장한 exact .pxreport revision과 연결된 Result ref에서 시작합니다. 별도 출력 권한을 확인한 뒤 Save PDF to Project 또는 Download PDF를 수행합니다.
- Save PDF to Project는 새 immutable PDF artifact revision을 만듭니다.
replace도 기존 bytes를 바꾸지 않고 head만 새 revision으로 이동합니다. - Download PDF는 trusted host가 발급한 선택 파일 handle에 씁니다. 이 파일은 Project가 관리하는 artifact가 아니며 다운로드 뒤 접근을 회수하거나 bytes를 되돌릴 수 없습니다.
- Preview는 저장·공유할 수 없는 expiring resource이고, Print는 exact artifact에서 만든 frozen render를 host action으로 전달할 뿐 durable artifact를 만들지 않습니다.
- 온라인 읽기 전용 전달은 V2 Publication에서 exact Report 또는 PDF revision을 선택합니다.
사용 흐름은 Report 출력·PDF·외부 공유, exact permission과 output pin 계약은 Report 출력과 외부 전달을 따릅니다.
선택 Component의 Document/PDF export는 Flow Run이 만든 exact Component artifact에서 시작합니다. Host는 해당 Component의 output capability, artifact read 권한과 destination 승인을 따로 확인하며, Component artifact는 exact Component Result identity를, .pxreport revision은 Report identity를 각각 유지합니다.
읽기 전용 공유와 HTML 삽입 · V2 계획
전달 목적에 따라 읽기 전용 Publication 또는 실행 가능한 PXFLOW App을 선택합니다.
- Publication Viewer는 팬·줌·검색과 승인된 결과 읽기만 허용하며 Flow 편집과 Run을 허용하지 않습니다.
- 새 실행 가능한 HTML Embed는 Active Deployment Revision만 선택합니다. 이미 고정된 servable revision도 Run마다 권한, 이용권, 사용량과 Runtime policy를 다시 검사합니다.
- iframe은 등록된 exact HTTPS origin에서만 열립니다. App Embed는 origin allowlist가 필수입니다.
- 공유 URL, 허용 origin, token과 lifecycle은
.pxflow에 저장하지 않습니다. - 게시와 임베드를 중지하면 열린 session, WebSocket과 cache도 같은 revoke generation을 다시 확인합니다.
- 비공개 dependency, secret, 개인 정보 또는 재배포가 금지된 항목이 남아 있으면 일부만 숨겨 게시하지 않고 전체 요청을 중단합니다.
공유·게시·HTML 삽입의 사용 순서는 PXFLOW 공유·게시·HTML 삽입, exact 상태·origin 규칙은 Publication과 EmbedDelivery를 따릅니다.
Local 앱의 로그인과 오프라인 사용
Local 앱도 사용자와 이용권을 확인하기 위해 로그인합니다. 로그인 뒤 발급된 오프라인 사용 기간 안에서는 인터넷 연결 없이 허용된 기능을 사용할 수 있습니다.
- 오프라인 사용 기간이 끝나도 사용자의 파일 열기, 읽기, 내보내기와 로그인 복구 화면은 유지합니다.
- 이용권 확인이 필요한 편집이나 실행만 사용할 수 없는 상태로 표시합니다.
- 웹 로그인 정보나 Cloud 접근 정보를 Function에 전달하지 않습니다.
- 다시 연결하면 사용자는 저장 중인 작업을 잃지 않고 로그인과 이용권을 갱신할 수 있어야 합니다.
Function 개발자가 선언해야 하는 항목
Function은 계산에 필요한 외부 자원을 명시적으로 선언해야 합니다. 사용하지 않는 권한을 편의를 위해 요청하지 않습니다.
| 필요 자원 | 선언 예 | 사용자에게 보이는 의미 |
|---|---|---|
| 프로젝트 파일 | 읽기 또는 쓰기 범위 | 어떤 파일에 접근하는지 |
| 네트워크 | 접속할 서비스와 목적 | 외부로 어떤 요청을 보내는지 |
| 비밀값 | 사용하는 비밀값의 이름과 목적 | 값 자체가 아닌 사용 이유 |
| GPU 또는 고성능 연산 | 필요한 실행 환경 | 예상 시간과 자원 사용 수준 |
선언하지 않은 자원에는 접근할 수 없습니다. Function은 승인된 입력과 프로젝트 범위 안에서만 실행되며, 서버 경로·데이터베이스 비밀번호·서명 키 같은 제품 내부 정보에 접근하지 않습니다.
Extension의 안전 경계
현재 V1과 계획 계약의 경계
현재 local Component 설치는 사용자가 명시적으로 수락한 unsigned container를 exact digest와 absent·not-checked로 기록합니다. trust authority 없이 detached signature가 있는 container는 기록 전에 거부하며, unsigned 기록은 publisher 검증이나 실행 신뢰를 뜻하지 않습니다. 현재 V1은 capability를 요청하는 Component package를 거부하고, production Flow surface에서 Extension editor·viewer·custom block을 로드하지 않습니다. exact ProjectScope data-path isolation은 구현됐지만 요청 Project와 principal의 권한 결속은 구현 완료로 주장하지 않습니다.
후속 V2 Canvas는 package UI를 마운트하지 않고 host-owned component.declarative@2만 사용합니다. settings를 component-declared-settings@1로 선언당 최대 8개까지 받고 host control registry가 그립니다. rich surface는 RFC-016이 소유하는 component-rich-surface-declaration@1 범위이고, bridge는 Node context 읽기와 settings 제안까지만 허용합니다. 현재 third-party Component activation은 구현된 exact ProjectScope data-path isolation에 더해 Project authorization과 execution-trust closure가 닫힐 때까지 차단합니다. inactive quarantine 상태도 없으므로 current V1 local installer를 third-party production admission 경로로 안내하지 않습니다.
Component V2는 Extension editor command, custom block, importer 또는 exporter를 package contribution으로 받지 않습니다. entry와 message는 RFC-016의 component-rich-surface-declaration@1이 정의하고, command, block과 import/export format schema는 RFC-014 successor가 별도 admission과 함께 소유합니다. 향후 rich surface가 승인되더라도 다음 보안 불변조건을 먼저 만족해야 합니다.
- 편집기 DOM, authentication token, host filesystem과 내부 application store에 직접 접근하지 않습니다.
- 문서 변경은 검증 가능한 transaction proposal로 반환하고 application service가 현재 Flow revision, Component Node와 권한을 다시 확인합니다.
- 계산 실행은 Canvas의 일반 Node input binding과 Flow Run을 사용하며 Runtime endpoint를 직접 호출하지 않습니다.
- network, clipboard, selected file과 export destination은 각각 명시적인 capability와 사용자 승인이 필요합니다.
- package 매뉴얼은 sanitized Markdown으로 표시하며 script, iframe과 remote executable content를 실행하지 않습니다.
- publisher trust와 current revocation evidence를 검증할 수 없으면 code를 실행하지 않습니다.
현재 host가 지원하는 Export와 Component rich-surface contribution은 별개입니다. Component package가 PDF·DOCX·CSV·HTML exporter를 제공한다고 가정하지 않으며, RFC-014 successor가 format admission을 별도로 소유하기 전에는 선택기에 추가하지 않습니다.
문서와 AI 콘텐츠의 안전 경계
Report, PDF, PXFLOW 이름, Function 결과와 외부 파일의 문장은 모두 사용자 데이터로 취급합니다. 문서 안에 “이 명령을 실행하라”는 문장이 있어도 제품의 시스템 명령으로 바뀌지 않습니다.
- AI가 참고한 출처와 잘린 범위를 구분해서 보여 줍니다.
- AI는 실제로 확인된 Function 입력과 결과만 연결 대상으로 사용합니다.
- 변경, 실행, 공유 전에는 대상과 권한을 다시 확인합니다.
- 비밀값, 다른 사용자의 항목, 서버 내부 경로와 전체 소스 코드는 AI 문맥에 기본 포함하지 않습니다.
문제를 문의할 때
지원 기록에는 작업 종류, 대상의 읽기 쉬운 이름, 발생 시각과 오류 식별자처럼 원인 확인에 필요한 최소 정보만 포함합니다. 문서 본문, 표나 PDF 전체, 비밀값과 임시 다운로드 주소는 자동으로 포함하지 않습니다.
권한 오류가 발생하면 다음 순서로 확인합니다.
- 올바른 계정과 프로젝트를 열었는지 확인합니다.
- 해당 입력 또는 결과가 연결 대상으로 공개되어 있는지 확인합니다.
- 프로젝트 소유자에게 필요한 읽기·편집·실행·공유 권한을 요청합니다.
- Function이 요구하는 파일·네트워크·비밀값 사용을 검토하고 승인합니다.
- 계속 실패하면 화면에 표시된 오류 식별자와 발생 시각을 함께 전달합니다.