ドキュメント

サポート

Cloud Code

アクセス制御

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

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 サービスを呼び出す前に、サービスアカウントを使用して認証する必要があります。
  1. Unity Cloud Dashboard に移動します。
  2. Administration (管理) > Service Accounts (サービスアカウント) を選択します。
  3. New (新規) ボタンを選択し、サービスアカウントの名前と説明を入力します。
  4. Create (作成) を選択します。
製品ロールを追加し、キーを作成します。
  1. Manage product roles (製品ロールの管理) を選択します。
  2. 以下のロールをサービスアカウントに追加します。
  • 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 (プロジェクトリソースポリシー閲覧者) を選択します。
  1. Save (保存) を選択します。
  2. Add Key (キーの追加) を選択します。
  3. base64 エンコードを使用して Key ID (キー ID) と Secret key (秘密鍵) をエンコードします。形式は "key_id:secret_key" です。この値をメモしておきます。
詳細については、Authentication を参照してください。

UGS CLI の設定

以下のステップに従って、UGS CLI の使用を準備します。
  1. UGS CLI をインストール します。
  2. 以下を使用して、プロジェクト ID と環境を設定します。
    ugs config set project-id <your-project-id>

    ugs config set environment-name <your-environment-name>
  3. 前に作成したサービスアカウントを使用して認証します。詳細については、認証の取得 を参照してください。

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

プロジェクト内のすべての接続済みプレイヤーにメッセージをブロードキャストする 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
プレイヤーとして認証 されている場合にプレイヤーの
SendProjectMessage
モジュールエンドポイントへの直接リクエストがポリシーによって正常に拒否されたことをテストします。
curl '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"}}'
ポリシーが正常に適用されている場合、このリクエストは
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}
同じリクエストでサービスアカウントを認証するときに 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 は
200
HTTP ステータスコードで応答します。
{ "output":null}

Scheduling と Triggers の設定

スケジュールとトリガーを設定して、
SendProjectMessage
モジュールエンドポイントを呼び出すことができます。

スケジュール設定の作成

new-file
コマンドを実行して、スケジュール設定をローカルに作成します。
ugs 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-file
コマンドを実行して、トリガー設定をローカルに作成します。
ugs triggers new-file triggers-config
announcement
イベントが発生したときに
SendProjectMessage
モジュールエンドポイントを呼び出すトリガーを作成するには、以下の設定で
triggers-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>
正しく設定されている場合、トリガーは
announcement
イベントが発生したときに
SendProjectMessage
モジュールエンドポイントを呼び出す必要があります。