访问控制
Control access to Unity Gaming Services by creating rules to restrict service APIs.
阅读时间5 分钟最后更新于 1 个月前
您可以通过 Access Control 服务来控制对 Unity Gaming Services(Unity 游戏服务)(UGS) 的访问(包括对 Cloud Code 的访问)。 通过使用 Access Control,您可以创建规则来限制访问不应提供给玩家的服务 API。
控制玩家对 Cloud Code 模块的访问示例
以下示例演示了如何创建基于项目的策略来拒绝对 Cloud Code 服务 API 的访问。您可以将 Cloud Code C# 模块关联到触发器,同时拒绝玩家的直接请求,从而提高游戏的安全性。您可以使用 UGS CLI 工具创建访问策略。先决条件
首先需要创建具有所需访问角色的服务帐户,并配置 UGS CLI。使用服务帐户进行身份验证
在调用 Scheduling 和 Triggers 服务之前,需要使用服务帐户进行身份验证。- 导航到 Unity Cloud 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”。请记下此值。
配置 UGS CLI
按照以下步骤操作以开始使用 UGS CLI:- 安装 UGS CLI。
-
使用以下命令配置您的 Project ID 和环境:
ugs config set project-id <your-project-id>
ugs config set environment-name <your-environment-name> - 使用您先前创建的服务帐户进行身份验证。如需了解更多信息,请参阅接受身份验证。
创建模块终端
创建一个 Cloud Code 模块向项目中所有已连接的玩家广播一条消息。 如需了解更多信息,请参阅发送推送消息。部署该模块。 请参阅部署 Hello World 以了解如何部署模块。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()); } }}
创建 Access Control 项目策略以限制访问
创建一个包含以下内容的project-policy.json使用 UGS CLI 工具将此策略应用于您的项目:{ "statements": [ { "Sid": "DenyPlayerAccessForSendingMessageToProject", "Resource": "urn:ugs:cloud-code:/v1/projects/*/modules/HelloWorld/SendProjectMessage", "Principal": "Player", "Action": ["*"], "Effect": "Deny" } ]}
ugs access upsert-project-policy project-policy.jsonSendProjectMessage如果成功应用此策略,该请求应返回包含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测试 Cloud Code 模块是否能在使用服务帐户对相同请求进行身份验证时执行。若要继续,需获取无状态令牌,并将其用作请求中的持有者令牌。 如需了解更多信息,请参阅 Cloud Code Client API 持有者身份验证。{ "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 应该会以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"}}'
200{ "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
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