--- description: "SnapOtter でユーザー、組み込みおよびカスタムロール、権限、API キー、チーム、セッション、監査ログを管理します。" i18n_source_hash: 5e28af686c96 i18n_provenance: human i18n_output_hash: 4917b71a173c --- # ユーザー、ロール、権限 {#users-roles-permissions} SnapOtter は 3 つの組み込みロール、17 の細粒度な権限、そしてツールごとのアクセス制御を任意で設定できるカスタムロールをサポートします。このページでは、認可モデル全体、API キーのスコープ設定、チーム管理、監査ログについて説明します。 ::: tip 関連ページ [OIDC / SSO](/ja/guide/oidc) | [SAML SSO](/ja/guide/saml) | [SCIM プロビジョニング](/ja/guide/scim) | [セキュリティと堅牢化](/ja/guide/security) ::: ## ユーザー {#users} ### ユーザーの作成 {#creating-users} 管理者は管理パネルまたは `POST /api/auth/register` エンドポイントを通じてユーザーを作成できます。各ユーザーはユーザー名、ロール、チーム割り当て、および任意のメールアドレスを持ちます。 ### デフォルト管理者 {#default-admin} 初回起動時に SnapOtter はデフォルトの管理者アカウントを作成します。認証情報は環境変数から取得されます: | Variable | Default | Description | |---|---|---| | `DEFAULT_USERNAME` | `admin` | 初期管理者アカウントのユーザー名 | | `DEFAULT_PASSWORD` | `admin` | 初期管理者アカウントのパスワード | デフォルト管理者は初回ログイン時にパスワードの変更を求められます。 ### 認証プロバイダー {#authentication-providers} ユーザーはいくつかの方法で認証できます: - **ローカル** - SnapOtter データベースに保存されるユーザー名とパスワード - **OIDC** - 任意の OpenID Connect プロバイダー([OIDC / SSO](/ja/guide/oidc) を参照) - **SAML** - SAML 2.0 アイデンティティプロバイダー([SAML SSO](/ja/guide/saml) を参照) - **SCIM** - アイデンティティプロバイダーからの自動プロビジョニング([SCIM プロビジョニング](/ja/guide/scim) を参照) ### 認証の無効化 {#disabling-authentication} `AUTH_ENABLED=false` を設定すると認証を完全に無効化できます。このモードでは、すべてのリクエストに対して `admin` ロールを持つ合成の匿名ユーザーが使用されます。ログインは不要です。 ::: warning 認証を無効化すると、インスタンスに到達できる誰もが完全な管理者アクセスを得ます。信頼できる環境でのみ使用してください。 ::: ## 組み込みロール {#built-in-roles} SnapOtter には 3 つの組み込みロールが含まれています。これらは変更または削除できません。 ### 管理者 (Admin) {#admin} 17 のすべての権限。インスタンスを完全に制御します。 `tools:use` `files:own` `files:all` `apikeys:own` `apikeys:all` `pipelines:own` `pipelines:all` `settings:read` `settings:write` `users:manage` `teams:manage` `features:manage` `system:health` `audit:read` `compliance:manage` `webhooks:manage` `security:manage` ### 編集者 (Editor) {#editor} 7 の権限。すべてのツールを使用し、すべてのファイルとパイプラインを管理できますが、管理者機能にはアクセスできません。 `tools:use` `files:own` `files:all` `apikeys:own` `pipelines:own` `pipelines:all` `settings:read` ### ユーザー (User) {#user} 5 の権限。ツールを使用し、自分自身のリソースを管理できます。 `tools:use` `files:own` `apikeys:own` `pipelines:own` `settings:read` ## 権限リファレンス {#permissions-reference} | Permission | Description | |---|---| | `tools:use` | 任意の処理ツールを使用する | | `files:own` | 自分のファイルを表示・管理する | | `files:all` | すべてのユーザーのファイルを表示・管理する | | `apikeys:own` | 自分の API キーを作成・管理する | | `apikeys:all` | すべてのユーザーの API キーを表示する | | `pipelines:own` | 自分のパイプラインを作成・管理する | | `pipelines:all` | すべてのユーザーのパイプラインを表示・管理する | | `settings:read` | インスタンス設定を表示する | | `settings:write` | インスタンス設定を変更する | | `users:manage` | ユーザーアカウントを作成・更新・削除する | | `teams:manage` | チームを作成・更新・削除する | | `features:manage` | AI 機能バンドルをインストール・管理する | | `system:health` | ヘルスおよびレディネスのエンドポイントにアクセスする | | `audit:read` | 監査ログを表示し、ロールを一覧表示する | | `compliance:manage` | GDPR ライフサイクルとコンプライアンス機能を管理する | | `webhooks:manage` | アウトバウンドの Webhook を設定する | | `security:manage` | セキュリティ設定を管理する(IP 許可リスト、SSO 強制) | ## カスタムロール {#custom-roles} `security:manage` 権限を持つ管理者は、管理パネルまたはロール API を通じてカスタムロールを作成できます。ロールの一覧表示には `audit:read` が必要です。 ### カスタムロールの作成 {#creating-a-custom-role} ```bash curl -X POST http://localhost:1349/api/v1/roles \ -H "Authorization: Bearer si_..." \ -H "Content-Type: application/json" \ -d '{ "name": "reviewer", "description": "Can use tools and view all files", "permissions": ["tools:use", "files:own", "files:all", "settings:read"] }' ``` ロール名は 2〜30 文字で、ハイフンとアンダースコアを含む小文字の英数字にする必要があります。 ### 管理者専用の権限 {#admin-reserved-permissions} 3 つの権限は組み込みロール専用で、カスタムロールには割り当てられません: - `compliance:manage` - `webhooks:manage` - `security:manage` ロール API はこれらの権限を含むリクエストを拒否します。組み込みの `admin` ロールのみがこれらにアクセスできます。 ### ツールレベルの権限 {#tool-level-permissions} カスタムロールは、ユーザーがアクセスできるツールを任意で制限できます。2 つのモードが利用可能です: | Mode | Behavior | License requirement | |---|---|---| | `category` | モダリティ(image、video、audio、document、file)で制限する | なし(無料) | | `tool` | 個別のツール ID で制限する | `per_tool_permissions` エンタープライズ機能が必要 | `tool` モードが設定されているがエンタープライズ機能が利用できない場合、SnapOtter は正常に劣化し、すべてのツールへのアクセスを許可します。 ```json { "name": "image-only", "permissions": ["tools:use", "files:own"], "toolPermissions": { "mode": "category", "allowed": ["image"] } } ``` ### カスタムロールの削除 {#deleting-a-custom-role} カスタムロールが削除されると、それに割り当てられたすべてのユーザーは自動的に `user` ロールに再割り当てされます。 ## チーム {#teams} チームはストレージと保持の管理のためにユーザーをグループ化します。初回起動時に `Default` チームが作成されます。 | Field | Type | Description | |---|---|---| | `name` | string | 一意のチーム名(1〜50 文字) | | `storageQuota` | number | チームごとのストレージ上限(バイト単位、エンタープライズなしで機能) | | `retentionHours` | number | この時間数が経過した後に出力を自動削除する(`team_retention_overrides`、エンタープライズが必要) | | `legalHold` | boolean | チームメンバーのファイルの自動削除を防止する(`legal_hold`、エンタープライズが必要) | ::: info `Default` チームは削除できません。メンバーがまだ在籍しているチームは削除できません。先にメンバーを再割り当てしてください。 ::: ## API キー {#api-keys} ユーザーはプログラムからのアクセス用に API キーを生成できます。各キーは `si_` プレフィックスを使用し、作成時に一度だけ表示されます。 ### スコープ付き権限 {#scoped-permissions} API キーは任意で `permissions` 配列を持つことができます。設定されている場合、リクエストの実効権限はユーザーのロール権限とキーのスコープ付き権限の**積集合**になります。つまり、API キーはユーザー自身の権限を超えて昇格することは決してできません。 ```bash curl -X POST http://localhost:1349/api/v1/api-keys \ -H "Authorization: Bearer si_..." \ -H "Content-Type: application/json" \ -d '{ "name": "CI pipeline key", "permissions": ["tools:use", "files:own"], "expiresAt": "2027-01-01T00:00:00Z" }' ``` ### 有効期限 {#expiration} キーは任意の `expiresAt` タイムスタンプを受け付けます。期限切れのキーは認証時に拒否されます。 ## 監査ログ {#audit-log} SnapOtter はセキュリティに関連するイベントを `audit_log` データベーステーブルに保存された構造化された監査ログに記録します。 ### 監査ログの表示 {#viewing-the-audit-log} ``` GET /api/v1/audit-log?page=1&limit=50&action=LOGIN_FAILED&from=2026-01-01T00:00:00Z&to=2026-12-31T23:59:59Z ``` `audit:read` 権限が必要です。ページネーション(`page`、`limit`)とフィルター(`action`、`ip`、`from`、`to`)をサポートします。 ### ツール操作の監査 {#tool-operation-auditing} ::: warning `TOOL_EXECUTED` イベントはデフォルトでは記録**されません**。次の 2 つの方法のいずれかでオプトインします: 1. `auditToolOperations` 管理設定を `true` に設定する。 2. `audit_export` 機能を持つ有効なライセンスを保持する(team プランと enterprise プランの両方で利用可能)。 これらのいずれかがない場合、個々のツール実行は監査ログに記録されません。 ::: ### エクスポート {#exporting} ``` GET /api/v1/enterprise/audit/export?format=csv&from=2026-01-01T00:00:00Z ``` `audit:read` 権限と `audit_export` エンタープライズ機能が必要です(team プランと enterprise プランの両方で利用可能)。CSV と JSON 形式をサポートし、`action`、`actorId`、`targetType`、`targetId`、`from`、`to` でフィルタリングできます。 ### 改ざん耐性のある署名 {#tamper-resistant-signing} 有効にすると、各監査ログエントリは `DATA_ENCRYPTION_KEY` から派生した HMAC で署名されます。これには以下が必要です: 1. 環境で `DATA_ENCRYPTION_KEY` を設定する。 2. `tamperResistantAudit` 管理設定を有効にする。 3. `tamper_resistant_audit` 機能を持つエンタープライズライセンス。 ### 保持 {#retention} 古いエントリを自動的に削除するには `AUDIT_RETENTION_DAYS` を設定します。デフォルトは `0` で、エントリを無期限に保持することを意味します。 ### イベントリファレンス {#event-reference} | Event | Category | |---|---| | `LOGIN_SUCCESS`, `LOGIN_FAILED` | 認証 | | `OIDC_LOGIN_SUCCESS`, `OIDC_LOGIN_FAILED` | 認証 | | `SAML_LOGIN_SUCCESS`, `SAML_LOGIN_FAILED` | 認証 | | `LOGOUT` | 認証 | | `USER_CREATED`, `USER_UPDATED`, `USER_DELETED` | ユーザー管理 | | `PASSWORD_CHANGED`, `PASSWORD_RESET` | ユーザー管理 | | `MFA_ENROLLED`, `MFA_DISABLED`, `MFA_VERIFIED`, `MFA_VERIFY_FAILED` | MFA | | `MFA_CHALLENGE_ISSUED`, `MFA_RECOVERY_USED`, `MFA_RESET` | MFA | | `ROLE_CREATED`, `ROLE_UPDATED`, `ROLE_DELETED` | ロール | | `API_KEY_CREATED`, `API_KEY_DELETED` | API キー | | `SETTINGS_UPDATED`, `IP_ALLOWLIST_UPDATED` | 設定 | | `FILE_UPLOADED`, `FILE_DELETED` | ファイル | | `TOOL_EXECUTED` | ツール(オプトイン) | | `SCIM_USER_PROVISIONED`, `SCIM_USER_UPDATED`, `SCIM_USER_DEPROVISIONED` | SCIM | | `SCIM_GROUP_SYNCED` | SCIM | | `LEGAL_HOLD_APPLIED`, `LEGAL_HOLD_RELEASED` | コンプライアンス | | `GDPR_EXPORT_INITIATED`, `GDPR_USER_PURGED`, `GDPR_TEAM_PURGED` | コンプライアンス | | `CONFIG_EXPORTED`, `CONFIG_IMPORTED` | 設定 | ## セッション管理 {#session-management} セッションは Cookie ベースで、`SESSION_DURATION_HOURS`(デフォルト: 168 時間 / 7 日)で制御されます。 ### ロール変更はセッションを無効化する {#role-changes-invalidate-sessions} 管理者がユーザーのロールを変更すると、そのユーザーのすべてのアクティブなセッションが削除されます。ユーザーは新しい権限を反映するために再度ログインする必要があります。 ### 安全ガード {#safety-guards} - **最後の管理者の保護**: 残っている最後の管理者を下位のロールに降格することはできません。試みると API はエラーを返します。 - **自己削除の防止**: 管理者は API を通じて自分自身のアカウントを削除できません。