在多会话队列上使用会话脚本 - 亚马逊 AppStream 2.0

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在多会话队列上使用会话脚本

在多会话队列上使用会话脚本时,还有其他要求和注意事项,以确保最佳性能和安全性。

要求

在单会话队列中,对于给定实例,SessionStartSessionTermination挂钩保证只运行一次。这是因为会话与实例之间有 1:1 的映射。使用多会话队列时,会话与实例之间存在一个 N: M 映射,其中每个会话都运行自己的会话并挂钩。SessionStartSessionTermination这意味着SessionStartSessionTermination挂钩可以在给定实例上以许多不同的顺序运行多次。为了获得最佳体验,在多会话队列上使用会话脚本时,应符合以下条件:

  • 脚本是等性的。

    当已执行某项操作时,脚本应在同一个实例上处理多个执行并保持优雅的处理。

  • 脚本是独立的。

    由于脚本按会话运行,因此如果一个会话SessionTermination在运行,而另一个会话在运行 SessionStart,则它们不应相互干扰,也不应干扰其他会话的体验。

  • 脚本性能很高。

    在多会话实例上,可以同时配置多个会话。这意味着可以同时执行多个会话脚本。脚本应该是高效的,不会消耗过多的资源,并且不会影响其他用户在实例上的体验或会话的稳定性。

通过将会话脚本逻辑集中在运行脚本的特定用户会话上,可以满足其中的许多要求。

安全考虑因素

AppStream 不应将 2.0 映像配置为允许任何用户对会话脚本文件拥有写入权限。这为恶意用户引入了一种关键的攻击媒介,他们可以在其中修改脚本文件。然后可以以其他用户SYSTEM身份运行这些文件,具体取决于您的配置。

重要

您有责任确保安全地配置您的 AppStream 2.0 镜像。这对于多会话实例尤其重要,在这种实例中,多个用户使用同一个实例。如果镜像配置不安全,则该实例的所有用户都将面临安全风险。

您的图像和会话脚本文件应符合以下条件:

  • 用户无权修改会话脚本文件。

  • 用户无权修改会话脚本 config.json。图像的默认行为限制了管理员的访问权限。

会话脚本的可执行文件应存储在安全的位置,以便在运行时不会被修改。

如果该服务检测到会话脚本可执行文件已被修改,则在该实例上随后执行该挂钩将失败,将日志文件上传到 Amazon S3(如果启用了 Amazon S3 日志记录),您将看到以下消息:

由于实例配置后修改了可执行文件,因此未执行会话脚本。为了安全起见,跳过了执行。

如果您的用例需要在运行时修改会话脚本的可执行EXE文件(例如,如果您指向一个在运行时由自动更新过程修改的文件),则上述检查将失败。在这种情况下,请使用脚本将执行重定向到修改后的可执行文件。当服务执行安全检查时,在运行时保持脚本不变。

如果您的会话脚本文件过大(超过 100 MB),则可能会导致实例和会话配置延迟,并且安全检查将花费更多时间(取决于实例类型和可用资源)。如果您的用例需要大型会话脚本,请考虑使用较小的脚本来重定向执行。这将改善实例和会话配置体验。

请注意,该服务仅检查会话脚本 config.json 中定义的可执行文件,这只是一种后备/尽力而为的机制。您有责任确保会话脚本可执行文件中的所有代码路径都是安全的,并且最终用户无法对其进行修改。