Skip to content

i18n(ja) Japanese Text for Security Section #3221

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: v2
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
207 changes: 207 additions & 0 deletions src/content/docs/ja/security/capabilities.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
---
title: セキュリティ・レベル Capabilities
sidebar:
order: 4
i18nReady: true
---

Tauri は、アプリケーションおよびプラグインの開発者に「セキュリティ・レベル」システムを提供し、システム WebView で実行されているアプリケーション・フロントエンドへのコア部の開示に関して細かい有効化/無効化の制限を設けています。

> > > 《訳注》 **セキュリティ・レベル** 原文は 「capabilities system」(能力システム)。情報開示レベルの決定能力を示すものであるため、本稿では「セキュリティ・レベル」と訳しています。

「セキュリティ・レベル」(Capabilities)とは、付与されたラベルに従ってアプリケーション・ウィンドウと Webview に割り当てられる [アクセス権(Permissions)](/ja/security/permissions/) のセットのことです。「セキュリティ・レベル」は複数のウィンドウや Webview の処理に関与し、また、複合的セキュリティ設定の中で参照される可能性があります。

:::tip[Security Tip(ヒント)]

複数のセキュリティ・レベルの対象であるウィンドウと WebView は、関連するすべてのセキュリティ・レベルの「アクセス権」と「セキュリティ境界」とを効果的に統合します。

:::

セキュリティ・レベルを記述するファイル(Capability files)は、JSON または TOML ファイルとして `src-tauri/capabilities` ディレクトリ内で定義されています。

それぞれのファイルを用いて `tauri.conf.json` 内で「識別子」でのみ参照するのがよくあるやりかたですが、この二つを `capabilities` フィールドで直接定義することもできます。

`capabilities` ディレクトリ内のすべてのセキュリティ・レベル機能は、デフォルトで自動的に有効になります。一旦 `tauri.conf.json` でセキュリティ・レベル機能が明示的に有効化されると、アプリケーションのビルドではその機能のみが使用されます。

体系的な設定項目の詳細については、[参考情報](/ja/reference/config/) の項を参照してください。

次の JSON の例では、コア・プラグインと `window.setTitle` API に対するデフォルト機能を有効化するセキュリティ・レベル設定を定義しています。

```json title="src-tauri/capabilities/default.json"
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "main-capability",
"description": "Capability for the main window",
"windows": ["main"],
"permissions": [
"core:path:default",
"core:event:default",
"core:window:default",
"core:app:default",
"core:resources:default",
"core:menu:default",
"core:tray:default",
"core:window:allow-set-title"
]
}
```

このスニペット(抜粋内容)は、[Tauri Configuration](/ja/develop/configuration-files/#tauri-の設定)ファイルの一部です。

これがおそらく最も一般的な設定方法で、個々のセキュリティ・レベルを行内に埋め込み(インライン化)、アクセス権のみを「識別子」によって参照します。

これには、適切に定義された機能ファイルが `capabilities` ディレクトリ内に必要です。

```json title=src-tauri/tauri.conf.json
{
"app": {
"security": {
"capabilities": ["my-capability", "main-capability"]
}
}
}
```

インライン化された「セキュリティ・レベル」設定は、事前に定義された「セキュリティ・レベル」設定とも併記できます。

```json title=src-tauri/tauri.conf.json
{
"app": {
"security": {
"capabilities": [
{
"identifier": "my-capability",
"description": "My application capability used for all windows",
"windows": ["*"],
"permissions": ["fs:default", "allow-home-read-extended"]
},
"my-second-capability"
]
}
}
}
```

## 対象となるプラットフォーム

「セキュリティ・レベル」は、「`platforms` 配列」を定義することで、各プラットフォーム毎に設定が可能です。
デフォルトでは、「セキュリティ・レベル〕設定はすべてのターゲットに適用されますが、`linux`・`macOS`・`windows`・`iOS`・`android` の各ターゲット OS をサブセットで選択できます。

次の例は、デスクトップ・オペレーティング・システム用の「セキュリティ・レベル」設定です。
この設定では、デスクトップでのみ使用可能なプラグインのアクセス権を有効化していることに注目してください:

```json title="src-tauri/capabilities/desktop.json"
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "desktop-capability",
"windows": ["main"],
"platforms": ["linux", "macOS", "windows"],
"permissions": ["global-shortcut:allow-register"]
}
```

モバイル機器用の「セキュリティ・レベル」設定の事例はこちら。
この設定では、モバイル OS でのみ使用可能なプラグインのアクセス権を有効化することに注意してください:

```json title="src-tauri/capabilities/mobile.json"
{
"$schema": "../gen/schemas/mobile-schema.json",
"identifier": "mobile-capability",
"windows": ["main"],
"platforms": ["iOS", "android"],
"permissions": [
"nfc:allow-scan",
"biometric:allow-authenticate",
"barcode-scanner:allow-scan"
]
}
```

## リモート API アクセス

デフォルトでは、API は Tauri アプリにバンドルされているコードにのみアクセス可能です。
リモート・ソースが特定の Tauri コマンドにアクセスできるようにするためには、セキュリティ・レベル設定ファイルで定義する必要があります。

以下の事例では、NFC タグをスキャンし、`tauri.app` のすべてのサブドメインからバーコード・スキャナーを使用できるようにしています。

```json title="src-tauri/capabilities/remote-tags.json"
{
"$schema": "../gen/schemas/remote-schema.json",
"identifier": "remote-tag-capability",
"windows": ["main"],
"remote": {
"urls": ["https://*.tauri.app"]
},
"platforms": ["iOS", "android"],
"permissions": ["nfc:allow-scan", "barcode-scanner:allow-scan"]
}
```

:::caution[(警告)]

Linux および Android では、Tauri は埋め込み `<iframe>` タグからの要求とウィンドウ自体からの要求とを区別できません。

この「リモート API アクセス」機能の変更については十分に注意し、この機能に関する「参考情報 References」のセクションで、対象オペレーティング・システム特定のセキュリティ上の影響について詳しく理解した上で行なってください。

:::

## セキュリティ境界 Security Boundaries

_どのようなことから保護されるのでしょうか?_

「アクセス権」と「セキュリティ・レベル」に応じて、次のことが可能になります:

- フロントエンドでの「セキュリティ侵害」の影響を最小限に抑えます
- ローカル・システムのインターフェースとデータの(偶発的な)「漏洩」を防止または軽減します
- フロントエンドからバックエンド/システムへの「権限昇格」を防止または軽減します

_どのようなことからは保護**されない**のでしょうか?_

- 悪意のある、または安全でない「Rust コード」
- 緩すぎる「スコープ(適用範囲)」と「設定内容」
- コマンド実装における不正確な「スコープ・チェック」
- Rust コードからの「意図的な逸脱」
- 基本的に、アプリの Rust Core に記述されたもの「すべて」
- システム WebView 内の「ゼロデイ攻撃」またはパッチ未適用の「ワンデイ攻撃」
- 「サプライチェーン攻撃」または「不正侵入された開発者システム」

:::tip[Security Tip(ヒント)]

セキュリティ境界は「ウィンドウ・ラベル」(**「タイトル」ではありません**)に依存します。
ウィンドウ生成機能は、より高い権限を持つウィンドウに対してのみ適用可能にすることを推奨します。

:::

## スキーマ・ファイル

Tauri は、アプリケーションで利用可能なすべてのアクセス権を持つ「JSON スキーマ」を生成しますので、使用している IDE(統合開発環境)で自動補完が行なえるようになります。
スキーマを使用するには、「設定」内の `$schema` プロパティを `gen/schemas` ディレクトリにあるプラットフォーム固有のスキーマの一つにセットします。
通常は `../gen/schemas/desktop-schema.json` または `../gen/schemas/mobile-schema.json` にセットしますが、特定のターゲット・プラットフォーム用のセキュリティ・レベルを定義することもできます。

## 設定ファイル

Tauri アプリケーションのディレクトリ構造例(簡略版):

```sh
tauri-app
├── index.html
├── package.json
├── src
├── src-tauri
│ ├── Cargo.toml
│ ├── capabilities
│ └── <identifier>.json/toml
│ ├── src
│ ├── tauri.conf.json
```

すべての項目を `tauri.conf.json` にインライン化できますが、少し高度な設定をするとこのファイルが肥大化してしまいます。
この方式の目標は、アクセス権を可能な限り単純化し、理解しやすくすることです。

## コア・アクセス権

すべてのコア・アクセス限のリストは、「参考情報 References」の [コア・アクセス権](/ja/reference/acl/core-permissions/) ページにあります。

<div style="text-align: right;">
【※ この日本語版は、「Feb 22, 2025 英語版」に基づいています】
</div>
46 changes: 46 additions & 0 deletions src/content/docs/ja/security/csp.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
---
title: コンテンツ・セキュリティー・ポリシー(CSP)
sidebar:
order: 6
i18nReady: true
---

Tauri は HTML ページの [コンテンツ・セキュリティ・ポリシー](CSP)を制限します。<!-- 原文 restricts「制限する」ですが、この訳で正しいか不明です。 -->
これを使用すると、クロス・サイト・スクリプティング(XSS)のような一般的な Web ベースの脆弱性による影響を軽減または防止できます。

ローカル・スクリプトはハッシュ化され、スタイルと外部スクリプトは「ワンタイム暗号化乱数データ(nonce)」を使用して参照されますので、許可されていないコンテンツが読み込まれるのを防止できます。

:::caution[(警告)]
CDN(コンテンツ配信ネットワーク)経由で提供されるスクリプトなどのリモート・コンテンツは「攻撃ベクトル」(進入経路)を取り込む可能性があるため、読み込みを避けてください。
概して、信頼できないファイルはどれも、新しい巧妙な攻撃ベクトルの侵入を許す可能性があります。
:::

CSP(コンテンツ・セキュリティ・ポリシー)による保護は、Tauri 設定ファイルに登録されている場合にのみ有効になります。
このため、できる限り対象を絞り、Webview が信頼できるホスト(できれば自分で所有するホスト)からのアセットのみを読み込むようにする必要があります。
コンパイル時に、Tauri は、バンドルされたコードとアセットに対して、関連する CSP 属性へ nonce 値とハッシュ値を自動的に追加するため、自分で考慮する必要があるのはアプリケーションに固有のものだけになります。

<!-- 「自動的に追加する」: この部分、原文は「append A to B」で「A を B に追加する」の意味であるが、実際には「append A to B to C」と書かれており、意味が取りづらい。本稿の訳では語順通りに解釈し、to C を「〜に対して」としてあります。 -->

次の CSP 設定例は、Tauri の [`api`](https://github.com/tauri-apps/tauri/blob/dev/examples/api/src-tauri/tauri.conf.json#L22) 事例から抜粋したものです。
アプリケーション開発者は、この内容を各自のアプリケーションのニーズに合わせて調整する必要があります。

```json title="tauri/examples/api/src-tauri/tauri.conf.json"
"csp": {
"default-src": "'self' customprotocol: asset:",
"connect-src": "ipc: http://ipc.localhost",
"font-src": ["https://fonts.gstatic.com"],
"img-src": "'self' asset: http://asset.localhost blob: data:",
"style-src": "'unsafe-inline' 'self' https://fonts.googleapis.com"
},
```

この CSP(コンテンツ・セキュリティ・ポリシー)による保護方式の詳細については、[`script-src`]、[`style-src`]、および [CSP Sources] を参照してください。

[コンテンツ・セキュリティ・ポリシー]: https://developer.mozilla.org/ja/docs/Web/HTTP/CSP
[`script-src`]: https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Content-Security-Policy/script-src
[`style-src`]: https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Content-Security-Policy/style-src
[csp sources]: https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Content-Security-Policy/Sources#sources

<div style="text-align: right;">
【※ この日本語版は、「Feb 22, 2025 英語版」に基づいています】
</div>
43 changes: 43 additions & 0 deletions src/content/docs/ja/security/ecosystem.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
---
title: Tauri エコシステム・セキュリティ
sidebar:
order: 8
i18nReady: true
---

Tauri の組織「エコシステム」(活動協調体制)は GitHub 上でホストされており、ソースコードやリリース版を標的とする外敵に対してリポジトリの耐性を高めるためのいくつかの機能を備えています。

リスクを軽減し、一般的に採用されているベスト・プラクティス(最優良事例)に倣うために、以下の方法を導入しています。

### ビルド・パイプライン(ビルド検証の自動化)

ソースコード成果物をリリースするプロセスは、GitHub アクションを使用した GitHub ビルド・パイプラインで高度に自動化されていますが、生身の人間によるキックオフ(作業開始)とレビュー(審査)を義務付けています。

### 署名付きコミット

Tauri のコア・リポジトリでは、「なりすまし(偽装)」リスクを軽減し、セキュリティ侵害の可能性を検出時にその原因と考えられるコミットを識別できるようにするために、署名付きのコミットが必要です。

### コード・レビュー

Tauri のリポジトリにマージされるすべての「プル・リクエスト(PR)」には、そのプロジェクト(ほとんどの場合、ワーキング・グループですが)の少なくとも一人のメンテナーからの承認が必要です。
コードは通常、PR でレビューされ、デフォルトのセキュリティ・ワークフローとチェックが実行されて、コードが共通の標準に準拠しているかどうかが確認されます。

### リリース・プロセス

Tauri のワーキング・グループは、コードの変更内容をレビューし、PR にスコープ(適用範囲)のタグを付け、すべてが最新の状態に保たれていることを確認します。
また、マイナーリリースとメジャーリリースを公開する前に、セキュリティに関連するすべての PR を内部で監査するよう努めています。

新しいバージョンを公開する時期には、メンテナーの一人が新しいリリースに「dev(開発版)」のタグを付け、以下の手順が実行されます:

- コアの検証
- 評価試験の実施
- クレートと npm のセキュリティ監査
- 変更ログの作成
- 成果物(アーティファクト)の生成
- ドラフト版の作成

その後、メンテナーがリリースノートを確認し、必要に応じて編集した後、新しいリリースが完成します。

<div style="text-align: right;">
【※ この日本語版は、「Feb 22, 2025 英語版」に基づいています】
</div>
Loading