アクセス制御
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}
Cloud Code スクリプトの作成と公開
最新の Economy SDK バージョンを含む Cloud Code スクリプトを 作成および公開 して残高増加リクエストを行います。このスクリプトは、スクリプトパラメーターとしてcurrencyIdJavaScript
const { CurrenciesApi } = require("@unity-services/economy-2.4");module.exports = async ({ params, context, logger }) => { const { projectId, playerId } = context; const { currencyId } = params; const currencies = new CurrenciesApi(context); try { const result = await currencies.incrementPlayerCurrencyBalance({ projectId, playerId, currencyId, currencyModifyBalanceRequest: { amount: 10 } }); return result.data; } catch (err) { logger.error("Failed to update currency balance", {"error.message": err.message}, {"currencyId" : currencyId}); throw err; }}module.exports.params = { "currencyId" : { "type": "String", "required": true }}
プレイヤーとして認証するときに Cloud Code スクリプトが残高を増やせることをテストします。
残高更新リクエストに成功した場合、Cloud Code はcurl --request POST 'https://cloud-code.services.api.unity.com/v1/projects/<PROJECT_ID>/scripts/<SCRIPT_NAME>' \--header 'Content-Type: application/json' \--header 'Authorization: Bearer <BEARER_TOKEN>'--data '{"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>'