構成
Babel Licensing Service の構成は、安全で信頼性の高いライセンスインフラストラクチャをセットアップするうえで欠かせない要素です。その中心となるのが appsettings.json ファイルで、Babel Licensing Service のさまざまなパラメーターと設定を定義できます。
Babel Licensing Service の appsettings.json 構成ファイルには、アプリケーションのさまざまな設定が含まれています。各セクションの概要は次のとおりです。
- Serilog:Serilog ライブラリを使用するログの設定を定義するセクションです。ログのシンク(コンソールとファイル)、名前空間ごとのログレベル、追加のコンテキスト情報を付加するエンリッチャーを指定します。
- AllowedHosts:ホストフィルタリングに使用され、アプリを特定のホスト名にバインドします。
- Kestrel:Kestrel Web サーバーの設定を定義するセクションです。gRPC サービスの既定のプロトコルとエンドポイントを定義します。
- Application:Babel Licensing Service アプリケーションに固有の設定を含むセクションです。gRPC-Web を有効にするかどうか、ライセンスファイルのパス、ライセンス検証用の署名キー、トークンの有効期間を指定します。
- Email:メール通知の設定です。メール送信の有効と無効の切り替え、SMTP サーバーの詳細(ホスト、ポート、SSL)、認証の資格情報、送信者と受信者の情報が含まれます。
- Licensing:ライセンス管理システムのさまざまな側面を設定するセクションです。ハートビートの間隔と、アクティベーションライセンスおよびフローティングライセンスのトークンの形式を指定します。
- Reporting:レポートサービスを設定するセクションで、レポートの生成に使用する暗号化キーが含まれます。
- Database:アプリケーションが使用するデータベースプロバイダーを指定するセクションです。
- ConnectionStrings:各データベースプロバイダー(SQL Server、MySQL/MariaDB、SQLite、PostgreSQL)の接続文字列を定義する設定です。
各セクションは、Babel Licensing Service をデプロイする環境の要件に合わせてカスタマイズできます。
Serilog
Babel Licensing Service では、ログの記録に Serilog を使用します。appsettings.json ファイルで Serilog の構成がどのように設定されているかを詳しく見ていきます。
"Serilog": {
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning",
"Grpc": "Warning"
}
},
"Enrich": [
"FromLogContext",
"WithMachineName",
"WithThreadId"
],
"WriteTo": [
{ "Name": "Console" },
{
"Name": "File",
"Args": {
"path": "log.txt",
"rollingInterval": "Day"
}
}
]
}まず、いくつかの重要な要素を含む "Serilog" セクションを定義します。
Using:ログの記録に使用する Serilog のシンクを指定するプロパティです。この例では "Serilog.Sinks.Console" と "Serilog.Sinks.File" を指定しているため、ログはコンソールとファイルの両方に書き込まれます。
MinimumLevel:ログのソースごとに最小のログレベルを定義します。「Default」の値は「Information」に設定されているため、「Information」レベル以上のログがすべて記録されます。さらに、「Override」セクションでは、特定の名前空間に個別のログレベルを指定します。使用できるログレベルは次のとおりです。
Verbose:最も出力が多いレベルで、本番環境で有効にすることはほとんど(あるいはまったく)ありません。Debug:外部からは必ずしも観察できないものの、何がどのように起きたかを調べるときに役立つ、システム内部のイベントに使用します。Information:システムの役割と機能に対応する事柄を記述するイベントです。一般に gRPC 呼び出しの記録に使用します。Warning:サービスの機能が低下している、危険な状態にある、または想定されたパラメーターの範囲外で動作している可能性がある場合に使用します。Error:機能が利用できない場合や、期待された動作が満たされない場合に使用します。Fatal:最も重大なレベルで、ただちに対応が必要なイベントです。
Enrich:ログイベントに追加情報を付加するプロパティです。この例では、ログコンテキスト、コンピューター名、スレッド ID などの情報がログイベントに付加されます。
WriteTo:WriteTo プロパティは、ログイベントの書き込み先となるシンクを定義します。ここでは「Console」と「File」の 2 つのシンクを設定しています。「Console」シンクは、ログイベントをコンソールに書き込みます。「File」シンクでは「path」プロパティが「log.txt」に設定されているため、ログイベントは log.txt という名前のファイルに書き込まれます。また、rollingInterval が「Day」に設定されているため、新しいログファイルが毎日作成されます。
フィルタリング、サブロガー、その他 Serilog が提供する機能に関する個別の設定や高度な構成については、Serilog の公式ドキュメントを参照することをお勧めします。Serilog のドキュメントには、ログイベントのフィルタリング、エンリッチ、サブロガーの構成など、さまざまな構成オプションの詳細が記載されています。
AllowedHosts
「appsettings.json」ファイルの AllowedHosts 構成は、Babel Licensing Service のホストフィルタリングを指定するために使用します。サービスへのアクセスを信頼できる URL からのものだけに制限する、重要なセキュリティ対策です。値「*」は、ホストフィルタリングが無効で、ホストにバインドされるどの URL からもサービスにアクセスできることを示します。これは、開発環境やテスト環境には適している場合があります。ただし、本番環境ではホストを明示的に指定することをお勧めします。
AllowedHosts 設定の構成例をいくつか示します。
-
特定のホストを許可する場合:
"AllowedHosts": "example.com"この構成では、Babel Licensing Service へのアクセスが「example.com」ドメイン宛ての要求だけに制限されます。他のホスト宛ての要求には、ホスト名が無効であることを示す 400 応答が返されます。
-
複数のホストを許可する場合:
"AllowedHosts": "example.com;subdomain.example.com"この構成では、「example.com」と「subdomain.example.com」からのみ Babel Licensing Service にアクセスできます。その他のドメインからの要求は拒否されます。
-
ワイルドカード式で複数のホストを許可する場合:
"AllowedHosts": "*.example.com"この構成では、「example.com」のすべてのサブドメインから Babel Licensing Service にアクセスできます。たとえば、「subdomain.example.com」と「another.subdomain.example.com」は許可されますが、他のドメインやサブドメインからの要求は拒否されます。
AllowedHosts 設定は、デプロイ環境とセキュリティ要件を十分に検討したうえで構成することが重要です。アクセスを信頼できるホストに制限することで、Babel Licensing Service のセキュリティと整合性を高められます。
Kestrel
「appsettings.json」ファイルの「Kestrel」構成セクションは、Babel Licensing Service をホストする Kestrel Web サーバーを構成するために使用します。Kestrel はクロスプラットフォームの Web サーバーで、アプリケーションに高速で信頼性の高いホスティング環境を提供します。
"Kestrel": {
"EndpointDefaults": {
"Protocols": "Http1AndHttp2"
},
"Endpoints": {
"gRPC": {
"Url": "http://localhost:5005",
"Protocols": "Http2"
}
}
}「Kestrel」セクションでは、さまざまな設定を定義してサーバーの動作をカスタマイズできます。Kestrel の構成の主な要素を見ていきます。
EndpointDefaults:すべてのエンドポイントの既定の構成を設定するサブセクションです。ここでは、サーバーがサポートするプロトコルを指定できます。この例の「Http1AndHttp2」は、HTTP/1.1 と HTTP/2 の両方のプロトコルが既定で有効であることを示します。
Endpoints:サーバーの個々のエンドポイントを定義するサブセクションです。この例では、「gRPC」エンドポイントに URL http://localhost:5005 と「Http2」プロトコルが設定されています。このエンドポイントは、HTTP/2 プロトコルで Babel Licensing Service に送られる gRPC 要求を処理するためのものです。
Kestrel を正しく構成することは、Babel Licensing Service を円滑に運用するために不可欠です。プロトコル、ポート番号、SSL 証明書など、さまざまな項目を要件に合わせてカスタマイズできます。
最適なパフォーマンス、セキュリティ、信頼性を確保するため、Kestrel を構成する際は公式ドキュメントを参照し、ベストプラクティスに従うことが重要です。
Application
appsettings.json の「Application」構成セクションでは、Babel Licensing Service のさまざまな動作をカスタマイズできます。各設定を詳しく見ていきます。
"Application": {
"AdminUsername": "",
"AdminEmail": "",
"AdminPassword": "",
"EnableLegacyUserKeyFallback": false,
"EnableGrpcWeb": true,
"LogToDatabase": false,
"LogRetentionPeriod": "1.00:00:00",
"LicenseFile": "babel.licenses",
"SigningKey": "",
"TokenExpiration": "00:30:00",
"EnableWebApi": true,
"EnableWebUI": true,
"ApiKeyHeaderName": "x-api-key",
"ApiKeyCacheDuration": "00:03:00",
"EnableSwagger": true,
"SwaggerRoutePrefix": "swagger",
"SwaggerEndpointUrl": "/swagger/v1/swagger.json",
"GeoLocationService": "IpApiIs",
"HealthCheckEndPoint": "/health",
"HealthCheckResponseType": "JSON"
}AdminUsername:AdminEmail および AdminPassword とともに、サービスの初回起動時に最初の管理者ユーザーを作成するために使用される資格情報です。
11.7.0 以降、サービスはこの 3 つの値がすべて空の状態で出荷されます。以前の既定値 admin / admin は削除されました。最初の管理者は、AdminUsername と AdminPassword の両方が空でない場合にのみ作成されます(AdminEmail は省略できますが、指定することをお勧めします)。必須の 2 つの値のどちらかが空でも、サービスは起動し、標準のロールは登録されますが、管理者アカウントは作成されず、設定に値を入力して再起動するまで Web アプリケーションは使用できません。appsettings.json か、環境変数 BABEL_SERVICE_APPLICATION__ADMINUSERNAME / ..._ADMINPASSWORD / ..._ADMINEMAIL のどちらかを使用してください。アカウントが作成されたら、Web アプリケーションでパスワードを変更し、構成から AdminPassword を消去します。
LogToDatabase:ログをデータベースに保存するかどうかを切り替えます。
LogRetentionPeriod:ログを保持する期間を、「日.時間:分:秒」の形式で指定します。
EnableGrpcWeb:この値を false に設定すると gRPC Web のサポートが無効になり、サーバーは HTTP/2 プロトコルを使用する要求だけを受け付けます。UWP や Unity など、一部のクライアントプラットフォームは HTTP/2 をサポートしていない場合があるため、HTTP/2 とともに HTTP/1.1 を有効にしておくと、すべてのクライアントアプリケーションとの互換性を確保できます。なお、同じポートで両方のプロトコルを有効にするには、プロトコルネゴシエーションのために TLS が必要です。
LicenseFile:Babel Licensing Service が使用するライセンスファイルのパスを指定します。ライセンスファイルには、付与されたライセンスと、それに関連付けられた機能の情報が含まれます。エディションもこのライセンスで決まります。Web アプリケーション機能を含むライセンス(Data Center)では、パッケージに含まれる Web アプリケーションを利用できます。それ以外のライセンスでは、Web アプリケーションのアドレスにアップグレードページが表示されます。アップグレードするには、ファイルを置き換えてサービスを再起動するだけです。
SigningKey:署名キーは、認証用のベアラートークンに署名するためのシークレットです。クライアントは、このトークンを使って gRPC サービスに安全にアクセスします。このキーは外部に漏らさず、強力で一意の値を選ぶことが重要です。
11.7.0 以降、この設定は空の状態で出荷されます(以前のハードコードされた値は削除されました)。起動時に SigningKey が空の場合、サービスは現在のプロセス用に暗号学的にランダムな 32 バイトのキーを生成し、警告をログに記録します。これはローカルでのテストには便利ですが、本番環境には適していません。再起動するたびに、それまでに発行されたトークンがすべて無効になり、ロードバランサーの背後にあるインスタンスは互いのトークンを拒否します。本番環境のデプロイでは、ソース管理の外で管理される強力なシークレットを、appsettings.json または環境変数 BABEL_SERVICE_APPLICATION__SIGNINGKEY で SigningKey に明示的に設定する必要があります。
SigningKeyは必ず設定してください:現在のビルド(11.8.0 以前)では、SigningKeyを空のままにすると、再起動のたびにトークンが無効になるだけでは済みません。認証後に発行されたトークンが以降の呼び出しで受け入れられないため、ライセンスのアクティベーションが失敗し、次のエラーが返されます。RpcException: Status(StatusCode="Unauthenticated", Detail="Bad gRPC response. HTTP status code: 401")サービスのログには、401 の直前に認証の成功(
User '' authenticated, token expires in ...)が記録されるため、この障害はクライアント側の問題のように見えます。SigningKeyに、32 文字以上の、変化しない空でない値を設定すると解決します。この問題は今後のリリースで修正される予定です。いずれにしても、キーを明示的に設定することが本番環境での正しい設定です。
EnableLegacyUserKeyFallback:後述の gRPC ユーザーキー認証の問題を修正したバージョンより古い Babel.Licensing NuGet パッケージでビルドされたクライアントアプリケーションのために、認証の互換性を復元します。既定値は false です。
gRPC 経由のユーザーキー認証:修正前のバージョンの
Babel.Licensingでビルドされたクライアントアプリケーションは、ライセンスのユーザーキーで認証するときに、サインインのユーザー名として空の値ではなく内部のクライアント識別子を送信します。11.7.0 より前は、サーバー側のフォールバックがこれを暗黙のうちに許容していました。11.7.0 のセキュリティ強化でこのフォールバックが削除されたため(クライアントコンポーネントを参照)、影響を受けるクライアントからの gRPC ユーザーキー認証は、既存のキーでも新しく生成したキーでも、すべて「Invalid username or password」で失敗します。根本から解決するには、現在のBabel.Licensingパッケージに更新してください。デプロイ済みのクライアントアプリケーションが多く、すぐにはすべてを更新できない場合は、移行のための一時的な措置としてEnableLegacyUserKeyFallbackをtrueに設定します。サービスは不正な形式の要求を再び受け入れ、影響を受けるクライアントが本来受け取るのと同じ、ロールを持たないアプリケーショントークンを発行します(このトークンはロールを付与せず、Management エンドポイントにもアクセスできないため、通常のユーザーキー認証を超える権限はありません)。すべてのクライアントを更新したら、falseに戻してください。フォールバックが使用されるたびに、サービスは該当するユーザー名を示す警告をログに記録するため、残っている古いクライアントを追跡できます。
TokenExpiration:クライアントが取得する認証用ベアラートークンの有効期間を決定します。値「00:30:00」は、トークンの有効期間が 30 分であることを示します。この期間が過ぎると、クライアントは引き続きアクセスするために新しいトークンを取得する必要があります。
EnableWebApi:Web API インターフェイスを有効にするかどうかを指定します。
EnableWebUI:サービスが Web アプリケーションを提供するかどうかを指定します。サービスを API 専用で実行するには、false に設定します。Web アプリケーションには Data Center ライセンスも必要です。
ApiKeyHeaderName:API キーを渡すための HTTP ヘッダー名を指定します。
ApiKeyCacheDuration:API キーをキャッシュに保持し、再度検証するまでの時間を決定します。
EnableSwagger:API ドキュメント用の Swagger UI のオンとオフを切り替えます。
SwaggerRoutePrefix:Swagger UI にアクセスするための URL セグメントです。
SwaggerEndpointUrl:API を記述する Swagger JSON ファイルのパスです。
GeolocationService:クライアントの IP アドレスから地理的な位置を判定する機能を有効にし、地域別のアクセス制御に役立てます。IpApiIs と MaxMind がサポートされています。
HealthCheckEndPoint:ヘルスチェックサービスのエンドポイントのパスを設定します。ヘルスチェックエンドポイントは、監視ツールやロードバランサーにシステムの状態に関する情報を提供します。明示的に設定しない場合、既定値の「/health」が使用されます。
HealthCheckResponseType:Babel Licensing Service のヘルスチェックエンドポイントが返す応答の形式を制御します。この設定には「JSON」または「TEXT」の 2 つの値を指定できます。
「Application」セクションでこれらの設定を構成することで、特定のプロトコルのサポートの有効化や無効化、ライセンスファイルのパスの指定、署名キーによる認証の保護、トークンの有効期間の定義など、Babel Licensing Service の動作を要件に合わせて調整できます。
IpApi.is
IpApi.is サービスは、IP アドレスを使ってユーザーの地理的な位置を特定する位置情報機能を提供します。これは、地域別のアクセス制御、ログの記録、分析に欠かせない場合があります。IP アドレスを対応する地理データにすばやく確実に対応付けられます。
詳細については、IpApi.is を参照してください。
Babel Licensing Service で IpApiIs サービスを構成するには、次の手順に従います。
- Application セクションで、
GeolocationServiceプロパティをIpApiIsに設定します。 appsettings.jsonにIpApiIsセクションを追加し、ライセンスキーによるサービスへのアクセスを構成します。
"IpApiIs": {
"Key": "IPAPI.IS WEB API SERVICE LICENSE KEY"
}MaxMind
MaxMind は、Web API によるアクセスとローカルデータベースの使用の両方をサポートする、堅牢な位置情報サービスです。MaxMind を統合すると、精度の高い位置情報データを利用できます。このサービスは MaxMind で提供されており、IP アドレスの情報をすばやく確実に取得できます。
MaxMind のローカルデータベースを使用する利点は、外部 API の呼び出しに依存しなくなることです。そのため、クエリが高速になり、特にインターネット接続が制限されている、または不安定な環境で信頼性が向上します。さらに、ローカルデータベースは、データ侵害や外部サービスの停止に伴うリスクを減らし、セキュリティとプライバシーの管理を強化します。
Babel Licensing Service で MaxMind の位置情報サービスを構成するには、次の手順に従います。
- Application セクションで、
GeolocationServiceプロパティをMaxMindに設定します。 appsettings.jsonにMaxMindセクションを追加し、必要な構成オプションを指定します。
"MaxMind": {
"AccountID": "MAXMIND ACCOUNT ID",
"LicenseKey": "MAXMIND WEB API SERVICE LICENSE KEY"
}MaxMind のデータベースを構成するには、次の構成を使用します。
"MaxMind": {
"DatabasePath": "wwwroot\\data\\GeoLite2-City.mmdb"
}このセットアップにより、Babel Licensing Service は MaxMind を位置情報に利用し、IP アドレスについて正確で信頼性の高い情報を取得できます。
IP フィルタリング
アプリケーション設定の IP フィルタリングは、IP アドレスに基づいてサービスへのアクセスを制御するセキュリティ対策です。構成のこのセクションにより、信頼できるユーザーだけがアプリケーションを利用でき、悪意のあるトラフィックや不要なトラフィックは適切に管理またはブロックされます。
構成の詳細:
Blacklist:アクセスを拒否する IP アドレスの配列です。ブラックリストに登録された IP は、他の設定にかかわらず、常に 403 Forbidden で拒否されます。
Whitelist:ブルートフォース攻撃対策のレート制限の対象外となる、信頼できる IP アドレスの配列です。ホワイトリストに登録された IP には、IP ごとの要求数の割り当ても動的なブロックも適用されませんが、ブラックリストは引き続き適用されます。
11.7.0 での動作の変更:以前のバージョンでは、空でない
Whitelistは排他的な許可リストとして扱われ、ホワイトリストにない IP はすべて拒否されていました。11.7.0 以降、ホワイトリストは純粋にレート制限の免除であり、設定しても、リストにない IP からのサービスへのアクセスはブロックされなくなりました。IP を拒否する必要がある場合は、Blacklistに登録してください(正規表現パターンがサポートされています)。
どちらのリストも正規表現によるパターンマッチングをサポートしており、より幅広い IP フィルタリングが可能です。
ブルートフォース攻撃対策
このサブセクションでは、ブルートフォース攻撃への対策を構成します。
Enabled:ブール値です。true の場合、ブルートフォース攻撃に対する保護が有効になります。
MaxRequestsPerTimeFrame:指定された時間枠内に、単一の IP アドレスから許可される要求の最大数です。
TimeFrameDuration:要求数を評価する期間で、「時間:分:秒」の形式で指定します。
RequestsBlockDuration:要求の最大数を超えた IP アドレスをブロックする時間です。
認証の保護
このサブセクションは、サインインの試行に関するものです。
Enabled:true の場合、失敗した認証の試行の監視が有効になります。
MaxFailedAttempts:ブロックが発動するまでに許容される、連続して失敗したサインイン試行の回数です。
LoginBlockDuration:失敗したサインイン試行が最大数に達した後、その IP に適用されるブロックの期間です。
Webhook
Webhook の設定は、Webhook を処理するかどうか、システムが新しいイベントを確認する頻度、再試行のスケジュールを決定します。
"Webhook": {
"Enabled": true,
"ProcessingInterval": "00:00:30",
"RetryInterval": "00:05:00"
}- 処理間隔:既定の 30 秒の間隔は、ほとんどのデプロイに適しています。この値が小さすぎるとデータベースの負荷が増える可能性があり、大きすぎると Webhook の配信が遅れる可能性があります。
- 再試行間隔:5 分の再試行間隔は、一時的なネットワークの問題が解消する時間を確保しつつ、適時の配信を保証します。Webhook の受信側で長時間の停止が頻繁に発生する場合は、この値を増やすことを検討してください。
- 有効と無効の切り替え:
Enabledをfalseに設定すると、すべての Webhook 処理を一時的に無効にできます。これは、保守作業の時間帯や、システムの問題のトラブルシューティング時に役立ちます。
appsettings.json ファイルの「Email」セクションは、Babel Licensing Service のメール設定を構成します。この構成で、メール機能を有効にし、サービスからメールを送信するために必要な詳細を指定できます。
EnableSend:メール送信を有効にするか無効にするかを指定します。true に設定すると、Babel Licensing Service は構成された設定に基づいてメールの送信を試みます。false に設定すると、メール送信は無効になります。
Host:メールの送信に使用するメールサーバーまたは SMTP(Simple Mail Transfer Protocol)サーバーのホスト名または IP アドレスです。適切なサーバーアドレスを入力します。
Port:メールサーバーが着信接続を待ち受けるポート番号です。通常は SMTP サーバーのポートです。SMTP の既定のポートは 587 ですが、メールサーバーの構成に合わせて変更できます。
UseSsl:メールサーバーへの接続時に SSL/TLS 暗号化を使用するかどうかを指定します。true に設定すると、Babel Licensing Service は SSL/TLS を使用して安全な接続を確立します。false に設定すると、保護されていない接続が使用されます。
LocalDomain:メールのアドレス指定に使用するローカルドメイン名です。この設定は省略可能で、不要な場合は空のままにできます。
Username:メールサーバーでの認証に使用するユーザー名またはアカウント名です。適切なユーザー名を入力します。
Password:メールアカウントに関連付けられたパスワードです。指定したユーザー名に対応する認証用のパスワードを入力します。
FromUser:メールの送信者として使用される表示名またはユーザー名です。わかりやすい名前でも、実際のユーザー名でもかまいません。
FromAddress:メールの送信元となるメールアドレスです。送信者の有効なメールアドレスを入力します。
To:受信者のメールアドレスと名前の配列です。各受信者オブジェクトには、受信者の名前を表す「Name」フィールドと、受信者のメールアドレスを表す「Email」フィールドを含めます。必要な受信者の情報を配列に追加します。
Licensing
appsettings.json ファイルの「Licensing」セクションは、Babel Licensing Service のライセンス機能のさまざまな側面を構成するためのものです。このセクションでは、ライセンスの管理と動作に関する設定を定義できます。
「Licensing」セクションでは、ハートビートの間隔、アクティベーショントークンの形式、フローティングトークンの形式などのパラメーターを指定できます。これらの設定を詳しく見ていきます。
"Licensing": {
"HeartbeatInterval": "00:05:00",
"LicenseIdFormat": "lic{HEX:8}",
"CustomerCodeFormat": "C-{TOKEN:8}",
"OrderNumberFormat": "O-{TOKEN:8}",
"UserKeyFormat": "{TOKEN:5}-{TOKEN:5}-{TOKEN:5}-{TOKEN:5}",
"ActivationTokenFormat": "actk_{token:12}",
"FloatingTokenFormat": "fltk_{token:12}",
"ReclaimInactiveActivationDays": 0
}ハートビート間隔:ライセンスサービスが送信するハートビート信号の間隔を決定するパラメーターです。ハートビート信号は、ライセンス管理システムの正常性と状態の監視に役立ちます。クライアントが解放しなかったフローティングトークンは、この間隔が過ぎると期限が切れます。
ReclaimInactiveActivationDays:12.0 の新機能です。ライセンスがすべてのシートを使い切った状態で新しいコンピューターがアクティベーションを要求したときに、アクティベーションを回収できるようになるまでの、通信のない日数です。既定値の 0 では、この機能は無効です。環境変数 BABEL_SERVICE_LICENSING__RECLAIMINACTIVEACTIVATIONDAYS で設定することもできます。有効にする前に、ライセンストークンをお読みください。
識別子とキーの形式
構成で指定する形式は、ランダムに生成された値に置き換えられるプレースホルダーを組み合わせたものです。TOKEN、HEX、DEC はプレースホルダーの種類で、コロン(:)の後の数字は生成される値の長さを指定します。大文字(TOKEN、HEX)は大文字の値を、小文字(token、hex)は小文字の値を生成します。DEC は 10 進数を表します。
LicenseIdFormat:"lic{HEX:8}"。この形式では、「lic」の後にランダムな大文字の 16 進文字 8 個が続くライセンス ID が生成されます。
CustomerCodeFormat:"C-{TOKEN:8}"。顧客コードは「C-」で始まり、ランダムな大文字の英数字 8 文字が続きます。
OrderNumberFormat:"O-{TOKEN:8}"。注文番号は「O-」で始まり、ランダムな大文字の英数字 8 文字が続きます。
UserKeyFormat:"{TOKEN:5}-{TOKEN:5}-{TOKEN:5}-{TOKEN:5}"。ユーザーキーは、ランダムな大文字の英数字 5 文字のグループ 4 つをハイフンで区切った形式で生成されます。
アクティベーショントークンの形式:ライセンスの処理で使用されるアクティベーショントークンの形式を定義する設定です。アクティベーショントークンは生成されてユーザーに提供され、ユーザーはそれを使ってライセンスをアクティベートし、特定の機能を利用できるようにします。既定値「actk_{token:12}」では、アクティベーショントークンは、固定のプレフィックス「actk_」の後に 12 個のランダムな文字が続く形式になります。
フローティングトークンの形式:アクティベーショントークンと同様に、フローティングトークンはフローティングライセンスで使用されます。フローティングライセンスでは、定義されたプール内の複数のデバイスやユーザーの間でライセンスを共有できます。フローティングトークンの形式は、このトークンの構造を指定します。既定値「fltk_{token:12}」では、フローティングトークンは、固定のプレフィックス「fltk_」の後に 12 個のランダムな文字が続く形式になります。
「Licensing」セクションを構成することで、これらのパラメーターをライセンスの要件に合わせてカスタマイズできます。この柔軟性により、アプリケーションやソフトウェアのニーズに合わせてライセンス機能を調整できます。
Reporting
appsettings.json ファイルの「Reporting」セクションは、Babel Licensing Service のレポート関連の設定を構成するためのものです。このセクションでは、レポートを安全に送信および保存するための暗号化キーなど、レポート機能に関するパラメーターを定義できます。
「Reporting」セクションでは、暗号化キーなどの設定を指定できます。この設定を詳しく見ていきます。
"Reporting": {
"EncryptionKey": ""
}暗号化キー:Babel Licensing Service が生成するレポートの暗号化と復号に使用する暗号化キーを定義するパラメーターです。暗号化によって、レポートに含まれる機密情報は安全に保たれ、不正なアクセスから保護されます。
「Reporting」セクションを構成すると暗号化キーを定義でき、ライセンスサービスが生成するレポートが強力な暗号アルゴリズムで暗号化されます。この暗号化はレポートのセキュリティをさらに高め、潜在的な脅威や侵害から機密データを保護します。
Database
Babel Licensing Service 12.0 は Windows、Linux、macOS で SQL Server、MySQL/MariaDB、SQLite、PostgreSQL に対応します。Babel Desktop はデータベースへ直接接続せず、サービスのエンドポイントに接続します。
プロバイダーの選択
Database.Provider に表の正確な名前を設定し、対応する ConnectionStrings の項目を指定してください。MariaDB は MySQL を使用します。Postgres、SQL Server、MariaDB は有効なプロバイダー名ではありません。選択した項目だけが使用されます。
| データベース | プロバイダー | 接続文字列のキー | 既定ポート |
|---|---|---|---|
| SQL Server | SQLServer | ConnectionStrings:SQLServer | 1433 |
| MySQL / MariaDB | MySQL | ConnectionStrings:MySQL | 3306 |
| PostgreSQL | PostgreSQL | ConnectionStrings:PostgreSQL | 5432 |
| SQLite | SQLite | ConnectionStrings:SQLite | ローカルファイル |
スキーマと移行
{
"Database": {
"Provider": "PostgreSQL",
"EnableMigration": true,
"EnableDetailedErrors": false,
"MaxRetryCount": 5,
"MaxRetryDelay": "00:00:30"
}
}EnableMigration=true はサービス起動時に選択したプロバイダーのスキーマ移行を実行します。必要なデータベース権限を用意してください。false の場合、スキーマを事前に更新する必要があります。プロバイダーを変更してもデータは転送されません。バックアップを作成し、コピーで更新を検証してください。SQLite 11.8 のファイルは旧アプリケーションを停止してからバックアップし、そのコピーで 12.0 サービスを検証します。
EnableDetailedErrors は追加のエラー詳細を制御します。MaxRetryCount と MaxRetryDelay は SQL Server、MySQL、PostgreSQL の一時的なエラーの再試行設定で、SQLite には適用されません。設定変更後はサービスを再起動してください。
プロバイダー別の接続文字列
以下の完全な JSON オブジェクトを appsettings.json に統合してください。ホスト、パス、ユーザー、REPLACE_WITH_PASSWORD を置き換えます。ネットワーク接続例には TLS と信頼できるサーバー証明書が必要です。
SQL Server
{
"Database": {
"Provider": "SQLServer"
},
"ConnectionStrings": {
"SQLServer": "Server=db.example.com,1433;Database=licenses;User ID=babel_licensing;Password=REPLACE_WITH_PASSWORD;Encrypt=True;TrustServerCertificate=False;Connect Timeout=30"
}
}Server はホスト名と任意の TCP ポートをカンマで指定します。Database、User ID、Password でデータベースとアカウントを選びます。Encrypt=True;TrustServerCertificate=False は暗号化と証明書検証を行います。Windows では資格情報を Integrated Security=True に置き換えられます。LocalDB は Windows の開発用です。
MySQL / MariaDB
{
"Database": {
"Provider": "MySQL"
},
"ConnectionStrings": {
"MySQL": "Server=db.example.com;Port=3306;Database=licenses;User ID=babel_licensing;Password=REPLACE_WITH_PASSWORD;SslMode=VerifyFull;Connection Timeout=30"
}
}MySQL と MariaDB は MySQL キーを使用します。Server、Port、Database、User ID、Password で接続します。SslMode=VerifyFull は証明書とホスト名を検証します。プライベート CA には SslCa=/path/to/ca.pem を追加してください。root ではなく専用アカウントを使用します。
MySQL と MariaDB は、どのフレームワークでも MySQL プロバイダーを使用します。.NET 6 から 9 のサービスは Pomelo.EntityFrameworkCore.MySql を使用し、.NET 10 のサービスは Microting.EntityFrameworkCore.MySql 10.0.11 を使用します。これは Entity Framework Core 10 をサポートする、MIT ライセンスの Pomelo のフォークです。12.0 以降、.NET 10 のサービスは MySQL と MariaDB で動作します。接続文字列とデータベーススキーマは同一です。MySQL 8.4 と MariaDB 11.4 でテスト済みです。
ドライバーのリファレンス: MySQL / MariaDB .
PostgreSQL
{
"Database": {
"Provider": "PostgreSQL"
},
"ConnectionStrings": {
"PostgreSQL": "Host=db.example.com;Port=5432;Database=licenses;Username=babel_licensing;Password=REPLACE_WITH_PASSWORD;SSL Mode=VerifyFull;Timeout=30"
}
}PostgreSQL は Npgsql の Host、Port、Database、Username、Password を使用します。.NET 接続文字列であり、postgresql:// URL ではありません。SSL Mode=VerifyFull は証明書とホスト名を検証します。プライベート CA には Root Certificate=/path/to/ca.pem を追加します。データベースとロールを作成し、スキーマとテーブルへのアクセス権限を設定してください。
SQLite
{
"Database": {
"Provider": "SQLite"
},
"ConnectionStrings": {
"SQLite": "Data Source=/var/lib/babel/licenses.db;Mode=ReadWriteCreate;Foreign Keys=True;Default Timeout=30"
}
}SQLite は Licensing Service 内で動作し、別のデータベースサーバーや認証情報は不要です。Data Source はサービス側のマシン上の絶対パスです。Mode=ReadWriteCreate は存在しないファイルを作成し、Mode=ReadWrite は既存ファイルを要求します。サービスのアカウントにはファイル、ディレクトリ、journal/WAL への書き込み権限が必要です。Docker では永続的な書き込み可能ボリュームを使用してください。
JSON でエスケープした Windows パス:
{
"ConnectionStrings": {
"SQLite": "Data Source=C:\\Babel\\Data\\licenses.db;Mode=ReadWriteCreate;Foreign Keys=True;Default Timeout=30"
}
}Foreign Keys=True は外部キー制約を有効にします。Default Timeout=30 はコマンドのタイムアウト秒数です。licenses.db のような相対パスはサービスの作業ディレクトリに依存します。
ローカル SQLite の場合も Licensing Service を個別に設定して起動します。Babel Desktop はサービスをインストール、起動、停止しません。Desktop プロファイルはサービスの HTTP/HTTPS エンドポイントを指定します。
環境変数
BABEL_SERVICE_ プレフィックス付き環境変数は JSON 設定を上書きします。階層の区切りにはアンダースコアを二つ使います。選択したプロバイダーの接続変数だけを設定し、実際の秘密情報はデプロイのシークレットストアから提供してください。
| プロバイダー | Provider の値 | 接続変数 |
|---|---|---|
| SQLServer | BABEL_SERVICE_Database__Provider=SQLServer | BABEL_SERVICE_ConnectionStrings__SQLServer |
| MySQL | BABEL_SERVICE_Database__Provider=MySQL | BABEL_SERVICE_ConnectionStrings__MySQL |
| PostgreSQL | BABEL_SERVICE_Database__Provider=PostgreSQL | BABEL_SERVICE_ConnectionStrings__PostgreSQL |
| SQLite | BABEL_SERVICE_Database__Provider=SQLite | BABEL_SERVICE_ConnectionStrings__SQLite |
export BABEL_SERVICE_Database__Provider=PostgreSQL
export BABEL_SERVICE_ConnectionStrings__PostgreSQL='Host=db.example.com;Port=5432;Database=licenses;Username=babel_licensing;Password=REPLACE_WITH_PASSWORD;SSL Mode=VerifyFull'セミコロンを含む値はドライバーの構文に従って引用符で囲みます。JSON 内では内部の引用符と Windows のバックスラッシュもエスケープしてください。