ドキュメント

サポート

Cloud Code

アクセス制御

Control access to Unity Gaming Services by creating rules to restrict service APIs you want to protect.
読み終わるまでの所要時間 2 分最終更新 23日前

Access Control サービス を介して、Cloud Code を含む Unity Gaming Services (UGS) へのアクセスを制御できます。 Access Control では、ルールを作成して、プレイヤーに対して使用可能にしないサービス API へのアクセスを制限できます。

Cloud Code でプレイヤーの経済をコントロールする例

以下の例は、Economy サービス の increment/decrement API へのアクセスを拒否するポリシーに基づいてプロジェクトを作成する方法を示します。プレイヤーは自分の残高を直接には操作できないため、プレイヤーに代わってこれらのリクエストを 信頼できるクライアント として行う Cloud Code モジュールを作成できます。 UGS CLI ツール でアクセスポリシーを適用できます。

前提条件

例に進む前に、プロジェクトが以下の前提条件を満たしていることを確認します。
  1. Economy サービス公開された通貨 がある。
  2. UGS CLI がコマンドを実行するように設定されている。詳細については、使用の準備 ガイドを参照してください。
  3. プロジェクトレベルのプロジェクトリソースポリシーエディター、プロジェクトリソースポリシーリーダー、および Unity 環境閲覧者のロールが、CLI ツールでの認証に使用するサービスアカウントに付与されている。

アクセスを制限するアクセス制御プロジェクトポリシーの作成

以下のコンテンツで
project-policy.json
ファイルを作成して、プレイヤーによる Economy サービス内の increment および decrement API への直接アクセスを拒否するポリシーを作成します。
{ "statements": [ { "Sid": "DenyPlayerAccessForEconomyIncrementAndDecrement", "Resource": "urn:ugs:economy:/*/*crement", "Principal": "Player", "Action": ["*"], "Effect": "Deny" } ]}
UGS CLI ツールを使用して、このポリシーをプロジェクトに適用します。
ugs access upsert-project-policy project-policy.json
プレイヤーとして認証 されている場合にプレイヤーの
increment
API エンドポイントへの直接リクエストがポリシーによって正常に拒否されたことをテストします。
curl 'https://economy.services.api.unity.com/v2/projects/<PROJECT_ID>/players/<PLAYER_ID>/currencies/<CURRENCY_ID>/increment' \--header 'Content-Type: application/json' \--header 'Authorization: Bearer <BEARER_TOKEN>' \--data '{ "amount": 10}'
ポリシーが正常に適用された場合、このリクエストは
403
HTTP ステータスコードとともにレスポンスを返します。
{ "status": 403, "title": "Forbidden", "type": "https://services.docs.unity.com/docs/errors/#56", "requestId": "b815d154-91f5-470e-a8ef-76c3c8ec7c13", "detail": "Access has been restricted", "code": 56}

モジュールエンドポイントの作成

最新の Economy SDK バージョンを含む Cloud Code モジュールを 作成 して残高増加リクエストを行います。モジュール関数は、パラメーターとして
currencyId
を受け取って、残高更新を適用する通貨を定義します。これが Economy 通貨設定のリソース ID と一致することを確認します。
using Microsoft.Extensions.DependencyInjection;using Unity.Services.CloudCode.Apis;using Unity.Services.CloudCode.Core;using Unity.Services.CloudCode.Shared;using Unity.Services.Economy.Model;namespace Sample;public class EconomySample{ [CloudCodeFunction("IncrementBalance")] public async Task<ApiResponse<CurrencyBalanceResponse>> IncrementPlayerBalance(IExecutionContext ctx, IGameApiClient gameApiClient, string currencyId) { try { return await gameApiClient.EconomyCurrencies.IncrementPlayerCurrencyBalanceAsync(ctx, ctx.ServiceToken, ctx.ProjectId, ctx.PlayerId, currencyId, new CurrencyModifyBalanceRequest(currencyId, 10)); } catch (ApiException ex) { throw new Exception($"Failed to get increment {currencyId} currency for player: {ctx.PlayerId}. Error: {ex.Message}"); } } public class ModuleConfig : ICloudCodeSetup { public void Setup(ICloudCodeConfig config) { config.Dependencies.AddSingleton(GameApiClient.Create()); } }}
プレイヤーとして認証するときに Cloud Code モジュールが残高を増やせることをテストします。
curl --request POST 'https://cloud-code.services.api.unity.com/v1/projects/<PROJECT_ID>/modules/<MODULE_NAME>/<FUNCTION_NAME>' \--header 'Content-Type: application/json' \--header 'Authorization: Bearer <BEARER_TOKEN>' \--data '{ "params": { "currencyId": <CURRENCY_ID> }}'
残高更新リクエストに成功した場合、Cloud Code は
200
HTTP ステータスコードと新しい残高値を含む増加リクエストの結果で応答する必要があります。
{ "result": { "balance": 10, "created": { "date": "2023-06-30T09:12:54Z" }, "currencyId": "GOLD", "modified": { "date": "2023-06-30T09:12:54Z" }, "writeLock": "1" }}

モジュールの検証

Player Management を使用して Unity Cloud Dashboard で、または Economy サービス API を介して残高をリクエストすることで、プレイヤーの通貨残高を確認できます。
curl 'https://economy.services.api.unity.com/v2/projects/<PROJECT_ID>/players/<PLAYER_ID>/currencies' \--header 'Authorization: Bearer <BEARER_TOKEN>'
Cloud Code がプレイヤーの残高をコントロールするように正常に設定されたら、プレイヤーの残高が期待される場合にのみ更新されるようにする追加のロジックを挿入できます。