APIキー、トークン、および資格情報-セキュア認証
完全な記事
1)すべての理由: iGamingの脅威モデル
お金とPII:主要な妥協→詐欺、リーク、罰金。
ネットワーク統合:数十の外部プロバイダ、さまざまな地域/ライセンス。
高いSLAレート:シンプルまたはダブル支払い-評判と法的リスク。
結論:認証と承認は、最小の権限と厳密な観察可能性を備えた「デフォルトで安全」でなければなりません。
2)用具: 私達が私達の武器庫で持っているもの
APIキー:静的クライアントID。容易な統合、漏出の高リスク。
OAuth2(クライアント資格情報):スコープ/オーディエンスを持つ短命のBearerトークン。
mTLS:相互TLSチェック、チャネルへのクライアントの強力なバインディング。
HMAC/EdDSA署名:リクエストボディの暗号的整合性とリプレイに対する保護(timestamp+nonce)。
所有証明:MTLSバインドトークンまたはDPoP(クライアントキーでHTTPリクエストに署名)。
JWT/PASETO:自己記述トークン(好ましくは短いTTL)。
RBAC/ABAC:役割/属性ベースの承認(OPA/ポリシーの決定)。
委任/STS:特定のシナリオに発行された時間と目的に制限されたチケット。
3)基本原則(「ストップサイン」)
1.最小権限:各キー/トークンには、可能な限り最低の権利があります。
2.デフォルトでは短命:TTL分、日数ではありません。回転は自動です。
3.チャネルへのバインド:mTLS/DPoPへのバインドトークンはリーク時に→無駄です。
4.ブランドごと/リージョン:ブランド/ライセンス/リージョンのキー/証明書とパーミッション。
5.コード内の共有秘密はありません:Vault/HSM/KMSを介したシークレット、Git/logsのみです。
6.WORM監査:すべての操作/問題/回転のログを変更しません。
7.Idemotence on write-puts:同じキーを持つすべての繰り返しは、2回目のお金を変更しません。
4) What (iGamingコンテキスト)を使用する場合)
5)アクセスチケットのデザイン(スコープ、観客、条件)
スコープ(例):- 'bets: write'、 'settlements: write'、 'wallet: credit'、 'wallet: debit'、 'rg: read'、 'rg: enforce'、 'jackpot: trigger'。
オーディエンス:トークンの宛先(例:'aud: wallet。api')。
制約(微細化):- 'brand_id'、 'region'、 'ip/cidr'、 'time_of_day'、 'rate_limit'、 'max_amount'。
- トークン(JWTクレーム)またはVault/STSで書かれた「マンデート」に格納されます。
6)参照の流れ
6.1 RGS ⇄プラットフォーム: RPCマネー
1.mTLSハンドシェイク(ブランド/地域証明書ごとに)。
2.OAuth2 CC: RGSは'access_token' (TTL 2-5 min、 'aud=wallet。api'、'scope=bets:決済を書く:write')。
3.ヘッダーで'POST/v1/bets/authorize'をリクエスト:- 'Authorization: Bearer '、 'X-Idempotency-Key'、 'X-Trace-Id'。 
- 4.回答+WORM監査(who/what/when/where)に書き込みます。
- 5.トークンの回転は、有効期限が切れた後にシームレスになります。
6.2 Webhooksプラットフォーム→プロバイダ
見出し'X-Signature: eddsa=
プロバイダーチェック:有効性ウィンドウ(± 5分)、nonce、 body signature。
利用できない場合-バックオフでリトレイし、'event_id'でデッドアップします。
6.3代表団(ジャックポットサービス→ウォレット)
JPはSTS: 「player_id=p 、 sum X、 TTL 2 minの'wallet: credit'に対して一時的なトークンを与える」 呼び出します。
STSはポリシー/リミットをチェックし→チケット(狭いトークン)を発行します。
JPはこのトークンでウォレットをクレジットします。このようなトークンを妥協することは無意味です:短いTTL、狭い権利、mTLSへのバインディング。
7)クエリの構成
7.1 Idempotency(必須)
POST/v1/bets/settle
認可:Bearer <MTLS-bound>
X-Idempotency-Key: settle_r_8c12_1
X-Trace-Id: tr_a1b2
{
"bet_id":"b_001," "round_id":"r_8c12," "win": {"amount': 1460、" currency":"EUR"}
}
→200 {「status「:「credited」、 「settlement_id":"st_77」}
(同じキー→同じ答えで繰り返す)7.2 Webhook署名(HMAC)
X-Signature: sha256=BASE64 (HMAC (secret、 timestamp+「。+nonce+」。+body)
Xタイムスタンプ: 1730000000
X-Nonce: 1f7a……8)秘密と鍵を管理する
Vault/HSM/KMS:生成、ストレージ、回転、リコール。
環境ごと:サンドボックス/prod-異なる信頼のルーツ。
ブランドごと/地域:個々のキーと証明書。
自動回転:cron/alerts;シームレスな交換のためのオーバーラップ期間。
コード/ログの禁止:シークレットは標準出力に書き込まれておらず、クラッシュレポートには含まれません。
デバイス/ワークロードID: SPIFFE/SPIRE、 K8s ServiceAccount→mTLS手動の秘密なし。
9)承認方針(RBAC/ABAC)およびOPA
RBAC: "rgs'、" wallet"、"jackpot"、"reporting"。
ABAC: 「if 'region=EU'と'brand=A' rules→allow 'wallet: credit' ≤ 10k」。
OPA/REGOまたは類似物:一元的な意思決定、ポリシーバージョニング、ドライテスト。
10)観察可能性および監査
各リクエスト/イベントのエンドツーエンドのtrace_idとclient_id。
メトリクス:エンドポイントによるp50/p95/p99レイテンシー、コードによるエラーレート('AUTH_FAILED'、 'SCOPE_DENIED'、 'IDEMPOTENCY_MISMATCH')、回転速度、期限切れトークンの共有。
WORMログ:トークンの問題/リコール、主な変更、ポリシーの変更。
アラート:'AUTH_FAILED'スパイク、geo/ASN異常、'overdue/detailn' growth>しきい値。
11)地域居住とセグメンテーション
トークン/証明書は地域固有(EU/UK/BR/……)です。
ブランド-'region'では、プラットフォームゲートウェイは地域横断通話を禁止しています。
KMSとVaultクラスタをリージョンごとに分離します。キーはリージョン間を「ドライブ」しません。
12)インシデントとリコール
妥協プレイブック:インスタントキー/トークンの取り消し、ネットワークブロック/ASN、スコープの閉鎖。
ゲートウェイレベルでのキルスイッチ:「新しいセッション/資金なし」。
Postmortem:「それはログ/リポジトリに入ったように」、「DLP/シークレットスキャナが動作しなかった理由」。
13)チェックリスト
A。プラットホームのため
- すべての書き込みパス:mTLS+OAuth2 CC (TTL ≤ 5 min)、 'X-Idempotency-Key'、 'X-Trace-Id'。
- Webhooks: HMAC/EdDSA+timestamp+nonce、 dedup by 'event_id'。
- Keistor: Vault/HSM/KMS、回転とリコール、ブランド/地域ごとに分割。
- OPA/ポリシー: RBAC/ABAC、変更ログ、テスト。
- WORM監査とSLOダッシュボード(レイテンシ、エラー、取り消し/回転)。
- DR/xaocの教え:期限切れのトークン、シグネチャースプーフィング、mTLSのないMITM。
B。プロバイダ用(RGS/live/JP)
- 私はコードに秘密を保持していません。環境変数を介してVault/置換を使用します。
- トークンの自動回転;アップデートで401/403を処理します。
- サインWebフック/有効性ウィンドウと使い捨てをチェックします。
- 主要な活動を監査し、廃止/日没の見出しに対応する。
- すべての書き込みコールに対するIdempotency、 'Idempotency-Key'によるdedup。
14)アンチパターン(赤い旗)
販売の有効期限なしの静的APIキー。
チャンネルにバインドされないベアラートークン(MTLS/DPoPなし)。
Git/CI log/frontend configにシークレットを格納します。
複数のブランド/リージョンの共有キー/証明書。
署名とタイムウィンドウのないWebhook→リプレイ。
一元化されたフィードバックとWORMログの欠如。
idempotency→重複したデビット/クレジットの欠如。
15)ミニポリシーテンプレート(例、人間が読める)
チケット'rgs→wallet' (EU、 ブランドA):- 'aud=wallet。api'、'scope=[「bets: write「、「決済:write」]'
- 'constraints: region=EU、 brand=A、 ip in {asn:……}、 max_amount=5000 EUR、 ttl=300'
- 'binding: mTLS (cert_hash=sha256:...)'
- 'alg=Ed25519'、 window '± 30'、 'nonce'ユニーク、祖父'event_id' 24時間。
iGamingでのセキュア認証は、短命のマンデート、チャネルバインディング(mTLS/DPoP)、狭いスコープ/オーディエンス、厳格なidempotency、 Vault/HSMおよびWORM監査、地域セグメンテーション、およびオブザビリティの組み合わせです。このようなスタックは統合の速度を妨げるものではありませんが、漏洩や金融事件のリスクを根本的に低減します。
