# NocoBase セキュリティガイド

NocoBaseは、機能設計からシステム実装に至るまで、データとアプリケーションのセキュリティを重視しています。プラットフォームには、ユーザー認証、アクセス制御、データ暗号化など、複数のセキュリティ機能が組み込まれており、実際のニーズに応じてセキュリティポリシーを柔軟に設定できます。ユーザーデータの保護、アクセス権限の管理、開発環境と本番環境の分離など、NocoBaseは実用的なツールとソリューションを提供します。本ガイドは、NocoBaseを安全にご利用いただくための指針を提供し、ユーザーの皆様がデータ、アプリケーション、環境を保護し、安全を確保しながらシステム機能を効率的に利用できるよう支援することを目的としています。

## ユーザー認証

ユーザー認証は、ユーザーの身元を識別し、不正なシステムへのアクセスを防ぎ、ユーザーIDの悪用を防止するために使用されます。

### トークンキー

デフォルトでは、NocoBaseはJWT (JSON Web Token) を使用してサーバーサイドAPIの認証を行います。ユーザーはシステム環境変数 `APP_KEY` を通じてトークンキーを設定できます。アプリケーションのトークンキーは適切に管理し、外部への漏洩を防いでください。`APP_KEY` が変更された場合、古いトークンも無効になることに注意してください。

### トークンポリシー

NocoBaseは、ユーザーのトークンに対して以下のセキュリティポリシー設定をサポートしています。

| 設定項目              | 説明                                                                                                                                                                                  |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| セッション有効期間          | ユーザーがログインしてから有効となる最長期間です。セッション有効期間内であれば、トークンは自動的に更新されますが、期限が過ぎると、ユーザーは再ログインを求められます。                                                                                                |
| トークン有効期間        | 発行されるAPIトークンごとの有効期間です。トークンが期限切れになっても、セッション有効期間内で更新期限を超えていない場合、サーバーはユーザーセッションを維持するために新しいトークンを自動的に発行します。それ以外の場合は、ユーザーは再ログインを求められます。（各トークンは一度だけ更新可能です） |
| 期限切れトークンの更新期限 | トークンが期限切れになった後、更新が許可される最大期間です。                                                                                                                                                        |

通常、管理者の方には以下の設定をお勧めします。

- トークンの露出時間を制限するため、トークン有効期間を短めに設定してください。
- ユーザーエクスペリエンスとセキュリティのバランスを取るため、トークン有効期間よりも長く、しかし長すぎない妥当なセッション有効期間を設定してください。トークンの自動更新メカニズムを利用して、アクティブなユーザーセッションを中断させずに、長期セッションが悪用されるリスクを軽減します。
- ユーザーが長時間非アクティブな場合に、新しいトークンが発行されずにトークンが自然に期限切れになるよう、妥当な期限切れトークン更新期限を設定し、アイドル状態のユーザーセッションが悪用されるリスクを低減します。

### トークンのクライアントストレージ

デフォルトでは、ユーザーのトークンはブラウザのLocalStorageに保存されます。ブラウザページを閉じて再度開いた場合でも、トークンが有効期間内であれば、ユーザーは再ログインする必要はありません。

ユーザーがページを開くたびに再ログインを求める場合は、環境変数 `API_CLIENT_STORAGE_TYPE=sessionStorage` を設定し、ユーザーのトークンをブラウザのSessionStorageに保存することで、この目的を達成できます。

### パスワードポリシー

> プロフェッショナル版以上

NocoBaseは、すべてのユーザーに対してパスワードルールとパスワードログイン試行ロックポリシーを設定することをサポートしており、パスワードログインが有効なNocoBaseアプリケーションのセキュリティを強化します。各設定項目の詳細については、[パスワードポリシー](./password-policy/index.md)をご参照ください。

#### パスワードルール

| 設定項目                     | 説明                                                     |
| -------------------------- | -------------------------------------------------------- |
| **パスワードの長さ**               | パスワードの最小長要件です。最大長は64文字です。                      |
| **パスワードの複雑さ**             | パスワードの複雑さ要件を設定します。含めるべき文字の種類を指定します。               |
| **パスワードにユーザー名を含めない** | パスワードに現在のユーザー名を含めることができるかどうかを設定します。                     |
| **パスワード履歴の記憶**           | ユーザーが最近使用したパスワードの数を記憶します。パスワード変更時に再利用することはできません。 |

#### パスワード有効期限設定

| 設定項目                   | 説明                                                                                                                                                                                       |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **パスワード有効期間**           | ユーザーパスワードの有効期間です。ユーザーはパスワードが期限切れになる前に変更する必要があり、そうすることで有効期間が再計算されます。期限切れ前にパスワードを変更しなかった場合、古いパスワードでログインできなくなり、管理者の支援によるリセットが必要になります。<br>他のログイン方法が設定されている場合、ユーザーはそちらを利用してログインできます。 |
| **パスワード期限切れ通知チャネル** | ユーザーのパスワードが期限切れになる10日以内、ユーザーがログインするたびにリマインダーを送信します。                                                                                                                                         |

#### パスワードログインセキュリティ

| 設定項目                             | 説明                                                                                                                                |
| ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| **無効なパスワードログイン試行回数の上限**       | 規定の時間間隔内でユーザーが試行できるログイン回数の上限を設定します。                                                                                      |
| **無効なパスワードログイン時間間隔の上限（秒）** | ユーザーの無効なログイン試行回数の上限を計算するための時間間隔を秒単位で設定します。                                                                                  |
| **ロック時間（秒）**                 | 無効なパスワードログイン制限を超過した後、ユーザーをロックする時間を設定します（0は制限なし）。<br>ユーザーがロックされている間は、APIキーを含むいかなる認証方法でもシステムへのアクセスが禁止されます。 |

通常、以下のことをお勧めします。

- 強度の高いパスワードルールを設定し、パスワードが推測されたり、ブルートフォース攻撃を受けたりするリスクを低減します。
- ユーザーに定期的なパスワード変更を強制するため、妥当なパスワード有効期間を設定します。
- 無効なパスワードログイン回数と時間の設定を組み合わせ、短時間での高頻度なパスワードログイン試行を制限し、ブルートフォース攻撃を防ぎます。
- セキュリティ要件が非常に厳しいシナリオでは、ログイン制限を超過した後のユーザーロック時間を妥当に設定できます。ただし、ロック時間の設定は悪用される可能性があることに注意してください。攻撃者が標的のアカウントに対して意図的に複数回誤ったパスワードを入力し、アカウントをロックさせて正常な利用を妨害する可能性があります。実際の運用では、IP制限やAPIレート制限などの手段と組み合わせて、このような攻撃を防ぐことができます。
- NocoBaseのデフォルトのrootユーザー名、メールアドレス、パスワードを変更し、悪用されないようにしてください。
- パスワードの期限切れやアカウントロックは、管理者アカウントを含め、システムへのアクセスを不可能にします。そのため、パスワードのリセットやユーザーのロック解除権限を持つ複数のアカウントをシステム内に設定することをお勧めします。

![](https://static-docs.nocobase.com/202501031618900.png)

### ユーザーロック

> プロフェッショナル版以上（パスワードポリシープラグインに含まれます）

無効なパスワードログイン制限を超過してロックされたユーザーを管理します。手動でロック解除することも、異常なユーザーをロックリストに手動で追加することも可能です。ユーザーがロックされると、APIキーを含むいかなる認証方法でもシステムへのアクセスが禁止されます。

![](https://static-docs.nocobase.com/202501031618399.png)

### APIキー

NocoBaseはAPIキーを介したシステムAPIの呼び出しをサポートしており、ユーザーはAPIキープラグインの設定でAPIキーを追加できます。

- APIキーには適切なロールを紐付け、ロールに関連付けられた権限が正しく設定されていることを確認してください。
- APIキーの使用中は、APIキーの外部への漏洩を防いでください。
- 通常、APIキーには有効期間を設定し、「期限なし」オプションは使用しないことをお勧めします。
- APIキーが異常に使用されていることが判明し、漏洩のリスクがある場合は、該当するAPIキーを削除して無効化できます。

![](https://static-docs.nocobase.com/46141872fc0ad9a96fa5b14e97fcba12.png)

### シングルサインオン (SSO)

> 商用プラグイン

NocoBaseは、OIDC、SAML 2.0、LDAP、CASなど、複数の主要プロトコルをサポートする豊富なSSO認証プラグインを提供しています。また、NocoBaseには完全な認証方式拡張インターフェースがあり、他の認証タイプを迅速に開発・統合できます。既存のIdPとNocoBaseを簡単に連携させ、IdP上でユーザーIDを一元的に管理することで、セキュリティを向上させることができます。
![](https://static-docs.nocobase.com/202501031619427.png)

### 二要素認証 (Two-factor authentication)

> エンタープライズ版

二要素認証は、ユーザーがパスワードでログインする際に、身元を証明する2つ目の有効な情報を提供することを要求します。例えば、ユーザーの信頼できるデバイスにワンタイム動的認証コードを送信することでユーザーの身元を確認し、ユーザーIDの悪用を防ぎ、パスワード漏洩によるリスクを低減します。

### IPアクセス制御

> エンタープライズ版

NocoBaseは、ユーザーアクセスIPに対してブラックリストまたはホワイトリストを設定することをサポートしています。

- セキュリティ要件が厳格な環境では、IPホワイトリストを設定し、特定のIPまたはIP範囲のみがシステムにアクセスできるようにすることで、不正な外部ネットワーク接続を制限し、根本的なセキュリティリスクを低減できます。
- 公開ネットワークアクセス条件下で、管理者が異常なアクセスを発見した場合、IPブラックリストを設定して、既知の悪意あるIPアドレスや疑わしいアクセス元をブロックし、悪意のあるスキャンやブルートフォース攻撃などのセキュリティ脅威を軽減します。
- 拒否されたアクセスリクエストについては、ログ記録を保持します。

## 権限制御

システム内で異なるロールを設定し、それらのロールに適切な権限を付与することで、ユーザーがリソースにアクセスする権限をきめ細かく制御できます。管理者は、実際のシナリオのニーズに合わせて適切に設定し、システムリソースの漏洩リスクを低減する必要があります。

### Rootユーザー

NocoBaseを初めてインストールする際、アプリケーションはrootユーザーを初期化します。ユーザーはシステム環境変数を設定してrootユーザーの関連情報を変更し、悪用されないようにすることをお勧めします。

- `INIT_ROOT_USERNAME` - rootユーザー名
- `INIT_ROOT_EMAIL` - rootユーザーのメールアドレス
- `INIT_ROOT_PASSWORD` - rootユーザーのパスワード。強度の高いパスワードを設定してください。

システムを継続して使用する際には、他の管理者アカウントを設定して使用し、rootユーザーで直接アプリケーションを操作することは極力避けてください。

### ロールと権限

NocoBaseは、システム内でロールを設定し、異なるロールに権限を付与し、ユーザーを対応するロールに紐付けることで、ユーザーがリソースにアクセスする権限を制御します。各ユーザーは複数のロールを持つことができ、ユーザーはロールを切り替えることで、異なる視点からリソースを操作できます。部署プラグインがインストールされている場合、ロールと部門を紐付けることもでき、ユーザーは所属部門に紐付けられたロールを持つことができます。

![](https://static-docs.nocobase.com/202501031620965.png)

### システム設定権限

システム設定権限には以下の設定が含まれます。

- 設定画面の許可
- プラグインのインストール、有効化、無効化の許可
- プラグインの設定の許可
- キャッシュのクリア、アプリケーションの再起動の許可
- 各プラグインの設定権限

### メニュー権限

メニュー権限は、デスクトップ版とモバイル版の両方で、ユーザーが異なるメニューページにアクセスする権限を制御するために使用されます。
![](https://static-docs.nocobase.com/202501031620717.png)

### データ権限

NocoBaseは、システム内のデータにアクセスするユーザーの権限に対してきめ細かな制御を提供し、異なるユーザーが自身の職責に関連するデータのみにアクセスできるようにすることで、権限の逸脱やデータ漏洩を防ぎます。

#### グローバル制御

![](https://static-docs.nocobase.com/202501031620866.png)

#### テーブルレベル、フィールドレベル制御

![](https://static-docs.nocobase.com/202501031621047.png)

#### データ範囲制御

ユーザーが操作できるデータ範囲を設定します。ここでのデータ範囲は、ブロックで設定されるデータ範囲とは異なります。ブロックで設定されるデータ範囲は通常、フロントエンドでのデータフィルタリングにのみ使用されます。ユーザーがデータリソースにアクセスする権限を厳密に制御する必要がある場合、ここで設定する必要があり、サーバー側で制御されます。

![](https://static-docs.nocobase.com/202501031621712.png)

## データセキュリティ

データストレージとバックアップのプロセスにおいて、NocoBaseはデータセキュリティを確保するための効果的なメカニズムを提供します。

### パスワードストレージ

NocoBaseのユーザーパスワードはscryptアルゴリズムで暗号化されて保存され、大規模なハードウェア攻撃に対して効果的に対抗できます。

### 環境変数とキー

NocoBaseでサードパーティサービスを使用する際、サードパーティのキー情報を環境変数に設定し、暗号化して保存することをお勧めします。これにより、異なる場所での設定と利用が容易になり、セキュリティが強化されます。詳細な使用方法については、ドキュメントをご参照ください。

:::warning
デフォルトでは、キーはAES-256-CBCアルゴリズムで暗号化されます。NocoBaseは32ビットの暗号化キーを自動生成し、storage/.data/environment/aes_key.datに保存します。ユーザーはキーファイルが盗まれないよう、適切に保管してください。データを移行する必要がある場合、キーファイルも一緒に移行する必要があります。
:::

![](https://static-docs.nocobase.com/202501031622612.png)

### ファイルストレージ

機密ファイルを保存する必要がある場合、S3プロトコル互換のクラウドストレージサービスを使用し、商用プラグインのFile storage: S3 (Pro) と連携して、ファイルのプライベートな読み書きを実現することをお勧めします。内部ネットワーク環境で使用する必要がある場合は、MinIOなど、プライベートデプロイメントをサポートし、S3プロトコル互換のストレージアプリケーションを使用することをお勧めします。

![](https://static-docs.nocobase.com/202501031623549.png)

ローカルストレージや、アプリケーションと同一オリジンの URL で直接アクセスできる public ストレージについては、アクティブコンテンツを含むファイルのリスクにも注意が必要です。`html`、`xhtml`、`svg` などのファイルは、ブラウザによって直接解析・実行される可能性があります。攻撃者がこのようなファイルをアップロードし、ユーザーに開かせることができる場合、信頼されたアプリケーションドメイン上で悪意のあるページやスクリプトを配信できるおそれがあります。

通常、管理者には次の対応を推奨します。

- ユーザーアップロードファイルがメインアプリケーションと同一オリジンで直接配信されないよう、プライベートストレージ、署名付き URL、または独立したファイル用ドメインを優先してください。
- アップロードには厳格な MIME type の許可リストを適用し、業務上本当に必要なファイルタイプだけを許可してください。
- `text/html`、`application/xhtml+xml`、`image/svg+xml` などのアクティブコンテンツ型を許可する場合は慎重に判断してください。システムがこれらをダウンロードとして返すようにしていても、それだけでアップロード制限やオリジン分離の代替にはなりません。
- リバースプロキシ、CDN、オブジェクトストレージなど、静的ファイル配信に関わる各レイヤーで一貫したセキュリティ設定を行い、アプリケーション層の保護を迂回して危険なファイルがインライン返却されないようにしてください。
- 信頼できない Web コンテンツのホスティングにローカル/public ストレージを使用しないでください。やむを得ず必要な場合は、分離されたドメインを使用し、CSP、ダウンロード挙動、アクセス制御を個別に評価してください。

管理者が危険なファイルタイプのアップロードを明示的に許可する場合は、フィッシング、同一オリジンでのスクリプト実行、機密情報漏えいなどのリスクを自ら評価し、Web Server、ゲートウェイ、CDN、ストレージサービスが配備経路全体で一貫した制限を適用していることを確認してください。

### アプリケーションのバックアップ

アプリケーションデータのセキュリティを確保し、データ損失を防ぐため、定期的にデータベースをバックアップすることをお勧めします。

オープンソース版ユーザーは、https://www.nocobase.com/en/blog/nocobase-backup-restore を参照してデータベースツールを利用してバックアップできます。また、データ漏洩を防ぐため、バックアップファイルを適切に保管してください。

プロフェッショナル版以上をご利用のユーザーは、バックアップマネージャーを使用してバックアップできます。バックアップマネージャーは以下の機能を提供します。

- 定期的な自動バックアップ：周期的な自動バックアップにより、時間と手動操作を節約し、データセキュリティをより確実にします。
- バックアップファイルをクラウドストレージに同期：バックアップファイルをアプリケーションサービス本体から分離し、サーバー障害によるサービス停止と同時にバックアップファイルが失われるのを防ぎます。
- バックアップファイルの暗号化：バックアップファイルにパスワードを設定し、バックアップファイルの漏洩によるデータ漏洩のリスクを低減します。

![](https://static-docs.nocobase.com/202501031623107.png)

## 実行環境のセキュリティ

NocoBaseを正しくデプロイし、実行環境のセキュリティを確保することは、NocoBaseアプリケーションのセキュリティを確保するための重要な要素の一つです。

### HTTPSデプロイ

中間者攻撃を防ぐため、NocoBaseアプリケーションサイトにSSL/TLS証明書を追加し、ネットワーク転送中のデータのセキュリティを確保することをお勧めします。

### API通信の暗号化

> エンタープライズ版

より厳格なデータセキュリティ要件を持つ環境では、NocoBaseはAPI通信の暗号化を有効にすることをサポートしています。これにより、APIのリクエストとレスポンスの内容を暗号化し、平文での転送を避け、データ解読のハードルを高めます。

### プライベートデプロイ

デフォルトでは、NocoBaseはサードパーティサービスとの通信は不要であり、NocoBaseチームがユーザーのいかなる情報も収集することはありません。以下の2つの操作を実行する場合にのみ、NocoBaseサーバーへの接続が必要です。

1.  NocoBase Serviceプラットフォームを通じて商用プラグインを自動ダウンロードする。
2.  商用版アプリケーションのオンライン認証とアクティベーション。

ある程度の利便性を犠牲にするのであれば、これらの2つの操作はオフラインで完了することもでき、NocoBaseサーバーに直接接続する必要はありません。

NocoBaseは完全な内部ネットワークデプロイをサポートしています。以下をご参照ください。

- https://www.nocobase.com/en/blog/load-docker-image
- [プラグインディレクトリにアップロードしてプラグインをインストールおよびアップグレードする](/get-started/install-upgrade-plugins#third-party-plugins)

### 複数環境の分離

> プロフェッショナル版以上

実際の運用では、企業ユーザーがテスト環境と本番環境を分離することをお勧めします。これにより、本番環境におけるアプリケーションデータと実行環境のセキュリティを確保できます。移行管理プラグインを利用することで、異なる環境間でのアプリケーションデータの移行を実現できます。

![](https://static-docs.nocobase.com/202501031627729.png)

## 監査と監視

### 監査ログ

> エンタープライズ版

NocoBaseの監査ログ機能は、システム内のユーザーの活動記録を記録します。ユーザーの主要な操作とアクセス行動を記録することで、管理者は以下のことが可能になります。

- ユーザーのアクセスIP、デバイスなどの情報や操作時間をチェックし、異常な行動をタイムリーに発見できます。
- システム内のデータリソースの操作履歴を追跡できます。

![](https://static-docs.nocobase.com/202501031627719.png)

![](https://static-docs.nocobase.com/202501031627922.png)

### アプリケーションログ

NocoBaseは複数のログタイプを提供し、ユーザーがシステムの稼働状況と行動記録を把握できるよう支援します。これにより、システムの問題をタイムリーに発見・特定し、異なる側面からシステムのセキュリティと制御性を確保します。主なログタイプは以下の通りです。

- リクエストログ：アクセスされたURL、HTTPメソッド、リクエストパラメータ、応答時間、ステータスコードなどの情報を含むAPIリクエストログ。
- システムログ：サービス起動、設定変更、エラー情報、主要な操作など、アプリケーションの実行イベントを記録します。
- SQLログ：クエリ、更新、挿入、削除などの操作を含む、データベース操作ステートメントとその実行時間を記録します。
- ワークフローログ：実行時間、実行情報、エラー情報など、ワークフローの実行ログ。
