認証
Semaphore には、相手が誰であるかを確認する方法が 3 つあります。それぞれは独立しており、 すべてを同時に有効にできます。そのため、サインイン画面にはパスワード入力フォーム、 ディレクトリログイン、そして ID プロバイダーごとのボタンが並ぶことがあります。
| 方法 | パスワードを検証する主体 | 適した場面 |
|---|---|---|
| ローカルアカウント | Semaphore が自身のデータベースを使って検証します | ディレクトリがない場合や、緊急用の管理者が必要な場合。 |
| LDAP と Active Directory | ディレクトリサーバー | ユーザーがすでに LDAP や AD に存在し、資格情報を 1 つにまとめたい場合。 |
| OpenID Connect | ID プロバイダー | シングルサインオンを利用している場合: Keycloak、Okta、Entra ID、Google、GitHub など。 |
認証が答えるのは、そのユーザーが誰かということだけです。何を行えるかは、サーバーロールと 各プロジェクトでのロールによって別途決まります。チームを参照してください。
ユーザーレコードが作成される仕組み
サインインするすべてのユーザーは、どの方法を使った場合でも Semaphore のデータベースに行を
持ちます。ローカルアカウントは管理者が作成するか、semaphore user add で作成されます。
LDAP または OIDC のアカウントは最初のサインイン成功時に作成され、Semaphore はそれと合わせて
外部アイデンティティ(プロバイダー ID と、そのプロバイダーが返したユーザー ID)を保存します。
以降のログインで照合されるのはこの外部アイデンティティです。そのため、ディレクトリ上で
ユーザー名を変更しても 2 つ目のアカウントは作成されません。注意が必要なのは、既存ユーザーの
最初のログイン、つまり外部アイデンティティがまだ存在しない場合です。そのときの動作は
external_auth_email_matching オプションで決まります。
| 値 | 動作 |
|---|---|
auto(デフォルト) | メールアドレスで紐付けますが、対象はまだアイデンティティを持たない外部ユーザーのみです。これにより 2.20 より前に作成されたアカウントを一度だけ引き継ぎ、それ以外には作用しません。 |
always | すべての外部ユーザーをメールアドレスで紐付けます。1 人のユーザーが複数のプロバイダー経由でサインインする場合に使用します。 |
never | メールアドレスでは決して紐付けません。アイデンティティはプロバイダー ID のみで厳密に照合されます。 |
ローカルのパスワードアカウントは、どのモードでもメールアドレスで照合されることはありません。 そうでなければ、ユーザーが自分でメールアドレスを選べる OIDC プロバイダーを悪用して、 管理者のアカウントを乗っ取れてしまう可能性があります。
プロバイダー ID(oidc_providers または ldap_providers 内のキー)は、保存されるすべての
アイデンティティの一部です。これを変更すると、それを参照しているアイデンティティが孤立し、
該当ユーザーは次回のサインイン時に空の新しいアカ ウントを取得します。最初に決めたものを
変更しないでください。
方法を組み合わせる
現実的な構成では、ユーザー向けにシングルサインオンを有効にしつつ、ID プロバイダーに接続でき なくなった日のためにローカル管理者を 1 つ残しておきます。
- プロバイダーを設定し、実際のユーザーがそれ経由でサインインできることを確認します。
- そのユーザーに必要なロールを付与します。
- 強力なパスワードと TOTP を 有効にしたローカル管理者アカウントを 1 つ残します。
password_login_disableを設定して、それ以外の全員がパスワードを使えないようにします。
この順序どおりに実施してください。手順 1 より前に password_login_disable を設定すると、
宣伝どおりに動作し、自分自身が自分のサーバーから締め出されます。
このセクションの内容
| ページ | 扱う内容 |
|---|---|
| ローカルアカウント | パスワード、TOTP、メールのワンタイムコード、セッションの有効期間、パスワードログインの無効化。 |
| LDAP と Active Directory | ディレクトリへのバインド、検索フィルター、属性マッピング、TLS。 |
| OpenID Connect | プロバイダーの設定、クレーム式、IdP 起点のログイン、12 種類のプロバイダー設定例。 |
どこから始めるか
新規インストールではセットアップ時に作成されたローカル管理者がすでに存在します。まずは ローカルアカウントから始めてそのアカウントを保護し、 続いてそれ以外のユーザー向けに OpenID Connect または LDAP を追加してください。