O blog da AWS

Como gravar um vídeo de sessões de streaming do Amazon AppStream 2.0

Por Nicolas Malaval, Arquiteto de Soluções da AWS

 

Amazon AppStream 2.0 é um serviço totalmente gerenciado que permite transmitir aplicativos e desktops para seus usuários. Neste post, vamos mostrar como gravar um vídeo de sessões de streaming do Amazon AppStream 2.0 usando FFmpeg, um framework popular de mídia.

Há muitos casos de uso para gravação de sessão, como auditoria de acesso administrativo, solução de problemas de usuário ou garantia de qualidade. Por exemplo, você pode publicar ferramentas administrativas com o Amazon AppStream 2.0, como um cliente Remote Desktop Protocol (RDP), para proteger o acesso aos seus sistemas de back-end (consulte How to use Amazon AppStream 2.0 to reduce your bastion host attack surface) e você pode querer gravar um vídeo do que seus administradores fazem ao acessar e operar sistemas de back-end. Você também pode querer ver o que um usuário fez para reproduzir um problema ou ver as atividades em um ambiente de call center, como atendimento de chamadas ou suporte ao cliente, para revisão e treinamento.

Esta solução não foi projetada ou destinada à vigilância de pessoas ou à coleta de evidências para processos judiciais. Você é responsável por cumprir todas as leis e regulamentos aplicáveis ao usar esta solução.

 

Visão geral e arquitetura

Nesta seção, você pode aprender sobre as etapas para gravar sessões de streaming do Amazon AppStream 2.0 e ter uma visão geral da arquitetura da solução. Nas demais seções, você encontrará instruções sobre como implementar e testar a solução.

O Amazon AppStream 2.0 permite que você execute custom scripts para preparar a instância de streaming antes do lançamento dos aplicativos ou após a sessão de streaming ter concluído. A Figura 1 mostra uma descrição simplificada do que acontece antes, durante e depois de uma sessão de streaming.

 

Figura 1 – Arquitetura de Solução

 

  1. Antes do início da sessão de streaming, o Amazon AppStream 2.0 executa o script A, que usa PsExec, um utilitário que permite aos administradores executar comandos em computadores locais ou remotos, para iniciar o Script B. O Script B é executado durante toda a sessão de streaming. O PsExec pode executar o script como a conta LocalSystem, uma conta de serviço que possui amplos privilégios em um sistema local, enquanto interage com a área de trabalho de outra sessão. Usando a conta LocalSystem, você pode usar o FFmpeg para gravar a tela da sessão e evitar que os usuários do Amazon AppStream 2.0 parem ou adulterem a solução, desde que não tenham direitos de administrador local.
  2. O Script B inicia o FFmpeg e começa a gravar a área de trabalho. A solução usa o built-in screen-grabber do FFmpeg para capturar a área de trabalho em todas as telas disponíveis.
  3. Quando o FFmpeg começa a gravar, ele captura a área coberta pela área de trabalho naquele momento. Se o número de telas ou a resolução mudar, uma parte da área de trabalho pode estar fora da área gravada. Nesse caso, o script B interrompe a gravação e inicia o FFmpeg novamente.
  4. Após o término da sessão de streaming, o AppStream 2.0 executa o script C, que notifica o script B de que deve encerrar a gravação e fechar. O script B interrompe o FFmpeg.
  5. Antes de sair, o script B envia os arquivos de vídeo que o FFmpeg gerou para o Amazon Simple Storage Service (Amazon S3). Ele também armazenametadados de usuário e sessão no Amazon S3, junto com os arquivos de vídeo, para fácil recuperação de gravações de sessão.

Para uma compreensão mais abrangente de como funcionam os scripts de sessão, você pode consultar o repositório no GitHub que contém os artefatos de solução, onde entro nos detalhes de cada script.

Implementando e testando a solução

Agora que você entende a arquitetura desta solução, pode seguir as instruções nesta seção para implementar a solução desta postagem do blog em sua conta da AWS. Você irá:

  1. Criar uma virtual private cloud (VPC), um bucket S3 e um role no AWS Identity and Access Management (IAM) com o AWS CloudFormation.
  2. Criar um Image Builder no AppStream 2.0.
  3. Configurar os scripts de solução no image builder.
  4. Especificar um aplicativo para publicar e criar uma imagem.
  5. Criar uma fleet no AppStream 2.0.
  6. Criar uma stack no AppStream 2.0.
  7. Criar um usuário no pool de usuários do AppStream 2.0.

Iniciar uma sessão de streaming e testar a solução.

Etapa 1: criar um VPC, um bucket S3 e um IAM role com AWS CloudFormation

Para a primeira etapa da solução, você cria uma nova VPC onde o AppStream 2.0 será implantado ou escolhe uma VPC existente, um novo bucket S3 para armazenar as gravações da sessão e um novo role IAM para conceder ao AppStream 2.0 as permissões IAM necessárias.

Para criar a VPC, o bucket S3 e role do IAM com AWS CloudFormation

  1. Selecione o seguinte botão Launch Stack para abrir o console do CloudFormation e criar uma stack do CloudFormation a partir do modelo. Você pode alterar a região onde os recursos são implantados na barra de navegação.

O modelo mais recente também pode ser baixado no GitHub.

  1. Escolha Próximo. Para ID da VPC, ID de sub-rede 1 e ID de sub-rede 2, você pode selecionar opcionalmente uma VPC e duas sub-redes, se quiser implantar a solução em uma VPC existente, ou deixar esses campos em branco para criar uma nova VPC. Em seguida, siga as instruções na tela. O AWS CloudFormation cria os seguintes recursos:
    • (Se você optou por criar uma nova VPC) Uma Amazon Virtual Private Cloud (Amazon VPC) com um gateway de Internet conectado.
    • (Se você optou por criar uma nova VPC) Duas sub-redes públicas nesta Amazon VPC com uma nova tabela de rota para torná-los publicamente acessíveis.
    • Um bucket S3 para armazenar as gravações da sessão.
    • Um role IAM para conceder permissões do AppStream 2.0 para fazer upload de arquivos de vídeo e metadados para o Amazon S3.
  2. Depois que a criação da stack for concluída, escolha a guia Outputs no console do CloudFormation e observe os valores que o processo retornou: o nome e a região do bucket S3, o nome do role IAM, o ID da VPC e as duas sub-redes.

Etapa 2: Criar um image builder no AppStream 2.0

A próxima etapa é criar um novo image builder do AppStream 2.0. Um image builder é uma máquina virtual que você pode usar para instalar e configurar aplicativos para streaming e, em seguida, criar uma imagem customizada.

Para criar o image builder do AppStream 2.0

  1. Abra o console do Amazon AppStream 2.0 e selecione a região na barra de navegação. Escolha Get Started e Skip se você for novo no console.
  2. Escolha Imagens no painel esquerdo e escolha Image Builder. Escolha Iniciar Image Builder.
  3. Na Etapa 1: Escolha a imagem:
    • Selecione o nome da imagem base do AppStream 2.0 mais recente para a versão do Windows Server de sua escolha. Você pode encontrar seu nome no histórico da versão da imagem base do AppStream 2.0. Por exemplo, no momento da escrita, o nome da imagem base do Windows Server 2019 mais recente é AppStream-WinServer2019-07-16-2020.
    • Escolha Próximo.
  4. Na Etapa 2: Configurar o Image Builder:
    • Para Nome, insira session-recording.
    • Para o tipo de instância, escolha standard.medium.
    • Para o role IAM, selecione o role IAM que o AWS CloudFormation criou.
    • Escolha Próximo.
  5. Na Etapa 3: Configurar a Rede:
    • Escolha Acesso Padrão à Internet para fornecer acesso à Internet ao seu image builder.
    • Para VPC, selecione o ID da VPC e, para a Sub-rede 1, selecione o ID da Sub-rede 1.
    • Para Grupos de segurança, selecione o ID do grupo de segurança. Consulte a guia Outputs da stack do CloudFormation se não tiver certeza de qual VPC, sub-rede e grupo de segurança selecionar.
    • Escolha Revisão.
  6. Na Etapa 4: Revisão, escolha Iniciar

Etapa 3: configurar os scripts de solução no image builder

Os scripts de sessão a serem executados antes do início das sessões de streaming ou após o término das sessões são especificados em uma imagem AppStream 2.0. Nesta etapa, você instala os scripts de solução em seu image builder e especifica os scripts a serem executados no arquivo de configuração de scripts de sessão.

Para configurar os scripts de solução no image builder

  1. Aguarde até que o image builder esteja no estado Executando e, em seguida, escolha Conectar.
  2. Na sessão de streaming do AppStream 2.0, na guia Usuário local, escolha Administrador.
  3. Para instalar os scripts da solução:
    • Na área de trabalho do image builder, escolha Iniciar na barra de tarefas do Windows.
    • Abra o menu de contexto (clique com o botão direito) do Windows PowerShell e escolha Executar como Administrador.
    • Execute os comandos a seguir no terminal PowerShell para criar as pastas necessárias e para copiar os scripts de solução e o arquivo de configuração de scripts de sessão de objetos públicos no GitHub para o disco local. Se você não estiver usando o Google Chrome ou o cliente AppStream 2.0, será necessário escolher o ícone da área de transferência na barra de navegação do AppStream 2.0 e selecionar Colar na sessão remota.
        New-Item -Path C: \ SessionRecording -ItemType directory
        New-Item -Path C: \ SessionRecording \ Scripts -ItemType directory
        New-Item -Path C: \ SessionRecording \ Output -ItemType diretório
        New-Item -Path C: \ SessionRecording \ Bin -ItemType directory

        $ Acl = Get-Acl C: \ SessionRecording
        $ Acl.SetAccessRuleProtection ($ true, $ false)
        $ AccessRule1 = New-Object System.Security.AccessControl.FileSystemAccessRule ("Administradores", "FullControl", "ContainerInherit, ObjectInherit", "Nenhum", "Permitir")
        $ Acl.SetAccessRule ($ AccessRule1)
        $ AccessRule2 = New-Object System.Security.AccessControl.FileSystemAccessRule ("SYSTEM", "FullControl", "ContainerInherit, ObjectInherit", "Nenhum", "Permitir")
        $ Acl.SetAccessRule ($ AccessRule2)
        $ AccessRule3 = New-Object System.Security.AccessControl.FileSystemAccessRule ("ImageBuilderAdmin", "FullControl", "ContainerInherit, ObjectInherit", "Nenhum", "Permitir")
        $ Acl.SetAccessRule ($ AccessRule3)
        Set-Acl C: \ SessionRecording $ Acl

        [Net.ServicePointManager] :: SecurityProtocol = [Net.SecurityProtocolType] :: Tls12
        Invoke-WebRequest -URI https://github.com/aws-samples/appstream-session-recording/raw/main/script_a.ps1 -OutFile C: \ SessionRecording \ Scripts \ script_a.ps1
        Invoke-WebRequest -URI https://github.com/aws-samples/appstream-session-recording/raw/main/script_b.ps1 -OutFile C: \ SessionRecording \ Scripts \ script_b.ps1
        Invoke-WebRequest -URI https://github.com/aws-samples/appstream-session-recording/raw/main/script_c.ps1 -OutFile C: \ SessionRecording \ Scripts \ script_c.ps1
        Invoke-WebRequest -URI https://github.com/aws-samples/appstream-session-recording/raw/main/variables.ps1 -OutFile C: \ SessionRecording \ Scripts \ variables.ps1
        Invoke-WebRequest -URI https://github.com/aws-samples/appstream-session-recording/raw/main/config.json -OutFile C: \ AppStream \ SessionScripts \ config.json
    • Feche o terminal PowerShell.
  1. Para editar o arquivo variables.ps1 com seus próprios valores:
    • Na área de trabalho do image builder, escolha Iniciar na barra de tarefas do Windows.
    • Abra o menu de contexto (clique com o botão direito) do Windows PowerShell ISE e escolha Executar como Administrador.
    • Escolha Arquivo e Abrir. Navegue até a pasta C:\SessionRecording\Scripts\ e abra o arquivo variables.ps1.
    • Edite o nome e a região do bucket S3 com os valores retornados pelo AWS CloudFormation na guia Outputs. Você também pode personalizar o número de quadros por segundo e a duração máxima em segundos de cada arquivo de vídeo. Salve o arquivo.
    • Salve e feche o arquivo.
  2. Para fazer download dos executáveis FFmpeg e PsExec mais recentes para o image builder:
    • Na área de trabalho do image builder, abra o ícone do Firefox na área de trabalho.
    • Navegue até a URL https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-github e escolha o link que contém zip para baixar o FFmpeg. Escolha Abrir para baixar e extrair o arquivo ZIP. Copie o arquivo ffmpeg.exe na pasta bin do arquivo ZIP para C:\SessionRecording\Bin\
Nota: FFmpeg fornece apenas código-fonte e pacotes compilados estão disponíveis em locais de terceiros. Se o link acima for inválido, vá para a página de download do FFmpeg e siga as instruções para baixar a versão mais recente para Windows.
    • Navegue até o URL https://download.sysinternals.com/files/PSTools.zip para baixar o PsExec64.exe. Escolha Abrir para baixar e extrair o arquivo ZIP. Copie o arquivo exe para C:\SessionRecording\Bin\. Você deve concordar com os termos da licença, porque a solução nesta postagem do blog os aceita automaticamente.
    • Feche o Firefox.

Etapa 4: especificar um aplicativo para publicar e criar uma imagem

Nesta etapa, você publica o Firefox em seu image builder e cria uma imagem personalizada AppStream 2.0. Escolhemos o Firefox porque é fácil de testar posteriormente no procedimento. Você pode escolher outros aplicativos ou aplicativos adicionais para publicar, se necessário.

Para especificar o aplicativo para publicar e criar a imagem:

  1. Na área de trabalho do image builder, abra o ícone do Image Assistant disponível na área de trabalho. O Image Assistant o orienta durante o processo de criação da imagem.
  2. Em Adicionar aplicativos:
    • Escolha + Adicionar aplicativo.
    • Insira o local C:\Arquivos de programas (x86)\Mozilla Firefox\firefox.exe para adicionar o Firefox.
    • Escolha Abrir. Mantenha as configurações padrão e escolha Salvar.
    • Escolha Avançar várias vezes até ver Otimizar.
  3. Em Otimizar:
    • Escolha Lançamento.
    • Escolha Continuar até que você possa ver Configurar Imagem.
  4. Em Configurar imagem:
    • Para Nome, insira session-recording para o nome da imagem.
    • Escolha Próximo.
  5. Na Revisão:
    • Escolha Desconectar e criar imagem.
  6. De volta ao console AppStream 2.0:
    • Escolha Imagens no painel esquerdo e, em seguida, escolha a guia Registro de imagem.
    • Altere Todas as Imagens para Privadas e compartilhadas com outras pessoas. Você verá sua nova imagem AppStream 2.0.
    • Espere até que a imagem esteja no estado Disponível. Isso pode levar mais de 30 minutos.

Etapa 5: Criar uma fleet no AppStream 2.0

Em seguida, crie uma fleet no AppStream 2.0 que consiste em instâncias de streaming que executam sua imagem personalizada.

Para criar a fleet no AppStream 2.0

  1. No painel esquerdo do console AppStream 2.0, escolha Fleets e, a seguir, escolha Create Fleet.
  2. Na Etapa 1: Forneça detalhes da fleet:
    • Para Nome, insira session-recording-fleet.
    • Escolha Próximo.
  3. Na Etapa 2: Escolha uma imagem:
    • Selecione o nome da imagem customizada que você criou com o image builder.
    • Escolha Próximo.
  4. Na Etapa 3: Configurar Fleet:
    • Para o Tipo de Instância, selecione standard.medium.
    • Para o Tipo de Fleet, escolha Always-on.
    • Para a Stream view você pode escolher transmitir os aplicativos ou toda a área de trabalho.
    • Para o IAM role, selecione o role IAM.
    • Mantenha os padrões para todos os outros parâmetros e escolha Avançar.
  5. Na Etapa 4: Configurar a rede:
    • Escolha Acesso Padrão à Internet para fornecer acesso à Internet ao seu image builder.
    • Selecione a VPC, as duas sub-redes e o grupo de segurança.
    • Escolha Próximo.
  6. Na Etapa 5: Revisão, escolha Criar.
  7. Espere até que a fleet esteja no estado Running

Etapa 6: Criar uma stack AppStream 2.0

Crie uma stack AppStream 2.0 e associe-a à fleet que você acabou de criar.

Para criar a stack AppStream 2.0

  1. No painel esquerdo do console AppStream 2.0, escolha Stacks e, a seguir, escolha Criar Stack.
  2. Na Etapa 1: Detalhes da Stack:
    • Para Nome, insira a session-recording-stack.
    • Para Fleet, selecione a fleet que você criou.
  3. Em seguida, siga as instruções na tela e mantenha os padrões para todos os outros parâmetros até que a stack seja criada.

Etapa 7: Criar um usuário no pool de usuários do AppStream 2.0

O pool de usuários do AppStream 2.0 fornece uma maneira simplificada de gerenciar o acesso aos aplicativos para seus usuários. Nesta etapa, você cria um usuário no pool de usuários que usará posteriormente no procedimento para testar a solução.

Para criar o usuário no pool de usuários do AppStream 2.0

  1. No painel esquerdo do console AppStream 2.0, escolha User Pool e, em seguida, escolha Criar Usuário.
  2. Digite seu endereço de e-mail, nome e sobrenome. Escolha Criar Usuário.
  3. Selecione o usuário que você acabou de criar. Escolha Ações e escolha Atribuir stack.
  4. Selecione a stack e escolha Atribuir stack.

Etapa 8: Teste a solução

Agora, entre no AppStream 2.0 com o usuário que você acabou de criar, inicie uma sessão de streaming e verifique se as gravações da sessão foram entregues ao Amazon S3.

Para iniciar uma sessão de streaming e testar a solução

  1. O AppStream 2.0 envia a você um e-mail de notificação. Conecte-se ao portal de login inserindo as informações incluídas no e-mail de notificação e defina uma senha permanente.
  2. Faça login no AppStream 2.0 inserindo seu endereço de e-mail e a senha permanente.
  3. Depois de entrar, você pode visualizar o catálogo de aplicativos. Escolha Firefox para abrir uma janela do Firefox e navegar em qualquer site de sua preferência.
  4. Escolha o ícone do usuário no canto superior direito e escolha Logout para encerrar a sessão.

No console do Amazon S3, navegue até o bucket S3 para navegar pelas gravações da sessão. Para a sessão que você acabou de encerrar, você pode encontrar um arquivo de texto que contém metadados do usuário e da instância, e um ou mais arquivos de vídeo que você pode baixar e reproduzir com um reprodutor de mídia como o VLC.

Etapa 9: Limpe os recursos

Agora você pode excluir as duas stacks do CloudFormation para limpar os recursos que acabaram de ser criados.

Para limpar recursos

  1. Para excluir o image builder:
    • No painel esquerdo do console AppStream 2.0, escolha Imagens e escolha Image Builder.
    • Selecione o construtor de imagens. Escolha Ações e, em seguida, Excluir.
  2. Para excluir a stack:
    • No painel esquerdo do console AppStream 2.0, escolha Stacks.
    • Selecione o construtor de imagens. Escolha Ações e, a seguir, Desassociar Fleet. Escolha Desassociar para confirmar.
    • Escolha Ações e, em seguida, Excluir.
  3. Para excluir a fleet:
    • No painel esquerdo do console AppStream 2.0, escolha Fleets.
    • Selecione a fleet. Escolha Ações e, em seguida, Parar. Escolha Parar para confirmar.
    • Espere até que a fleet esteja no estado Parado.
    • Escolha Ações e, em seguida, Excluir.
  4. Para desativar o usuário no pool de usuários:
    • No painel esquerdo do console AppStream 2.0, escolha User Pool.
    • Selecione o usuário. Escolha Ações e, em seguida, Desativar usuário. Escolha Desativar usuário para confirmar.
  5. Esvazie o bucket S3 que o CloudFormation criou (veja Como faço para esvaziar um bucket S3?). Repita a mesma operação com os buckets que o AppStream 2.0 criou, cujos nomes começam com appstream-settings, appstream-logs e appstream2.
  6. Exclua a stack do CloudFormation no console do AWS CloudFormation (consulte Excluindo uma stack no console do AWS CloudFormation).

Conclusão

Neste  blog, mostramos uma maneira de gravar sessões do AppStream 2.0 em arquivos de vídeo para auditoria de acesso administrativo, solução de problemas ou garantia de qualidade. Embora este blog se concentre no Amazon AppStream 2.0, você pode adaptar e implantar a solução no Amazon Workspaces ou em instâncias do Windows do Amazon Elastic Compute Cloud (Amazon EC2).

Para obter uma explicação detalhada de como os scripts de solução funcionam, você pode consultar o repositório do GitHub que contém os artefatos dessa solução.

Se você tiver comentários sobre este blog, envie seu comentário na seção Comentários abaixo. Se você tiver dúvidas sobre este blog, inicie um novo tópico no fórum do Amazon AppStream 2.0 ou entre em contato com o Suporte da AWS.

 

Quer mais conteúdo de instruções, notícias e anúncios de recursos da AWS Security? Siga-nos no Twit

er.

 

Este artigo foi traduzido do Blog da AWS em Inglês.

 


Sobre o autor

Nicolas Malaval é Arquiteto de Soluções na Amazon Web Services. Ele mora em Paris e ajuda nossos clientes de saúde na França a adotar tecnologia em nuvem e inovar com a AWS. Antes disso, ele foi Consulto na AWS Professional Services por três anos trabalhando com clientes enterprise.

 

 

 

 

 

Sobre os revisores

Bruno Tonetto é Arquiteto de Soluções da AWS. Ele trabalha com clientes de petróleo e gás da AWS no Brasil, proporcionando orientação técnica para infraestrutura e arquitetura serverless, para ajudá-los a fazer o melhor uso dos serviços da AWS.

 

 

 

 

 

 

Juliana Takeuchi é Arquiteta de Soluções da AWS e atua auxiliando e apoiando clientes em sua jornada na nuvem.