アップデート一覧に戻る
New releaseAug 20, 2026

Bastillion v5.2.0

Bastillionは、すべてのシステムにおけるSSHアクセスを管理するためのクリーンでブラウザベースの方法を提供します—フレンドリーなダッシュボードを備えた踏み台ホストのようなものです。

共有

Build CodeQL License Java Built with Claude Code Website

Bastillion

Bastillion

モダンなWebベースのSSHコンソール&SSH鍵管理ツール。

Bastillionは、全システムにわたるSSHアクセスをクリーンなブラウザベースで管理できるようにします。まるでフレンドリーなダッシュボードを備えた踏み台ホスト(bastion host)のようです。主な機能は次の2つです。

  1. WebベースのSSHターミナル — ホストを登録すると、認可されたユーザーはブラウザから直接そのホストへのライブターミナルセッションを1つ以上開くことができ、コマンドは開いているすべてのセッションに同時にブロードキャストできます(tmuxの同期ペインを、ローカルペインではなくリモートホスト群に対して行うイメージです)。

  2. SSH鍵管理 — Bastillionは自身のSSH鍵ペアを保持し、登録したホスト群に公開鍵をプッシュ/ローテーションするため、個々のユーザーがそれらのシステムへの長期鍵を自分で保持・管理する必要はありません。

  • 2要素認証(AuthyまたはGoogle Authenticator)でログイン
  • SSH公開鍵を一元管理・配布し、中央から無効化/ローテーション
  • 安全なマルチセッションWebシェルを起動し、セッション間でコマンドを共有
  • すべてのセッションを記録し、必要に応じて再生 — あらゆるコンプライアンスフレームワークに対応する監査対応の証跡
  • システムをプロファイルにグループ化し、誰が何にアクセスできるかを正確に制御
  • 複合スクリプトを保存し、フリート全体に対して一度に再実行
  • SSHの上にTLS/SSLを重ねて追加の保護を実現

同じコマンドを3つのホストに同時にブロードキャストする複数ターミナル

3つの実際の独立したSSHセッション — 1つのコマンドを1回入力するだけで、どこでも実行されます。


目次


仕組み

Bastillionはユーザーと、ユーザーが到達する必要のあるシステムとの間に位置し、単純なパスワード保管庫ではなく信頼できる第三者として機能します。ここでは、そのライフサイクル全体を最初から最後まで説明します。

1. Bastillionが自身のSSH鍵ペアを生成

初回起動時、他の何よりも先に、Bastillionは自身用のEd25519鍵ペアを生成します — これがホストにプッシュされる唯一の鍵です。これはコンソール出力に表示され、常に設定の下で確認できます。

2. システムを登録

管理者は管理 → システムでホストを追加します(ユーザー、ホスト、ポート、およびそのホストのauthorized_keysファイルへのパス)。Bastillionは、提供されたパスワードまたはパスフレーズで一度だけ認証し、自身の公開鍵をそのホストのauthorized_keysにプッシュします。以降はその鍵を使用して接続します — パスワードは一切保存されません。鍵が配置された瞬間にステータスは成功に変わります。

システム管理 — 3つのホストが登録され、すべて成功ステータスを表示

3. システムをプロファイルにグループ化し、ユーザーを割り当て

システムは名前付きのプロファイルにグループ化されます — 「本番」「ステージング」「データベース層」などをイメージしてください。その後、ユーザーは管理 → ユーザーでプロファイルにリンクされ、これが誰が何にアクセスできるかを制御する唯一の手段です。プロファイルの割り当てを取り消すと、そのアクセスは即座に失われ、鍵のローテーションは不要です。

3つのシステムを本番プロファイルに割り当て

4. ターミナルを開く — そしてすべてに同時にブロードキャスト

割り当てられたユーザーはセキュアシェル → ターミナルを開き、1つ以上のシステムを選択すると、ブラウザ内でライブでリサイズ可能なxtermベースのターミナルが並んで表示されます。一度入力すると、アクティブとマークされたすべてのターミナルに送信されます — 同じキーストローク、同じコマンド、同じ出力形式が、選択したすべてのホストにわたって適用されます。

ヘルスチェックコマンドが3つのターミナルに同時にブロードキャストされ、3つすべてで同じ出力形式

5. 鍵を中央でローテーションまたは失効

すべてのホストが同じアプリケーション鍵(ユーザーごとの鍵ではなく)を信頼するため、SSH鍵の管理で一度無効化すれば、どこでも即座にアクセスが失効します — 対象システムに手動で触れる必要も、どのサーバーにどの古い鍵があるかを探し回る必要もありません。

プロファイル、フィンガープリント、作成日、削除アクションを備えたSSH鍵の管理

6. すべてのセッションが記録される — 監査と再生

これらのターミナルで入力されたすべてと返されたすべてのバイトが自動的に記録されます。管理者は監査セッションを開き、ユーザーまたはシステムでフィルタリングし、任意のセッションを再生できます — 複数のホストにまたがるセッションは並べて表示され、テキストフィルタで重要な行に直接ジャンプできます。出力は読み込み中にページへストリーミングされるため、数百メガバイトのログを出力したセッションでも難なく再生できます。

監査人に誰が何をどこでいつ実行したかを示す必要がある場合 — これがその証跡であり、標準機能として取得されます。実質的にすべてのコンプライアンスフレームワークには、どこかに特権アクセスの監査証跡要件があります(PCI DSS、HIPAA、SOC 2、ISO 27001 — お好きなものをどうぞ)。これは商用のPAM製品なしでその要件を満たします。セッションはデフォルトで90日間保持され(deleteAuditLogAfter)、記録はENABLE_INTERNAL_AUDIT=falseで無効化できます — 監査を参照してください。

ユーザーとシステムのフィルタで一覧表示された監査セッション


🚀 新機能

  • SAML 2.0 SSO — エンタープライズIdP(Entra ID、Okta、ADFSなど)でサインイン — 設定を参照
  • ライセンス — 最大8システムまでは無料、有料ティアはloophole.company/pricing.htmlで提供(下記のライセンスを参照)
  • セッション監査と再生、デフォルトで有効 — すべてのターミナルセッションが記録され、監査セッションで再生可能。ブラウザにストリーミングされるため、巨大なセッションでも即座に読み込まれます
  • 自己完結型jarjava -jar)として実行され、HTTPSが標準装備 — ダウンロードと実行を参照
  • Java 21Jetty 12Jakarta EE 10にアップグレード
  • Ed25519(デフォルト)およびEd448 SSH鍵を完全サポート
  • 既存インスタンスからユーザー、システム、鍵、監査ログを移行するv4 → v5移行ツールtools/migrateを参照
  • CSRFフィルタとアプリ全体のセキュリティヘッダーで強化

ライセンス

Bastillionは、登録システムが最大8つまではライセンスなしで実行できます — 購入前に実際に試すのに十分です。ライセンスによりその上限が引き上げられます。

  1. loophole.company/pricing.html でライセンスを購入します(Starter/Team/Business — システム数に応じた価格)。支払い後、自動的に.licファイルがダウンロードされます。
  2. .licファイルを開き、その内容(1行)をコピーします。
  3. LICENSE_KEY環境変数で設定します: ```bash export LICENSE_KEY=

または、BastillionConfig.propertieslicenseKey に貼り付けることもできます — 両方が設定されている場合は、環境変数が優先されます。 4. Bastillion を再起動します。設定 にライセンシー、システム上限、有効期限が表示され、期限切れの90日前から警告が表示されます。

ライセンスは年間契約で自動更新はありません — カード情報は保存されません。期限切れの警告が表示されたら、同じ価格ページから再度購入してください。


インストールオプション

無料版: https://github.com/bastillion-io/Bastillion/releases


前提条件

Java 21 (OpenJDK)```bash

apt-get install openjdk-21-jdk

### オーセンティケーター(2FA用)

| アプリケーション | Android | iOS |
|--------------|----------|-----|
| **Authy** | [Google Play](https://play.google.com/store/apps/details?id=com.authy.authy) | [iTunes](https://itunes.apple.com/us/app/authy/id494168017) |
| **Google Authenticator** | [Google Play](https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2) | [iTunes](https://itunes.apple.com/us/app/google-authenticator/id388497605) |

---

## ダウンロードと実行

最新のjarファイルを[Releases](https://github.com/bastillion-io/Bastillion/releases)からダウンロードしてください:```bash
java -jar bastillion-<version>.jar

ブラウザでアクセス: https://<server-ip>:8443 — 自己署名証明書については、以下の TLS / HTTPS を参照してください。Bastillionは初回実行時にこれを生成します。

デフォルトの認証情報:``` username: admin password: changeme

フォアグラウンドで実行されます。停止するにはCtrl+Cを押してください。バックグラウンドまたはデーモンとして実行する場合は、お使いのプラットフォームで通常使用される長時間実行Javaプロセスの方法(`nohup java -jar ... &`、systemdユニット、コンテナなど)を使用してください。

---

## ソースからのビルド

Maven 3+をインストールします:```bash
apt-get install maven

ビルドと実行(組み込みJettyサーバーを含む自己完結型JARをパッケージ化し、実行します — io.bastillion.Main を参照):```bash mvn package java -jar target/bastillion-5.0.0-SNAPSHOT.jar

または、毎回再パッケージングせずにローカル開発を行う場合:```bash
mvn compile exec:java

Listens on https://localhost:8443 by default, same as the downloaded release above — see TLS / HTTPS below for how that certificate gets set up and how to use your own instead.


TLS / HTTPS

Bastillion generates its own self-signed certificate on first startup and serves HTTPS — nothing to configure. Browsers will show a warning once (it's self-signed, not issued by a CA); click through it, same as you would for any other self-hosted appliance. The certificate and its password persist across restarts (keystore/bastillion.p12 under CONFIG_DIR, password stored the same encrypted way as the database password).

Use your own CA-signed certificate instead of the self-signed default — e.g. a free one from Let's Encrypt:

  1. Issue the certificate with certbot (requires a real DNS name pointing at this host, and port 80 reachable for the HTTP-01 challenge): ```bash sudo certbot certonly --standalone -d bastillion.example.com

これは fullchain.pemprivkey.pem/etc/letsencrypt/live/bastillion.example.com/ に書き込みます。

  1. 証明書と鍵のペアを、Bastillion が期待するキーストア形式である PKCS12 に変換します: ```bash openssl pkcs12 -export
    -in /etc/letsencrypt/live/bastillion.example.com/fullchain.pem
    -inkey /etc/letsencrypt/live/bastillion.example.com/privkey.pem
    -out bastillion.p12 -name bastillion -passout pass:changeit
  2. Bastillion をそれに向けて、再起動します: ```bash export KEYSTORE_PATH=/path/to/bastillion.p12 export KEYSTORE_PASSWORD=changeit

ブラウザは警告なしで接続を信頼するようになります。Let's Encrypt の証明書は90日ごとに失効するため、certbot renew を実行してから手順2〜3を再実行し(再起動も行う)ことで最新の状態を維持できます。certbot renew --deploy-hook でこれを自動化することも可能です。

すでにTLSを終端するリバースプロキシやロードバランサーの背後にある場合(nginx、Cloud Run など)— Bastillion 自身のHTTPSを無効にし、代わりに平文HTTPで提供するようにします:```bash export TLS_ENABLED=false

デフォルトではこのモードでポート8080を使用します。変更するには`PORT`を設定してください。

---

## 設定

以下のすべての設定は**環境変数**として設定できます。プロパティ名を取得し、各大文字の前にアンダースコアを挿入してから大文字にします:`licenseKey` → `LICENSE_KEY`、`dbUser` → `DB_USER`、`sshKeyType` → `SSH_KEY_TYPE`。これはBastillionを設定する推奨方法です。特にコンテナ環境では、マウントや焼き込み用のファイルが不要になります。

`BastillionConfig.properties`はフォールバックとして引き続き機能します(両方が設定されている場合は環境変数が常に優先されます)。また、初回起動時にBastillionが生成する値(ランダムなDBパスワードなど)がここに永続化されます。設定の完全なリストとデフォルト値については、`src/main/resources/BastillionConfig.properties`を参照してください。

**すべてを1つのディレクトリに統合する場合**(例:単一のDockerボリュームマウント):`CONFIG_DIR`が使用すべき設定です。Bastillionが永続化するすべてのもの — `BastillionConfig.properties`、自己署名TLSキーストア(`keystore/bastillion.p12`)、H2データベースとSSHホストキーペア(両方とも`keydb/`配下)、および`bastillion.jceks` — はデフォルトでその配下に置かれるため、`CONFIG_DIR`を1つの場所に指定すれば、それらすべてが移動されます。```bash
export CONFIG_DIR=/data/bastillion/

KEYSTORE_PATHDB_CONNECTION_URL は、そのうちの1つだけを別の場所(実際の証明書、リモートDB)に向けるために引き続き存在します — TLS / HTTPS と 以下の「データベース設定」セクションを参照してください — ただし、すべてを CONFIG_DIR に統合するだけなら、どちらも必要ありません。

CONFIG_DIR 自体は、作業ディレクトリを基準とした ./config をデフォルトとします。これを設定したことがない既存インスタンスをアップグレードする場合? 以前のリリースでは、./config ではなく作業ディレクトリに直接状態を保存していました — Bastillion はこのバージョンでの初回起動時にそれを検出し、自動的に ./config(または、今設定した場合は CONFIG_DIR)に移動します。

SSHキー管理```bash # Disable key management (append instead of overwrite) export KEY_MANAGEMENT_ENABLED=false

authorized_keys refresh interval in minutes (no refresh for <=0)

export AUTH_KEYS_REFRESH_INTERVAL=120

Force user key generation and strong passphrases

export FORCE_USER_KEY_GENERATION=false

</details>

<details>
<summary><strong>カスタムSSHキーペア</strong></summary>

デフォルトでは、Bastillionは初回起動時に独自のEd25519キーペアを生成します。独自のキーを使用するには、
UI経由が最も簡単です:**設定 → アプリケーションSSHキーの置き換え**
(マネージャーアカウントのみ)— 秘密鍵、公開鍵、およびパスフレーズ(ある場合)を貼り付けると、
再起動不要ですぐに反映されます。

⚠️ これにより、登録済みのすべてのシステムが信頼する*1つの*キーが置き換えられます。これは、Bastillionを初めてセットアップする際の
**システムを登録する前**の一度きりの手順として想定されています — すでにシステムを登録している場合、
キーを置き換えた瞬間にBastillionはそれらすべてへのSSHアクセスを失います。ただし、この正確なキーが
すべてのシステムの`authorized_keys`にすでに存在している場合を除きます。設定ページでは、システムが登録されている場合、
追加の確認チェックボックスが必要になります。これはまさにこのためです。

**すでにシステムを登録しており、それでもキーをローテーションする必要がある場合?** すべての場所で`authorized_keys`を手動で編集するのではなく、
Bastillion自体を通じて新しいキーを事前配置してください:

1. `FORCE_USER_KEY_GENERATION=false`を設定して、**SSHキーの管理 → SSHキーの追加**で新しいキーの生成のみではなく、
   既存の公開鍵を貼り付けられるようにします。
2. そこに、すべてのシステムをカバーするプロファイルに対して新しいキーを追加し、(SSHキーの管理、または各システムのステータスで)
   実際にすべての場所に反映されていることを確認します — `AUTH_KEYS_REFRESH_INTERVAL`に注意してください。
   それがキーを配信する仕組みだからです。
3. すべてのシステムに反映されていることを確認できた場合のみ、設定でアプリケーションキーを置き換えます。
4. `FORCE_USER_KEY_GENERATION`を以前の値に戻し、新しいアプリケーションキーがすべてのシステムに伝播したことを確認したら
   (繰り返しますが、`AUTH_KEYS_REFRESH_INTERVAL`に注意)、手順2で追加したキーをSSHキーの管理から削除します —
   これは`authorized_keys`を事前にシードするためだけに一時的に配置されたものであり、今後は不要です。

スクリプト化/ヘッドレス環境の場合も、環境変数と再起動を使用して同じことを実行できます:```bash
# Regenerate and import SSH keys
export RESET_APPLICATION_SSH_KEY=true

# Private key
export PRIVATE_KEY=/Users/you/.ssh/id_rsa

# Public key
export PUBLIC_KEY=/Users/you/.ssh/id_rsa.pub

# Passphrase (leave blank if none)
export DEFAULT_SSH_PASSPHRASE=myPa$$w0rd

登録が完了すると、これらは削除できます。鍵ペアはすでにデータベースに保存されているためです。

SSH_KEY_TYPErsaecdsaed25519、または ed448)が重要になるのは、Bastillion が新しい鍵を生成する場合のみで、鍵をインポートする場合ではありません。インポートされた鍵のタイプは、鍵自体から読み取られます。```bash

SSH key type ('rsa', 'ecdsa', 'ed25519', or 'ed448')

Supported options:

rsa - Classic, widely compatible (configurable length, default 4096)

ecdsa - Faster, smaller keys (P-256/384/521 curves)

ed25519 - Default and recommended (≈ RSA-4096, secure and fast)

ed448 - Extra-strong (≈ RSA-8192, slower and less supported)

export SSH_KEY_TYPE=ed25519

</details>

<details>
<summary><strong>データベース設定</strong></summary>

組み込みH2の例:```bash
export DB_USER=bastillion
export DB_PASSWORD=p@$$w0rd!!
export DB_DRIVER=org.h2.Driver
export DB_CONNECTION_URL=jdbc:h2:file:keydb/bastillion;CIPHER=AES;

リモートH2の例:```bash export DB_CONNECTION_URL=jdbc:h2:tcp://:/~/bastillion;CIPHER=AES;

</details>

<details>
<summary><strong>外部認証(LDAP / JAAS)</strong></summary>

既存のLDAP/Active Directoryサーバーに対して、(ローカルパスワードの代わりに、またはそれに加えて)認証を行います。有効にするには:```bash
export JAAS_MODULE=ldap-ol

jaas.conf を設定します:``` ldap-ol { com.sun.security.auth.module.LdapLoginModule SUFFICIENT userProvider="ldap://hostname:389/ou=example,dc=bastillion,dc=com" userFilter="(&(uid={USERNAME})(objectClass=inetOrgPerson))" authzIdentity="{cn}" useSSL=false debug=false; };

LDAPロールをBastillionプロファイルにマッピングするには:```
ldap-ol-with-roles {
    org.eclipse.jetty.security.jaas.spi.LdapLoginModule required
    debug="false"
    useLdaps="false"
    contextFactory="com.sun.jndi.ldap.LdapCtxFactory"
    hostname="<SERVER>"
    port="389"
    bindDn="<BIND-DN>"
    bindPassword="<BIND-DN PASSWORD>"
    authenticationMethod="simple"
    forceBindingLogin="true"
    userBaseDn="ou=users,dc=bastillion,dc=com"
    userRdnAttribute="uid"
    userIdAttribute="uid"
    userPasswordAttribute="userPassword"
    userObjectClass="inetOrgPerson"
    roleBaseDn="ou=groups,dc=bastillion,dc=com"
    roleNameAttribute="cn"
    roleMemberAttribute="member"
    roleObjectClass="groupOfNames";
};

管理者は初回ログイン時に追加され、システムプロファイルを割り当てることができます。

ロールマッピングの実際の仕組み: ユーザーが所属する各LDAPグループ(上記のroleBaseDn/ roleMemberAttributeによる)は「ロール名」になります。これは、そのグループの roleNameAttribute(上記の例ではcn)の値です。ログインのたびに、Bastillionはそれらの ロール名のそれぞれを、完全なテキスト一致で、管理 → プロファイルで作成した プロファイルの名前と比較します。一致すると、そのユーザーはそのプロファイルに割り当てられ、一致しなければ、そのプロファイルへのアクセスはありません。つまり、ユーザーがLDAPグループcn=admins,ou=groups,...のメンバーである場合、そのメンバーシップがBastillionで意味を持つには、Bastillionのプロファイルが文字通りadminsという名前(大文字小文字は別として、比較は大文字小文字を区別しませんが、スペルは区別されます)である必要があります。これに対する個別のマッピング手順やUIはありません。名前が単純に一致している必要があるだけです。

ロールがどのBastillionプロファイルにも一致しないユーザーは、ログイン時に拒否されます(Managerアカウントは唯一の例外で、プロファイルスコープの対象外です)。defaultProfileForLdapをプロファイル名に設定すると、すべてのLDAPユーザーが自動的にそのプロファイルに割り当てられ、ロールの一致に関係なく全員がログインできるようになります。これは、プロファイル名をディレクトリのグループ名に合わせている間のセーフティネットとして役立ちます。```bash export DEFAULT_PROFILE_FOR_LDAP=everyone

</details>

<details>
<summary><strong>シングルサインオン(SAML 2.0)</strong></summary>

エンタープライズIDプロバイダー(Microsoft Entra ID、Okta、ADFS、または任意の
SAML 2.0 IdP)に対して認証を行い、ローカルパスワードやLDAPの代わりに(またはそれらと併用して)使用します。設定が完了すると、ログインページに **SSOでサインイン** ボタンが表示されます。有効にするには:```bash
export SAML_BASE_URL=https://bastillion.example.com
export SAML_IDP_METADATA_URL=https://login.microsoftonline.com/<tenant-id>/federationmetadata/2007-06/federationmetadata.xml?appid=<app-id>

Entra ID(またはお好みのIdP)で、Bastillionをエンタープライズアプリケーション/サービスプロバイダーとして登録します:

  • 識別子(エンティティID):https://bastillion.example.com(または設定されている場合はSAML_SP_ENTITY_ID — 下記参照)
  • 応答URL(アサーションコンシューマサービスURL):https://bastillion.example.com/saml/acs

IdPメタデータURLが手元にない場合?代わりにIdPを手動で設定します — その場合、以下の3つすべてが必須です:```bash export SAML_IDP_ENTITY_ID=https://sts.windows.net// export SAML_IDP_SSO_URL=https://login.microsoftonline.com//saml2 export SAML_IDP_CERT=

IdP側に登録されたEntity IDが`SAML_BASE_URL`と完全に一致しない場合にのみ必要です:```bash
export SAML_SP_ENTITY_ID=https://bastillion.example.com

Entraグループ/ロールクレームをBastillionプロファイルにマッピングするには(SAML_ROLE_ATTRIBUTEをデフォルトから変更する前に、以下の「ロールマッピングの実際の仕組み」を参照してください):```bash export SAML_ROLE_ATTRIBUTE=http://schemas.microsoft.com/ws/2008/06/identity/claims/groups export DEFAULT_PROFILE_FOR_SAML=everyone

管理者は初回のSSOログイン時に追加され、システムプロファイルを割り当てることができます。

**Bastillionに表示されるユーザー名:** SAML NameIDがユーザー名になります。Entraはデフォルトで
`user.userprincipalname` を送信します。これは通常のテナントメンバーには問題ありませんが、
B2Bゲスト(個人または外部メールでサインインし、ゲストとして追加されたユーザー)の場合、
`alice_gmail.com#EXT#@yourtenant.onmicrosoft.com` のような見苦しいゲストUPNになります。
よりすっきりしたユーザー名にするには、エンタープライズアプリケーションの *シングルサインオン* →
SAML → *属性とクレーム* に移動し、**一意のユーザー識別子(Name ID)** を編集して、
その *ソース属性* を `user.userprincipalname` から `user.mail` に変更します。

**ロールマッピングの実際の仕組み - 上記のLDAPと同じメカニズム:** `SAML_ROLE_ATTRIBUTE` は、
ユーザーのグループ/ロールを運ぶ *どの* アサーション属性かを指定します。特定のログインでその属性が
保持する *値* は、**完全なテキスト一致** で、**管理 → プロファイル** の下に作成したプロファイルの
名前と比較されます。プロファイル名に一致する値はユーザーをそのプロファイルに割り当てます。
クレームの他の部分は関係ありません。つまり、Bastillionプロファイルは、アサーションが送信する
文字列と完全に同じ名前である必要があります。個別のマッピング手順やUIはなく、名前が一致している
必要があるだけです。

これは特にEntra IDで最も頻繁に問題を引き起こす部分です。デフォルトでは、Entraのグループクレームは、
エンタープライズアプリケーションのトークン構成がグループ**名**を送信するように明示的に設定されていない限り、
各グループを表示名ではなく**オブジェクトID**(GUID)として送信できます。Bastillionプロファイルに
`admins`/`everyone` のような名前を付けていても、EntraがGUIDを送信している場合、何も一致しません。
マッピングが壊れていると判断する前に、実際のアサーション(またはアプリのEntraトークン構成)で実際の
クレーム値を確認してください。通常はこれが原因であり、Bastillion側の問題ではありません。
修正方法は3つあり、推奨順に示します。

1. **グループクレームの代わりにEntraアプリロールを使用する(最もクリーン)。** アプリの登録 →
   アプリロールで、必要な値(`admins`、`everyone` など)とまったく同じロールを定義し、
   エンタープライズアプリケーションの *ユーザーとグループ* でユーザー/グループをそれらのロールに
   割り当てます。SAMLトークンが `roles` クレームを送信するように構成し、`SAML_ROLE_ATTRIBUTE` を
   グループクレームではなくそのクレームのURIに向けます。Entraが送信する正確な文字列を選択できるため、
   GUIDの問題はまったくなく、ADグループを流用するよりもクリーンな認可モデルになります。
2. **グループクレームのソース属性を変更する。** エンタープライズアプリケーション → シングルサインオン →
   SAML → *属性とクレーム* → グループクレームを編集 → *ソース属性* ドロップダウンがあり、
   通常はグループIDがデフォルトです。テナントと、グループがクラウドのみかオンプレミスADから同期されているか
   によって、`sAMAccountName` または表示名オプションに切り替えられる場合があります。正確な選択肢は
   テナントとEntraポータルのバージョンによって異なるため、特定のラベルを想定せずに実際に提供されている
   ものを確認してください。
3. **または、争わずに、Entraが実際に送信するものに合わせてBastillionプロファイルに名前を付ける。**
   EntraがGUIDの送信を主張する場合、そのGUIDを文字通り名前にしたBastillionプロファイルを作成します。
   見た目は悪いですが、Entra側の再構成はゼロで済みます。

クレームがどのBastillionプロファイルにも一致しないユーザーは、ログイン時に拒否されます
(**Manager** アカウントは唯一の例外で、プロファイルスコープの対象外です)。LDAPとまったく同じなので、
`DEFAULT_PROFILE_FOR_SAML` を設定する価値があるのは、`DEFAULT_PROFILE_FOR_LDAP` を設定するのと同じ理由です。
プロファイル名をIdPのクレーム値に合わせている間のセーフティネットです。

SSOログインでは、Bastillion独自のワンタイムパスコードチェックはスキップされます。IdPが独自の
MFA/条件付きアクセスポリシーを適用することが期待されます。初回のOTP登録は引き続き提供されるため、
SSOが無効になった場合に備えてSAMLユーザーはローカルのフォールバック認証情報を利用できます。

**署名付きリクエストと暗号化されたアサーション:** Bastillionは、最初に必要になったときに独自の
SAML署名証明書を自動的に生成し(自己署名、TLS証明書の生成と同じ方法)、以降はそれを使用してすべての
送信AuthnRequestに署名します。セットアップは不要で、IdPがチェックしなくても無害です。
`https://bastillion.example.com/saml/metadata` を取得して、その証明書を標準のSPメタデータ形式で入手し、
Bastillionの署名付きリクエストを検証する必要がある場合や、Bastillion用にアサーションを暗号化する必要が
ある場合は、IdP管理者に渡します。ほとんどのIdPは、生の証明書を貼り付ける代わりにSPメタデータURLを直接
インポートできます。自動生成されたものの代わりに実際の(例:CA発行の)キーペアを使用したい場合は、
`SAML_SP_KEYSTORE_PATH`/`SAML_SP_KEYSTORE_PASSWORD` をそれを含むPKCS12キーストアに向けます。
暗号化されたアサーションを *必須* にする場合(デフォルトではオフ。IdPが実際にBastillionの証明書用に
暗号化するように構成された後にのみオンにしてください。そうしないと、すべてのログインが失敗し始めます):```bash
export SAML_WANT_ENCRYPTED_ASSERTIONS=true

現在は対応していません: シングルログアウト(SLO)-ログアウトはローカルのみに留まり、同じSSOセッションを介してサインインしたIdPや他のアプリケーションには通知されません。SAML SSOはLDAPと併用して有効化できます。両者は独立して評価され、どちらでも初回ログイン時に新しいユーザーをプロビジョニングできます。

監査

セッション監査はデフォルトで有効です。ターミナル出力はBastillionのデータベースに保存され、監査セッション(マネージャーアカウントのみ)で確認できます。出力はブラウザにストリーミングされるため、非常に大量のターミナル出力を含むセッションでも再生できます。監査履歴はdeleteAuditLogAfter日間(デフォルトでは90日)保持されます。無効にするには次のようにします:```bash export ENABLE_INTERNAL_AUDIT=false

ファイルベースの監査ログもありますが、デフォルトでは無効です。**log4j2.xml** で以下のコメントを解除して有効にします:
- `io.bastillion.manage.util.SystemAudit`
- `audit-appender`

> https://github.com/bastillion-io/Bastillion/blob/main/src/main/resources/log4j2.xml#L19-L22
</details>

<details>
<summary><strong>v4 からの移行</strong></summary>

古い Bastillion v4 インストールからアップグレードし、ユーザー、システム、プロファイル、スクリプト、そして(最も重要な)アプリケーションの既存の SSH キーペアを、最初からやり直すのではなく保持したい場合、`tools/migrate/` にはまさにそのためのスタンドアロンの移行ツールがあります。これは、古い H2 データベースのすべてのテーブルを(アプリレベルの暗号化された列を OLD インスタンスのキーストアで復号化して)JSON ファイルにエクスポートし、それを新しい v5 インスタンスにインポートします(NEW インスタンスのキーストアで再暗号化)。既存のユーザーは、強制的なリセットなしで、移行直後に現在のパスワードでログインできます。```bash
cd tools/migrate

# 1. Export the old database
./migrate.sh export /opt/Bastillion-jetty/jetty/bastillion/WEB-INF/classes/ ~/bastillion-export.json

# 2. Start the new v5 instance once against the config dir you're migrating into, then
#    stop it (Ctrl+C) once it's finished booting - this creates the schema, jceks, and
#    default admin user.
cd ../..
java -DCONFIG_DIR=/data/bastillion/ -jar target/bastillion-5.0.0-SNAPSHOT.jar

# 3. Import into the new database (full replace of all 12 tables)
cd tools/migrate
./migrate.sh import /data/bastillion/ ~/bastillion-export.json --yes-replace-all-data

# 4. Delete the export file - it contains decrypted secrets
rm ~/bastillion-export.json

tools/migrate/README.md に詳細が記載されています — 旧インストールの設定ディレクトリの場所、移行される内容の詳細、平文エクスポートファイルに関するセキュリティ上の注意事項を確認できます。


その他のスクリーンショット

コアワークフローは 動作の仕組み に示されています。以下のグループを展開して、インターフェースの残りの部分を確認してください。

認証 — ログインと二要素認証の登録

ログイン

ユーザー名とパスワード、および任意のOTPアクセスコードでサインインします。

Bastillion ログイン画面

二要素認証の設定

Authy、Google Authenticator、またはその他の互換アプリでQRコードをスキャンします。

Bastillion 二要素認証設定画面

アクセス管理 — ナビゲーション、プロファイル、ユーザー

メインメニュー

利用可能なツールは、サインインしているユーザーの権限に基づいて制限されます。

Bastillion メインメニュー

プロファイルの管理

システムを名前付きプロファイルにグループ化して、アクセスを制御します。

Bastillion プロファイル管理画面

ユーザーの管理

アカウントを作成し、ユーザーロールを選択し、プロファイルを通じてシステムアクセスを付与します。

Bastillion ユーザー管理画面

ターミナルと自動化 — セッションの起動と保存済みスクリプトの実行

ターミナル

1つ以上のシステムを選択し、必要に応じてプロファイルでフィルタリングして、同時に開きます。

Bastillion ターミナル選択画面

複合スクリプト

スクリプトを一度保存して、選択したすべてのターミナルで実行します。

Bastillion 複合スクリプト管理画面

設定 — アカウントの外観とアプリケーション認証

ユーザー設定

パスワードを変更し、インターフェースとターミナルの外観を選択し、Bastillionが登録済みシステムへの認証に使用する公開鍵を管理します。

Bastillion ユーザー設定画面


ライセンス

Bastillion は Prosperity Public License の下で提供されています。

サードパーティ依存関係とそのライセンスの完全なリストは 3rdPartyLicenses.md にあります。

Loophole, LLC — Sean Kavanagh

[email protected]

カテゴリ