アクセス制御
Control access to Unity Gaming Services by creating rules to restrict service APIs.
読み終わるまでの所要時間 3 分最終更新 4ヶ月前
Access Control サービス を介して、Cloud Code を含む Unity Gaming Services (UGS) へのアクセスを制御できます。
Access Control を使用すると、ルールを作成して、プレイヤーに対して使用可能にしないサービス API へのアクセスを制限できます。
Cloud Code モジュールへのプレイヤーのアクセスを制御する例
以下の例は、Cloud Code サービス API へのアクセスを拒否するポリシーに基づいてプロジェクトを作成する方法を示します。プレイヤーからの直接リクエストを拒否する一方で Cloud Code C# モジュールをトリガーに関連付けて、ゲームのセキュリティを向上させます。UGS CLI ツール でアクセスポリシーを作成できます。
前提条件
最初に、必要なアクセスロールでサービスアカウントを作成し、UGS CLI を設定する必要があります。
サービスアカウントを使用した認証
Scheduling および Triggers サービスを呼び出す前に、サービスアカウントを使用して認証する必要があります。
- Unity Dashboard に移動します。
- Administration (管理) > Service Accounts (サービスアカウント) を選択します。
- New (新規) ボタンを選択し、サービスアカウントの名前と説明を入力します。
- Create (作成) を選択します。
製品ロールを追加し、キーを作成します。
- Manage product roles (製品ロールの管理) を選択します。
- 以下のロールをサービスアカウントに追加します。
- LiveOps ドロップダウンから、Triggers Configuration Editor (Triggers 設定編集者)、Triggers Configuration Viewer (Triggers 設定閲覧者)、Scheduler Configuration Editor (Scheduler 設定編集者)、Scheduler Configuration Viewer (Scheduler 設定閲覧者) を選択します。
- Admin (管理者) ドロップダウンから、Unity Environments Viewer (Unity 環境閲覧者)、Project Resource Policy Editor (プロジェクトリソースポリシー編集者)、Project Resource Policy Reader (プロジェクトリソースポリシー閲覧者) を選択します。
- Save (保存) を選択します。
- Add Key (キーの追加) を選択します。
- base64 エンコードを使用して Key ID (キー ID) と Secret key (秘密鍵) をエンコードします。形式は "key_id:secret_key" です。この値をメモしておきます。
詳細については、Authentication を参照してください。
UGS CLI の設定
以下のステップに従って、UGS CLI の使用を準備します。
-
UGS CLI をインストール します。
-
以下を使用して、プロジェクト ID と環境を設定します。
ugs config set project-id <your-project-id>
ugs config set environment-name <your-environment-name> -
前に作成したサービスアカウントを使用して認証します。詳細については、認証の取得 を参照してください。
モジュールエンドポイントの作成
プロジェクト内のすべての接続済みプレイヤーにメッセージをブロードキャストする Cloud Code モジュールを 作成 します。
詳細については、プッシュメッセージの送信 を参照してください。
using Microsoft.Extensions.DependencyInjection;using Unity.Services.CloudCode.Core;using Unity.Services.CloudCode.Apis;namespace HelloWorld{ public class HelloWorld { [CloudCodeFunction("SendProjectMessage")] public async Task SendProjectMessage(IExecutionContext context, PushClient pushClient, string message, string messageType) { await pushClient.SendProjectMessageAsync(context, message, messageType); } } public class ModuleConfig : ICloudCodeSetup { public void Setup(ICloudCodeConfig config) { config.Dependencies.AddSingleton(PushClient.Create()); } }}
モジュールをデプロイします。
モジュールのデプロイ方法を学習するには、Hello World のデプロイ を参照してください。
アクセスを制限するアクセス制御プロジェクトポリシーの作成
以下のコンテンツで ファイルを作成して、プレイヤーによるモジュールエンドポイントへの直接アクセスを拒否するポリシーを作成します。
project-policy.json{ "statements": [ { "Sid": "DenyPlayerAccessForSendingMessageToProject", "Resource": "urn:ugs:cloud-code:/v1/projects/*/modules/HelloWorld/SendProjectMessage", "Principal": "Player", "Action": ["*"], "Effect": "Deny" } ]}
UGS CLI ツールを使用して、このポリシーをプロジェクトに適用します。
ugs access upsert-project-policy project-policy.jsonプレイヤーとして認証 されている場合にプレイヤーの モジュールエンドポイントへの直接リクエストがポリシーによって正常に拒否されたことをテストします。
SendProjectMessagecurl 'https://cloud-code.services.api.unity.com/v1/projects/<PROJECT_ID>/players/<PLAYER_ID>/modules/HelloWorld/SendProjectMessage' \--header 'Content-Type: application/json' \--header 'Authorization: Bearer <BEARER_TOKEN>' \--data '{"params": {"message": "hello"}}'
ポリシーが正常に適用されている場合、このリクエストは HTTP ステータスコードとともにレスポンスを返します。
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 モジュールが実行できることをテストします。続行するには、ステートレストークンを取得し、リクエストでそれを Bearer トークンとして使用する必要があります。
詳細については、Cloud Code Client API Bearer 認証 を参照してください。
curl 'https://cloud-code.services.api.unity.com/v1/projects/<PROJECT_ID>/modules/HelloWorld/SendProjectMessage' \--header 'Content-Type: application/json' \--header 'Authorization: Bearer <BEARER_TOKEN>' \--data '{"params": {"message": "hello"}}'
リクエストに成功した場合、Cloud Code は HTTP ステータスコードで応答します。
200{ "output":null}
Scheduling と Triggers の設定
スケジュールとトリガーを設定して、 モジュールエンドポイントを呼び出すことができます。
SendProjectMessageスケジュール設定の作成
new-fileugs scheduler new-file schedule-config
以下の設定で ファイルを更新します。
schedule-config.sched{ "$schema": "https://ugs-config-schemas.unity3d.com/v1/schedules.schema.json", "Configs": { "send-project-message": { "EventName": "announcement", "Type": "one-time", "Schedule": "2024-08-28T00:00:00Z", "PayloadVersion": 1, "Payload": "{\"message\": \"hello\"}" } }}
トリガー設定の作成
new-fileugs triggers new-file triggers-config
announcementSendProjectMessagetriggers-config.tr{ "$schema": "https://ugs-config-schemas.unity3d.com/v1/triggers.schema.json", "Configs": [ { "Name": "announcement-trigger", "EventType": "com.unity.services.scheduler.announcement.v1", "ActionUrn": "urn:ugs:cloud-code:HelloWorld/SendProjectMessage", "ActionType": "cloud-code" } ]}
設定のデプロイ
UGS CLI ツールを使用してファイルをデプロイします。
ugs deploy <path-to-config-files>
正しく設定されている場合、トリガーは イベントが発生したときに モジュールエンドポイントを呼び出す必要があります。
announcementSendProjectMessage