アクセス制御
Control access to Unity Gaming Services by creating rules to restrict service APIs.
読み終わるまでの所要時間 10 分最終更新 5ヶ月前
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