設定¶
すべて ARKHE_ 接頭の環境変数、または .env の項目。arkhe check で検証でき、
足りないものがあればその場で止まる。
秘密値に既定値は無い(意図的に)
ARKHE_TOKEN_SECRET / ARKHE_SESSION_SECRET / KC_ADMIN_PASSWORD は、
未設定なら値を代用せずに起動を止める。動いてしまう既定値は、気づかれないまま
本番に出ていく既定値である。
役割¶
| 既定 | ||
|---|---|---|
ARKHE_RESOLVER |
false |
resolver として動かす。minter に解決の口は無く、resolver に採番の口も無い——別々にスケールでき、resolver は読み取り専用のレプリカに向けられる |
ARKHE_DEBUG |
false |
|
ARKHE_ALLOWED_HOSTS |
* |
カンマ区切り。絞ると Host が一致しない要求を 400 で弾く(既定の * では何も挟まない——前段で終端している構成では前段が見ているのが普通で、二重に弾くと切り分けが難しくなる) |
データベース¶
| 既定 | ||
|---|---|---|
ARKHE_DATABASE_URL |
postgresql+psycopg://arkhe@localhost/arkhe |
|
ARKHE_READ_DATABASE_URL |
— | resolver 用の読み取り専用接続。未設定なら上と同じ |
ARKHE_DB_POOL_SIZE |
5 |
1 プロセスが常に持つ接続。worker 数と掛け算になる |
ARKHE_DB_MAX_OVERFLOW |
10 |
混み合ったときの上乗せ。POOL_SIZE に足される(既定で 1 プロセス最大 15) |
ARKHE_DB_POOL_RECYCLE |
0 |
接続を作り直すまでの秒数。0 で作り直さない。接続を黙って切る前段の下では、その保持時間より短く |
ARKHE_DB_PRE_PING |
true |
接続を貸す前に生きているか確かめる。切ると解決 1 件あたりの DB 往復がほぼ半分(実測 1.60 → 0.82)。切るのは DB が近く、切られた接続が例外として出てよい構成だけ |
マイグレーションは PostgreSQL で検証すること
SQLite は PostgreSQL が許さないものを通してしまう。とくに manager と
shoulder の循環参照と、表の作成順。開発中に両方とも SQLite だけの確認を
すり抜けた。
認証 — API¶
| 既定 | ||
|---|---|---|
ARKHE_AUTH |
apikey,oidc |
併用可。順に試す。apikey / oauth2 / oidc |
ARKHE_TOKEN_SECRET |
— | oauth2 の署名鍵。32 バイト以上(RFC 7518 §3.2) |
ARKHE_TOKEN_TTL |
3600 |
|
ARKHE_TOKEN_ISSUER |
— | |
ARKHE_OIDC_ISSUER |
— | oidc では必須 |
ARKHE_OIDC_AUDIENCE |
— | API のアクセストークンに求める audience。ID トークンの aud ではない(そちらは admin_client_id) |
ARKHE_OIDC_JWKS_URL |
— | 未設定なら issuer の discovery から引く |
どれを選ぶべきかは認証を参照。
認証 — 管理画面¶
| 既定 | ||
|---|---|---|
ARKHE_ADMIN_LOGIN |
bearer |
bearer / password / oidc / proxy |
ARKHE_SESSION_SECRET |
— | bearer 以外では必須。32 バイト以上 |
ARKHE_SESSION_TTL |
28800 |
8 時間 |
ARKHE_SESSION_SECURE |
true |
HTTPS で出すなら付けたままにする |
ARKHE_ADMIN_CLIENT_ID |
— | oidc では必須 |
ARKHE_ADMIN_CLIENT_SECRET |
— | |
ARKHE_ADMIN_SCOPE |
openid profile email |
|
ARKHE_PROXY_USER_HEADER |
X-Forwarded-User |
proxy 用 |
proxy は直接届く経路を塞ぐことが前提
プロキシを通らずに arkhe へ届く経路が残っていると、誰でもヘッダを詐称できる。 k8s なら NetworkPolicy、単体なら 127.0.0.1 だけで待ち受ける。
解決¶
| 既定 | ||
|---|---|---|
ARKHE_GLOBAL_RESOLVER |
https://n2t.net |
未知 NAAN の取次先(D2) |
ARKHE_RAW_URI_HEADER |
— | 生のリクエスト URI を運ぶヘッダ名。裸の ? を判別するために使う。クエリ文字列が空の ? は ASGI でも区別できない |
ARKHE_RESOLVE_UNPUBLISHED |
false |
公開前の ARK も解決する。閉域に置くリゾルバ向け。 閉じた網の中で採番した ARK は、その網のリゾルバが解決できなければ配る意味が無い |
公開の面では開けない
?info と ?? は認証を要さない口である。ここを開けたリゾルバが公開の網から
引けると、まだ公開していない対象の存在・題名・行き先がそのまま出る。
開けてよいのは、届く範囲そのものが閉じているリゾルバだけ。
採番¶
| 既定 | ||
|---|---|---|
ARKHE_BULK_LIMIT |
1000 |
1 リクエストの件数。それ以上は分割し、request_id を付ける——切れた塊はそのまま再送してよい |
ARKHE_HOLD_MAX_DAYS |
90 |
転送を止めておける最長日数。期限を必須にしただけでは足りない——「1 年後」と書けば恒久と変わらないので上限を置く。延ばすなら掛け直す(そのたびに監査に残る) |
前段がある場合¶
| 既定 | ||
|---|---|---|
ARKHE_TRUSTED_PROXIES |
0 |
前段(ロードバランサやプロキシ)を何段信じるか。X-Forwarded-For は誰でも付けられるヘッダなので、既定では見ずに直接の接続元を記録する——詐称された値を記録するほうが害が大きい。監査ログに攻撃者の書いた文字列が並ぶのがいちばん困るため。前段が n 段あるなら n を入れる。右から n 番目を採る(右端は自分の直前の前段が書いた値なので信じられる)。左端を採ってはいけない——そこは client が書いた値 |
ARKHE_LOG_LEVEL |
INFO |
DEBUG / INFO / WARNING。記録は JSON 行で、要求 id が入る |