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 모드의 무차별 대입 제한도 아직 없으니, 짧거나 추측하기 쉬운 값은 피해 주세요.

이 페이지에서