|
| 1 | +--- |
| 2 | +title: セキュリティ・レベル Capabilities |
| 3 | +sidebar: |
| 4 | + order: 4 |
| 5 | +i18nReady: true |
| 6 | +--- |
| 7 | + |
| 8 | +Tauri は、アプリケーションおよびプラグインの開発者に「セキュリティ・レベル」システムを提供し、システム WebView で実行されているアプリケーション・フロントエンドへのコア部の開示に関して細かい有効化/無効化の制限を設けています。 |
| 9 | + |
| 10 | +> > > 《訳注》 **セキュリティ・レベル** 原文は 「capabilities system」(能力システム)。情報開示レベルの決定能力を示すものであるため、本稿では「セキュリティ・レベル」と訳しています。 |
| 11 | +
|
| 12 | +「セキュリティ・レベル」(Capabilities)とは、付与されたラベルに従ってアプリケーション・ウィンドウと Webview に割り当てられる [アクセス権(Permissions)](/ja/security/permissions/) のセットのことです。「セキュリティ・レベル」は複数のウィンドウや Webview の処理に関与し、また、複合的セキュリティ設定の中で参照される可能性があります。 |
| 13 | + |
| 14 | +:::tip[Security Tip(ヒント)] |
| 15 | + |
| 16 | +複数のセキュリティ・レベルの対象であるウィンドウと WebView は、関連するすべてのセキュリティ・レベルの「アクセス権」と「セキュリティ境界」とを効果的に統合します。 |
| 17 | + |
| 18 | +::: |
| 19 | + |
| 20 | +セキュリティ・レベルを記述するファイル(Capability files)は、JSON または TOML ファイルとして `src-tauri/capabilities` ディレクトリ内で定義されています。 |
| 21 | + |
| 22 | +それぞれのファイルを用いて `tauri.conf.json` 内で「識別子」でのみ参照するのがよくあるやりかたですが、この二つを `capabilities` フィールドで直接定義することもできます。 |
| 23 | + |
| 24 | +`capabilities` ディレクトリ内のすべてのセキュリティ・レベル機能は、デフォルトで自動的に有効になります。一旦 `tauri.conf.json` でセキュリティ・レベル機能が明示的に有効化されると、アプリケーションのビルドではその機能のみが使用されます。 |
| 25 | + |
| 26 | +体系的な設定項目の詳細については、[参考情報](/ja/reference/config/) の項を参照してください。 |
| 27 | + |
| 28 | +次の JSON の例では、コア・プラグインと `window.setTitle` API に対するデフォルト機能を有効化するセキュリティ・レベル設定を定義しています。 |
| 29 | + |
| 30 | +```json title="src-tauri/capabilities/default.json" |
| 31 | +{ |
| 32 | + "$schema": "../gen/schemas/desktop-schema.json", |
| 33 | + "identifier": "main-capability", |
| 34 | + "description": "Capability for the main window", |
| 35 | + "windows": ["main"], |
| 36 | + "permissions": [ |
| 37 | + "core:path:default", |
| 38 | + "core:event:default", |
| 39 | + "core:window:default", |
| 40 | + "core:app:default", |
| 41 | + "core:resources:default", |
| 42 | + "core:menu:default", |
| 43 | + "core:tray:default", |
| 44 | + "core:window:allow-set-title" |
| 45 | + ] |
| 46 | +} |
| 47 | +``` |
| 48 | + |
| 49 | +このスニペット(抜粋内容)は、[Tauri Configuration](/ja/develop/configuration-files/#tauri-の設定)ファイルの一部です。 |
| 50 | + |
| 51 | +これがおそらく最も一般的な設定方法で、個々のセキュリティ・レベルを行内に埋め込み(インライン化)、アクセス権のみを「識別子」によって参照します。 |
| 52 | + |
| 53 | +これには、適切に定義された機能ファイルが `capabilities` ディレクトリ内に必要です。 |
| 54 | + |
| 55 | +```json title=src-tauri/tauri.conf.json |
| 56 | +{ |
| 57 | + "app": { |
| 58 | + "security": { |
| 59 | + "capabilities": ["my-capability", "main-capability"] |
| 60 | + } |
| 61 | + } |
| 62 | +} |
| 63 | +``` |
| 64 | + |
| 65 | +インライン化された「セキュリティ・レベル」設定は、事前に定義された「セキュリティ・レベル」設定とも併記できます。 |
| 66 | + |
| 67 | +```json title=src-tauri/tauri.conf.json |
| 68 | +{ |
| 69 | + "app": { |
| 70 | + "security": { |
| 71 | + "capabilities": [ |
| 72 | + { |
| 73 | + "identifier": "my-capability", |
| 74 | + "description": "My application capability used for all windows", |
| 75 | + "windows": ["*"], |
| 76 | + "permissions": ["fs:default", "allow-home-read-extended"] |
| 77 | + }, |
| 78 | + "my-second-capability" |
| 79 | + ] |
| 80 | + } |
| 81 | + } |
| 82 | +} |
| 83 | +``` |
| 84 | + |
| 85 | +## 対象となるプラットフォーム |
| 86 | + |
| 87 | +「セキュリティ・レベル」は、「`platforms` 配列」を定義することで、各プラットフォーム毎に設定が可能です。 |
| 88 | +デフォルトでは、「セキュリティ・レベル〕設定はすべてのターゲットに適用されますが、`linux`・`macOS`・`windows`・`iOS`・`android` の各ターゲット OS をサブセットで選択できます。 |
| 89 | + |
| 90 | +次の例は、デスクトップ・オペレーティング・システム用の「セキュリティ・レベル」設定です。 |
| 91 | +この設定では、デスクトップでのみ使用可能なプラグインのアクセス権を有効化していることに注目してください: |
| 92 | + |
| 93 | +```json title="src-tauri/capabilities/desktop.json" |
| 94 | +{ |
| 95 | + "$schema": "../gen/schemas/desktop-schema.json", |
| 96 | + "identifier": "desktop-capability", |
| 97 | + "windows": ["main"], |
| 98 | + "platforms": ["linux", "macOS", "windows"], |
| 99 | + "permissions": ["global-shortcut:allow-register"] |
| 100 | +} |
| 101 | +``` |
| 102 | + |
| 103 | +モバイル機器用の「セキュリティ・レベル」設定の事例はこちら。 |
| 104 | +この設定では、モバイル OS でのみ使用可能なプラグインのアクセス権を有効化することに注意してください: |
| 105 | + |
| 106 | +```json title="src-tauri/capabilities/mobile.json" |
| 107 | +{ |
| 108 | + "$schema": "../gen/schemas/mobile-schema.json", |
| 109 | + "identifier": "mobile-capability", |
| 110 | + "windows": ["main"], |
| 111 | + "platforms": ["iOS", "android"], |
| 112 | + "permissions": [ |
| 113 | + "nfc:allow-scan", |
| 114 | + "biometric:allow-authenticate", |
| 115 | + "barcode-scanner:allow-scan" |
| 116 | + ] |
| 117 | +} |
| 118 | +``` |
| 119 | + |
| 120 | +## リモート API アクセス |
| 121 | + |
| 122 | +デフォルトでは、API は Tauri アプリにバンドルされているコードにのみアクセス可能です。 |
| 123 | +リモート・ソースが特定の Tauri コマンドにアクセスできるようにするためには、セキュリティ・レベル設定ファイルで定義する必要があります。 |
| 124 | + |
| 125 | +以下の事例では、NFC タグをスキャンし、`tauri.app` のすべてのサブドメインからバーコード・スキャナーを使用できるようにしています。 |
| 126 | + |
| 127 | +```json title="src-tauri/capabilities/remote-tags.json" |
| 128 | +{ |
| 129 | + "$schema": "../gen/schemas/remote-schema.json", |
| 130 | + "identifier": "remote-tag-capability", |
| 131 | + "windows": ["main"], |
| 132 | + "remote": { |
| 133 | + "urls": ["https://*.tauri.app"] |
| 134 | + }, |
| 135 | + "platforms": ["iOS", "android"], |
| 136 | + "permissions": ["nfc:allow-scan", "barcode-scanner:allow-scan"] |
| 137 | +} |
| 138 | +``` |
| 139 | + |
| 140 | +:::caution[(警告)] |
| 141 | + |
| 142 | +Linux および Android では、Tauri は埋め込み `<iframe>` タグからの要求とウィンドウ自体からの要求とを区別できません。 |
| 143 | + |
| 144 | +この「リモート API アクセス」機能の変更については十分に注意し、この機能に関する「参考情報 References」のセクションで、対象オペレーティング・システム特定のセキュリティ上の影響について詳しく理解した上で行なってください。 |
| 145 | + |
| 146 | +::: |
| 147 | + |
| 148 | +## セキュリティ境界 Security Boundaries |
| 149 | + |
| 150 | +_どのようなことから保護されるのでしょうか?_ |
| 151 | + |
| 152 | +「アクセス権」と「セキュリティ・レベル」に応じて、次のことが可能になります: |
| 153 | + |
| 154 | +- フロントエンドでの「セキュリティ侵害」の影響を最小限に抑えます |
| 155 | +- ローカル・システムのインターフェースとデータの(偶発的な)「漏洩」を防止または軽減します |
| 156 | +- フロントエンドからバックエンド/システムへの「権限昇格」を防止または軽減します |
| 157 | + |
| 158 | +_どのようなことからは保護**されない**のでしょうか?_ |
| 159 | + |
| 160 | +- 悪意のある、または安全でない「Rust コード」 |
| 161 | +- 緩すぎる「スコープ(適用範囲)」と「設定内容」 |
| 162 | +- コマンド実装における不正確な「スコープ・チェック」 |
| 163 | +- Rust コードからの「意図的な逸脱」 |
| 164 | +- 基本的に、アプリの Rust Core に記述されたもの「すべて」 |
| 165 | +- システム WebView 内の「ゼロデイ攻撃」またはパッチ未適用の「ワンデイ攻撃」 |
| 166 | +- 「サプライチェーン攻撃」または「不正侵入された開発者システム」 |
| 167 | + |
| 168 | +:::tip[Security Tip(ヒント)] |
| 169 | + |
| 170 | +セキュリティ境界は「ウィンドウ・ラベル」(**「タイトル」ではありません**)に依存します。 |
| 171 | +ウィンドウ生成機能は、より高い権限を持つウィンドウに対してのみ適用可能にすることを推奨します。 |
| 172 | + |
| 173 | +::: |
| 174 | + |
| 175 | +## スキーマ・ファイル |
| 176 | + |
| 177 | +Tauri は、アプリケーションで利用可能なすべてのアクセス権を持つ「JSON スキーマ」を生成しますので、使用している IDE(統合開発環境)で自動補完が行なえるようになります。 |
| 178 | +スキーマを使用するには、「設定」内の `$schema` プロパティを `gen/schemas` ディレクトリにあるプラットフォーム固有のスキーマの一つにセットします。 |
| 179 | +通常は `../gen/schemas/desktop-schema.json` または `../gen/schemas/mobile-schema.json` にセットしますが、特定のターゲット・プラットフォーム用のセキュリティ・レベルを定義することもできます。 |
| 180 | + |
| 181 | +## 設定ファイル |
| 182 | + |
| 183 | +Tauri アプリケーションのディレクトリ構造例(簡略版): |
| 184 | + |
| 185 | +```sh |
| 186 | +tauri-app |
| 187 | +├── index.html |
| 188 | +├── package.json |
| 189 | +├── src |
| 190 | +├── src-tauri |
| 191 | +│ ├── Cargo.toml |
| 192 | +│ ├── capabilities |
| 193 | +│ └── <identifier>.json/toml |
| 194 | +│ ├── src |
| 195 | +│ ├── tauri.conf.json |
| 196 | +``` |
| 197 | + |
| 198 | +すべての項目を `tauri.conf.json` にインライン化できますが、少し高度な設定をするとこのファイルが肥大化してしまいます。 |
| 199 | +この方式の目標は、アクセス権を可能な限り単純化し、理解しやすくすることです。 |
| 200 | + |
| 201 | +## コア・アクセス権 |
| 202 | + |
| 203 | +すべてのコア・アクセス限のリストは、「参考情報 References」の [コア・アクセス権](/ja/reference/acl/core-permissions/) ページにあります。 |
| 204 | + |
| 205 | +<div style="text-align: right;"> |
| 206 | + 【※ この日本語版は、「Feb 22, 2025 英語版」に基づいています】 |
| 207 | +</div> |
0 commit comments