アクセス制御
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 ツール でアクセスポリシーを適用できます。前提条件
例に進む前に、プロジェクトが以下の前提条件を満たしていることを確認します。- Economy サービス に 公開された通貨 がある。
- UGS CLI がコマンドを実行するように設定されている。詳細については、使用の準備 ガイドを参照してください。
- プロジェクトレベルのプロジェクトリソースポリシーエディター、プロジェクトリソースポリシーリーダー、および Unity 環境閲覧者のロールが、CLI ツールでの認証に使用するサービスアカウントに付与されている。
アクセスを制限するアクセス制御プロジェクトポリシーの作成
以下のコンテンツでproject-policy.jsonUGS CLI ツールを使用して、このポリシーをプロジェクトに適用します。{ "statements": [ { "Sid": "DenyPlayerAccessForEconomyIncrementAndDecrement", "Resource": "urn:ugs:economy:/*/*crement", "Principal": "Player", "Action": ["*"], "Effect": "Deny" } ]}
プレイヤーとして認証 されている場合にプレイヤーのugs access upsert-project-policy project-policy.json
incrementポリシーが正常に適用された場合、このリクエストは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{ "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 モジュールを 作成 して残高増加リクエストを行います。モジュール関数は、パラメーターとしてcurrencyIdusing 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 モジュールが残高を増やせることをテストします。
残高更新リクエストに成功した場合、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> }}'
200{ "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 を介して残高をリクエストすることで、プレイヤーの通貨残高を確認できます。Cloud Code がプレイヤーの残高をコントロールするように正常に設定されたら、プレイヤーの残高が期待される場合にのみ更新されるようにする追加のロジックを挿入できます。curl 'https://economy.services.api.unity.com/v2/projects/<PROJECT_ID>/players/<PLAYER_ID>/currencies' \--header 'Authorization: Bearer <BEARER_TOKEN>'