# 高度な設定

## 高度な構成

### レート制限ルール

指定した時間枠内で許可する最大APIリクエスト数を定義します。

デフォルト値: `60/minute、600/hour、6000/day`

入力形式: `X/[minute|hour|day]` または `X per [minute|hour|day]`

有効な例: `100/minute`, `50/hour`, `1000 per day`

補足: 大文字・小文字は区別しません

### IP Allow / IP Denyリスト

IPアドレスまたはIPネットワーク範囲に基づいてアクセス制御を行います。

IP許可リスト (ホワイトリスト)

* 指定されている場合、このリストに含まれるIPのみがアクセス可能
* 拒否リストより許可リストが優先
* デフォルト: `0.0.0.0/0` (未指定の場合はすべて許可)

IP拒否リスト (ブラックリスト)

* このリストに含まれるIPはアクセスが拒否されます
* Allowリストが未指定、またはAllow対象外のIPの場合に適用

判定ロジック

1. 許可リストが存在する場合\
   IPが許可リストに含まれるかを確認 → 許可/拒否
2. 許可リストが空の場合\
   拒否リストを確認 → 該当する場合は拒否、該当しない場合は許可

入力形式: IPアドレスまたはCIDRブロックをカンマ区切りで指定

検証ルール: IPv4アドレスまたはCIDRブロックとして有効であること

有効な例: `192.168.1.1,10.0.0.0/24`、`172.16.0.0/16`

補足: 空リストも許可されます (検証スキップ)

### 暗号化設定

REST APIレスポンスに対してAES-256( GCM) 暗号化をオプションで適用できます。

入力形式: `y` または `n`

秘密鍵の検証ルール

* 32文字であること
* 使用可能文字: 英数字および `@#$%^&+=`
* 空欄不可

補足: APIレスポンスの復号には秘密鍵が必要です。

### トークン有効期限

REST APIトークンの有効期間を指定します。

入力形式: `Xm`, `Xh`, `Xd` (Xは正の数、m=分、h=時間、d=日)

検証ルール

* 正の数であること
* 単位は m / h / d のいずれか
* 有効な例: `30m`、`24h`、`7d`

補足: 空欄の場合、トークンは期限なしになります

### コマンドリスト

API経由で公開するコマンドの一覧を指定します。

入力形式: Keeperコマンダーの有効なコマンドをカンマ区切りで指定

検証ルール

* コマンダーCLIの `help` で表示される有効なコマンドであること
* 空欄不可
* 個々のコマンドにスペースを含めないこと
* 有効な例: `whoami,tree,list`

#### 構成形式

入力形式: `json` または `yaml`

検証ルール: 大文字・小文字を区別せず、`json` か `yaml` のいずれかであること

#### 実行モード

入力形式: `foreground` または `background`

* Foregroundモード: 現在のターミナルセッションでサービスを実行
* Backgroundモード: バックグラウンドプロセスとして実行し、ログをファイルに出力

検証ルール: 大文字・小文字を区別せず、`foreground` または `background`

***

## 複数APIトークンのサポート

ボルトに保存される `service_config.yaml` にはサービスのプロパティが記述されており、その中の `records` セクションで、特定のコマンドや有効期限を持つAPIキーを複数定義できます。

```
encryption: ''
encryption_private_key: ''
ip_allowed_list: 0.0.0.0/0
ip_denied_list: ''
is_advanced_security_enabled: n
ngrok: y
ngrok_auth_token: XXXXXXXXXX
ngrok_custom_domain: myname
ngrok_public_url: ''
cloudflare: n
cloudflare_tunnel_token:
cloudflare_custom_domain:
cloudflare_public_url: ''
tls_certificate: n
certfile: ''
certpassword: ''
port: 9090
rate_limiting: ''
queue_enabled: y
run_mode: foreground
fileformat: yaml
records:
- api-key: XXXXXXXX
  command_list: tree,record-add
  expiration_timestamp: '9999-12-31T23:59:59'
- api-key: XXXXXXXX
  command_list: get
  expiration_timestamp: '9999-12-31T23:59:59'
```

***

## 構成セキュリティ

重要なセキュリティ機能として、ローカルのサービス構成ファイルは自動的に秘密鍵で暗号化されます。これにより、APIキー、トークン、セキュリティ設定などの機密性の高い構成情報が保護されます。
