コンテンツにスキップ

設定

すべて 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 * カンマ区切り

データベース

既定
ARKHE_DATABASE_URL postgresql+psycopg://arkhe@localhost/arkhe
ARKHE_READ_DATABASE_URL resolver 用の読み取り専用接続。未設定なら上と同じ

マイグレーションは PostgreSQL で検証すること

SQLite は PostgreSQL が許さないものを通してしまう。とくに managershoulder の循環参照と、表の作成順。開発中に両方とも 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_BULK_LIMIT 1000 1 リクエストの件数。それ以上は分割し、request_id を付ける——切れた塊はそのまま再送してよい

前段がある場合

既定
ARKHE_TRUSTED_PROXIES 0 前段(ロードバランサやプロキシ)を何段信じるか。X-Forwarded-For は誰でも付けられるヘッダなので、既定では見ずに直接の接続元を記録する——詐称された値を記録するほうが害が大きい。監査ログに攻撃者の書いた文字列が並ぶのがいちばん困るため。前段が n 段あるなら n を入れる。右から n 番目を採る(右端は自分の直前の前段が書いた値なので信じられる)。左端を採ってはいけない——そこは client が書いた値
ARKHE_LOG_LEVEL INFO DEBUG / INFO / WARNING。記録は JSON 行で、要求 id が入る