runlot
데이터인증

접근 제어

배포에 접근할 수 있는 사람을 정합니다. 앱 사용자 로그인과는 별개의 기능입니다.

공개 전 배포를 보호하거나 특정 사람에게만 보여 줄 때 사용하세요. 접근 방식은 다음 세 가지입니다.

runlot access set public      # 누구나 접근 가능(기본값)
runlot access set org         # 이 조직의 구성원만 접근 가능
runlot access set password    # 공유 비밀번호를 아는 사람만 접근 가능
runlot access            # 현재 설정 확인
runlot access --json

이 명령을 실행하려면 admin 역할이 필요합니다.

password 모드

runlot access set password --password 'my-secret'

--password를 생략하면 터미널에서 비밀번호를 입력하라는 안내가 표시됩니다. 보호된 배포에 방문하면 앱보다 먼저 비밀번호 입력 화면이 표시됩니다.

org 모드

조직 구성원은 대시보드 로그인으로 바로 접근할 수 있습니다. 조직 구성원이 아닌 사용자는 403 응답을 받습니다.

워커에서 접근 정보 읽기

앞단에서 확인한 접근 정보는 요청 헤더로 워커에 전달됩니다.

헤더
Runlot-Access-Modepublic · org · password · bypass
Runlot-Access-Subject사용자 ID(모드에 따라 다름)
Runlot-Access-Email로그인 이메일(org 모드)
Runlot-Access-Org-Roleadmin · member · viewer(org 모드)

제공하는 헬퍼로 읽을 수 있습니다.

import { identity, isSignedIn } from "@runlot/access";

const who = identity(request);
// { mode: "org", subject: "…", email: "[email protected]", orgRole: "admin" }

if (who.orgRole !== "admin") return new Response(null, { status: 403 });

클라이언트가 보낸 Runlot-* 헤더는 앞단에서 모두 제거한 뒤, 확인된 값만 다시 추가합니다. 따라서 클라이언트가 이 값을 위조할 수 없습니다.

앞단 없이 실행하는 로컬 환경에서는 modepublic이며 나머지 값은 null입니다.

CI에서 우회하기

자동화가 보호된 배포를 확인해야 할 때 사용할 수 있습니다.

runlot access bypass --new

시크릿은 한 번만 표시됩니다. 표시된 뒤에는 다시 확인할 수 없습니다.

curl -H "Runlot-Access-Bypass: <secret>" https://my-app.me.runlot.app/health
runlot access bypass --revoke

권한이 없는 요청은 프로젝트를 실행하지 않습니다

접근 권한은 프로젝트를 시작하기 전에 확인합니다. 권한이 없는 요청이 와도 자동 중지된 프로젝트는 실행되지 않으며, 해당 요청은 사용량에도 포함되지 않습니다.

현재 제한 사항

경로별 접근 규칙(예: /admin만 조직 구성원에게 허용)은 아직 지원하지 않습니다. 현재는 배포 전체에 하나의 모드를 적용합니다. password 모드에는 무차별 대입 시도 제한도 없으므로, 짧거나 추측하기 쉬운 비밀번호는 사용하지 마세요.

이 페이지의 목차