Olá pessoal, sejam muito bem-vindos ao nosso curso de Edge Computing. Nosso laboratório vai ser AWS IoT Greengrass, consultando os segredos do Secret Manager localmente. Então, qual que é o objetivo desse laboratório? A gente vai construir aqui um componente onde ele vai conseguir capturar os segredos do Secret Manager localmente do nosso dispositivo Greengrass. Então, a ideia aqui é falar um pouquinho de segurança e como que a gente usa o AWS Secrets Manager dentro do Greengrass. o AWS Secrets Manager dentro do Greengrass. Então, nessa primeira fase aqui do nosso laboratório, a gente vai dar as permissões para que o nosso dispositivo Greengrass tenha acesso ao Secrets Manager. Então, por mais que ele está fazendo um acesso ali, local, então o Greengrass está trazendo essas chaves para dentro do nosso dispositivo, é necessário a gente fazer esse sincronismo entre a cloud e o nosso dispositivo. E com isso a gente necessita dessas permissões. Então o primeiro passo aqui, nós vamos entrar aqui, procurar IAM. Vamos clicar em IAM. Vamos clicar em AM vamos clicar em Roles e agora nós vamos procurar Greengrass V2 Token Extend Role e a gente vai clicar no nome dessa role. Posteriormente, vamos clicar aqui em Add Permissions. E clicar em Attach Policies. Aqui, nós vamos procurar pelo S3 Full. Que basicamente a gente quer usar a policy Amazon S3 Full. Que basicamente a gente quer usar a policy Amazon S3 Full Access. Vamos clicar aqui. E vamos procurar por Secret. Vamos clicar aqui em Secrets Manager. É necessário que a gente dê essas duas permissões para as roles que o Greengrass está usando. Quando a gente faz a instalação do Greengrass, ele por default já sobe essas roles aqui. Dá para a gente mudar os nomes, enfim. Porém, eu estou usando as roles padrões do Greengrass. Eu vou clicar aqui em Add Permissions. aqui em add permissions. E aí, percebam que aqui está a minha role com as permissões que nós acabamos de conceder. Então, agora nessa parte aqui, nós vamos criar o nosso segredo aqui na cloud, aqui na AWS, tá? Onde esse segredo vai ser acessado ali dentro do nosso dispositivo Greengrass. Então vamos lá. Então vamos aqui pesquisar por Secret. Vamos selecionar aqui Secret Manager. E vamos clicar aqui no Store a new secret. Nessa primeira parte aqui, a gente pode perceber que o Secret Manager, ele pode ser utilizado em diversos tipos de segredo, né? Então, como o nosso RDS, Amazon ali, DocumentDB, Redshift, outros bancos de dados, tá? Porém, a gente vai usar aqui, no nosso exemplo, a gente vai usar aqui algo um pouco mais simples, que vai ser OtherTypeOfSecret. E aí, ele deixa você utilizar dois tipos de segredos, né? Então, KeyValue e o plaintext. Para o nosso exemplo aqui, tanto faz utilizar o key value e o plain text, tá? Aqui eu vou tentar simular, na verdade, uma chave valor ali de uma API que a gente vai estar ali dentro do nosso Greengrass, tá? Então, eu vou usar aqui como chave valor. Então, eu vou colocar aqui, aqui vai ser client ID e vai ser my-secret e vamos adicionar mais uma linha aqui que vai ser o client Green Grass Local. Aqui a gente tem a criptografia, né? Então, como eles vão ficar criptografados ali em repouso, né? Eu vou utilizar a chave do próprio AWS, a default, que vem aqui na conta. Vou clicar aqui em Next. Agora aqui, eu vou colocar o nome da minha chave né então como vai ser o nome dessa chave vai ser lab barra local e aí eu vou deixar tudo por default, clicar next. Eu posso criar aqui uma rotação na chave, então eu poderia criar uma política onde essa chave fica sendo rotacionada. Isso é uma boa prática quando a gente olha aqui na questão dos segredos. Então os segredos não podem ser segredos infinitos, eles devem ter uma política de retenção ali e um tempo que ele vai rotacionar. No nosso exemplo aqui, a gente não vai utilizar essa configuração de retenção e vamos clicar aqui em Next. Por fim, ele mostra aqui todo o overview de tudo que a gente configurou na nossa chave. Vamos rolando aqui para baixo. Ele mostra aqui também alguns exemplos de como que a gente consegue recuperar essa nossa chave em várias linguagens aqui de programação. Então, eu vou clicar aqui somente em Store. E aí, ele vai criar a nossa chave. Então, vou clicar aqui em atualizar percebam que nossa chave foi criada vou clicar aqui na nossa chave eu vou mostrar aqui só um ponto é onde a gente vai precisar pegar o ar né então o nosso nome único ali na ws da nossa chave. Então, vou clicar aqui no LabSecretLocal e aqui está o nosso Arnie. Então, esse Arnie aqui, guardem em algum lugar ali, nós iremos utilizar posteriormente esse Arnie. Então, agora pessoal, nós vamos analisar aqui um código que ele faz o seguinte, ele consegue pegar o Secrets Manager e apresentar o segredo ali em um log. Então, vou abrir aqui o código, nós vamos analisar aqui linha a linha para vocês entenderem. Algo muito importante que eu acho que vale frisar aqui referente ao nosso laboratório, nós estamos utilizando aqui um python 3 então o seu dispositivo ingresso ele precisa estar configurado com python 3 ali tá aqui especificamente nós estamos utilizando python 3.12 tá e vamos lá então basicamente aqui, a primeira fase, a gente está importando algumas bibliotecas. Aqui a gente está importando, eu acredito que é a biblioteca core do Greengrass. Então, quando a gente quer conversar entre componentes ali do Greengrass, essa biblioteca aqui é a biblioteca que a gente utiliza. Tudo bem? Aqui a gente está só especificando o que a gente vai utilizar então é pra que não traga toda a biblioteca ali e não fique tudo pesado a gente está usando aqui alguns modelos dessa biblioteca aqui do green grass que a gente está aceitando um time out para que ele não fique preso em caso de alguma falha de conexão. Primeira parte aqui, a gente vai precisar que seja passado para o nosso programa um argumento. E esse argumento nada mais é do que o Arning do nosso segredo. Só puxando o gancho do que eu comentei, o Arning vai ser passado para o nosso programa. Então a gente não vai deixar ele fixo. E aí vocês vão ver como que é interessante essa abordagem, né? De eu conseguir, por exemplo, fazer deployments com segredos diferentes. Então já vai possibilitar a gente fazer aqui. E aí a gente pega, então, esse primeiro parâmetro que é passado ali dentro do nosso, da nossa execução, a gente vai setar aqui na variável. A gente está fazendo aqui um tratamento de erro, tá? E aí, o primeiro ponto aqui, a gente está usando, então, o SDK do Greengrass aqui para abrir uma conexão com o nosso outro component, tá? Aqui, a gente começou a criar o modelo do nosso request, né? Então, o modelo do nosso request aqui, pra gente acessar o secret, ele precisa aqui do nosso secret army, né? Então, o nosso army ali do nosso segredo. Aqui, a gente vai falar qual que é a operação que a gente quer fazer, e aí é que é a operação para a gente pegar um novo segredo ali, dentro do nosso component. A gente está colocando aqui a nossa request, então os nossos parâmetros de request ali dentro da nossa execução, que a gente quer executar aqui. A gente está criando aqui algo entre aspas, que a gente vai criar tipo um prepare, né, então um prepare ali da nossa execução, tudo bem? Aqui a gente está executando efetivamente, né, a nossa request, então a gente está executando a nossa chamada ali para o segredo, e o segredo vai retornar aqui um response, a gente está pegando o JSON que é retornado desse response e fazendo um load aqui para a nossa variável, e posteriormente a gente está fazendo aqui um print no log aqui, para a gente poder ver que a gente conseguiu resgatar esse nosso segredo, tá? Um ponto importante, né, que vale comentar aqui, apesar da gente estar logando esse segredo aqui tente ofuscar a metade daquele segredo. Então, pensando em segurança, vale a pena você não mostrar esse segredo. E caso você tenha necessidade de mostrar esse segredo, para fazer um troubleshoot, um debug, mostre o começo e o final daquele segredo né para que você consiga fazer um troubleshoot para que você consiga comparar dependendo ali se você tiver um segredo naquele momento tá E aí posteriormente aqui eu tô na verdade printando caso de algum problema né em todo esse processo aqui da gente conectar ali no outro componente trazer o segred, basicamente, é isso daqui que a gente está utilizando. Então, vai ser esse código aqui que a gente vai usar para conseguir resgatar o segredo ali do Secrets Manager e trazer localmente. Algo importante aqui comentar, se vocês perceberem, a gente não está utilizando as SDKs padrões ali da AWS. O que eu quero dizer? A gente não está utilizando as SDKs padrões ali da AWS. O que eu quero dizer? A gente não está utilizando a SDK do Secrets Manager. Então, a gente não está indo lá na AWS. O nosso componente que a gente vai fazer uma configuração dentro do nosso Greengrass ali, ele vai estar literalmente num cache, num cache ali de um componente da AWS que ele traz esse componente, esse segredo para dentro do nosso do nosso dispositivo então é legal a gente então viu um pouquinho aqui do código então agora a galera que a gente vai fazer a gente vai pegar esse nosso código aqui e a gente vai colocar agora num bucket S3, tá? Então, vamos voltar lá para o nosso console da AWS, vamos pesquisar aqui por S3. aqui ele vai listar os nossos buckets S3, lembrem que o bucket precisa estar em Virgínia também, e aí por que o bucket tem que estar em Virgínia? Porque o nosso greengrass só é disponível em Virgínia, então ele não é disponível em São Paulo e existem outras regiões que ele é disponível, então você tem que estar com o seu greengrass junto ali, a mesma região do seu bucket. Então, eu vou clicar aqui num bucket que eu já criei aqui, criamos em outros laboratórios. Vou clicar aqui no nosso bucket. E agora nós vamos clicar em Upload. Então, vamos pegar ali o nosso código. Vou clicar em Add Folder. código tá vou ficar em a de folder e aí vou ficar aqui em upload está se perguntando mas eu tenho que fazer o upload da folder inteira não Não, não é necessário, tá? Vocês podem trazer aqui somente o arquivo Python que a gente criou ali, que a gente está utilizando, tá? Então, eu criei aqui uma folder que o nome dela ali é comexample.secret-1.0.0 Então, aqui é um pouquinho do que a gente já comentou em outras aulas, em outros laboratórios. Uma boa prática, tá? Então, o que eu estou utilizando aqui. E o nome aqui do meu arquivo, que é o retrieversecret.py, tá? Então, arquivo Python. Vou clicar aqui em upload. em upload legal posso clicar aqui novamente no nosso bucket e aqui nós temos a nossa folder então clicar na nossa folder versão 1, e aqui está nosso arquivo. Posso clicar no nosso arquivo aqui, tá? E aqui tem o endereço dele. Então, eu vou copiar também este endereço. Nós iremos utilizar aqui posteriormente para criar o nosso componente aqui, Greengrass, tá? Então, agora nós vamos criar o nosso componente, tá? Então, vamos procurar aqui por Greengrass. Vamos clicar aqui em IoT Greengrass. Vamos clicar aqui em Compes create component vamos utilizar aqui uma receita do tipo e amel e aí vamos utilizar a seguinte receita então vamos entender que um pouquinho dessa nossa receita então aqui temos o nosso nome do nosso componente que vai ser com exemplo secret temos aqui a versão do nosso componente aqui a descrição do nosso componente o componente publisher daqui é um campo aberto e eu deix eu deixei aqui como Amazon, tá? E aqui a gente tem algo diferente do que a gente vem fazendo. Então, a gente está colocando que o nosso component, ele tem uma dependência com outro component. E qual é esse component? É o AWS Greengrass Secret Manager, tá? Greengrass Secret Manager. E aqui eu estou falando qual que é a versão daquele meu componente, daquele componente que eu necessito ali, que eu tenho uma dependência. E eu posso falar se essa dependência é forte ou fraca. Então, como eu tenho uma dependência muito forte, eu estou falando, eu preciso que, para me rodar esse componente aqui, eu preciso que isso daqui esteja configurado instalado e aí vamos descer mais um pouquinho temos aqui a configuração de fundo nosso componente então a primeira parte aqui qual que é o secret ar em qualquer um endereço daquele meu segredo, tá? Isso daqui a gente vai configurar isso daqui posteriormente em um outro local. E uma outra parte importante, né, que o nosso componente que a gente depende ali do secret manager, é a parte aqui que ele fala um pouquinho das permissões, tá? Então, quando a gente lembra um pouquinho ali da AWS, né, das permissões tá então quando a gente lembra um pouquinho ali da da WS né das permissões que a gente tem nas policies aqui também no greengrass a gente pode especificar as permissões ali dentro dos nossos componentes tá bom e aqui então é um exemplo tá aqui é a configuração de função não fizer nenhuma configuração ali na hora que eu estou fazendo deploy, são essas configurações que vão ser executadas. E aqui a gente vai nos nossos manifests. Que aí a gente vai falar aqui quais são as plataformas e como cada plataforma executa o nosso component. Então, eu dividi aqui em dois tipos, né? Então, uma Linux e uma outra Windows percebam que a gente colocou aqui um Life cycle então na hora que o nosso componente for instalado ele vai executar algum comando e qual comando que vai ser vai ser esse comando aqui, python-m pip install-user aws-iot-sdk. E o porquê? O nosso programa, o nosso código, ele utiliza a biblioteca ali do Greengrass. E a gente precisa fazer essa instalação. Na parte aqui de Windows, ela é o mesmo comando, porém a gente está usando py-3-m pip install-user aws-iot-sdk, tá? Então, percebam, você pode utilizar aqui comandos diferentes para duas plataformas diferentes aqui, duas plataformas, dois SOs diferentes, tá? E é um exemplo que a gente está fazendo aqui. A gente tem aqui o run, então como que a gente vai executar esse nosso component? Então a gente está usando aqui um Python 3 menos U. A gente está usando uma expressão aqui, onde que esse artefato, ele está ali dentro do Greengrass. Então o Greengrass, na hora que ele for executar, ele sabe mudar aqui esse artefato. Estamos usando aqui o Retriever Underline Secret.py e a gente está pegando aqui uma variável ali da configuração default e trazendo para cá, que basicamente é o nosso SecretArm. E o nosso artefato, onde ele está, né? Então, o artefato onde o nosso component vai pegar esse artefato e colocar ali dentro do nosso device, que basicamente é o nosso arquivo ali no S3, que a gente acabou de subir aqui na cloud no S3, tá? em Windows os mesmos comandos, muda só o comecinho aqui do comando do run, que a gente vai usar o py-3, e o artefato é o mesmo, então é o mesmo código usando nos dois locais. E aí nós vamos clicar aqui então, create component. Legal, o nosso componente está criado aqui e agora pessoal chegou a hora da gente fazer o deploy desse nosso componente aqui dentro do nosso dispositivo greengrass tá então eu vou utilizar aqui deployment poderia utilizar o deploy aqui também do nosso componente mas eu vou para um outro caminho aqui então vou ficar aqui em deployment e eu vou selecionar aqui o nosso deployment aqui deployment for gglab e eu vou clicar aqui no vídeo então vou fazer uma revisão aqui no nosso deployment e aí eu vou clicar aqui next eu vou clicar aqui em next e aí eu vou selecionar aqui o nosso component, ele está aqui na nossa aba de my components aqui no public components então lembram, nosso componente tem uma forte dependência com o componente ali do greengrass do secrets manager, então eu vou instalar um componente público aqui da aws eu vou desmarcar esse show um selecta de componentes eu vou procurar aqui por secret eu vou selecionar aqui legal vou tirar só pra vocês verem aqui o que eu estou selecionando. Vou selecionar aqui o My. Então, eu preciso estar com o meu My Components selecionado, o com example.secret. E no public eu preciso estar com o AWS Greengrass CLI. Esse daqui não desmarquem, não sejam acabar gerando alguns outros problemas e o nosso aws ingresso secret manager vamos clicar em next agora nós vamos fazer a primeira configuração então vamos começar aqui configurando a nossa base então nosso cor ali para que o nosso componente funcione Então vou selecionar o AWS Greengrass Secret Manager, vou clicar em Configure Component, legal, e aqui nós vamos ir aqui nas Configure to Merge, então vamos colocar aqui a seguinte informação no conflito de um mês e aí vocês vão entender aqui um pouquinho tá então é a gente esse componente aqui se você olhar a documentação dele ele necessita dessa dessa desse arreio aqui com essa chave chamada de cloud secret tá e aqui você pode ter centenas de secret configurados tá e aí a gente pegou aqui a gente vai usar o nosso secret então lembram aquele arne que eu comentei do nosso secret ela eu coloquei ele aqui. Então, basicamente, esse componente, o que ele faz no final do dia? Ele consegue criar como se fosse um cache de vários segredos ali e ele consegue gerenciar esses segredos. Então, se ele foi atualizado, enfim. E ele fica trazendo esses segredos para dentro do nosso dispositivo Greengrass, para que a gente tenha um acesso local no nosso dispositivo e ajude a gente a diminuir a latência. Então, a gente não precisa ir em outro local e ir para a internet trazer o nosso segredo. Então, essa é uma das principais configurações do nosso componente ali da AWS. Se vocês não fizerem isso, vocês vão ter algum erro falando que o nosso componente ali que a gente cri configurar o nosso componente que a gente desenvolveu que é o com exemplo secret vamos clicar aqui no configurar component e nós vamos aqui de novo no configuration to merge e vamos colocar uma informação ali E vamos colocar uma informação ali. E a informação, basicamente, é do nosso ARN, né? Então, é do nosso endereço do nosso segredo. Vamos vir aqui. Então, percebam, né? Então, eu estou fazendo um merge com as informações aqui de fundo. Então, ele vai preencher para mim, nesse meu deployment aqui, essa informação. E, novamente, percebam que é o nosso ARN aqui do nosso secret. Vou dar um confirm. Legal. Vou clicar aqui em next. Next. Next. E aí, aqui a gente pode fazer um double check das versões tudo que a gente está fazendo e clicar em deploy e aí então a gente fez o deploy do nosso componente dentro do nosso dispositivo greengrass, tá? Então, pessoal, legal. Então, a gente fez aqui o deploy do nosso componente. Vamos clicar aqui em Core Devices. Vamos clicar aqui no nosso GGLab. E aí, nessa primeira tela aqui, a gente consegue dar uma olhada em quais componentes estão depoados ali dentro do nosso Greengrass. Então, acho que o componente principal aqui é o nosso AWS Greengrass Secrets Manager. E aí vocês percebam que ele está em running, então ele está executando ali. Então, ele fica executando, é um long running. E nós temos aqui o nosso outro componente aqui, que é o que a gente criou aqui, o nosso código, né, o que a gente construiu aqui para constar um Secrets Manager, tá? Legal, e aí agora a gente vai lá para o nosso device só para a gente ver como que ele apresentou no log o nosso segredo. Então, vamos para o nosso device. E aí, eu posso dar um comando aqui, que pode ser o tail-f barra greengrass barra v2 barra logs barra com example.secret.log. Aqui ele vai mostrar que em tempo real o log, então como ele não é um long run, a gente não fez uma aplicação em long run, ele vai mostrar aqui praticamente o final do log, e a gente consegue ver o nosso segredo. Então, vamos procurar aqui. Logo aqui no final finalzinho percebam o nosso log então ele veio com o nosso segredo que basicamente é o cliente underline id my secret e o cliente underline secret greengrass local tá então isso daqui é o segredo que está lá no nosso Secrets Manager. Vamos lá conferir se é esse mesmo segredo, tá? Então, vamos voltar aqui, vamos procurar Secret. Vamos clicar aqui no nosso segredo. E a gente vai clicar em Retriever Secret Value. E aí percebam que é a mesma informação que a gente pegou ali dentro do nosso Greengrass. Tá bom? Então galera, vamos aqui para a nossa review. Vamos ver aí tudo o que a gente fez aqui no nosso laboratório. Então a primeira coisa que a gente fez aqui no nosso laboratório é a atualização das permissões aqui do nosso dispositivo Greengrass. Então para que a gente possa resgatar o segredo ali, a gente precisa colocar algumas permissões. informações tá e também criamos aqui o nosso segredo né no secretos menos então vocês viram ali um pouquinho de como que a gente pode criar segredos ali dentro da WS e criamos aqui um código né então um código que a gente um pai então que a gente utilizou aqui para resgatar o segredo ali num component. Nós subimos esse código, esse nosso component ali, o nosso código, num S3 ali, utilizando a console da AWS. E por fim, realizamos o deploy aqui do nosso component no nosso dispositivo. utilizamos o deploy aqui do nosso componente no nosso dispositivo e a gente conseguiu ver ali o que o segredo que tá na AWS sendo apresentado ali no nosso log tá então nosso laboratório é esse valeu galera obrigado até mais