シークレットと暗号化

二つのマスターシークレット、それが保護するもの、セッションとトークンの有効期間

  1. 二つのマスターシークレット
  2. 暗号化シークレットの変更
  3. トークン

二つのマスターシークレット

二つのシークレットが、それ以外のすべてを保護します。インスタンスが実際のデータを保持する前に両方を設定し、インスタンスの外に保管し、 軽々しく変更しないでください。

シークレット 保護するもの 設定されていない場合 紛失または変更した場合
ENCRYPTION_SECRET データベースに保存されるすべてのパスワードとトークン。認証情報、LDAP のバインドパスワード、ランナーのトークン、SSO のクライアントシークレット、Slack と Teams の Webhook アドレス、チャットの API キー ソースコードで公開されている既定のキーが使われます 紛失:保存されているすべてのシークレットを再入力する必要があります。変更:7.3.0 からは、保存されているすべてのシークレットが再暗号化されます。 下記 を参照
ACCESS_TOKEN_SECRET アクセストークンとリフレッシュトークンの署名。有効期間の長い API トークン も含みます 起動のたびにランダムなシークレットが生成されるため、再起動のたびに全員がサインアウトされます すべてのセッションとすべての API トークンが無効になります

どちらも、設定されていない間は起動時に [SECURITY] の警告としてログに記録されます。設定ページはそれらの編集を拒否し、 API は決してそれらを返さず、バックアップは意図的にそれらを除外します。そのため、紛失した ENCRYPTION_SECRET はどこからも回復できません。 シークレットマネージャーにコピーを保管してください。暗号化シークレットは 32 文字のキーとして使われます。短い値や 長い値は、埋められるか切り詰められます。

ACCESS_TOKEN_SECRET を変更すると、すべてのセッションとすべての API トークンがすぐに終了します。一人のユーザーや一つの セッションのトークンを終了するには、 トークン で説明している失効を使ってください。


暗号化シークレットの変更

7.3.0 からは、 ENCRYPTION_SECRET を設定または変更しても、保存されているシークレットは失われなくなりました。次回の起動時に、ワーカーは ほかの何かがシークレットを書き込む前に、一つのデータベーストランザクションで、すべてのシークレットを新しいキーで再暗号化します。

状況 設定するもの
インスタンスが ENCRYPTION_SECRET なしで、公開されている既定のキーで動作していた ENCRYPTION_SECRET だけ。シークレットは既定のキーから再暗号化されます
インスタンスが独自のキーで動作していた その一回の起動のために、 ENCRYPTION_SECRET に新しいキーを、 ENCRYPTION_SECRET_PREVIOUS に古いキーを設定します

保存されているシークレットがそのどちらでもないキーで暗号化されていた場合は、何も変更されず、 ENCRYPTION_SECRET_PREVIOUS がそのキーを 指定するまでアプリは起動を拒否します。起動で再暗号化されたら ENCRYPTION_SECRET_PREVIOUS を削除し、 新しい ENCRYPTION_SECRET をすべてのアプリノード、ワーカー、そして自分自身を登録するデータベースモードのすべての RTE に設定してください。その 自己登録( RTE_REGISTER )は 7.3.0 で非推奨になりました。ソケットモードで参加トークン( RTE_JOIN_TOKEN )を使って参加する RTE には ENCRYPTION_SECRET は不要です。 RTE のモード を参照してください。


トークン

サインインすると、有効期間の短いアクセストークンと、より長いリフレッシュトークンが返され、ブラウザーはそれを使って新しい組を取得します。

  • ACCESS_TOKEN_EXPIRATION :既定は 30m です。短くすると、 傍受されたトークンが使える範囲が限られます。
  • ACCESS_TOKEN_REFRESH_EXPIRATION :既定は 24h です。 操作のないブラウザーがサインインしたままでいられる時間です。
  • ロールオプション allowApiTokens を使うと、ユーザーは指定した日数有効な API トークンを要求でき、 extendedTokenExpiration を加えると期限切れにならないものも要求できます。スクリプトからの API アクセスが必要なロールにだけ付与してください。 プロフィールページ では、トークンは 10 分以内にサインインしたブラウザーのセッションから作成され、 別の API トークンからは決して作成されません。期限切れにならないトークンの有効期間は 50 年で、下のイベントでは引き続き終了します。
  • API_TOKEN_MAX_DAYS :既定は 90 です。API トークンの最長の 有効期間で、それより長い要求はこの値に切り詰められます。

トークンは署名された JWT ですが、サーバーはすべてのアプリノードで共有される失効したトークンのリストも保持しているので、トークンは 期限切れになる前に終了できます。

イベント 終了するもの
サインアウト そのサインインのすべてのトークン。アクセストークン、そのリフレッシュトークン、そしてサインアウトに API トークンを使った場合はその API トークン
ユーザー自身または管理者によるパスワードの変更 変更前に発行されたユーザーのすべてのトークン。API トークンも含め、すべてのデバイスで
ユーザー(ローカル、LDAP、SSO のユーザー)の サインインを許可 スイッチをオフにする、またはローカルユーザーを削除する ユーザーのすべてのトークン
LDAP または SSO のユーザーのページの セッションを終了 ユーザーのすべてのトークン。ブロックされていなければ再びサインインできます
プロフィールページまたはユーザーの API トークン タブで API トークンの 取り消す その API トークン一つが、すぐに

スクリプトは、自分の API トークンでサインアウトすることでそのトークンを終了します。 Authorization ヘッダーにトークンを付けて POST /api/v2/auth/logout を呼び出します。