データ認証
アクセス制御
デプロイにアクセスできる人を決めます。アプリのユーザーのログインとは別の機能です。
公開前のデプロイを保護したり、特定の人にだけ見せたりするときに使ってください。アクセス方式は次の 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-Mode | public · org · password · bypass |
Runlot-Access-Subject | ユーザー ID(モードによって異なります) |
Runlot-Access-Email | ログインに使ったメールアドレス(org モード) |
Runlot-Access-Org-Role | admin · 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-* ヘッダーはフロント側ですべて削除され、確認済みの値だけがあらためて追加されます。そのため、クライアントがこれらの値を偽装することはできません。
フロントを介さずに実行するローカル環境では、mode は public になり、残りの値は null です。
CI から迂回する
自動化された処理が保護されたデプロイを確認する必要があるときに使えます。
runlot access bypass --newシークレットは一度だけ表示されます。表示されたあとに再確認する方法はありません。
curl -H "Runlot-Access-Bypass: <secret>" https://my-app.me.runlot.app/healthrunlot access bypass --revoke権限のないリクエストはプロジェクトを起動しません
アクセス権限はプロジェクトを起動する前に確認します。権限のないリクエストが来ても、自動停止したプロジェクト は起動されず、そのリクエストは使用量にも含まれません。
現在の制限
パスごとのアクセスルール(たとえば
/admin だけを組織のメンバーに許可する)は、まだ対応していません。現在はデプロイ全体に 1 つのモードを適用します。password モードには総当たり攻撃に対する試行制限もないため、短いパスワードや推測しやすいパスワードは使わないでください。