runlot
データ認証

アクセス制御

デプロイにアクセスできる人を決めます。アプリのユーザーのログインとは別の機能です。

公開前のデプロイを保護したり、特定の人にだけ見せたりするときに使ってください。アクセス方式は次の 3 つです。

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 · viewerorg モード)

提供しているヘルパーで読み取れます。

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 だけを組織のメンバーに許可する)は、まだ対応していません。現在はデプロイ全体に 1 つのモードを適用します。password モードには総当たり攻撃に対する試行制限もないため、短いパスワードや推測しやすいパスワードは使わないでください。

このページの目次