本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在多会话队列上使用会话脚本
在多会话队列上使用会话脚本时,还有其他要求和注意事项,以确保最佳性能和安全性。
要求
在单会话队列中,对于给定实例,SessionStart和SessionTermination挂钩保证只运行一次。这是因为会话与实例之间有 1:1 的映射。使用多会话队列时,会话与实例之间存在一个 N: M 映射,其中每个会话都运行自己的会话并挂钩。SessionStartSessionTermination这意味着SessionStart和SessionTermination挂钩可以在给定实例上以许多不同的顺序运行多次。为了获得最佳体验,在多会话队列上使用会话脚本时,应符合以下条件:
-
脚本是等性的。
当已执行某项操作时,脚本应在同一个实例上处理多个执行并保持优雅的处理。
-
脚本是独立的。
由于脚本按会话运行,因此如果一个会话SessionTermination在运行,而另一个会话在运行 SessionStart,则它们不应相互干扰,也不应干扰其他会话的体验。
-
脚本性能很高。
在多会话实例上,可以同时配置多个会话。这意味着可以同时执行多个会话脚本。脚本应该是高效的,不会消耗过多的资源,并且不会影响其他用户在实例上的体验或会话的稳定性。
通过将会话脚本逻辑集中在运行脚本的特定用户会话上,可以满足其中的许多要求。
安全考虑因素
AppStream 不应将 2.0 映像配置为允许任何用户对会话脚本文件拥有写入权限。这为恶意用户引入了一种关键的攻击媒介,他们可以在其中修改脚本文件。然后可以以其他用户SYSTEM身份运行这些文件,具体取决于您的配置。
重要
您有责任确保安全地配置您的 AppStream 2.0 镜像。这对于多会话实例尤其重要,在这种实例中,多个用户使用同一个实例。如果镜像配置不安全,则该实例的所有用户都将面临安全风险。
您的图像和会话脚本文件应符合以下条件:
-
用户无权修改会话脚本文件。
-
用户无权修改会话脚本 config.json。图像的默认行为限制了管理员的访问权限。
会话脚本的可执行文件应存储在安全的位置,以便在运行时不会被修改。
如果该服务检测到会话脚本可执行文件已被修改,则在该实例上随后执行该挂钩将失败,将日志文件上传到 Amazon S3(如果启用了 Amazon S3 日志记录),您将看到以下消息:
由于实例配置后修改了可执行文件,因此未执行会话脚本。为了安全起见,跳过了执行。
如果您的用例需要在运行时修改会话脚本的可执行EXE文件(例如,如果您指向一个在运行时由自动更新过程修改的文件),则上述检查将失败。在这种情况下,请使用脚本将执行重定向到修改后的可执行文件。当服务执行安全检查时,在运行时保持脚本不变。
如果您的会话脚本文件过大(超过 100 MB),则可能会导致实例和会话配置延迟,并且安全检查将花费更多时间(取决于实例类型和可用资源)。如果您的用例需要大型会话脚本,请考虑使用较小的脚本来重定向执行。这将改善实例和会话配置体验。
请注意,该服务仅检查会话脚本 config.json 中定义的可执行文件,这只是一种后备/尽力而为的机制。您有责任确保会话脚本可执行文件中的所有代码路径都是安全的,并且最终用户无法对其进行修改。