Usar scripts de sessão em frotas multissessão
Ao usar scripts de sessão em frotas multissessão, há requisitos e considerações adicionais para garantir o desempenho e a segurança ideais.
Requisitos
Em uma frota de sessão única, para uma determinada instância, é garantido que os hooks SessionStart e SessionTermination sejam executados apenas uma vez. Isso ocorre porque há um mapeamento 1:1 de sessões para instâncias. Ao usar frotas multissessão, há um mapeamento N:M de sessões para instâncias, em que cada sessão executa seu próprio hook SessionStart e SessionTermination. Isso significa que os hooks SessionStart e SessionTermination podem ser executados várias vezes em uma determinada instância e em várias ordens diferentes. Para obter a melhor experiência, o seguinte deve ser válido para seus scripts de sessão quando usados em frotas multissessão:
-
Os scripts são idempotentes.
Quando uma ação já tiver sido executada, os scripts deverão lidar com mais de uma execução na mesma instância com um tratamento adequado.
-
Os scripts são independentes.
Uma vez que os scripts são executados por sessão, se uma sessão estiver executando SessionTermination enquanto outra estiver executando SessionStart, eles não deverão interferir um no outro ou na experiência de outras sessões.
-
Os scripts são performantes.
Em instâncias multissessão, várias sessões podem ser provisionadas simultaneamente. Isso significa que pode haver várias execuções simultâneas dos scripts de sessão. Os scripts devem ser eficientes, não consumir recursos excessivos e não afetar a experiência de outros usuários na instância ou a estabilidade das sessões.
Muitos desses requisitos podem ser atendidos mantendo a lógica do script de sessão focada na sessão específica do usuário para a qual o script está sendo executado.
Considerações sobre segurança
As imagens do AppStream 2.0 não devem ser configuradas para permitir a gravação em arquivos de script de sessão por nenhum usuário. Isso introduz um vetor de ataque crítico para usuários mal-intencionados, onde eles podem modificar arquivos de script. Esses arquivos podem ser executados como SYSTEM ou outro usuário, dependendo da sua configuração.
Importante
É sua responsabilidade certificar-se de que as imagens do AppStream 2.0 estejam configuradas com segurança. Isso é especialmente importante para instâncias multissessão, em que vários usuários estão usando a mesma instância. Se as imagens não forem configuradas de maneira segura, haverá um risco de segurança para todos os usuários dessa instância.
O seguinte deve ser verdadeiro para suas imagens e arquivos de scripts de sessão:
-
Os usuários não têm permissão para modificar arquivos de script de sessão.
-
Os usuários não têm permissão para modificar o config.json do script de sessão. O comportamento padrão na imagem restringe o acesso aos administradores.
Os executáveis dos scripts de sessão devem ser armazenados em um local seguro, onde não possam ser modificados no runtime.
Se o serviço detectar que um script de sessão executável foi modificado, ele falhará em todas as execuções subsequentes desse hook nessa instância, carregará os arquivos de log no Amazon S3 (se o log do Amazon S3 estiver habilitado) e você verá a seguinte mensagem:
O script da sessão não foi executado porque o executável foi modificado após o provisionamento da instância. A execução foi ignorada por motivos de segurança.
Se o seu caso de uso exigir a modificação do executável do script de sessão no runtime (por exemplo, se você apontar para um arquivo EXE que é modificado por um processo de atualização automática no runtime), isso falhará nas verificações acima. Nesse caso, use um script para redirecionar a execução para seu executável modificado. Deixe o script inalterado no runtime quando o serviço realizar verificações de segurança.
Se os arquivos de script de sessão forem muito grandes (mais de 100 MB), isso poderá causar atrasos no provisionamento de instâncias e sessões, e as verificações de segurança levarão mais tempo (dependendo do tipo de instância e dos recursos disponíveis). Se o seu caso de uso exigir scripts de sessão grandes, considere usar scripts menores para redirecionar a execução. Isso melhorará as experiências de provisionamento de instâncias e sessões.
Observe que o serviço está verificando apenas o executável definido no config.json dos scripts de sessão, e esse é apenas um mecanismo de fallback/melhor esforço. É sua responsabilidade garantir que todos os caminhos de código nos executáveis dos scripts de sessão sejam seguros e não possam ser modificados pelos usuários finais.