GS2-Key
GS2-Key は、GS2 内で利用される暗号化キー (共通鍵) を管理し、AES による暗号化・復号 API を提供するサービスです。
機密性の高いデータをサーバー側で暗号化・復号する用途のほか、GS2 自身が内部的に利用する各種署名・暗号化処理の鍵管理基盤としても利用されます。
暗号化キーの管理
GS2-Key では、暗号化キーをネームスペース配下に作成して管理します。
キーには次のような情報を持たせることができます。
- キー名
- 説明 (description: 用途や説明など、運用上の識別に利用)
実際の暗号化に使用される秘密鍵 (シークレット) は、キーの作成時に GS2 側で安全に生成され、GS2 内部に保管されます。秘密鍵自体をクライアント側に取り出して利用する設計ではなく、暗号化・復号のリクエストを GS2-Key に送信して結果のみを受け取る仕組みとなっています。
graph TD App["アプリケーション"] -->|Encrypt(平文)| Key["GS2-Key"] Key -->|暗号文| App App -->|サーバーに保管<br/>または送信| Storage["データストア"] Storage -->|暗号文| App2["アプリケーション"] App2 -->|Decrypt(暗号文)| Key Key -->|平文| App2
利用シーン
GS2 内部での利用
GS2-Account のパスワード署名や、GS2-Auth のトークン発行など、GS2 内部で機密データを扱うマイクロサービスは GS2-Key が管理するキーを利用しています。各マイクロサービスのネームスペースを作成する際にキーを指定することで、そのネームスペース内で必要となる暗号化処理に利用されます。
アプリケーション独自データの暗号化
アプリケーション独自で機密情報を扱う場合にも、GS2-Key の Encrypt / Decrypt API を直接呼び出して暗号化・復号を行うことができます。秘密鍵をアプリケーション内に組み込むことなく、サーバーサイドでの暗号化が実現できます。
機密性の高い設定値や、外部サービスへの認証情報などを GS2 側で安全に管理したい場面で活用できます。
トランザクションアクション
GS2-Key ではトランザクションアクションを提供していません。
マスターデータ管理
GS2-Key ではマスターデータの登録はありません。マネージメントコンソール、GS2-Deploy、API を通じてキーを作成・管理します。
実装例
GS2-Key は管理API/サーバーサイドAPI中心のマイクロサービスです。ゲームエンジン用 SDK (Unity/Unreal Engine) には専用の Domain クラスが提供されていません。
キーの作成や Encrypt / Decrypt の呼び出しは、主に GS2 内部の各マイクロサービスから参照する形で利用するか、GS2-Script からサーバーサイドで呼び出す形での利用を想定しています。直接 API を呼び出す場合は、以下のいずれかの手段で操作することを推奨します。
- マネジメントコンソール (キーの作成・管理)
- GS2-Deploy によるテンプレート管理 (キーをコード化して管理)
- GS2-Script からの呼び出し (Encrypt / Decrypt をサーバーサイドロジック内で利用)
- 各種言語向け一般SDK (C# / Go / Python / TypeScript / PHP / Java) によるバックエンドサーバーからの呼び出し
- GS2 CLI
各種SDKの詳細は対応するリファレンスページを参照してください。
より実践的な情報
キーローテーション
セキュリティポリシーに従って暗号化キーを定期的にローテーションしたい場合、新しいキーを作成し、以降の暗号化処理を新キーへ切り替える運用が可能です。旧キーは復号用途のためにすぐには削除せず、暗号文の移行が完了するまで保持する設計が推奨されます。
GitHub API キーの管理
GS2-Key では暗号化キーの他に、GitHub からマスターデータを取り込む際に利用する API キーを保管できます。マスターデータの取り込みに利用される GS2-Deploy や各種マイクロサービスは、ここに登録した API キーを参照することでプライベートリポジトリにアクセスできます。