<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Pedro's blog]]></title><description><![CDATA[Senior Platform Engineer, Microsoft MVP, Docker Captain e um amante do Open Source!]]></description><link>https://pedroignacio.dev</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Apr 2026 10:54:59 GMT</lastBuildDate><atom:link href="https://pedroignacio.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Contêineres para todos - Docker Offload!]]></title><description><![CDATA[Há poucos minutos na WeAreDevelopers Conference, o time Docker anunciou a criação do Docker Offload, uma solução que vai virar do avesso a forma com que trabalhamos com o desenvolvimento de contêineres.

Qual o problema?
Grande parte do desenvolvimen...]]></description><link>https://pedroignacio.dev/conteineres-para-todos-docker-offload</link><guid isPermaLink="true">https://pedroignacio.dev/conteineres-para-todos-docker-offload</guid><category><![CDATA[Docker]]></category><category><![CDATA[AI]]></category><category><![CDATA[Devops]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[Cloud]]></category><dc:creator><![CDATA[Pedro Ignácio]]></dc:creator><pubDate>Thu, 10 Jul 2025 10:21:57 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1752109226299/92de3b74-bfc3-48f3-a431-858b2794862c.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Há poucos minutos na <strong>WeAreDevelopers Conference</strong>, o time Docker anunciou a criação do <strong>Docker Offload</strong>, uma solução que vai virar do avesso a forma com que trabalhamos com o desenvolvimento de contêineres.</p>
<hr />
<h1 id="heading-qual-o-problema">Qual o problema?</h1>
<p>Grande parte do desenvolvimento de software acontece de forma local, nas máquinas dos desenvolvedores. Seja Windows, Mac ou Linux, uma coisa não muda, conforme você cresce o seu sistema, o consumo da capacidade computacional também aumenta.</p>
<p>Essa “limitação” e necessidade de capacidade computacional limita o que os desenvolvedores podem fazer, limitando inclusive engenheiros que estão em início de carreira e não tem a possibilidade de ter uma máquina robusta para colocar em prática seus aprendizados.</p>
<p>A popularização dos LLMs e dos <em>agents</em> também trouxe luz a essa particular situação. Os engenheiros se encontram limitados na utilização dessas tecnologias pela necessidade de se ter um dispositivo de placa de vídeo em suas máquinas, dispositivo esse obrigatório para execução desses modelos. A única alternativa para isso é a utilização das plataformas em nuvem (<strong>Azure</strong>, <strong>AWS</strong>, <strong>GCP</strong>, etc.), que ofertam servidores com placas de vídeo de forma <em>on-demand</em> e de diversos tamanhos. Nesse caso, o problema é só o preço, que pode sair bem salgado ao final do mês.</p>
<p>Tendo em mente todos esses problemas, <strong>Offload ao resgate</strong>!</p>
<hr />
<h1 id="heading-offload">Offload</h1>
<p>falar sobre a proposta, como agora até alguém com computadores antigos e sem capacidade pode usufruir do poder do docker e o aumento da possibilidade de criação de soluções AI e ML based sem a existencia de uma GPU no computador</p>
<p>O <strong>Docker Offload</strong> foi criado com a proposta de oferecer aos engenheiros, desenvolvedores e usuários de Docker uma forma de executar seus contêineres sem fazer uso da sua capacidade computacional local.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1752111659135/e1754cdf-8015-4903-b216-6ae82fb6cd08.png" alt="Console do Docker Desktop mostrando o painel do Offload" class="image--center mx-auto" /></p>
<p>Tudo que você precisa fazer é trocar de workspace (do seu local para o Offload), isso pode ser feito no <em>toggle</em> presente ao lado do logo do Docker Desktop. Uma vez no workspace do Offload, você pode criar seus contêineres exatamente da mesma maneira que faria no ambiente local, executando o seguinte comando:</p>
<pre><code class="lang-bash">docker run &lt;IMAGE&gt;
</code></pre>
<p>Seu contêiner será criado e você poderá utilizá-lo como já está acostumado!</p>
<h2 id="heading-como-funciona">Como funciona?</h2>
<p>Tudo ocorre com uma conexão SSH por trás dos panos, estabelecida pelo Docker Desktop com um <strong>Docker Daemon</strong> que está sendo executado na nuvem. Todas as atividades que você executar referentes aos contêineres e ao ambiente Docker será feita na instância do Offload executada em cloud, isso até que você altere para seu workspace local novamente.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1752114528694/109b00f1-c5ad-47ac-98f7-4e8b370bc3d5.png" alt class="image--center mx-auto" /></p>
<p>Facilitando a manutenção do ambiente, a cada 30 minutos de inatividade, o ambiente do Offload é limpo e fechado, garantindo economia de recursos e de custos (a partir do momento em que o <em>free tier</em> tenha sido esgotado).</p>
<p>Essa abordagem permite manter o seu ambiente bem organizado e otimizado, alocando os recursos apenas quando necessário e evitando desperdício.</p>
<h2 id="heading-usando">Usando</h2>
<p>A utilização da plataforma é bem trivial e como vimos anteriormente, funciona da mesma forma que o Docker local.</p>
<p>Uma vez habilitado seu workspace, você poderá executar seus contêineres de forma livre e sem complicações. Caso esteja utilizando apenas a linha de comando, você pode habilitar o Offload através do seguinte comando:</p>
<pre><code class="lang-bash">docker offload start
</code></pre>
<p>Seu workspace será movimentado para o ambiente do Offload, não havendo a necessidade de se realizar mais nenhuma ação.</p>
<p>Caso queira encerrar sua seção, um simples:</p>
<pre><code class="lang-bash">docker offload stop
</code></pre>
<p>Cumprirá a ação.</p>
<p>Simples, né?</p>
<hr />
<h1 id="heading-ai-amp-ml-everywhere">AI &amp; ML Everywhere!</h1>
<p>Não podíamos deixar de falar de Inteligência Artificial, o tema do momento (e dos últimos 3 anos)!</p>
<p>A popularização da AI, dos modelos de ML, MCP e dos agentes também chegou no ecossistema Docker. O <strong>Docker MCP</strong> foi anunciado há algumas semanas e com a estratégia de expandir ainda mais o uso dessas capacidades para os engenheiros, o Docker Offload permite que os engenheiros usufruam dos poderes das GPUs <strong>NVIDIA L4</strong> de forma gratuita e simples.</p>
<p>Para fazer uso dessas capacidades gráficas da infraestrutura, ao iniciar o workspace do Docker Offload, você será questionado se necessita de suporte para GPU. Ao marcar que sim, seu ambiente estará apto para receber seus workloads de ML e AI!</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1752115212253/eeb1ba8b-21f1-4db9-9cf0-e72303a13854.png" alt class="image--center mx-auto" /></p>
<hr />
<h1 id="heading-oportunidade">Oportunidade</h1>
<p>Para que você comece a utilizar o Docker Offload sem a preocupação de ter custos atribuídos em seu cartão de crédito, a plataforma oferece 300 minutos GRATUITOS para você executar seus contêineres e modelos de <em>machine learning</em>.</p>
<p>Não existe desculpa para não aproveitar essa plataforma e tudo que ela nos fornece. Entre de vez no mundo da inteligência artificial, <em>machine learning</em> e <em>agentic AI</em>!</p>
<hr />
<p>O Offload é muito mais do que um novo produto, é uma nova forma de fazermos tecnologia.</p>
<p>Use e abuse dessas capacidades!</p>
<p>Obrigado, time Docker 💙</p>
]]></content:encoded></item><item><title><![CDATA[Code Quality - indo além dos contêineres]]></title><description><![CDATA[Tudo que vem antes da contêinerização de uma aplicação está nas mãos do desenvolvedor e do engenheiro DevOps, que tem a tarefa de construir e manter as integrações necessárias em todo o ciclo de desenvolvimento de software.
Pensando do ponto de vista...]]></description><link>https://pedroignacio.dev/code-quality-indo-alem-dos-conteineres</link><guid isPermaLink="true">https://pedroignacio.dev/code-quality-indo-alem-dos-conteineres</guid><category><![CDATA[Security]]></category><category><![CDATA[Devops]]></category><category><![CDATA[Docker]]></category><category><![CDATA[GitHub]]></category><category><![CDATA[JavaScript]]></category><dc:creator><![CDATA[Pedro Ignácio]]></dc:creator><pubDate>Mon, 30 Jun 2025 04:00:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1750901789069/2a1c8247-6038-4f83-8a93-5641773621d4.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Tudo que vem antes da contêinerização de uma aplicação está nas mãos do desenvolvedor e do engenheiro DevOps, que tem a tarefa de construir e manter as integrações necessárias em todo o ciclo de desenvolvimento de software.</p>
<p>Pensando do ponto de vista do desenvolvedor, a responsabilidade deste profissional gira em torno de:</p>
<ul>
<li><p>Atender as demandas de negócio, criando serviços e funcionalidades que permitam a “tradução” da regra de negócio.</p>
</li>
<li><p>(periodicamente) auxiliar no design da solução, fornecendo insights e trabalhando com <em>staff engineers</em>, arquitetos de solução e outros engenheiros na construção da arquitetura.</p>
</li>
<li><p>Construir código “bem escrito”, seguindo as boas práticas de engenharia, guardrails de qualidade e segurança da empresa em que trabalha.</p>
</li>
<li><p>Realizar manutenção nas bases de código existentes no ambiente, sejam elas de sua autoria ou da autoria de outros engenheiros.</p>
</li>
</ul>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">É importante deixar claro que não devemos atribuir uma base de código a apenas um desenvolvedor, mas sim a uma equipe, que ficará responsável por seus insumos ao longo do tempo. Atribuir essa responsabilidade a um time, reforça a necessidade da passagem de conhecimento bem como reduz a possibilidade da erros e da implementação de “vícios” nos códigos escritos. À longa distância, essa distribuição da responsabilidade também facilitará as interações entre os times em atividades de <em>debugging</em>, que costumam exigir dos responsáveis um nível de conhecimento razoável da plataforma que está sendo operada.</div>
</div>

<p>Nós, profissionais de segurança, sabemos que até o melhor dos engenheiros está sucetível ao erro. Nós também estamos. Por isso existem os controles, para “pegar” o que os olhos humanos não pegaram.</p>
<p>Dito isso, os controles implementados nas <em>pipelines</em> de <strong>DevSecOps</strong> são para evitar que erros não vistos e escondidos dentro da aplicação, passem despercebidos. Não é por desconfiança no trabalho dos desenvolvedores e dos times de engenharia de software que esses controles existem, eles servem como aliados dos desenvolvedores, que uma vez que recebem o rápido “<em>feedback</em>” das ferramentas de qualidade, podem ajustar seus entregáveis.</p>
<hr />
<h1 id="heading-controles">Controles</h1>
<p>Sabemos que esses controles existem, mas afinal de contas, o que são eles? Para que servem? O que analisam?</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Lembrando que esses controles estão integrados nas <em>pipelines CICD</em>, dado que suas paramtetrizações devem ter efeitos em toda a organização. O engenheiro terá acesso ao resultado das análises do código, porém em grande parte das vezes não poderá alterar a parametrização desta ferramenta.</div>
</div>

<h2 id="heading-sca-software-composition-analysis">SCA - Software Composition Analysis</h2>
<p>Como todo código hoje em dia faz uso de bibliotecas externas e de SDKs para integrações com os mais diversos <em>service providers</em> do mundo, é crucial que essas relações de dependência com fornecedores externos seja mapeada e esteja visível.</p>
<p>As ferramentas de <strong>Software Composition Analysis</strong> auxiliam nesta atividade, fazendo um <em>scanning</em> nas bibliotecas e avaliando a conformidade com o licenciamento das mesmas.</p>
<p><strong><em>Ferramentas de mercado: Snyk e WhiteSource</em></strong></p>
<h2 id="heading-xast-x-application-security-testing">XAST - X Application Security Testing</h2>
<p>Agora vamos comentar de uma série de ferramentas que fazem análise do código escrito de maneiras diferentes. Os acrônimos mencionados abaixo são frequentemente mencionados nas conversas entre os times de DevOps, pois representam um pilar muito importante na cultura de segurança de uma empresa, o de <strong>Segurança de Código</strong>.</p>
<p>Essas ferramentas são utilizadas em momentos diferentes do ciclo de desenvolvimento de software, oferecendo <em>insights</em> diferentes em cada um desses momentos, <em>insights</em> esses que fazem com que o desenvolvedor compreenda melhor o comportamento da aplicação dele mediante determinados cenários.</p>
<p>Essas análises diferenciadas habilitam a redução da superfície de ataque das aplicações, dado que os cenários avaliados são mais extensos e permitem a captura mais precisa de falhas de segurança.</p>
<h3 id="heading-sast-static-application-security-testing">SAST - Static Application Security Testing</h3>
<p>Aqui temos a primeira validação do código escrito pelo engenheiro. A análise será feita de forma estática, com o código sem compilação, do jeito que está no repositório.</p>
<p>Essa primeira análise busca por erros “comuns” presentes no código fonte, erros como <strong><em>SQL Injection</em></strong> e <strong><em>Cross-Site Scripting</em></strong> são capturados antes que possam expor a aplicação à falhas graves de segurança.</p>
<p><strong><em>Ferramentas de mercado: SonarQube e Fortify</em></strong></p>
<h3 id="heading-dast-dynamic-application-security-testing">DAST - Dynamic Application Security Testing</h3>
<p>Após a análise do SAST, temos o DAST, que faz seu <em>scanning</em> após a compilação da aplicação.</p>
<p>As falhas aqui identificadas são mais sofisticadas e de difícil captura. Aqui, todo o contexto é levado em conta, não apenas o código escrito pelo usuário.</p>
<p>Os problemas aqui identificados costumam ser mais complexos e caros de se corrigir, visto que há a necessidade de se fazer toda uma análise nos componentes da aplicação para alterar seu funcionamento, mitigando a vulnerabilidade. Esse trabalho costuma ser feito em conjunto com os times de arquitetura, que precisam compreender as ligações entre os componentes para evitar que essa vulnerabilidade se espalhe para outras aplicações.</p>
<p><strong><em>Ferramentas de mercado: Burp Suite</em></strong></p>
<h3 id="heading-iast-interactive-application-security-testing">IAST - Interactive Application Security Testing</h3>
<p>Tudo que falamos das ferramentas anteriores é integrado em uma só, com o <strong>IAST</strong>!</p>
<p>Essas soluções visam capturar com mais precisão e efetividade os problemas de segurança identificados nos passos anteriores. Essa precisão nos ajuda a validar as identificações, que muitas vezes podem ser o que chamamos de “<strong>falsos positivos</strong>".</p>
<p>Com casos de uso definidos, a ferramenta configurada fará a análise de uso da aplicação, validando se as vulnerabilidades são verdadeiramente exploráveis.</p>
<p>O uso computacional de uma ferramenta de IAST é muito mais alto do que o das ferramentas anteriores, muito por sua complexidade, robustez e cobertura, portanto é crucial que sua solução de IAST esteja bem parametrizada e com seus <em>workflows</em> bem definidos.</p>
<p><strong><em>Ferramentas de mercado: Seeker</em></strong></p>
<h2 id="heading-secret-scanning">Secret Scanning</h2>
<p>Agora já não estamos mais falando de como o código está escrito, mas sim o que está contido nele.</p>
<p>Na era da segurança, toda chamada deve ser <strong>autenticada</strong> e <strong>autorizada</strong>, garantindo que apenas o “dono” de um recurso tenha acesso a ele.</p>
<p>Essas camadas de segurança apresentam certa complexidade na escrita do código, visto que muitas vezes o engenheiro precisa trabalhar com múltiplas credenciais com o propósito de validar as chamadas ao ambiente.</p>
<p>Para evitar que credenciais sejam enviadas aos repositórios de código, as <em>pipelines</em> devem implementar controles para identificar possíveis credenciais “mockadas”, que possam ser vazadas ao público uma vez que o repositório não esteja bem protegido.</p>
<p>Essa análise pode ocorrer em diversas etapas do processo, tanto nas automações, quanto diretamente no repositório de código, através do uso das capacidades avançadas da sua plataforma. Utilizar um ecossistema como o presente no GitHub, permite que o administrador da ferramenta tenha uma visão completa dos repositórios que contém algum tipo de credencial salva. Essa visão permite a criação de <em>workflows</em> de notificação aos <em>owners</em> dessas aplicações como também o estabelecimento de <em>guardrails</em>, que podem evitar que códigos com credenciais embutidas sejam enviados aos repositórios das mesmas.</p>
<p><strong><em>Ferramentas de mercado: GitHub Advanced Security e GitGuardian</em></strong></p>
<hr />
<h1 id="heading-indo-alem-das-ferramentas">Indo além das ferramentas</h1>
<p>Ferramentas são ótimas e nos permitem passar ao ambiente uma visão esperada pelos times de segurança da empresa, porém nem sempre temos facilidade para modificá-las.</p>
<p>Como qualquer plataforma, ao ser selecionada, o time responsável por ela se encontra em uma gangorra, que equilibra a <strong>capacidade de personalização</strong> daquela ferramenta e o <strong>custo de operacionalização</strong> da mesma.</p>
<p><strong>Quanto mais personalização, mais complicada de se manter, porém com mais possibilidades.</strong></p>
<p><strong>Menos personalização significa menos possibilidades, contudo, mais facilidade na manutenção.</strong></p>
<p>No final das contas as ferramentas não são nada além de <em>softwares</em>. <em>Softwares</em> esses que podem conter vulnerabilidades e falhas, como as aplicações que nós escrevemos.</p>
<p>Para aumentarmos ainda mais a superfície coberta do nosso ambiente, é crucial que os times de engenharia de plataforma e segurança façam um trabalho de “evangelização” dos desenvolvedores da sua empresa. É necessário que eles não só entendam a necessidade e os controles implementados, mas também que saibam receber o <em>feedback</em> dessas plataformas.</p>
<p>Além disso não podemos virar nossas costas aos <strong>treinamentos</strong>. Melhor que um cenário onde você encontre desenvolvedores despreparados e ferramentas bem configuradas, é quando achamos ferramentas bem configuradas e desenvolvedores BEM CAPACITADOS. Desenvolvedores esses que melhoram seu código escrito a cada semana que passa, utilizando da análise das ferramentas e dos treinamentos fornecidos como seus aliados na construção de uma melhor plataforma.</p>
<p>Cursos externos, <em>playlists</em> no <em>YouTube</em>, treinamentos internos ministrados por especialistas no assunto, plataformas de codificação, artigos na internet, tudo que possa servir como fonte de conhecimento para o desenvolvedor deve ser considerado. Essas capacidades devem ser passadas aos novos engenheiros (ingressantes na empresa e estagiários efetivados) e aos experientes, oferecendo a eles a possibilidade de fornecimento de <em>feedback</em> para melhoria dos materiais. Os insumos também devem ser atualizados de maneira frequente, para que sempre correspondam aos controles recomendados pela empresa.</p>
<p>Não é só uma ferramenta de <em>SCA</em> ou <em>SAST</em> que fará com que o seu ambiente esteja seguro e protegido de vulnerabilidades. O verdadeiro <strong><em>shift-left</em></strong> começa com o seu desenvolvedor sabendo o que está fazendo!</p>
<hr />
<blockquote>
<p>Mesmo no momento em que nos encontramos hoje, com o crescimento cada vez maior de ferramentas de inteligência artificial e popularização do vibe coding, quem coloca o código em produção é o desenvolvedor, não o “robô". Não há melhor controle do que um engenheiro que sabe o que faz. Te poupará dores de cabeça no curto, médio e longo prazo.</p>
<p>Invista nos seus engenheiros!</p>
</blockquote>
<p>Nos vemos em breve com mais conteúdo sobre <strong><em>security</em></strong>!</p>
<p>Até logo! :)</p>
]]></content:encoded></item><item><title><![CDATA[Image Scanning - protegendo suas imagens e sua organização]]></title><description><![CDATA[No primeiro cápitulo da nossa série sobre segurança de contêineres, vamos falar sobre Image Scanning, um assunto de extrema necessidade, muito considerado por empresas que levam segurança a sério mas que se apresenta com fragilidades frequentes!

O q...]]></description><link>https://pedroignacio.dev/image-scanning-protegendo-suas-imagens-e-sua-organizacao</link><guid isPermaLink="true">https://pedroignacio.dev/image-scanning-protegendo-suas-imagens-e-sua-organizacao</guid><category><![CDATA[Security]]></category><category><![CDATA[containers]]></category><category><![CDATA[Docker]]></category><category><![CDATA[Devops]]></category><category><![CDATA[Cloud]]></category><dc:creator><![CDATA[Pedro Ignácio]]></dc:creator><pubDate>Wed, 18 Jun 2025 03:00:27 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1750215586731/e9d8a079-cf79-44b7-8a96-ad5533d24e34.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>No primeiro cápitulo da nossa série sobre segurança de contêineres, vamos falar sobre <strong><em>Image Scanning</em></strong>, um assunto de extrema necessidade, muito considerado por empresas que levam segurança a sério mas que se apresenta com fragilidades frequentes!</p>
<hr />
<h1 id="heading-o-que-e">O que é?</h1>
<p>Sabemos que ao construirmos uma aplicação contêinerizada, temos que começar com algo. Nossa aplicação e suas dependências devem ser instaladas e configuradas em alguma coisa. Esse alguma coisa é uma <strong>Imagem Base</strong>.</p>
<p>Como o próprio nome já diz, nosso contêiner será inicializado com essa imagem, que por sua vez receberá todas as instruções declaradas posteriormente no arquivo de configuração (como um <em>Dockerfile</em>, por exemplo).</p>
<p>Abaixo temos um exemplo do início da configuração de um Dockerfile que mostra exatamente onde declaramos a <strong>imagem base</strong> da nossa aplicação.</p>
<pre><code class="lang-dockerfile"><span class="hljs-keyword">FROM</span> alpine:latest AS base
</code></pre>
<p>Após inicializarmos o contêiner com essa imagem base, vamos passar para todos os outros passos.</p>
<ul>
<li><p>Copiar os arquivos da aplicação.</p>
</li>
<li><p>Instalar dependências.</p>
</li>
<li><p>Passar argumentos e variáveis de ambiente.</p>
</li>
</ul>
<p>Todo esse processo tornará a imagem final do contêiner muito mais complexa, visto que a mesma terá uma série de outros componentes dentro de si.</p>
<p>Conforme vamos adicionando essas “camadas”, não é apenas a complexidade da nossa aplicação que vai crescendo, mas também sua superfície de exposição, visto que a versão do <em>framework</em> que você está utilizando também tem vulnerabilidades já conhecidas, somadas as <em>libs</em> e outros componentes instalados para que sua aplicação funcione, no final da construção do arquivo teremos uma lista imensa de vulnerabilidades e de preocupações, que precisarão ser direcionadas.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Se pensarmos que nosso código também pode ter (e provavelmente tem) vulnerabilidades (como falhas de segurança e credenciais mockadas), adicionamos mais uma camada de complexidade em nosso <em>workflow</em>, camada essa que pode ser verificada por uma ferramenta com capacidade de <strong>Image Scanning</strong>.</div>
</div>

<p>Para garantir as aplicações executadas em seu ambiente estejam bem mapeadas e que não apresentem nenhum grande risco ao contexto maior da sua plataforma, integramos em nossos <em>workflows</em> uma ferramenta de <strong>Image Scanning</strong>, como o <strong>Docker Scout</strong> e <strong>Aqua Trivy</strong>.</p>
<hr />
<h1 id="heading-por-que-utilizar">Por quê utilizar?</h1>
<p>Se pensarmos em todo o ciclo de desenvolvimento de software e como hoje em dia as empresas trabalham em um modelo distribuído, as capacidades de segurança também tiveram que se modernizar e passaram a ser construídas de forma decentralizada. Os times de segurança e plataforma ainda as controlam e parametrizam porém o primeiro contato do desenvolvedor/engenheiro com um recurso PRECISA ser um contato seguro, caso contrário temos mais uma demonstração de abertura de brecha no ambiente.</p>
<p><img src="https://speedmedia.jfrog.com/08612fe1-9391-4cf3-ac1a-6dd49c36b276/media.jfrog.com/wp-content/uploads/2024/05/09165841/flow-chart_2.png" alt="Your Guide to Software Supply Chain Security | JFrog" class="image--center mx-auto" /></p>
<p>Acima temos um desenho simples sobre como funciona uma <em>pipeline CI/CD</em>. No terceiro passo, que é de fato onde o <em>build</em> da aplicação se inicia, a <em>pipeline</em> buscará no arquivo de configuração os recursos apontados.</p>
<p>Dentro de uma organização, é importante deixar claro que JAMAIS deve-se buscar imagens diretamente da internet. Os requisitos de segurança são variados de acordo com a criticidade dos serviços que sua empresa presta e acima de tudo devem ser modificados pelos times de segurança, <em>compliance</em>, auditoria e jurídico. Dito isso, as imagens utilizadas de forma corporativa devem passar por um extenso processo de análise, que visa garantir a qualidade do artefato inicialmente utilizado.</p>
<p>E essa é um dos momentos que entra o nosso <em>image scanning</em>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1750213259508/9b9e24d7-db4d-44b0-99d7-b32c61a15b39.png" alt class="image--center mx-auto" /></p>
<p>Acima, um <em>print</em> retirado diretamente da console do Docker Desktop rodando o <strong>Docker Scout</strong>. Podemos visualizar na esquerda as duas camadas que essa imagem contém e à direita todas as dependências dela, bem como suas vulnerabilidades.</p>
<p>Essa visão nos permite entender o estado em que aquele recurso se apresenta e à partir do apetite a risco da sua organização, qual será a origem dele.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Estamos falando sobre apetite a risco pois as categorias de vulnerabilidade encontradas necessitam que a empresa assuma certos riscos. Vulnerabilidades críticas apresentam alto risco de exploração e de prejuízo à empresa, portanto, será descartada na grande maioria dos casos.</div>
</div>

<p>Mesmo podendo ser utilizado dessa maneira, o <em>image scanning</em> não costuma estar “na mão” dos engenheiros de software, mas sim nos times de <em>Plataform Engineering</em> e Segurança, isso sem falar das integrações através das <em>pipelines</em>, que falaremos sobre agora!</p>
<hr />
<h1 id="heading-cicd-integration">CI/CD Integration</h1>
<p>O primeiro <em>scanning</em> que falamos é extremamente necessário para criarmos a base da nossa <em>pipeline</em>, que é: fornecer imagens base seguras e com vulnerabilidades controladas/aceitas pela empresa em questão.</p>
<p>Ao longo do processo de <em>build</em>, as dependências serão instaladas no contêiner e no final da execução, um “pacotinho” será gerado, que contém a aplicação autossuficiente (com tudo que ela precisa para ser executada). Esse pacotinho deve mais uma vez ser analizado pelo nosso <em>image scanner</em> para avaliar algum problema de configuração que possa ter passado em branco.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Em adição ao <em>image scanning</em>, nós também costumamos fazer a proteção dos pacotes e libs que são disponibilizados de forma corporativa aos engenheiros. Suas versões, fornecedores e <em>releases</em> são controlados pelo time de segurança, que mais uma vez deve estar ciente dos possíveis riscos e administrá-los de acordo com o apetite a risco da organização.</div>
</div>

<p>No final do ciclo, sua imagem conterá tudo que precisa para ser executada e esse é o motivo da segunda validação.</p>
<p>Nós passamos de uma image base, que já continha algumas dependências e possivelmente vulnerabilidades, para uma imagem “carregada” e com vários outros componentes adicionados. A única forma de garantirmos a boa proteção das nossas imagens é realizar essa validação em camadas, garantindo sempre que pelo menos uma validação tenha sido feita nas novas adições daquele componente.</p>
<p>Dentro de uma <em>pipeline</em>, a análise da imagem estará próxima do final do ciclo de execução da mesma, fornecendo em grande parte das vezes um <strong>score</strong> que nos permite determinar se aquele insumo está seguro ou não para ser utilizado.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Lembre-se que o apetite a risco é CRU CI AL quando falamos de segurança. Não existe recurso perfeito e 100% seguro, portanto se faz obrigatório um alinhamento com a liderança da empresa para compreender como a mesma está se portando.</div>
</div>

<hr />
<p>Container security é crucial para que sua estratégia de <em>cloud security</em> seja efetiva. Visto que hoje tudo é contêinerizado, é de extrema importância que você proteja bem sua plataforma.</p>
<p>Espero que tenha gostado do texto. Nos vemos no próximo!! :)</p>
]]></content:encoded></item><item><title><![CDATA[Open Source - o quão estratégico pode ser?]]></title><description><![CDATA[História
Há mais de 40 anos o ecossistema open source vem impulsionando a evolução técnológica das empresas e das comunidades, trazendo novos padrões de mercado e mudanças que mudaram completamente a forma com que fazemos tecnologia. Contudo, muitas ...]]></description><link>https://pedroignacio.dev/open-source-o-quao-estrategico-pode-ser</link><guid isPermaLink="true">https://pedroignacio.dev/open-source-o-quao-estrategico-pode-ser</guid><category><![CDATA[Cloud]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[Docker]]></category><category><![CDATA[Linux]]></category><dc:creator><![CDATA[Pedro Ignácio]]></dc:creator><pubDate>Thu, 08 May 2025 02:56:33 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1746669865325/3e668436-df9c-4439-97ee-b447663e4488.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-historia">História</h1>
<p>Há mais de 40 anos o ecossistema <em>open source</em> vem impulsionando a evolução técnológica das empresas e das comunidades, trazendo novos padrões de mercado e mudanças que mudaram completamente a forma com que fazemos tecnologia. Contudo, muitas empresas ainda interpretam o tema como um risco. Será que é mesmo?</p>
<p>Nós já estamos beeeeeeem distantes da época em que <em>open source</em> não era seguro. Hoje não só as maiores empresas do mundo baseiam suas arquiteturas em soluções <strong><em>open source</em></strong> e <strong><em>cloud native</em></strong> como também temos diversas iniciativas que garantem a boa qualidade e os padrões de segurança dos projetos da comunidade, como a <a target="_blank" href="https://openssf.org/"><strong><em>OpenSSF</em></strong></a>.</p>
<p>Ao pararmos para analisar, tudo que é <em>cloud</em> hoje veio do Linux. Servidores, <em>storage, contêineres</em>, <strong><em>Kubernetes</em></strong>!!!! Se este pensamento relacionado a falta de segurança em projetos <em>OSS</em> fosse verídico, estaríamos muito atrasados em tudo que fazemos hoje, então vamos esquecer esse estigma.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text"><strong>Open Source</strong> é seguro sim! Toda solução tem suas características e vulnerabilidades, reduzir uma categoria de projetos pura e exclusivamente baseado em uma opinião sem fundamento apenas prejudica a comunidade.</div>
</div>

<p>Ótimo, mas e a escalabilidade? O quão escalável é a aplicação de soluções <em>OSS</em> dentro das grandes organizações?</p>
<hr />
<h1 id="heading-integracao">Integração</h1>
<p>A utilização dessas soluções pode ser feita de forma <strong>descentralizada</strong> ou <strong>centralizada</strong>, alocando uma equipe para a governança desses projetos.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Neste ponto estamos retirando de perspectiva a integração com equipes e fluxos de segurança e times legais da organização. Estamos pensando apenas em tecnologia.</div>
</div>

<p>Pensando no ciclo de vida da solução dentro da sua empresa, é interessante que seja feito um trabalho de popularização do uso daquela ferramenta.</p>
<p>Com a construção de templates, documentações e com uma boa estratégia de comunicação, outros times internos poderão usufruir da ferramenta e herdar os benefícios notados no momento de sua adoção.</p>
<p>No longo prazo, essa cultura engaja mais engenheiros no tema <em>open source</em> e potencializa a capacidade de contribuição da empresa e do projeto, dado que a experiência de implantação somado ao domínio técnico, permitirão que os engenheiros proponham novas <strong><em>features</em></strong>, reportem <strong><em>issues</em></strong> e auxiliem no desenvolvimento e solução das mesmas.</p>
<p>Do ponto de vista de governança, a existência de uma equipe centralizada ou de um <em>CoE</em> (<em>Center of Excellence</em>) permite a rápida atuação em cenários onde a mesma se faz necessária. <strong>Resposta a incidentes produtivos</strong>, <strong>identificação de vulnerabilidades</strong> e <strong>oportunidades de melhora</strong> são pontos frequentemente notados pelos times de engenharia e que serão direcionados de forma muito mais efetiva com a existência de uma liderança direcionada para <em>open source</em>.</p>
<blockquote>
<p>Agora que a minha empresa passou a adotar soluções open source em seu landscape de tecnologia. Há algo mais para se fazer?</p>
</blockquote>
<p>SIM! Devolver para a comunidade.</p>
<hr />
<h1 id="heading-corporate-x-community">Corporate x Community</h1>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">É importante termos em mente que estamos falando de empresas <em>end users</em> e não fornecedores. A adoção de uma estratégia <em>open source</em> em uma empresa como o <strong>Google</strong> e <strong>AWS</strong> é completamente diferente de uma <strong>prestadora de serviços</strong>.</div>
</div>

<p>Do ponto de vista da empresa usuária do projeto, as preocupações variam de acordo com o segmento da companhia, porém sempre estarão em torno dos seguintes pontos:</p>
<ul>
<li><p><strong>Processo legal</strong> - relacionado diretamente ao licenciamento do projeto. A empresa deve garantir que não sofrerá ações legais por conta do uso indevido da solução.</p>
</li>
<li><p><strong>Segurança</strong> - diferente do que comentamos no início do texto, essa referência à segurança é comum em soluções <em>open source</em> e prioritárias. Vulnerabilidades encontradas nas soluções precisam ser mitigadas com pressa, para evitar danos a imagem e reputação da empresa.</p>
</li>
<li><p><strong>Gerenciamento</strong> - por serem ferramentas sem gerenciamento, toda a responsabilidade de manter os sistemas rodando fica com a empresa. Isso não é um problema, porém será necessário infraestrutura e mão de obra para essas atividades.</p>
</li>
<li><p><strong>Versionamento</strong> - projetos <em>open source</em> costumam ter <em>releases</em> frequentes de novas versões, o que torna responsabilidade completa da empresa de manter os sistemas atualizados e com os devidos <em>patches</em> aplicados.</p>
</li>
</ul>
<p>Contudo, nesse “jogo” não há apenas a empresa. Não podemos nos esquecer da <strong>comunidade</strong>, que é quem mantém os projetos de pé, implementa funcionalidades novas e responde à vulnerabilidades e incidentes.</p>
<p>A grande parte desses desenvolvedores fazem esses trabalhos em seu tempo livre, por <em>hobby</em> e por acreditar nos projetos. São poucos os projetos que tem incentivos para influenciar no desenvolvimento.</p>
<p>Dito isso, é extremamente importante que haja um retorno das empresas para a comunidade, permitindo assim que <strong>mantenhamos a saúde dos projetos e a comunidade engajada.</strong></p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Contribuição para o <em>open source</em> é algo voluntário. O engajamento da comunidade é o que faz os projetos crescerem e serem bem sucedidos. É crucial que as empresas tenham essa proposta de usufruir dos projetos e incentivar a comunidade a continuar com o trabalho.</div>
</div>

<p>Esse incentivo pode vir de diversas formas:</p>
<ul>
<li><p><strong>Financeiro</strong> - apoio (patrocínio) aos desenvolvedores e mantenedores do projeto.</p>
</li>
<li><p><strong>Suporte</strong> - empresas auxiliam com os custos ligados ao projeto (infraestrutura, licenças para ferramentas, etc.).</p>
</li>
<li><p><strong>Contribuição</strong></p>
<ul>
<li><p><strong>Direta</strong> - algumas empresas já adotaram a postura de permitir que seus engenheiros contribuam diretamente das contas e ambientes corporativos para projetos <em>open source</em>. Isso geralmente exige uma série de camadas de segurança para proteção dos ativos da empresa e mitigação de possíveis vazamentos de dados.</p>
</li>
<li><p><strong>Indireta</strong> - membros da comunidade são incentivados por suas empresas a contribuírem para os projetos, porém não podem utilizar sua identidade corporativa. Esse é o passo anterior a total integração das empresas no ecossistema.</p>
</li>
</ul>
</li>
<li><p><strong>Project Ownership</strong> - esse é um modelo de contribuição mais raro, onde a empresa doa um projeto (ou mais) para a comunidade. O <em>core</em> de mantenedores pode ainda ser o mesmo, porém o código foi aberto e disponibilizado para a comunidade.</p>
</li>
</ul>
<p>Essas contribuições partindo das empresas mantém o ecossistema saudável e funcional e influencia outros <em>players</em> do mercado a fazerem o mesmo.</p>
<p>Nós, engenheiros e engenheiras, precisamos voltar a cobrar as nossas empresas dessa devolução para a comunidade e para o ecossistema. Como vimos, os incentivos podem ser realizados de diversas maneiras, porém é importante que eles sejam feitos!</p>
<hr />
<h1 id="heading-conclusao">Conclusão</h1>
<p>A grande verdade é que <em>open source</em> pode (e deve) ser MUITO considerado como estratégico para sua empresa. Dar liberdade para que os engenheiros testem e experimentem soluções novas é a melhor forma de fazer com que seu ambiente se torne mais maduro e inovador.</p>
<p>Como tudo na área de tecnologia, temos um <em>trade-off</em>. A integração da sua empresa com a comunidade <em>open source</em> deve ser avaliada de acordo com o seu cenário e a partir daí, as possibilidades devem ser exploradas. Os projetos precisam de apoio e é certo que uma hora ou outra, a conta dessa falta de contribuição, vai chegar.</p>
<p>O importante é começarmos a engajar cada vez mais as empresas para manter o nosso ecossistema “afiado” como estamos acostumados a ver.</p>
<p>Muito obrigado e até logo! &lt;3</p>
]]></content:encoded></item><item><title><![CDATA[Windows containers in Kubernetes]]></title><description><![CDATA[Nós sabemos que boa parcela da infraestrutura que suporta as aplicações que mais utilizamos é baseada em sistemas Microsoft. Com o advento das tecnologias cloud native como o kubernetes, esses componentes parecem ter ficado para trás, porém isso não ...]]></description><link>https://pedroignacio.dev/windows-containers-in-kubernetes</link><guid isPermaLink="true">https://pedroignacio.dev/windows-containers-in-kubernetes</guid><category><![CDATA[Open Source]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[Security]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[Docker]]></category><dc:creator><![CDATA[Pedro Ignácio]]></dc:creator><pubDate>Wed, 18 Dec 2024 02:12:34 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1734229871294/5a14155f-5b4a-4fd3-80c1-380935c7f0da.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Nós sabemos que boa parcela da infraestrutura que suporta as aplicações que mais utilizamos é baseada em sistemas Microsoft. Com o advento das tecnologias <em>cloud native</em> como o <em>kubernetes</em>, esses componentes parecem ter ficado para trás, porém isso não é totalmente verdade. Visando possibilitar a modernização dos sistemas baseados em <em>windows</em>, temos no <em>kubernetes</em> o suporte para <strong><em>Windows Containers</em></strong>, e é sobre ele que iremos falar hoje!</p>
<hr />
<h1 id="heading-motivadores">Motivadores</h1>
<p>Como comentado brevemente na introdução do artigo, uma boa parcela dos sistemas web que estão em execução hoje em dia rodam em ambientes <em>Microsoft</em>, especialmente em ambientes <em>windows</em>.</p>
<p>Dito isso, as razões que você pode considerar para executar <em>containers windows</em> em um ambientes <em>kubernetes</em> irão variar conforme as necessidades do seu negócio, ficando a seu critério a tomada de decisão referente ao direcionamento de uso dessa arquitetura.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734402631677/df315408-6026-44d4-80b9-21804217573f.jpeg" alt class="image--center mx-auto" /></p>
<p>Um motivador muito comum para escolha dessa arquitetura é a falta de tempo para reformulação de uma aplicação que hoje já é executada em ambiente <em>Microsoft</em> e que sofreu certo tipo de evolução, atingindo a marca de ser containerizada. Executar essa aplicação em <em>kubernetes</em> pode trazer benefícios que um monolíto em um <em>windows server</em> não poderia fornecer, como a capacidade de escalabilidade horizontal.</p>
<p>Outro ponto também importante e frequentemente considerado na tomada de decisão é o uso de biblioteca do sistema. Caso sua aplicação utilize funcionalidades fornecidas a nível de sistema operacional, executar sua aplicação em um ambiente <em>linux</em> retirará recursos essenciais para o funcionamento do serviço, a não ser que seu código tenha sido previamente refatorado.</p>
<p>Em grandes empresas, onde o parque tecnológico é muito grande, é comum vermos diversas tecnologias diferentes sendo utilizadas para o mesmo propósito. Para reduzir essa complexidade, utilizar um orquestrador centralizado poderá economizar muita dor de cabeça dos times de tecnologia.</p>
<hr />
<h1 id="heading-caracteristicas-tecnicas">Características técnicas</h1>
<p>Como qualquer outra solução, os containers windows tem suas particularidades. Já há algum tempo, o ecossistema do <em>kubernetes</em> foi preparado para permitir a execução de containers windows, garantindo o suporte da solução.</p>
<p>Para habilitar essa execução o primeiro passo é ter em seu <em>cluster</em> <strong><em>nodes</em></strong> que executem o sistema operacional <em>windows</em>. Esse é um pré requisito extremamente necessário dado que não será possível executar seu container sem ele.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Gosto de trazer esse ponto logo de cara pois a grande maioria dos <em>clusters</em> é composto apenas de <em>nodes</em> que executam <em>linux</em>. É importante garantir a execução de pelo menos um <em>node windows</em> para possibilitar a criação dos recursos necessários.</div>
</div>

<p>Tendo em mente uma arquitetura produtiva que faça uso de <em>nodes windows</em> e <em>linux</em>, é interessante separar os <em>nodes</em> do seu <em>cluster</em> de alguma forma que permita que o seu time consiga identificar qual o sistema operacional executado naquele <em>node</em>, evitando dessa forma muita dor de cabeça em cenários de <em>troubleshooting</em>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734486943393/189d0ca7-33f7-401d-9926-e51f94c673f0.png" alt class="image--center mx-auto" /></p>
<p>Uma solução para esse cenário é utilizar nos <em>nodes</em> os chamados <strong><em>node taints</em></strong>, que nos permitem <em>taggear</em> os <em>nodes</em> conforme desejado e selecionarmos através das <em>labels</em> onde desejamos que as aplicações tenham o <em>deployment</em> feito.</p>
<p>Com os <em>nodes taggeados</em> podemos utilizar no <em>scheduling</em> dos <em>pods</em> os <em>Node Selectors</em>, que nos permitirão selecionar quais <em>hosts</em> deverão receber aqueles <em>pods</em>. No cenário apresentado, os <em>nodes</em> selecionados serão os que tem como sistema operacional o <em>windows</em>.</p>
<hr />
<h1 id="heading-outros-pontos-para-ficar-de-olho">Outros pontos para ficar de olho</h1>
<p>Os reais motivadores para se utilizar <em>containers windows</em> em ambientes <em>kubernetes</em> já foram discutidos, mas de forma resumida, eles são “pessoais”, devendo ser determinados dentro da sua organização.</p>
<p>O que nós não podemos deixar de comentar é: <strong>existem diferenças que não podem ser deixadas de lado</strong>.</p>
<p>A construção de sistemas que utilizam como base um ambiente <em>linux</em> é totalmente diferente dos que utilizam ambientes <em>windows</em>. Não são todas as funcionalidades que estão disponíveis e as APIs não foram completamente estendidas.</p>
<p>Consultando diferentes fóruns na <em>internet</em>, algumas das diferenças mais notáveis são:</p>
<ul>
<li><p>Permissionamento em arquivos - é configurado em um modelo de <em>ACL</em> (<em>Access Control Lists</em>).</p>
</li>
<li><p><em>File path</em> - (quem nunca teve problema com isso, rs) onde utilizando <em>windows</em>, representamos os <em>paths</em> com a barra ao contrário (<strong>\</strong>).</p>
</li>
</ul>
<p>Esquecendo um pouco esses pontos de atenção, gostaria de mencionar o incentivo que a comunidade vem tendo para evoluir esse cenário. Constantemente me pego lendo as <em>releases notes</em> das novas versões do <em>kubernetes</em> e frequentemente encontro menções a novas <em>features</em> que foram implementadas e que tem suporte para ambientes <em>windows</em> containerizados.</p>
<p>Portanto, independente do quão polêmico é o uso de <em>windows</em> em <em>kubernetes</em> é importante sabermos que a cada dia que se passa, essa combinação de tecnologias se torna ainda mais viável, abrindo as possibilidades para os mais diversos cenários que podemos encontrar!</p>
<hr />
<p>Por menos convencional que seja, os <strong><em>containers Windows</em></strong> apresentam uma alternativa a execução de <em>workloads</em> em ambientes <em>kubernetes</em>. Você não precisa necessáriamente os utilizar, porém é interessante conhecer a possibilidade, que pode vir a ser útil a qualquer momento.</p>
<p>Muito obrigado por acompanhar até aqui, caso tenha alguma dúvida não deixe de me contatar.</p>
<p>Até logo!</p>
]]></content:encoded></item><item><title><![CDATA[KubeCon North America 2024 - recap]]></title><description><![CDATA[Quase um mês após o evento, chegou o momento de compartilhar os principais pontos que capturei ao longo dos 4 dias em salt lake city. Devido a concorrência, algumas palestras precisaram ser assistidas posteriormente, com a divulgação das gravações, e...]]></description><link>https://pedroignacio.dev/kubecon-na-2024-recap</link><guid isPermaLink="true">https://pedroignacio.dev/kubecon-na-2024-recap</guid><category><![CDATA[CNCF]]></category><category><![CDATA[Devops]]></category><category><![CDATA[software development]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[Open Source]]></category><dc:creator><![CDATA[Pedro Ignácio]]></dc:creator><pubDate>Tue, 10 Dec 2024 00:53:57 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1733791423921/64fc1ce1-a47b-41c9-ae03-2b65fd3a8e10.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Quase um mês após o evento, chegou o momento de compartilhar os principais pontos que capturei ao longo dos 4 dias em <em>salt lake city</em>. Devido a concorrência, algumas palestras precisaram ser assistidas posteriormente, com a divulgação das gravações, então aqui vamos nós!</p>
<hr />
<h1 id="heading-sobre-o-evento">Sobre o evento</h1>
<p>A <strong>KubeCon + CloudNativeCon</strong> é o principal evento de tecnologia <em>open source</em> e <em>vendor neutral</em> do planeta. Tendo edições na américa do norte, europa, Índia, China e (agora) Japão, a conferência tem como seu principal propósito trazer a comunidade de tecnologia para um ambiente de respeito, colaborativo e extremamente engajado.</p>
<p>No evento você encontra pessoas de todos os backgrounds, técnicos, não técnicos, DevOps, SRE, Software Engineers, QAs, Designers, Arquitetos entre outros cargos. Devido sua diversidade de participantes e de conteúdos, todo mundo tem algo a fazer a todo momento!</p>
<p>Em relação ao conteúdo técnico, temos palestras de todos os níveis. Palestras avançadas, para iniciantes, workshops e demos ocorrem o tempo todo. Além de toda a seção de palestras, que ocorre de maneira simultânea em diversas partes do centro de conferência onde é hospedado o evento, ainda há o <em>Project Pavillon</em> e o <em>Solutions Showcase</em>, que servem para conectar a comunidade com os <em>maintainers</em> dos projetos e contribuidores das empresas participantes.</p>
<p>Por mais que as palestras sejam simplesmente fantásticas e a todo momento você esteja aprendendo algo novo, a melhor parte do evento é a conexão com outros membros da comunidade. Conhecer outras pessoas, fazer novos amigos, aprender coisas novas com colegas de diferentes culturas e diferentes históricos é algo que realmente não tem preço. Nessas conversas você conhece alguém que trabalha na empresa dos seus sonhos, ou que teve uma mudança brusca de carreira, que superou dificuldades parecidas com as suas, que conquistou coisas que você também deseja conquistar, e é exatamente esse o propósito do evento, a <strong>COMUNIDADE</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733785640465/cd1c29a0-c969-416a-9138-2f80c92d2da7.jpeg" alt class="image--center mx-auto" /></p>
<p>Essa foi a principal mensagem que trouxe para mim da minha primeira KubeCon e que com certeza absoluta levarei para os próximos eventos que fizer parte.</p>
<p>Agora, vamos ao técnico…</p>
<hr />
<h1 id="heading-hot-topics">Hot topics</h1>
<p>O evento tem apenas dois temas (que se complementam), <em>cloud native technologies</em> e <em>open source</em>. Todos os temas abordados ao longo das palestras falam sobre soluções <em>open source</em> que vem mudando a forma com a qual construímos nossos sistemas em nuvem.</p>
<p>A lista de temas vai de <strong>observabilidade</strong> a <strong>testes</strong>, de <strong>segurança</strong> a <strong>developer experience</strong>, e somados a esses, temos uma série de outros tópicos que foram explorados.</p>
<p>Abaixo farei uma lista com alguns temas que pude extrair o máximo dos conteúdos compartilhados.</p>
<h2 id="heading-observabilidade">Observabilidade</h2>
<p>Nós que trabalhamos com DevOps, SRE e desenvolvimento temos plena consciência da necessidade de termos uma boa estrutura de observabilidade em nosso ambiente. Sem observabilidade não há vitória!</p>
<p>No <a target="_blank" href="http://landscape.cncf.io"><em>landscape</em></a> de soluções <em>cloud native</em> temos uma série de ferramentas de observabilidade que já estão consolidadas no mercado e que representam boa parte da <em>stack</em> utilizada por grandes empresas.</p>
<p>Com o surgimento cada vez mais rápido de ferramentas de observabilidade proprietárias, que consequentemente aplicam seus próprios padrões, a expansão do <strong>OpenTelemetry</strong> aparece como um alívio.</p>
<p>Seus componentes tem ampla contribuição da comunidade e com toda certeza, <strong><em>OpenTelemetry is the way to go!</em></strong></p>
<p>Seu uso tem se tornado o padrão de mercado para arquiteturas de observabilidade, por conta de sua flexibilidade, por ser agnóstica a provedores e principalmente por definir padrões de nomenclatura, métricas e de outros recursos.</p>
<p>Ficou claro durante o evento que todas as soluções de observabilidade daqui para frente utilizarão o <em>OpenTelemetry</em> como um padrão para suas aplicações. Para provar essa ampla adoção do padrão, empresas como <strong>Grafana</strong> e <strong>Datadog</strong> já publicam e contribuem de maneira pública para o repositório da solução.</p>
<h2 id="heading-gitopsiac">GitOps/IaC</h2>
<p>Com ambientes cada vez mais complexos e difíceis de se gerenciar, tem se tornado claro que precisamos de controle dos nossos artefatos mais do que nunca. Não existe mais um mundo onde os <em>deployments</em> nos <em>clusters</em> não são mais feitos através de <em>pipelines</em>.</p>
<p>Tudo isso já tem sido reforçado há anos na comunidade, porém enxergar a forma que projetos como <strong>Argo</strong>, <strong>Flux</strong> e <strong>Open Tofu</strong> vem crescendo, mostra que precisamos sempre repensar na forma como estamos utilizando esses recursos.</p>
<p>No mundo da engenharia de plataforma (e também do DevOps), habilitar aos desenvolvedores a rápida criação de seus artefatos, possibilitando a entrega de valor mais rápida ao cliente e diminuindo o trabalho dos times de engenharia, tem sido possível pela utilização das ferramentas anteriormente mencionadas.</p>
<p>A reutilização dos artefatos criados para os times de engenharia é uma prática que deve ser considerada obrigatória. Habilitar que outras equipes possam consumir os insumos já produzidos de forma que possam realizar a criação de seus recursos cada vez mais rápido, trará benefícios não apenas locais na empresa, mas também criará uma cultura de colaboração entre os times, tornando-os ainda mais poderosos.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Sobre o uso de <em>GitOps</em> e <em>IaC</em> para práticas de engenharia de plataforma, recomendo a palestra dos meus amigos Lucas e Tiago sobre o tema: <a target="_self" href="https://www.youtube.com/watch?v=UFGr2qI9aOI">https://www.youtube.com/watch?v=UFGr2qI9aOI</a></div>
</div>

<h2 id="heading-ia">IA</h2>
<p>IA é o assunto do momento há alguns anos, porém não era um tema constantemente abordado quando falávamos de <em>kubernetes</em>. Até agora.</p>
<p>Um ponto interessante abordado de forma ampla no evento foi a ampliação no uso de soluções como <strong>Kubeflow</strong>, que permite a execução de <em>workloads</em> de <em>machine learning</em> em <em>clusters kubernets</em> de forma nativa.</p>
<p>Nessa mesma linha tivemos também a divulgação do suporte de provedores de nuvem pública a imagens de VMs que tem o uso de <em>GPUs</em> habilitadas e que possibilitam a criação de <em>clusters</em> nessas máquinas.</p>
<p>Com essas evoluções, o treinamento de modelos de <em>machine learning</em> em ambientes <em>cloud native</em> se tornou muito mais eficiente e difundido, possibilitando que todos, independente do tamanho e dos recursos, pudessem treinar seus modelos e construir suas soluções.</p>
<h2 id="heading-edge-computing">Edge Computing</h2>
<p>Borda tem sido um tema extremamente relevante no mundo das empresas de telecomunicações por pelo menos 10 anos. A crescente quantia de dispositivos móveis que executam processamentos complexos na palma da mão dos clientes tem sido um chamado para a garantia de uma infraestrutura que suporte todo esse processo e sustente todas essas estruturas com a garantia da não interrupção do serviço.</p>
<p>Dito isso, <em>kubernetes on edge</em> foi um tema bastante abordado. Soluções como <strong>KubeEdge</strong> e <strong>k3s</strong> foram amplamente faladas por sua elasticidade e eficiência, possibilitando que as empresas processem largas quantias de dados e tornem a experiência do usuário cada vez mais personalizada, com tecnologias eficiêntes onde quer que esteja.</p>
<p>A ampliação do uso desses recursos possibilitarão uma evolução mais rápida nas indústrias automotivas e de telecomunicações, que tem sua malha de dispositivos amplamente distribuída e que precisam de baixíssima latência e processamento eficiênte, cada vez mais próxima dos usuários finais.</p>
<h2 id="heading-e-e-claro-kubernetes">e é claro, Kubernetes…</h2>
<p>Obviamente não poderia deixar de comentar sobre o dono da festa!</p>
<p><img src="https://miro.medium.com/v2/resize:fit:931/1*t46Ke1o41lQzXw5lFr7XRA.png" alt="Kubernetes just turned 10!. Who could have predicted that 10 years… | by  Mathieu Benoit | Medium" class="image--center mx-auto" /></p>
<p>No ano em que o projeto completa 10 anos, a comemoração é toda para ele! Se tornando o projeto <em>open source</em> de maior sucesso após o <em>Linux</em>, o <strong>Kubernetes</strong> é peça essencial em grande parte das empresas que está na nuvem.</p>
<p>Ao longo da conferência, uma série de anúncios foram feitos relacionados ao projeto. Soluções exclusivas para <em>clusters kubernetes</em> dominaram o pavilhão de exposição, independente do seu domínio (seja segurança, observabilidade, resource management, entre outros).</p>
<p>O Gateway API, uma nova forma de expor suas aplicações na internet foi amplamente explorado em diversas palestras.</p>
<p><strong>eBPF</strong> também foi um tema fortemente presente nas <em>talks</em>, com soluções como <strong>Falco</strong> e <strong>Cilium</strong> comandando a lista de projetos mais populares que fazem uso desse recurso.</p>
<p>Além dos recursos novos e projetos sensacionais desenvolvidos pela comunidade, pude sair com uma certeza, todo o sucesso dos projetos se deve 100% a contribuição da comunidade e a paixão que temos pela área.</p>
<p><strong>Open Source é o presente e o futuro!</strong></p>
<hr />
<p>Espero que tenha gostado dos relatos, aproveito para deixar aqui o canal da CNCF onde você pode consumir todas as palestras que foram apresentadas no evento: <a target="_blank" href="https://youtube.com/playlist?list=PLj6h78yzYM2Pw4mRw4S-1p_xLARMqPkA7&amp;si=LafAAlqJ5mtyZw7k">https://youtube.com/playlist?list=PLj6h78yzYM2Pw4mRw4S-1p_xLARMqPkA7&amp;si=LafAAlqJ5mtyZw7k</a></p>
<p>Até logo!</p>
]]></content:encoded></item><item><title><![CDATA[Gateway API: o passo além do k8s Ingress]]></title><description><![CDATA[Pensando na evolução da arquitetura do seu cluster Kubernetes, o Gateway API é um daqueles recursos que você não deve deixar de considerar. Sendo uma solução robusta e elegante, o Gateway API vem se tornando um novo padrão para o controle do roteamen...]]></description><link>https://pedroignacio.dev/gateway-api-o-passo-alem-do-k8s-ingress</link><guid isPermaLink="true">https://pedroignacio.dev/gateway-api-o-passo-alem-do-k8s-ingress</guid><category><![CDATA[Cloud]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[CNCF]]></category><category><![CDATA[Security]]></category><category><![CDATA[AWS]]></category><dc:creator><![CDATA[Pedro Ignácio]]></dc:creator><pubDate>Wed, 04 Dec 2024 01:10:40 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1733274615703/cb48e043-1aee-4b3d-89dc-33dfe46d42a1.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Pensando na evolução da arquitetura do seu cluster <strong>Kubernetes</strong>, o <strong>Gateway API</strong> é um daqueles recursos que você não deve deixar de considerar. Sendo uma solução robusta e elegante, o <strong>Gateway API</strong> vem se tornando um novo padrão para o controle do roteamento dos serviços expostos pelo <em>cluster</em>. Dito isso, hoje iremos explorar brevemente o que é o recurso, suas diferenças para o tradicional <strong>Ingress</strong> e algumas de suas principais características.</p>
<hr />
<h1 id="heading-entendendo-o-recurso">Entendendo o recurso</h1>
<p>Toda funcionalidade que será utilizada pelo cliente deve ser exposta de alguma forma para a <em>internet</em>, tornando-a acessível para o consumidor final. Se as suas aplicações são executadas em <em>clusters</em> <strong>Kubernetes</strong>, você com certeza já fez uso de algum dos "<em>flavors</em>” do <strong>Kubernetes Ingress</strong>.</p>
<p>O propósito do <strong>Ingress</strong> (e agora do <strong>Gateway API</strong>) é de fornecer uma forma de acesso externo às aplicações que são executadas dentro de um <em>cluster</em>, aplicações essas expostas internamente através de <em>services</em>.</p>
<p>Imagine que você tem dentro do seu <em>cluster</em> os produtos A, B e C. Esses produtos fazem parte da mesma linha de negócio, ou seja, estão todos relacionados, mesmo que façam parte de jornadas diferentes. O que você deve fazer para que as plataformas e canais utilizados pelos clientes possam acessar essas funcionalidades expostas pelas suas aplicações?</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733270137069/8a9c8490-2c9c-48d0-8b39-bbdb04a1086f.png" alt class="image--center mx-auto" /></p>
<p>Como vemos na arquitetura acima, o <strong>Gateway API</strong> realiza a exposição das aplicações (que estão representadas “atrás” dos <em>services</em>) através do próprio <em>gateway</em> e de seu recurso auxiliar, a <strong>HTTP Route</strong>.</p>
<ul>
<li><p>Gateway API - recurso “primário”, que realiza a exposição das aplicações.</p>
</li>
<li><p>HTTP Route - objeto que declara a rota que será exposta pelo <strong>Gateway API</strong>.</p>
</li>
<li><p>TLS Route - parecido com o <strong>HTTP Route</strong>, porém sua exposição ocorre com o acréscimo de certificados, garantindo a criptografia <em>in-transit</em> na comunicação.</p>
</li>
</ul>
<p>Essa separação das rotas que serão publicadas em um objeto próprio garante maior dinamismo e um <em>design</em> mais limpo e escalável para seu <em>cluster</em>. Se for um desejo do seu time de engenharia migrar o provedor do <strong>Gateway API</strong> (para o <strong>Cilium</strong>, por exemplo), essa separação das rotas facilitará o processo, visto que apenas o objeto principal deverá ser modificado, mantendo as rotas e suas regras intactas.</p>
<p>Exploraremos mais sobre algumas <em>features</em> interessantes do recurso nas próximas seções. Agora falaremos brevemente sobre as diferenças para o <strong>Ingress</strong>.</p>
<hr />
<h1 id="heading-qual-a-mudanca-do-ingress">Qual a mudança do Ingress?</h1>
<p>Falando do “legado”, o <strong>Ingress</strong> e seus <em>flavors</em> foram utilizados por muitos anos como o padrão para exposição de <em>services</em> no <strong>Kubernetes</strong>. As alterações e evoluções do <strong>Ingress</strong> ao <strong>Gateway API</strong> são majoritariamente funcionalidades diferentes, suporte a outros protocolos e alteração na arquitetura do componente.</p>
<p>Abaixo uma breve lista com algumas das principais diferenças de um recurso para outro:</p>
<ul>
<li><p>Protocolos suportados - agora podemos criar recursos que fazem uso de protocolos como gRPC, TCP, UDP e os já suportados HTTP/S.</p>
</li>
<li><p>Modularização - como comentado anteriormente, com a nova versão, temos completa separação dos recursos, habilitando a troca do provedor e reutilização das rotas declaradas.</p>
</li>
<li><p>Granularidade das rotas - a declaração das rotas se tornou muito mais detalhada, permitindo a construção de regras mais complexas e habilitando a criação de testes como A/B e blue green com mais facilidade.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1733270453350/caa62b41-cf7a-4656-bcb8-7cc0ecfc5eb2.png" alt class="image--center mx-auto" /></p>
<p>Acima temos uma arquitetura simples sobre como o recurso funciona. Podemos notar algumas diferenças para a arquitetura do <strong>Gateway API</strong>, como mencionado anteriormente.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Vale ressaltar que a evolução do <strong>Ingress</strong> foi travada, com os esforços concentrados 100% no <strong>Gateway API.</strong></div>
</div>

<hr />
<h1 id="heading-coisas-legais-do-recurso">Coisas legais do recurso</h1>
<p>Agora que entendemos de fato as diferenças entre um e outro, vamos nos concentrar nos recursos interessantes que a nova versão do objeto nos traz.</p>
<p>Acho importante reforçar o valor que a “modularização” do recurso traz para os ambientes <strong>Cloud Native</strong>. Estamos sempre buscando tornar nossas soluções escaláveis, sustentáveis no longo prazo e acima de tudo, <em>vendor-neutral</em>. A separação dos componentes que compõem o <strong>Gateway API</strong> facilitará na utilização de novos recursos e até na migração para outras plataformas.</p>
<p><strong>TLS</strong> era algo já existente no <strong>Ingress Controller</strong>, porém agora podemos ter de maneira organizada nossas rotas que devem ser expostas de maneira segura e seus certificados, que são <em>binded</em> diretamente na rota. Para os times de segurança e <em>DevOps</em> isso trará um ganho extremo no momento de <em>troubleshooting</em>, visto que será possível identificar os recursos conectados com mais rapidez.</p>
<p>Por último, gostaria de falar sobre o modelo de criação do recurso, através de <em>CRDs</em> (<em>Custom Resource Definitions</em>). Os <em>CRDs</em> tornam as <em>pipelines</em> de execução mais limpas e organizadas, visto que são manifestos iguais aos <em>default</em> do <strong>Kubernetes</strong>. Criar recursos utilizando esse modelo torna a arquitetura mais modular, garantindo mais uma vez escalabilidade na sua plataforma!</p>
<hr />
<p>O <strong>Gateway API</strong> traz uma série de benefícios para seu ambiente e sua equipe. Como qualquer outra tecnologia, não é uma bala de prata. Você deve avaliar se o serviço cumpre com os seus requisitos antes de adotá-lo em larga escala.</p>
<p>Espero que tenha gostado do artigo, não deixe de me contatar caso tenha alguma dúvida ou queira conversar mais sobre o recurso.</p>
<p>Até logo!</p>
]]></content:encoded></item><item><title><![CDATA[Network Policies: microsegmentação em clusters Kubernetes]]></title><description><![CDATA[Conforme nosso ambiente evoluí, mais e mais aplicações passam a ser executadas em nossos clusters, o que em larga escala, pode se tornar complicado para gerir. Visando fornecer uma maneira mais eficiente de controlar o acesso aos recursos do seu clus...]]></description><link>https://pedroignacio.dev/microssegmentacao-com-cilium</link><guid isPermaLink="true">https://pedroignacio.dev/microssegmentacao-com-cilium</guid><category><![CDATA[#cybersecurity]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[software development]]></category><category><![CDATA[Kubernetes]]></category><dc:creator><![CDATA[Pedro Ignácio]]></dc:creator><pubDate>Wed, 30 Oct 2024 02:29:46 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1730081757503/51e37349-8ba1-4396-975c-f83ec897cf42.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Conforme nosso ambiente evoluí, mais e mais aplicações passam a ser executadas em nossos <em>clusters</em>, o que em larga escala, pode se tornar complicado para gerir. Visando fornecer uma maneira mais eficiente de controlar o acesso aos recursos do seu cluster, vamos falar sobre as <em>Network Policies</em>, que com um toque de <strong><em>Cilium</em></strong>, nos permitem garantir a boa proteção dos nosso ambientes, independente da complexidade.</p>
<hr />
<h1 id="heading-microssegmentacao">Microssegmentação</h1>
<p>É uma nova forma de segregação de redes amplamente utilizado em ambientes de nuvem pública. Em uma era onde segurança entra acima de todo o restante e o principal “norte” para os times de engenharia são os pilares do <em>zero trust</em>, proteger a <strong>base</strong> da sua infraestrutura é essencial.</p>
<p>Independente do tamanho do ambiente, precisamos garantir a aplicação dos princípios do <em>zero trust</em>, implementando de forma eficiente os controles necessários para evitar que atores indesejados consumam nossos recursos, que as aplicações da organização fiquem expostas à possíveis vulnerabilidades e ainda pior, exponham os demais recursos do ambiente a esses atores.</p>
<p>A microssegmentação olha ao nível “mais baixo” dos recursos, atuando como uma malha entre todos os serviços da sua nuvem e permitindo o controle de acesso entre os recursos de maneira flexível e detalhada.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730244296879/8b386b84-e5fc-4b7c-8de3-bc325b49a646.png" alt class="image--center mx-auto" /></p>
<p>O desenho acima exemplifica em alto nível como a microssegmentação atua nos ambientes. Com ela, é possível definir um perímetro ao redor de cada um dos recursos, controlando o acesso por origem, <em>IP</em>, protocolo e outras informações.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Configurar a microssegmentação nos ambientes é uma tarefa extremamente trabalhosa e exaustiva. Hoje, empresas líderes de mercado como a Akamai oferecem soluções de microssegmentação indepentendente da nuvem que você utilize. Essas soluções tornam mais simples a implementação e a gestão da configuração dos ambientes. Veja: <a target="_self" href="https://www.akamai.com/pt/products/akamai-guardicore-segmentation">Akamai Guardicore</a>.</div>
</div>

<hr />
<h1 id="heading-network-policies">Network Policies</h1>
<p>Reduzindo nosso escopo de atuação apenas aos <em>clusters</em> <em>Kubernetes</em>, precisamos falar das <em>Network Policies</em>.</p>
<h2 id="heading-entendendo-o-recurso">Entendendo o recurso</h2>
<p>As <em>Network Policies</em> são recursos padrão existentes nos <em>clusters</em> <em>Kubernetes</em>, que possibilitam a segmentação dos recursos sendo executados no <em>cluster</em> (<em>namespaces</em>, <em>pods</em>, <em>svc</em>, etc). Com as <em>policies</em> padrão já estamos habilitados a incrementar a segurança do nosso ambiente, porém segurança nunca é demais.</p>
<p>Para termos um maior nível de detalhes na criação das políticas, podemos utilizar a versão deste recurso fornecida pelo <strong><em>Cilium</em></strong>, solução que tratamos no <a target="_blank" href="https://pedroscloudsecurity.com/aks-cilium">post passado</a>. Ao utilizarmos o <strong><em>Cilium</em></strong> como a solução de <em>Container Network Interface</em> dos nossos <em>clusters</em>, podemos implementar regras em diferentes camadas (<strong>L3</strong>, <strong>L4</strong> e <strong>L7</strong>) e utilizando informações adicionais, trafegadas nas requisições feitas entre os recursos. Não apenas isso, se tivermos a <strong><em>Cluster Mesh</em></strong> habilitada entre nossos <em>clusters</em> que executam o <strong><em>Cilium</em></strong>, podemos criar <em>policies</em> que ultrapassam os limites de cada um dos ambientes <em>Kubernetes</em>. Bom, né?</p>
<p>Antes de passarmos para a real configuração das <em>policies</em>, gostaria de trazer conceitos gerais sobre elas, que facilitarão o seu entendimento no momento de configuração dos recursos.</p>
<h3 id="heading-funcionamento">Funcionamento</h3>
<p>Como explicado anteriormente, as <em>policies</em> permitem que nós controlemos o acesso feito aos recursos do <em>cluster</em> e saindo dos recursos. São “regras” criadas com um escopo específico e que validarão TUDO que passar por ali.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730255578512/430fa1de-ff8a-4835-8945-698cc08baf18.png" alt class="image--center mx-auto" /></p>
<p>No desenho acima podemos visualizar um <em>cluster</em> com 3 <em>namespaces</em> com <em>policies</em> aplicadas e o fluxo de rede que é permitido/proibido em cada uma delas.</p>
<p>Podemos confirmar que a <em>policy</em> do <em>namespace 2</em> permite consumo vindo de <em>pods</em> com a <em>label</em> <strong><em>color:green</em></strong>. Essa <em>policy</em> também permite o acesso ao mundo externo (fora do <em>cluster</em>) pelos <em>pods</em> que ali estão. A <em>policy</em> aplicada no <em>namespace 2</em> não declara em momento algum o permissionamento para que os <em>pods</em> restantes no <em>namespace 1</em> possam acessar seus recursos, o que por padrão, proíbe a chamada.</p>
<p>Para dar uma ideia, uma <em>policy</em> parecida com a que seria aplicada no <em>namespace</em> 2 seria:</p>
<pre><code class="lang-yaml"><span class="hljs-attr">apiVersion:</span> <span class="hljs-string">"cilium.io/v2"</span>
<span class="hljs-attr">kind:</span> <span class="hljs-string">CiliumNetworkPolicy</span>
<span class="hljs-attr">metadata:</span>
  <span class="hljs-attr">name:</span> <span class="hljs-string">namespace2-policy</span>
  <span class="hljs-attr">namespace:</span> <span class="hljs-string">&lt;NAMESPACE&gt;</span>
<span class="hljs-attr">spec:</span>
  <span class="hljs-attr">endpointSelector:</span>
    <span class="hljs-attr">matchLabels:</span> {}
  <span class="hljs-attr">ingress:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">fromEndpoints:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-attr">matchLabels:</span>
          <span class="hljs-attr">color:</span> <span class="hljs-string">green</span>
  <span class="hljs-attr">egress:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">toEntities:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">"world"</span>
</code></pre>
<p>A <em>policy</em> representada acima será aplicada no <em>&lt;NAMESPACE&gt;</em> determinado e permitirá as chamadas vindas de recursos com a <em>label color:green</em> (<em>Ingress</em>) e permitirá também chamadas feitas dos <em>pods</em> presentes no <em>namespace</em> para fora do <em>cluster</em>.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Entraremos nos detalhes da criação das <em>policies</em> em um artigo futuro, neste momento se concentre em entender o padrão dos <em>templates</em> e as similaridades entre eles.</div>
</div>

<p>Agora que entendemos como as <em>policies</em> são construídas e aplicadas, vamos detalhar mais os diferentes tipos e as diferenças entre elas.</p>
<h3 id="heading-comportamento-padrao">Comportamento padrão</h3>
<p>O funcionamento padrão dos <em>clusters Kubernetes</em> é permitir todas as chamadas de origem interna. Para contornarmos essa situação, é necessário aplicar uma <em>policy</em> qualquer no escopo desejado. Uma vez que temos uma <em>policy</em> aplicada, o <em>cluster</em> passará a levar em conta APENAS o que está determinado nela.</p>
<blockquote>
<p>Esse comportamento pode parecer problemático, porém alterá-lo “cegamente” pode desencadear uma série de problemas que não foram mapeados anteriormente pelos times. Existem recursos do <em>cluster</em> que precisam acessar <em>endpoints externos para que sua execução ocorra da forma esperada. Ao aplicar uma policy que modifique esse comportamento, estaremos modificando o funcionamento do cluster, interrompendo as operações de negócio que são apoiadas pelas aplicações ali executadas.</em></p>
<p>Portanto, CUIDADO!</p>
</blockquote>
<p>O escopo de aplicação das <em>policies</em> também é importante. Dentro do <em>Kubernetes</em>, temos recursos que são <em>namespaced</em>, restritos ao <em>namespace</em> onde foram criados e <em>cluster-wide</em>, ou seja, disponíveis pelo <em>cluster</em> todo. A aplicação das <em>policies</em> também cai nesse cenário. Uma <em>policy</em> “<em>default</em>” será configurada no <em>namespace</em> onde o usuário executar sua criação, a não ser que ela seja do tipo <strong><em>CiliumClusterwideNetworkPolicy</em></strong>. As <em>policies</em> protegerão seus próprios <em>namespaces</em>, então tenha em mente que liberar chamadas no <em>namespace</em> destino pode não ser suficiente, havendo a necessidade de alterar a <em>policy</em> cadastrada na origem.</p>
<h3 id="heading-ingressegress"><em>Ingress/Egress</em></h3>
<p>A direção do tráfego é parte crucial na montagem das <em>policies</em>. Precisamos declarar para qual direção aquelas regras deverão ser aplicadas.</p>
<ul>
<li><p><strong><em>Ingress</em></strong> - todas as chamadas que estão entrando no determinado escopo.</p>
</li>
<li><p><strong><em>Egress</em></strong> - chamadas oriundas do escopo de aplicação da <em>policy</em>, independente do destino.</p>
</li>
</ul>
<p>Essa declaração nos permite entender o fluxo das chamadas feitas pelas aplicações que ali estão hospedadas.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730255547644/5beb94d9-24ec-4eb3-a273-9b202c5ab120.png" alt class="image--center mx-auto" /></p>
<p>Seguindo o exemplo das seções acima, o <em>template</em> que aplicaria essa <em>policy</em> seria:</p>
<pre><code class="lang-yaml"> <span class="hljs-attr">ingress:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">fromEndpoints:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-attr">matchLabels:</span>
          <span class="hljs-attr">color:</span> <span class="hljs-string">green</span>
  <span class="hljs-attr">egress:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">toEntities:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">"world"</span>
</code></pre>
<h2 id="heading-scoped-network-policies"><em>Scoped Network Policies</em></h2>
<p>Passando a falar sobre as <em>policies</em> em si, temos o primeiro “tipo”, que são as <em>policies</em> com <strong>escopo</strong>. Essas são aquelas <em>policies</em> aplicadas em <em>namespaces</em> específicos, que aplicarão os controles aos recursos ali contidos.</p>
<p>Todo o tráfego de entrada e de saída do <em>namespace</em> especificado será tratado pela <em>policy</em>.</p>
<pre><code class="lang-yaml"><span class="hljs-attr">apiVersion:</span> <span class="hljs-string">"cilium.io/v2"</span>
<span class="hljs-attr">kind:</span> <span class="hljs-string">CiliumNetworkPolicy</span>
<span class="hljs-attr">metadata:</span>
  <span class="hljs-attr">name:</span> <span class="hljs-string">namespace2-policy</span>
  <span class="hljs-attr">namespace:</span> <span class="hljs-string">&lt;NAMESPACE&gt;</span>
<span class="hljs-attr">spec:</span>
  <span class="hljs-attr">endpointSelector:</span>
    <span class="hljs-attr">matchLabels:</span> {}
  <span class="hljs-attr">ingress:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">fromEndpoints:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-attr">matchLabels:</span>
          <span class="hljs-attr">color:</span> <span class="hljs-string">green</span>
  <span class="hljs-attr">egress:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">toEntities:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">"world"</span>
</code></pre>
<p>Esse é o tipo “padrão” das <em>policies</em>, levando em si o comportamento <em>default</em> aplicado no <em>cluster</em>.</p>
<h2 id="heading-cluster-wide-network-policies"><em>Cluster-wide Network Policies</em></h2>
<p>Para cenários onde é necessária a configuração de restrições de acesso independente do recurso, podemos utilizar as <em>policies</em> de escopo <em>cluster-wide</em>.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Essas políticas terão impacto no <em>cluster</em> como um todo, portanto é preciso ser cuidadoso ao utilizá-la, visto que outros recursos podem sofrer impacto com suas regras.</div>
</div>

<pre><code class="lang-yaml"><span class="hljs-attr">apiVersion:</span> <span class="hljs-string">"cilium.io/v2"</span>
<span class="hljs-attr">kind:</span> <span class="hljs-string">CiliumClusterwideNetworkPolicy</span>
<span class="hljs-attr">metadata:</span>
  <span class="hljs-attr">name:</span> <span class="hljs-string">cluster-policy</span>
<span class="hljs-attr">spec:</span>
  <span class="hljs-attr">endpointSelector:</span>
    <span class="hljs-attr">matchLabels:</span> {}
  <span class="hljs-attr">ingressDeny:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">fromEntities:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">"world"</span>
  <span class="hljs-attr">egress:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">toEntities:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">"world"</span>
</code></pre>
<p>Por trás dos panos, a <em>policy</em> é identica às <em>policies</em> <em>namespace scoped</em>, com sua principal diferença sendo seu <em>kind</em> que agora é <strong><em>CiliumClusterwideNetworkPolicy</em></strong> e a disponibilidade de uso do recurso <strong><em>nodeSelector</em></strong>, que nos permite especificar os <em>nodes</em> para quais a política será aplicada.</p>
<h2 id="heading-cross-cluster-network-policies"><em>Cross-cluster Network Policies</em></h2>
<p>Chegamos a um extremo diferencial entre as <em>policies default</em> e as <em>policies</em> oferecidas pelo <strong><em>Cilium</em></strong>.</p>
<p>Utilizando as capacidades de <strong><em>cluster mesh</em></strong>, podemos configurar <em>policies</em> dentre os diferentes <em>clusters</em> que fazem parte da nossa <em>mesh</em>. A integração é possibilitada pelo uso da <em>label</em> <strong><em>io.cilium.k8s.policy.cluster</em></strong> que nos permitirá identificar o <em>cluster</em> que originou a requisição.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730254701514/c42e31b4-a436-44b8-96f8-c0cf01786ce0.png" alt class="image--center mx-auto" /></p>
<p>Esse recurso é especialmente útil para ambientes consumidos por diversas outras áreas, que precisam garantir que apenas os recursos disponibilizados estão sendo consumidos. Ambientes com grandes quantidades de <em>clusters</em> também podem usufruir dos benefícios gerados pela utilização das <em>cluster-wide policies</em>.</p>
<p>Ter a <em>cluster mesh</em> habilitada é um pré-requisito para utilizar as <em>cluster-wide policies</em>, porém a habilitação deste recurso ficará para os próximos artigos.</p>
<hr />
<p>Por enquanto é só. Espero que tenha gostado do texto.</p>
<p>Até logo!</p>
]]></content:encoded></item><item><title><![CDATA[Azure Kubernetes Service + Cilium]]></title><description><![CDATA[O advento das arquiteturas Cloud Native gerou grande complexidade quando pensamos na sustentação do nosso ambiente. Estamos falando de arquiteturas distribuídas, microsserviços, alta disponibilidade, APIs, entre outros tópicos. Garantir a segurança n...]]></description><link>https://pedroignacio.dev/aks-cilium</link><guid isPermaLink="true">https://pedroignacio.dev/aks-cilium</guid><category><![CDATA[#cybersecurity]]></category><category><![CDATA[cilium]]></category><category><![CDATA[Devops]]></category><category><![CDATA[software development]]></category><category><![CDATA[Cloud]]></category><dc:creator><![CDATA[Pedro Ignácio]]></dc:creator><pubDate>Wed, 16 Oct 2024 01:19:18 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1728919016950/978133ab-75e2-4a6c-9386-b32a62503da5.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>O advento das arquiteturas <em>Cloud Native</em> gerou grande complexidade quando pensamos na sustentação do nosso ambiente. Estamos falando de arquiteturas distribuídas, microsserviços, alta disponibilidade, APIs, entre outros tópicos. Garantir a segurança nos ambientes e a capacidade de compreender problemas e fornecer soluções de maneira ágil tornou-se um desafio ainda maior ao nos depararmos com um ambiente distribuído e em nuvem. Tendo ciência desse problema, falaremos hoje sobre o <strong><em>Cilium</em></strong>, uma solução <em>open source</em> que surgiu para remodelar a forma como pensamos na <strong>observabilidade</strong> e <strong>segurança</strong> dos nossos ambientes.</p>
<hr />
<h1 id="heading-o-que-e-cilium">O que é Cilium?</h1>
<p>Falamos brevemente na introdução do artigo sobre o que de fato podemos esperar do <strong>Cilium</strong>, porém antes de nos aprofundarmos na solução, é importante comentar sobre a tecnologia que habilitou sua construção e que vem revolucionando como nós estruturamos soluções de observabilidade e segurança, o <strong>eBPF</strong>.</p>
<p>eBPF (<em>extended Berkeley Packet Filter</em>) - foi lançado em 2014 como uma atualização do <em>BPF</em>, utilizado em <em>hosts Linux</em>. O eBPF foi criado com o intuito de fornecer uma maneira de ampliarmos as capacidades do <em>kernel Linux</em> sem a necessidade de recompilarmos todo o sistema. Com programas eBPF podemos interceptar e visualizar chamadas ao nível do <em>kernel</em>, possibilitando a utilização dessas informações capturadas para construirmos aplicações que levam em consideração o mais baixo nível de funcionamento do sistema.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text"><em>eBPF é um tema complexo e que merece uma série de artigos própria. Caso tenha curiosidade, recomendo o seguinte link para iniciar seus estudos na tecnologia: </em><a target="_blank" href="https://ebpf.io/what-is-ebpf/">What is eBPF? An Introduction and Deep Dive into the eBPF Technology</a></div>
</div>

<p>Utilizando as capacidades fornecidas pelo eBPF, a <a target="_blank" href="https://isovalent.com/">Isovalent</a> construiu uma solução que revolucionou a forma como enxergamos e protegemos nossos <em>clusters</em> e a maneira como desenvolvemos capacidades adicionais para os ambientes.</p>
<p>Para começarmos a falar sobre o <strong>Cilium</strong>, vamos iniciar com um desenho que mostra em alto nível as capacidades funcionais da solução e seus componentes.</p>
<p><a target="_blank" href="https://github.com/cilium"><img src="https://github.com/cilium/cilium/raw/main/Documentation/images/cilium-overview.png" alt="Cilium overview diagram" /></a></p>
<p>Como podemos visualizar no diagrama, temos 3 pilares sobre os quais o <strong>Cilium</strong> atua:</p>
<ul>
<li><p><strong><em>Service Mesh</em></strong></p>
</li>
<li><p><strong><em>Observability</em></strong></p>
</li>
<li><p><strong><em>Networking</em></strong></p>
</li>
</ul>
<blockquote>
<p>As capacidades de segurança são fornecidas em parte pelo <strong>Tetragon</strong>, que falaremos em outro artigo.</p>
</blockquote>
<p>Começando pela <em>feature</em> mais popular, o <strong>Cilium CNI</strong> é instalado nos <em>clusters Kubernetes</em> e serve como uma substituição (ou complemento) das interface de redes dos contêineres. Com o <strong>Cilium CNI</strong> controlando a camada de rede do ambiente, nós passamos a ter completa visibilidade (+ <strong>Hubble</strong>) das chamadas e dos processos que ali estão ocorrendo. Além das capacidades de visualização de tráfego, também temos recursos que habilitam a comunicação <em>multi-tenant</em> e a criptografia do tráfego das chamadas.</p>
<p>Indo para o segundo pilar, temos o <strong>Hubble</strong>, responsável por grande parte das capacidades de observabilidade do ecossistema do <strong>Cilium</strong>. Podendo se conectar com soluções que compõem o ecossistema de monitoramento das empresas como <strong><em>Prometheus</em></strong> e <strong><em>OpenTelemetry</em></strong>, o <strong>Hubble</strong> oferece as capacidades de compreensão de problemas para os times, fornecendo informações detalhadas do ambiente, possibilitando um <em>troubleshooting</em> mais efetivo.</p>
<p>Por último temos o <strong>Cilium Service Mesh</strong>, que vai na contramão de outras soluções de mercado, oferecendo visibilidade da <em>mesh</em> de maneira <strong><em>sidecar-less</em></strong>. Essa é uma das proezas do <strong>Cilium Service Mesh</strong>, falaremos mais sobre ele as próximas seções.</p>
<p>Para entender melhor as capacidades da solução, vamos entrar em maiores detalhes sobre cada uma das funcionalidades presentes no ecossistema!</p>
<h2 id="heading-networking">Networking</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1729008762401/a0ff759f-f20a-42f3-93b3-402b66ddbc1c.png" alt class="image--center mx-auto" /></p>
<p>As capacidades de <em>networking</em> do <strong>Cilium</strong> são expostas pelo <strong>Cilium CNI</strong>, que é o primeiro componente a ser instalado no <em>cluster</em>. Uma vez instalado, você terá de forma nativa uma série de funcionalidades já disponíveis para uso.</p>
<p>Nas capacidades de <em>networking</em>, o <strong>Cilium</strong> se diferencia por fornecer de maneira nativa recursos que precisariam ser implementados utilizando <em>add-ons</em> de outras soluções. Por termos controle de camadas mais profundas dentro do <em>cluster</em>, podemos executar operações em cima de protocolos como <em>IPv4</em>, <em>IPv6</em> e <em>BGP</em>, suportados de forma nativa pela solução.</p>
<p>Além disso, visto que a responsabilidade de gerenciar a rede dos <em>clusters</em> é do <strong>Cilium CNI</strong>, conseguimos aplicar regras de rede nas camadas 3, 4 e 7 (com suporte à políticas de roteamento personalizadas).</p>
<p>Hoje em dia é difícil encontrarmos empresas que tenham só um <em>cluster</em>. Gerenciar um ambiente já é uma tarefa complexa, se pensarmos que cada vez mais as equipes terão autonomia de gerenciar seus próprios <em>clusters</em>, a nossa <em>cluster mesh</em> se tornará “inadministrável”. Com <strong>Cilium</strong> temos a possibilidade de gerenciar as camadas de rede dos nossos <em>clusters</em> de maneira centralizada, implementando políticas de acesso entre eles e controlando diversos aspectos das interfaces de rede de cada um dos ambientes.</p>
<p>Performance e segurança são pilares prioritários no <strong>Cilium</strong> e ao notarmos as capacidades de criptografia e balanceamento de carga isso fica ainda mais evidente. Com o <em>wireguard</em> e <em>IPsec</em> podemos configurar criptografia para a rede interna do cluster e para as comunicações na camada de rede (L3/L4).</p>
<p>Com as capacidades de <em>DSR</em> (<em>Direct Server Return</em>) podemos implementar uma arquitetura performática, que garantirá a resolução das chamadas e as respostas aos <em>clients</em> de maneira mais veloz e precisa.</p>
<h2 id="heading-observabilidade">Observabilidade</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1729008780073/2858cf8c-731b-4933-b455-9e631ac3f6d2.png" alt class="image--center mx-auto" /></p>
<p>Com o objetivo de estender as funcionalidades de rede e fornecer visibilidade de uma série de coisas que ocorrem dentro do <em>cluster</em>, podemos realizar o <em>deployment</em> do <strong>Hubble</strong>, solução complementar ao <strong>Cilium CNI</strong> e <strong>Service Mesh</strong> que nos permite visualizar os <em>flows</em> existentes dentro do nosso <em>cluster</em>.</p>
<p>Para fornecer as capacidades que temos hoje, o <strong>Hubble</strong> foi separado em alguns componentes, segregando assim as responsabilidades de cada um.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1728947690636/f76a2817-896c-4496-898b-b9317029c05e.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p><strong>Server</strong> - responsável por fazer a interface com o <strong>Cilium</strong> para coleta dos eventos de rede, é executado dentro do <em>container</em> do <strong>Cilium Agent</strong>, que por sua vez é criado à partir de um <em>DaemonSet</em>.</p>
</li>
<li><p><strong>Relay</strong> - aplicação única que centraliza os <em>endpoints</em> dos <em>servers</em> que estão sendo executados no <em>cluster</em>.</p>
</li>
<li><p><strong>Hubble CLI</strong> - componente que pode ser instalado no <em>client</em> para recuperar informações do ambiente.</p>
</li>
<li><p><strong>Hubble UI</strong> - interface gráfica que interage com o <em>relay</em> para disponibilizar as informações coletadas.</p>
</li>
</ul>
<p>O desenho não mostra o <strong>Hubble CLI</strong>, que é um componente que pode ser instalado no <em>client</em> para que possamos interagir diretamente com o <strong>Hubble Server</strong>, pois não se faz obrigatório na instalação da solução no seu <em>cluster</em>.</p>
<p>Outra capacidade importante do <strong>Hubble</strong> é a visualização de métricas capturadas por coletores como o <em>prometheus</em>. Com o <strong>Hubble UI</strong> nós podemos visualizar essas métricas em formato de gráficos, tornando a identificação de problemas mais simples.</p>
<h2 id="heading-service-mesh">Service Mesh</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1729008796438/92413ff8-bbfb-49c0-a37b-abc75acbc505.png" alt class="image--center mx-auto" /></p>
<p>A <em>sidecar-less mesh</em> apresentada pelo <strong>Cilium</strong> é construída por uma junção dos componentes de <em>networking</em>, <em>observability</em> e por componentes padrão do <em>Kubernetes</em>.</p>
<p>Com o uso de componentes como o <strong>Kubernetes Ingress</strong> e a <strong>Kubernetes Gateway API</strong> podemos implementar diversas capacidades que antes eram atingidas apenas com a utilização de uma tecnolgia adicional no modelo <em>sidecar</em>.</p>
<p>Com o <strong>Cilium Service Mesh</strong> podemos implementar roteamento baseado em <em>headers</em>, <em>teste A/B</em>, <em>deployment multi-version</em>, exposição de APIs com <em>TLS</em> e <em>mTLS</em> configurados e diversas outras funcionalidades, tudo isso sem que precisemos nos preocupar com o <em>deployment</em> de <em>containers</em> distribuídos pelos nossos <em>clusters</em>.</p>
<hr />
<h1 id="heading-por-que-utilizar">Por quê utilizar?</h1>
<p>Se você é um <em>SRE</em>, <em>DevOps Engineer</em>, <em>SysAdmin</em> ou se apenas gosta de tecnologia, já pode ter percebido que gerenciar um <em>cluster</em> não é apenas garantir que ele esteja performando conforme o esperado. Além do “básico”, nós precisamos nos preocupar com <em>FinOps</em>, com as aplicações que estão sendo executadas ali “dentro”, com os <em>add-ons</em> do <em>cluster</em> (que normalmente consomem muuuuuuuitos recursos de infraestrutura, consequentemente aumentando os custos), com a segurança, controle de acesso e muitos outros pontos.</p>
<p>Até por “limitação” do <em>Kubernetes</em> muitas dessas coisas precisam de recursos adicionais para serem feitas, o que em si não é um problema, porém em determinado momento você perceberá que tem em seu ambiente recursos em execução que nem sabemos para que serve.</p>
<p>Pela forma em que foi arquitetado, o <strong>Cilium</strong> fornece diversas capacidades (das quais comentamos na seção anterior) de forma “nativa”, não havendo a necessidade de instalarmos soluções diferentes.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">É importante deixar claro que utilizar o <strong>Cilium</strong> em seus <em>clusters</em> não o proíbe de utilizar outras ferramentas, visto que elas podem se complementar. A vantagem é que algumas capacidades (como por exemplo <em>service mesh</em>) podem ser cumpridas sem a instalação de uma solução adicional.</div>
</div>

<p>Ter essas soluções de forma nativa tornará o trabalho dos times de tecnologia muito mais simples, visto que o monitoramento do ambiente e a atualização das novas versões poderá ser implementada de maneira mais rápida.</p>
<hr />
<h1 id="heading-arquitetura">Arquitetura</h1>
<p>De maneira bem simplificada, o <em>deployment</em> do <strong>Cilium</strong> se parece com o seguinte:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1729037117922/f6446fbc-7bda-4855-8fe8-aa7cb9fdb1f3.png" alt class="image--center mx-auto" /></p>
<p>Possibilitando a interação com o <em>cluster</em> e com seus componentes, temos do lado do <em>client</em> o <strong>Cilium CLI</strong> instalado no <em>laptop</em> do usuário. O <em>CLI</em> é um simples executável que facilita a instalação do <strong>Cilium</strong> e seus componentes adicionais em qualquer um que seja seu <em>cluster</em>.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Para ambientes de teste, o <em>CLI</em> se apresenta como uma excelente alternativa para realizarmos o <em>deployment</em> dos componentes. Em ambientes produtivos, que consequentemente são mais controlados, não devemos ter acesso à nenhum tipo de <em>CLI</em>, portanto a melhor forma de se realizar a instalação da solução é através de ferramentas de <em>Infrastructure as Code </em>(<em>IaC</em>) e de <strong><em>Helm Charts</em></strong>.</div>
</div>

<p>Após instalado o <strong>Cilium CNI</strong>, você poderá habilitar outros <em>add-ons</em> como <strong><em>Prometheus</em></strong> e o <strong><em>Hubble</em></strong>.</p>
<p>Aproveitando que já falamos do <strong><em>Hubble</em></strong>, na arquitetura acima temos uma referência a um “<em>port-forwarding</em>“ que é configurado. O intuito deste recurso é possibilitar o acesso local do <em>laptop</em> ao <strong><em>Hubble UI</em></strong>, que está sendo executado dentro do <em>cluster</em>. Quando configurado, o usuário poderá utilizar a <em>UI</em> com um acesso local (por padrão, o endereço é <em>http://localhost:12000</em>).</p>
<p>É importante destacar que todos os componentes do <strong>Cilium</strong> são criados de maneira a serem altamente disponíveis, garantindo que mesmo mediante a falhas nos recursos de infraestrutura que sustentam o <em>cluster</em>, nossa visibilidade dos recursos e proteção da plataforma seguirão intactos!</p>
<hr />
<h1 id="heading-implementando-cilium-no-azure-kubernetes-service">Implementando <em>Cilium</em> no <em>Azure Kubernetes Service</em></h1>
<p>Para “prepararmos o terreno” para os próximos artigos, vamos realizar a criação de um <em>cluster</em> <strong><em>Azure Kubernetes Service</em></strong> com apenas 2 <em>nodes</em> para iniciarmos nossos testes e não sermos surpreendidos com uma conta gigantesca no final do mês. Os 2 <em>nodes</em> terão baixa capacidade computacional, porém servirão perfeitamente para o propósito que desejamos cumprir.</p>
<p>Para conseguirmos criar o <em>cluster</em> de maneira simples, execute o seguinte comando em seu terminal:</p>
<pre><code class="lang-bash">az aks create \
  --resource-group &lt;resource-group&gt; \
  --name &lt;aks-cluster-name&gt; \
  --node-count 2 \
  --node-vm-size Standard_D2plds_v5 \
  --network-plugin none \
  --enable-managed-identity \
  --generate-ssh-keys
</code></pre>
<p>Aguarda a criação do seu <em>cluster</em> e recupere suas credenciais utilizando o comando:</p>
<pre><code class="lang-bash">az aks get-credentials --resource-group &lt;resource-group&gt; --name &lt;aks-cluster-name&gt;
</code></pre>
<p>Com o <em>cluster</em> no ar e o <strong><em>Cilium CLI</em></strong> instalado na sua máquina, vamos executar o seguinte comando para instalar o <strong>Cilium CNI</strong> e deixar nosso ambiente pronto para as próximas etapas:</p>
<pre><code class="lang-bash">cilium install --version &lt;cilium-version&gt; --<span class="hljs-built_in">set</span> azure.resourceGroup=<span class="hljs-string">"&lt;resource-group&gt;"</span>
</code></pre>
<p>Para garantir que tudo foi instalado corretamente, podemos abrir uma nova instância do terminal e executar o seguinte comando, que acompanhará a instalação fornecendo detalhes visuais do <em>status</em> dos componentes criados:</p>
<pre><code class="lang-bash">cilium status --<span class="hljs-built_in">wait</span>
</code></pre>
<p>Na primeira instalação, apenas o <strong>Cilium</strong> e o <strong>Operator</strong> serão criados, portanto não se assuste caso veja os outros componentes marcados com “<strong>disabled</strong>“.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">O <strong>Cilium Operator</strong> é o componente responsável por suportar algumas camadas do ciclo de vida da solução dentro do seu <em>cluster</em>. Dentre suas responsabilidades, estão: <em>cluster mesh management</em>, <em>node sync</em> e <em>IPAM</em>.</div>
</div>

<hr />
<p>Por hoje é só. Espero que tenha gostado do texto e te aguardo para falarmos mais sobre essa solução nas próximas semanas.</p>
<p>Caso tenha alguma dúvida, não deixe de me contatar no Linkedin.</p>
<p>Até logo!</p>
]]></content:encoded></item><item><title><![CDATA[Microsoft Defender for Endpoint]]></title><description><![CDATA[Semana passada presenciamos um outage global causado por uma falha nos sistemas da Crowdstrike, empresa líder no mercado de cibersegurança. A solução de EDR (Endpoint Detection and Response) é responsável por monitorar dispositivos para ameaças e ati...]]></description><link>https://pedroignacio.dev/microsoft-defender-for-endpoint</link><guid isPermaLink="true">https://pedroignacio.dev/microsoft-defender-for-endpoint</guid><category><![CDATA[#cybersecurity]]></category><category><![CDATA[Azure]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[Microsoft]]></category><dc:creator><![CDATA[Pedro Ignácio]]></dc:creator><pubDate>Sun, 28 Jul 2024 21:14:10 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1721740502107/7a6d7640-2e7d-486d-85f8-936444117de9.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Semana passada presenciamos um <em>outage</em> global causado por uma falha nos sistemas da <em>Crowdstrike</em>, empresa líder no mercado de cibersegurança. A solução de <em>EDR</em> (<em>Endpoint Detection and Response</em>) é responsável por monitorar dispositivos para ameaças e atividades suspeitas que ali podem estar ocorrendo. Como uma alternativa, temos o <strong>Microsoft Defender for Endpoint</strong>, solução de <em>EDR</em> da <em>Microsoft</em> e que iremos explorar hoje.</p>
<hr />
<h1 id="heading-o-que-e-uma-solucao-de-edr">O que é uma solução de <em>EDR</em>?</h1>
<h2 id="heading-contexto">Contexto</h2>
<p>Já parou para pensar na dimensão de certas organizações? Aquelas empresas de tecnologia globais, prestadoras de serviço que estão em todos os cantos do planeta, empresas da indústria financeira e de saúde, que contém todo tipo de dado que consideramos <strong>sensível</strong>. Essas organizações contém largas capacidades de infraestrutura e prestação de serviços e contam com ambientes de infraestrutura gigangtescos.</p>
<p>Além dos ambientes que sustentam os produtos, jornadas e serviços prestados pelas empresas, temos também seus funcionários, aqueles que residem e atuam em diversos países diferentes, em funções diferentes, com equipamentos diferentes, com clientes, parceiros e outros funcionários, fazendo de tudo: criando apresentações, construindo demonstrações, desenvolvendo <em>softwares</em>, mantendo a infraestrutura, entre outras atividades.</p>
<p>Essa extensão global dos serviços prestados pelas empresas gera um aumento exponencial na superfície de ataque exposta pelas organizações, deixando a organização cada vez mais atraente para agentes maliciosos que visam explorar alguma vulnerabilidade. Essa larga superfície exposta pode ser protegida por uma solução de <em>EDR</em>.</p>
<h2 id="heading-edr">EDR</h2>
<p>A solução de <em>EDR</em> recebe eventos os dispositivos gerenciados pela organização, realização não apenas seu monitoramento, mas também para sensibilizando outras soluções para possíveis ameaças detectadas. Essas detecções geram alertas que podem ser enviados ao time de <em>SOC</em> responsável pelas respostas à incidentes da organização em questão ou também podem servir como gatilhos para execução de <em>workflows</em> automatizados, que "resolvam" a vulnerabilidade sem a necessidade de interação humana.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1721953273794/4cd176c1-6261-43a2-b84d-d5c014763b63.png" alt class="image--center mx-auto" /></p>
<p>Com o advento da Inteligência Artificial, as soluções passaram a trazer mais funcionalidades e consequentemente gerar insights mais valiosos e eficiêntes, reduzindo a quantidade de "falsos positivos" enviados para os times de operação de cibersegurança. Acessos de usuários aos <em>endpoints</em> são <em>logados</em>, arquivos recém baixados/criados são analisados, os acessos às portas disponíveis são monitorados, e assim a monitoração e proteção dos recursos vai ganhando forma, gerando ganhos diretos e indiretos à sua organização.</p>
<hr />
<h1 id="heading-defender-for-endpoint">Defender for Endpoint</h1>
<p><img src="https://pbs.twimg.com/media/FX4BHvYXgAcFCSz.jpg:large" alt="Nıŋʝąƈąɬ 🐈 on X: &quot;This short and sweet video explains the Microsoft  Defender for Endpoint architecture. Thanks @HeikeRitter  https://t.co/6eqWb0AAy4 https://t.co/9eFMrWPnWc&quot; / X" class="image--center mx-auto" /></p>
<p>O <strong>Microsoft Defender for Endpoint</strong> faz parte da suite de produtos que compõem o <strong>Microsoft 365 Defender</strong>. Como mostra o desenho acima, retirado da documentação oficial do <em>Defender</em>, a solução pode ser integrada com diversos outros componentes disponíveis não apenas na plataforma da <em>Microsoft</em>, mas também em soluções externas utilizadas na sua empresa.</p>
<h2 id="heading-planos">Planos</h2>
<p>Antes de falarmos mais sobre as capacidades técnicas da solução, é importante deixar claro que o <em>Defender</em> está disponível em dois planos (<strong>P1</strong> e <strong>P2</strong>), que se diferenciam no preço e também em algumas das capacidades. O plano P2 se destaca por sua maior cobertura e <em>range</em> de funcionalidades. Um comparativos sobre os dois pode ser visto abaixo:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1722192862139/58979ea8-611f-4872-9d58-d87be3c9e783.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-a-solucao">A solução</h2>
<p>O <em>Defender</em> fornece uma extensa cobertura para os dispositivos gerenciados pela sua organização, bastando que o <em>onboarding</em> desses aparelhos seja feito com as configurações desejadas pela sua empresa. Se a sua empresa utiliza alguma das seguintes plataformas, o <em>Defender</em> pode ser configurado para proteger seus usuários e dispositivos:</p>
<ul>
<li><p>Windows</p>
</li>
<li><p>macOS</p>
</li>
<li><p>Android</p>
</li>
<li><p>iOS</p>
</li>
</ul>
<p>Uma vez integrados na solução, podemos começar a monitorar as ameaças que permeiam os ativos da organização e que trazem riscos às operações da empresa.</p>
<p>O <em>Defender</em> oferece 7 pilares de defesa para os <em>endpoints</em>:</p>
<ul>
<li><p>Core Vulnerability Management - recurso que possibilita a identificação de vulnerabilidades e problemas de configuração.</p>
</li>
<li><p>Attack Surface Reduction - permite a configuração de controles que serão aplicados nos dispositivos para evitar a exposição à recursos maliciosos.</p>
</li>
<li><p>Next-generation Protection - recurso de proteção avançado que garante a segurança dos <em>endpoints</em> contra as mais modernas ameaças emergentes.</p>
</li>
<li><p>Endpoint detection and response - permite identificar ameaças sofisticadas por meio de <em>queries</em> previamente escritas e solucioná-las através de automações.</p>
</li>
<li><p>Automated investigation and remediation - garante a padronização da resposta à certos alerats que são gerados com devida frequência.</p>
</li>
<li><p>Secure Score for Devices - fornece uma visão aos administradores e times de segurança das configurações de segurança dos dispositivos de acordo com certos <em>benchmarks</em> configurados.</p>
</li>
<li><p>Threat Experts - recurso de <em>hunting</em> avançado, que possibilita a integração com o <em>SOC</em> da organização para análise e respostas mais profundas em relação ao incidente.</p>
</li>
</ul>
<p>Através de recursos avançados e modernos, o <em>Defender</em> possibilita a cobertura de uma parte essencial da infraestrutura das empresas, garantindo desde a identificação das vulnerabilidades e ameaças, até as respostas e análilse dos incidentes, permitindo que a organização crie controles efetivos e que considerem os mais diversos pontos identificados pelo <em>Defender</em>.</p>
<hr />
<h1 id="heading-qual-a-importancia">Qual a importância?</h1>
<p>Com o crescimento das empresas e a maior adoção do trabalho flexível e do <em>home office</em>, as organizações perderam boa parte do controle que tinham sob o que seus funcionários podiam acessar e com o que estavam interagindo.</p>
<p>A sofisticação das ameaças cibernéticas e o aumento do uso da inteligência artificial e <em>machine learning</em> tornou a vida dos times de segurança mais complicada nos momentos de resposta às ameaças.</p>
<p>Ter uma ferramenta que fizesse uso de recursos avançados e que pudesse ser escalada conforme crescimento da sua organização (até escalas globais) passou a ser uma das prioridades dos times de segurança e executivos de tecnologia, permitindo dessa forma proteger os ativos da empresa e garantir a liberdade e flexibilidade que seus funcionários precisam para trabalhar.</p>
<hr />
<p><em>EDR</em> é um assunto extenso e nos próximos capítulos falaremos mais sobre as funcionalidades e recursos de proteção que estão disponíveis na solução.</p>
<p>Até logo!</p>
]]></content:encoded></item><item><title><![CDATA[Certificate-based Authentication]]></title><description><![CDATA[Em mais um artigo sobre segurança de identidades e acessos, vamos falar sobre o que é a autenticação baseada em certificados, quais os cenários em que pode ser utilizada e as características e peculiaridades de sua implementação. A solução base para ...]]></description><link>https://pedroignacio.dev/entraid-cba</link><guid isPermaLink="true">https://pedroignacio.dev/entraid-cba</guid><category><![CDATA[#cybersecurity]]></category><category><![CDATA[IAM]]></category><category><![CDATA[Azure]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[Security]]></category><dc:creator><![CDATA[Pedro Ignácio]]></dc:creator><pubDate>Thu, 18 Jul 2024 02:08:17 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1721084737841/af3fd8bd-574d-409c-8410-f94e0d3cd27b.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Em mais um artigo sobre segurança de identidades e acessos, vamos falar sobre o que é a autenticação baseada em certificados, quais os cenários em que pode ser utilizada e as características e peculiaridades de sua implementação. A solução base para esse artigo técnico, como sempre, será o <em>IdP</em> da <em>Microsoft</em>, o <strong>Entra ID</strong>.</p>
<hr />
<h1 id="heading-contexto">Contexto</h1>
<p>Temos notado hoje em dia que as senhas em texto plano tem entrado cada vez mais em desuso, com sua utilização desencorajada pelas principais empresas de tecnologia e orgãos reguladores. Com isso, a recomendação frequentemente vista nas empresas é do uso de <em>passwordless</em>, ou seja, autenticações que não requerem senha.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Para mais informações sobre <em>passwordless</em>, veja <a target="_blank" href="https://pedroscloudsecurity.com/implementando-authn-passwordless">este artigo</a>.</div>
</div>

<p>Dentro das organizações é comum termos uma série de contextos referentes às identidades dos usuários. Temos <strong>dispositivos gerenciados</strong> (<em>mobile</em>, <em>notebooks</em>, <em>desktops</em>, <em>tablets</em>, etc.), <strong>redes internas</strong> (<em>VPNs</em>, <em>SASEs</em>, etc.) e <strong>escritórios</strong>, o que já nos possibilita personalizar o acesso de diferentes maneiras de acordo com o local onde o usuário está, com o dispositivo que está sendo utilizado e de acordo com outros "pontos" de informação que são retirados das suas interações com as aplicações corporativas.</p>
<p>Organizações com essas características estão bem postadas para utilização de autenticação <em>passwordless</em>, inclusive fazendo uso de certificados!</p>
<hr />
<h1 id="heading-por-que-usar">Por quê usar?</h1>
<p>Habilitar diferentes maneiras de autenticação para seus usuários de acordo como cenário em que se encontram, deixará a jornada deles muito mais simples e agradável, permitindo que foquem na execução das atividades de negócio e trabalhem de maneira mais segura.</p>
<p>Os diferentes métodos de autenticação disponíveis servem para o mesmo propósito, porém fornecem ganhos diferentes. Um certificado deve ser utilizado em junção a outro fator de autenticação (como por exemplo uma leitura biométrica ou até mesmo um PIN), garantindo que o usuário que está fazendo uso daquele "objeto", é o <em>owner</em> do mesmo. Com os certificados em especial devemos implementar um fator de autenticação adicional, visto que o detentor do dispositivo onde o certificado está instalado, o poderá utilizar para acesso aos sistemas da organização.</p>
<p>Agora que entendemos a peculiaridade de utilizar um certificado como fator de autenticação, gostaria de esclarecer algo:</p>
<blockquote>
<p>Um certificado não é nada além de um "objeto" que contém informações sobre um ator/agente (não necessariamente humano) e que é utilizado para provar que quem o detém, é quem diz ser. Para as autenticações, o certificado será emitido para o usuário que planeja o utilizar, não sendo válido para outros usuários.</p>
</blockquote>
<p>Após esclarermos esse entendimento, vamos falar brevemente sobre como um certificado pode ser utilizado em uma autenticação.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1721087880741/615e3044-192b-42a9-9665-171a0ff4240c.png" alt class="image--center mx-auto" /></p>
<p>Um usuário acessa aplicações empresariais conectadas ao <strong>Microsoft Entra ID</strong> através de dispositivos gerenciados (ou pelo menos conhecidos) pela organização. Esses dispositivos, confiáveis, contém certificados criados para o usuário e atribuídos aos dispositivos registrados em seu nome. Esse certificado, junto de outras informações de seu <em>login</em>, sessão, dispositivo e contexto, é utilizado nas regras de <strong>acesso condicional</strong> presentes do <em>Entra ID</em> da empresa.</p>
<p>É importante comentar que o certificado pode ser utilizado como único fator de autenticação e também como parte de uma autenticação mais rigorosa e forte, exigindo algo a mais para que consiga se autenticar corretamente na aplicação. Como você fará depende do contexto apresentado pela sua empresa, havendo a necessidade de se analisar os requisitos apresentados e de avaliar os possíveis impedimentos técnicos.</p>
<p>Pensando na implementação dos processos e na habilitação da tecnologia, vamos falar um pouco sobre como o Entra permite esse integração e o que deve ser feito para disponibilizá-la para seus usuários.</p>
<hr />
<h1 id="heading-entendendo-a-solucao">Entendendo a solução</h1>
<p>Pensando em entender melhor como funciona o fluxo de autenticação de um usuário que utilizará um certificado, podemos ter como base a seguinte imagem:</p>
<p><img src="https://learn.microsoft.com/en-us/entra/identity/authentication/media/concept-certificate-based-authentication-technical-deep-dive/how-it-works.png" alt class="image--center mx-auto" /></p>
<p>No momento da <strong>autenticação</strong> do usuário no <em>Entra ID</em>, o <em>browser</em> disponibiliza uma caixa de seleção ao usuário para que o mesmo possa selecionar o certificado desejado dos presentes no dispositivo. Uma vez selecionado, certos campos do certificado são validados de acordo com as regras definidas no próprio <em>IdP</em>. Essa validação faz o <em>match</em> das informações da conta do usuário no <em>Entra</em> e do certificado utilizado. Esse processo de <em>matching</em> de atributos do certificado com a conta do usuário é chamado de <strong><em>binding</em></strong>. A imagem abaixo oferece uma visão de alguns <em>bindings</em> pré-configurados:</p>
<p><img src="https://learn.microsoft.com/en-us/entra/identity/authentication/media/how-to-certificate-based-authentication/issuer-and-serial-number.png" alt class="image--center mx-auto" /></p>
<p>Como podemos ver na imagem acima, na seção <em>username binding</em> é onde devemos configurar o <em>Entra</em> para referenciar alguns campos do certificado com alguns campos do usuário.</p>
<p>A coluna "<em>Affinity binding</em>" define a "força" do atributo que será utilizado no <em>binding</em>, classificando alguns campos como "baixos" e alguns como "altos".</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1721167387538/a248f62a-28ce-4308-98be-0e706bffaa57.png" alt class="image--center mx-auto" /></p>
<p>Acima estão listados os campos do certificado que podem ser selecionados e qual a "força" de cada um deles. Entenda que por "<em>High affinity</em> - alta afinidade" nós temos campos que são mais <strong>confiáveis</strong> e por isso tem valor maior no momento de autenticação do usuário.</p>
<p>Esses <em>bindings</em> são importantes pois no momento de autenticação do usuário perante o <em>Entra</em>, os valores cadastrados no <em>binding</em> serão validados e levados em conta no momento da avaliação do processo de autenticação.</p>
<p>A imagem abaixo mostra a visão de uma autenticação via certificado rejeitada pelo <em>Entra</em>.</p>
<p><img src="https://learn.microsoft.com/en-us/entra/identity/authentication/media/concept-certificate-based-authentication-technical-deep-dive/validation-error.png" alt="Microsoft Entra certificate-based authentication technical deep dive -  Microsoft Entra ID | Microsoft Learn" class="image--center mx-auto" /></p>
<p>Os problemas podem ser dos mais variados, <em>affinity bindings</em> configurados de maneira errônea, certificado vencido, problemas com o certificado, entre outras. Ao receber um erro em seu processo de autenticação, valide o passo a passo realizado, conferindo todas as etapas do processo.</p>
<hr />
<h1 id="heading-pontos-de-preocupacao">Pontos de preocupação</h1>
<p>Como qualquer solução, além de seus pontos positivos, é necessário jogar luz nos pontos negativos.</p>
<p>Os certificados são extremamente úteis em diversos cenários, mas se implementados de maneira incorreta ou sem os devidos processos definidos, podem apresentar grande risco à sua organização.</p>
<p>Para que sua implementação tenha sucesso, os <strong>processos</strong> relacionados à gestão do ciclo de vida dos certificados devem estar maduros e eficientes. É importante que um certificado seja atualizado quando estiver próximo de seu vencimento, que um usuário desligado da organização tenha seu certificado invalidado (o proibindo de utilizá-lo em autenticações subsequentes), que os times de gestão tenham o histórico e as informações relacionadas aos certificados gerados e que todo o processo, desde a geração até a entrega do objeto seja automatizado e "limpo". Por se tratar de algo que impactará diretamente no dia a dia de trabalho dos funcionários, interrupções no processo e demora nas entregas poderão ser os grandes culpados da improdutividade das equipes, tornando assim a solução inviável.</p>
<p>Outro ponto importante e que foi mencionado anteriormente é a necessidade de se utilizar o certificado em junção a outra solução. Por estarem "presos" aos dispositivos, um usuário em posse daquela plataforma oferece grande risco aos ativos ali gerenciados. Combinar a autenticação baseada em certificado com uma leitura biométrica do <em>windows hello for business</em> ou com uma chave <em>FIDO2</em> ou até com um <em>push</em> gerado pelo <em>Microsoft Authenticator</em> no dispositivo móvel do usuário, reduzirá os riscos exponencialmente, mantendo a experiência agradável e tornando o ambiente mais seguro.</p>
<hr />
<p>O processo de autenticação da sua empresa não precisa ser moroso e complicado para ser seguro. Utilizando das tecnologias corretas e de processos bem implementados, a experiência dos usuários pode ser muito agradável e com segurança <em>end-to-end</em>.</p>
<p>Espero que tenha gostado do artigo e que de alguma forma eu tenha contribuido para a melhora da postura de segurança em seu ambiente.</p>
<p>Até logo!</p>
]]></content:encoded></item><item><title><![CDATA[Microsoft Defender for Storage: malware scanning]]></title><description><![CDATA[No artigo anterior falamos de maneira geral sobre as capacidades do Defender for Storage e como o mesmo pode contribuir para a proteção dos storages da sua empresa. Hoje vamos falar com mais detalhes sobre as varreduras que o Defender faz em seus blo...]]></description><link>https://pedroignacio.dev/microsoft-defender-for-storage-malware-scanning</link><guid isPermaLink="true">https://pedroignacio.dev/microsoft-defender-for-storage-malware-scanning</guid><category><![CDATA[#cybersecurity]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[Azure]]></category><category><![CDATA[General Programming]]></category><category><![CDATA[Microsoft]]></category><dc:creator><![CDATA[Pedro Ignácio]]></dc:creator><pubDate>Wed, 03 Jul 2024 02:56:04 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1719975196827/09e4fc0d-bcd4-46bd-a737-950499891979.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>No <a target="_blank" href="https://pedroscloudsecurity.com/microsoft-defender-for-storage">artigo anterior</a> falamos de maneira geral sobre as capacidades do <strong>Defender for Storage</strong> e como o mesmo pode contribuir para a proteção dos <em>storages</em> da sua empresa. Hoje vamos falar com mais detalhes sobre as varreduras que o Defender faz em seus <em>blobs</em> e como utilizar esse recurso para montar sua arquitetura.</p>
<hr />
<h1 id="heading-entendendo-o-recurso">Entendendo o recurso</h1>
<p>Nas fundações das estruturas em nuvem, temos o design, construção e configuração da camada de rede (<em>virtual networks</em>, <em>subnets</em>, <em>firewalls</em>, etc). A construção dessa camada estabelece o perímetro do nosso ambiente, principalmente quando adotamos uma arquitetura <em>hub-and-spoke</em>. É necessário garantir que tudo que estiver entrando em nosso ambiente, tenha sido devidamente analisado e seja seguro.</p>
<p>Exigir que os primeiros passos de um objeto dentro do nosso ambiente sejam a validação de integridade daquele arquivo não exime validações posteriores (principalmente quando estivermos colocando em prática uma arquitetura <em>zero trust</em>).</p>
<p>Para garantirmos a tranquila ingestão dos arquivos disponibilizados de diferentes maneiras (através de interfaces com clientes, parceiros, etc.) é importante realizar uma varredura e possivelmente implementar um processo de segregação dos <em>blobs</em> para garantir que apenas os documentos "limpos" e íntegros possam ser consumidos e internalizados nas diferentes construções feitas em seu ambiente.</p>
<p>Considerando que o <strong>Microsoft Defender for Storage</strong> está habilitado em sua <strong>Storage Account</strong> e o recurso de <em>malware scanning</em> está configurado, podemos começar a trabalhar para proteger nossos <em>storages</em> e também nossas soluções como um todo.</p>
<h2 id="heading-como-a-solucao-funciona">Como a solução funciona?</h2>
<p>Uma vez ativo, o <em>defender for storage</em> irá escanear todos os arquivos que forem colocados nas <em>storage accounts</em> que estiverem sendo monitoradas. Por padrão, é criado um <strong>Azure Event Grid System Topic</strong> que receberá todos os eventos disparados pela <strong><em>storage account</em>.</strong> Esse tópico pode ser utilizado por outras soluções para decidir o que fazer com o objeto (entraremos em mais detalhes na próxima seção).</p>
<p>Ao receber o evento <strong><em>BlobCreated</em></strong> na <em>storage account</em>, o <em>defender for storage</em> executará o <em>malware scanning</em> em <em>near real time</em>, disponibilizando rapidamente o resultado da análise.</p>
<p>O objeto analisado, por padrão, é mantido na <em>storage account</em>, a não ser que uma automação seja criada para removê-lo ou modificá-lo. Após a análise, o <em>blob</em> tem uma <em>tag</em> criada em si, representando o resultado da análise. Essa <em>tag</em> é representada como na imagem abaixo:</p>
<p><img src="https://learn.microsoft.com/en-us/azure/defender-for-cloud/media/defender-for-storage-malware-scan/blob-index-tags.png#lightbox" alt="Screenshot that shows an example of a blob index tag." class="image--center mx-auto" /></p>
<p>Além disso, caso seja identificado uma espécie de <em>malware</em> em um dos arquivos, será gerado também um alerta na seção <strong>Security Alerts</strong> do <strong>Microsoft Defender for Cloud</strong>. O alerta será semelhante ao representado abaixo:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1719961522279/c3146790-d1cd-4774-ac2a-7ba6a3956eb9.png" alt class="image--center mx-auto" /></p>
<p>Ao selecionar o alerta, você pode ter mais informações sobre o evento gerado e tudo que está relacionado a ele. Na seção "MITRE ATT&amp;CK" podemos visualizar os vetores de ataque que estão relacionados com esse evento e de que forma nosso ambiente pode ser prejudicado caso seja exposto a esse <em>malware</em>.</p>
<p>O tópico do <em>event grid</em> criado para envio dos eventos gerados pela <em>storage account</em> também pode ser consumido com o objetivo de validar a verificação contra <em>malware</em> e automatizar a manipulação dos arquivos.</p>
<hr />
<h1 id="heading-respondendo-as-analises">Respondendo às análises</h1>
<p>Falamos com profundidade sobre como a solução funciona e o que é possível fazer com ela, agora vamos comentar sobre as automações que podem ser construídas com recursos nativos da nuvem.</p>
<h2 id="heading-utilizando-as-analises-geradas">Utilizando as análises geradas</h2>
<p>Após configurar seu <em>defender</em> (independente do nível), chegou a hora de fazer uso dos resultados das análises. Os eventos gerados pelo <em>defender</em> permitem a criação de <em>workflows</em> e arquiteturas orientadas a eventos. Vamos explorar essas opções nas seções abaixo.</p>
<p><img src="https://learn.microsoft.com/en-us/azure/defender-for-cloud/media/defender-for-storage-malware-scan/view-and-consume-malware-scan-results.png" alt="Diagram showing flow of viewing and consuming malware scanning results." class="image--center mx-auto" /></p>
<p>A imagem acima, retirada da documentação oficial da Microsoft, lista os métodos de integração com os resultados do <em>scanning</em> feito pelo <em>defender for storage</em>. Podemos utilizar as funcionalidades e recursos representados acima como "repositórios" para os resultados gerados pelo <em>scan</em>. Esses repositórios fornecem maneiras de integração com outros recursos da plataforma, que permitirão a automação e a construção de soluções <em>serverless</em> e orientadas a eventos.</p>
<p>O desenho abaixo mostra as diferentes maneiras que cada recurso pode ser integrado:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1719970597842/d440f909-9682-4375-811c-c6c2238c9b3c.png" alt class="image--center mx-auto" /></p>
<p>As 4 formas de integração são representadas pela seção <em>Integration</em>. Os <strong>Security Alerts</strong> do <strong>Defender for Cloud</strong> podem ser utilizados para acionamento da equipe de <em>SOC</em> e para automações utilizando o <strong>Azure Logic Apps</strong>. Os dois recursos farão uso dos alertas gerados pelo <em>defender</em> para serem executados. Esses alertas são gerados automaticamente, com a criticidade devida e com as características do tipo de ameaça identificada.</p>
<p>As <strong>Index Tags</strong> colocadas nos <em>blobs</em> podem ser utilizadas pela sua aplicação para garantir que o documento acessado é de fato seguro e não representa nenhum perigo para a solução. Caso a arquitetura montada faça uso de <em>storages</em> secundários para armazenamento dos arquivos válidos, a análise das <em>tags</em> garante uma segunda etapa de validação.</p>
<p>A terceira opção elencada representa o uso do <strong>Azure Event Grid</strong>, solução de <em>streaming</em> que permite a construção de arquiteturas orientadas a eventos. Fazendo uso das <strong>Azure Functions</strong>, podemos criar uma aplicação que recebe os estímulos vindos do <em>event grid</em> e respondem como desejado. Nos eventos enviados ao <em>grid</em> pelo <em>defender for storage</em>, devemos nos atentar nas propriedades <strong><em>eventType</em></strong> e <strong><em>scanResultType</em></strong>, que fornecem informações sobre o resultado da análise de <em>malware</em> feita no <em>blob</em>.</p>
<p>Por último temos o <strong>Log Analytics Workspace</strong>. Esse recurso não tem o propósito de automatizar qualquer tipo de resposta ou operação, a proposta é ingerir os <em>logs</em> gerados pelo <em>defender</em> e analizá-los, a fim de obter <em>insights</em> sobre os arquivos carregados e sobre os resultados obtidos. Todos os resultados são colocados em uma tabela chamada <strong><em>StorageMalwareScanningResults</em></strong>, sendo a fonte que deve ser consultada para visualização das métricas e <em>logs</em> gerados pelo <em>defender</em>.</p>
<hr />
<h1 id="heading-testando">Testando</h1>
<p>Com o intuito de testar a viabilidade da solução, podemos seguir o passo a passo do seguinte repositório: <a target="_blank" href="https://github.com/Azure/Microsoft-Defender-for-Cloud/blob/main/Labs/Modules/Module%2019%20-%20Defender%20for%20Storage.md">Defender for Storage - Labs</a>.</p>
<p>O repositório contém todo o passo a passo desde como configurar o <em>defender</em> até como visualizar alertas e automatizar as respostas aos eventos.</p>
<p>O <em>lab</em> consiste na configuração da solução e <em>upload</em> de alguns arquivos, incluindo um arquivo que contém conteúdo possivelmente malicioso. Podemos visualizar os alertas gerados no <em>defender for cloud</em>, as <em>index tags</em> criadas nos <em>blobs</em> analisados e criar uma aplicação para consumir o tópico do <em>azure event grid</em> criado.</p>
<hr />
<p>Proteger os <em>storages</em> vai muito além de garantir apenas a segurança dos arquivos, precisamos pensar também no controle de acessos e nas configurações de rede, mas ter a garantia de que os conteúdos utilizados pela soluções estão livres de ameaças, dá a liberdade que as equipes precisam para continuar evoluindo suas jornadas e seus produtos.</p>
<p>Espero que tenha gostado do conteúdo.</p>
<p>Até logo!</p>
]]></content:encoded></item><item><title><![CDATA[Microsoft Defender for Storage]]></title><description><![CDATA[Você já se deparou com a necessidade de receber arquivos de fontes externas sem a certeza da confiabilidade da origem? Já olhou para suas subscriptions e se questionou se havia algo a mais que pudesse ser feito para proteger melhor seus storages? Hoj...]]></description><link>https://pedroignacio.dev/microsoft-defender-for-storage</link><guid isPermaLink="true">https://pedroignacio.dev/microsoft-defender-for-storage</guid><category><![CDATA[#cybersecurity]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[Azure]]></category><category><![CDATA[General Programming]]></category><category><![CDATA[technology]]></category><dc:creator><![CDATA[Pedro Ignácio]]></dc:creator><pubDate>Wed, 19 Jun 2024 00:59:07 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1718758682349/432152a8-efa3-4c5f-9432-179336de29bf.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Você já se deparou com a necessidade de receber arquivos de fontes externas sem a certeza da confiabilidade da origem? Já olhou para suas <em>subscriptions</em> e se questionou se havia algo a mais que pudesse ser feito para proteger melhor seus <em>storages</em>? Hoje falaremos sobre o Defender for Storage, solução parte do Defender for Cloud que permite reforçar a segurança das suas <em>storage accounts</em> e garantir a integridade da sua plataforma.</p>
<hr />
<h1 id="heading-o-que-e-o-defender-for-storage">O que é o Defender for Storage?</h1>
<p><img src="https://learn.microsoft.com/en-us/azure/defender-for-cloud/media/defender-for-storage-introduction/defender-for-storage-benefits.png" alt="Diagram showing the benefits of using Defender for Storage to protect your data." /></p>
<p>Como comentamos no último artigo, o <strong>Microsoft Defender for Cloud</strong> é a solução de CNAPP (<em>Cloud Native Application Protection Platform</em>) da Microsoft e entre seus muitos módulos, temos o <em>Defender for Storage</em>.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Para relembrar: a proposta do <strong><em>CNAPP</em></strong> é ter de maneira centralizada todas as soluções de segurança necessárias para proteger suas aplicações <em>cloud native</em>. A cobertura de uma solução de <em>CNAPP</em> vai desde o <em>commit</em> do código através das <em>pipelines</em> e chegando aos repositórios, até a execução desse código nas plataformas <em>cloud</em> (em <em>virtual machines</em>, <em>contêineres + kubernetes</em>, etc). Todo o ciclo de vida da aplicação e da infraestrutura em nuvem, é visível através das <em>dashboards</em> do <em>CNAPP</em>, oferecendo aos times de segurança maior conforto e confiança para proteger as iniciativas de negócio.</div>
</div>

<p>O <strong>Microsoft Defender for Storage</strong> nos permite incrementar a postura de segurança das nossas <em>storage accounts</em>, bem como proteger nosso ambiente contra arquivos maliciosos que podem ter sido inseridos e também contra vazamentos de dados pessoais.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">O <em>Defender for Storage</em> está disponível para as ofertas: <em>Azure Files</em>, <em>Azure Data Lake Storage Gen2</em> e <em>Azure Blob Storage</em>.</div>
</div>

<p>Utilizar uma solução como o <em>Defender</em> para aumentar a profundidade de proteção nos recursos do seu ambiente trará inúmeros benefícios para sua empresa. Os times de segurança da sua organização poderão aproveitar recomendações personalizadas e análises de segurança avançadas, garantindo um nível de proteção diferenciado ao seu <em>storage</em> e mantendo seu ambiente livre das ameaças mais avançadas.</p>
<p>Chegou a hora de explorar em alto nível os recursos expostos pelo <em>Defender for Storage</em>, passando nas próximas seções para os recursos mais relevantes na solução.</p>
<h2 id="heading-capacidades">Capacidades</h2>
<p>Como falamos na seção anterior, o <em>Defender</em> é utilizado para garantir que nossos <em>storages</em> estejam sempre protegidos e alinhados com as melhores práticas e configurações, porém para garantirmos a extração de todo o potencial da solução, é importante entender o que ela pode fazer.</p>
<ul>
<li><p><strong><em>Recommendations</em></strong> - também presente nas outras soluções do <em>Defender for Cloud</em>, as recomendações visam propor melhorias para seus recursos, com o intuito de deixá-los mais seguros. Essas recomendações são classificadas de acordo com a criticidade e podem ter a resposta automatizada, garantindo maior facilidade na adesão das mesmas.</p>
</li>
<li><p><strong><em>Threat Detection</em></strong> - "carro chefe" do <em>Defender</em>, as capacidades de <em>threat detection</em> analisam o comportamento dos usuários, consumo dos recursos e integridade dos objetos armazenados nos contêineres e <em>file shares</em>. Atividades suspeitas e atores maliciosos são detectados pelo <em>Defender</em> e podem ser rapidamente anulados pelas estratégias de resposta configuradas pela sua empresa.</p>
<ul>
<li><strong><em>Sensitive Data Threat Detection</em></strong> - faz uso do motor de identificação de informações sensíveis utilizado pelo <strong>Microsoft Purview</strong> (<em>Sensitive Data Discovery</em>) para reconhecer possíveis exposições de dados pessoais e confidenciais dentro dos <em>storages</em>.</li>
</ul>
</li>
<li><p><strong><em>Malware Scanning</em></strong> - para garantirmos a integridade dos documentos publicados em nossos contêineres <em>blob</em>, podemos realizar varreduras nesses arquivos para garantir a inexistência de <em>malwares</em> e outros agentes que podem vir a se infiltrar em nosso ambiente com o intuito de explorá-lo e causar prejuízos a organização.</p>
</li>
</ul>
<h2 id="heading-habilitacao">Habilitação</h2>
<p>Habilitar o <em>Defender for Storage</em> não é nada complicado, você pode fazer isso diretamente do painel da sua <em>storage account</em> ou do portal centralizado do <em>Defender for Cloud</em>. O <em>Defender for Storage</em> pode também ser ativo no nível das <em>subscriptions</em>, disponibilizando todas as capacidades de segurança para todas as <em>storage accounts</em> ali presentes.</p>
<p>A funcionalidade de <em>Malware Scanning</em> não é ativa por padrão, porém pode ser habilitada com apenas um "tick" em uma das caixinhas do formulário disponibilizado na página.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Não é uma boa prática de arquitetura deixar alguns <em>storages habilitados</em> e outros não. É importante que seus repositórios estejam sempre protegidos com as recomendações baseadas no <strong>Microsoft Cloud Security Benchmark</strong>. Para garantir proteção em todos os repositórios da sua organização, é recomendado o uso de <em>policies</em> para garantir a correta habilitação da funcionalidade.</div>
</div>

<h2 id="heading-pricing">Pricing</h2>
<p>Os custos de proteger melhor seu ambiente não deveriam ser considerados um problema, mas é importante se manter de olho nos valores.</p>
<p>O <em>Defender for Storage</em> é cobrado mensalmente pela quantidade de <em>storage accounts</em> ativas em sua <em>subscription</em>. O valor é de <strong>10 dólares/mês</strong> com um possível acréscimo de acordo com a quantidade de requisições feitas para o <em>storage</em>.</p>
<p>A funcionalidade de <em>Malware Scanning</em> também representa um acréscimo na conta mensal, porém dessa vez sendo cobrada por GB de dados processados. O valor é de <strong>0.15 dólares/GB</strong>. Para controlar o gasto com essa funcionalidade, podemos configurar um limite de transações (em GB) por mês para o <em>storage</em> em questão, garantindo assim que sua conta não seja astronômica!</p>
<hr />
<h1 id="heading-malware-scanning">Malware Scanning</h1>
<p>Como comentado brevemente, o <em>Defender for Storage</em> tem a capacidade de avaliar a integridade dos arquivos armazenados em seus repositórios. Essa funcionalidade habilita a criação de soluções escaláveis e que utilizam o <em>Azure Storage Account</em> como seu <em>core</em> e de maneira abundante.</p>
<p>O <em>malware scanning</em> possibilita que suas soluções confiem nos arquivos armazenados nos <em>storages</em>, pois garante que cada arquivo que passar pelo repositório terá sido escaneado e está seguro para sua ingestão.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1718752138197/44212940-76dd-454b-afc2-dedfa1b17be5.png" alt class="image--center mx-auto" /></p>
<p>A arquitetura acima demonstra em alto nível o funcionamento da solução e suas possíveis integrações para automação.</p>
<p>Podemos utilizar um tópico do <em>Azure Event Grid</em> para realizar a análise dos eventos gerados pelo <em>Defender for Storage</em> e agir conforme desejado. Outra forma é o uso direto dos alertas gerados pelo <em>Defender</em>, que podem ser integrados com o <em>Azure Logic Apps</em> para recebimento dos alertas e automação da resposta.</p>
<p>As duas formas de automação abrem o leque para as possibilidades de criação de soluções responsivas e escaláveis, deixando com você a responsabilidade de escolher a opção que melhor se encaixa nos seus requisitos.</p>
<hr />
<h1 id="heading-sensitive-data-threat-detection">Sensitive Data Threat Detection</h1>
<p>Desviando um pouco do assunto "<em>malware detection</em>", vamos falar sobre a capacidade de <em>DLP</em> (<em>Data Loss Prevention</em>) e proteção contra vazamento de dados sensíveis do <em>Defender for Storage</em>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1718757419231/56360bd5-32be-4e49-ad27-1147b9651a97.png" alt class="image--center mx-auto" /></p>
<p>Utilizando o motor de identificação e classificação de dados do <strong><em>Microsoft Purview</em></strong> (solução de proteção de dados e informações), o <em>Defender for Storage</em> disponibiliza uma camada de segurança contra o vazamento de informações sensíveis vindas da sua organização.</p>
<p>Podemos monitorar os repositórios para identificar padrões de dados publicamente conhecidos como sensíveis (<em>PII</em> - <em>Personal Identifiable Information</em>, <em>PCI</em> - <em>Payment Card Industry</em>) e evitar que essas informações caiam nas mãos erradas, protegendo sua organização de possíveis multas e processos legais.</p>
<p>Podemos também monitorar o vazamento de informações confidenciais da sua organização, fazendo uso das poderosas <em>Sensitivity Labels</em>. Essas <em>labels</em> são aquelas classificações disponíveis nas soluções do <em>Office 365</em> que permitem classificar o nível de confidencialidade de um documento (público, interno e confidencial). Fazer uso dessas <em>labels</em> em toda a organização pode evitar muitos problemas para sua empresa.</p>
<p>As <em>Custom Sensitivity Information Types</em> nos permitem identificar informações únicas ao seu negócio através de regras customizadas. Esse recurso permite uma maior cobertura das informações valiosas para o seu negócio, evitando também perdas internas da organização.</p>
<hr />
<p>Espero que tenha gostado do artigo e que eu tenha conseguido te auxiliar a reforçar a segurança da sua organização. Estou à disposição para conversarmos através das minhas redes sociais, que se encontram em meu perfil aqui no blog.</p>
<p>Até logo!</p>
]]></content:encoded></item><item><title><![CDATA[#KuberTENes, Cloud Native Meetup - São Paulo - 06/06]]></title><description><![CDATA[No dia 07/06/2014 foi criado o projeto open source de maior sucesso da história, o Kubernetes! Com o passar dos anos, essa gigante plataforma de orquestração de contêineres foi adotada pelas maiores empresas do mundo e hoje contém milhares de contrib...]]></description><link>https://pedroignacio.dev/kubertenes-cloud-native-meetup-sao-paulo-0606</link><guid isPermaLink="true">https://pedroignacio.dev/kubertenes-cloud-native-meetup-sao-paulo-0606</guid><category><![CDATA[Open Source]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[CNCF]]></category><dc:creator><![CDATA[Pedro Ignácio]]></dc:creator><pubDate>Fri, 07 Jun 2024 03:00:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1717984706363/34f60e2c-fa99-4070-bef9-f7cb7c650c06.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>No dia 07/06/2014 foi criado o projeto <em>open source</em> de maior sucesso da história, o <strong><em>Kubernetes</em></strong>! Com o passar dos anos, essa gigante plataforma de orquestração de contêineres foi adotada pelas maiores empresas do mundo e hoje contém milhares de contribuidores ao redor do globo. Como bons amantes das soluções <em>open source</em> e parte da iniciativa global da <strong>CNCF</strong>, nosso <em>chapter cloud native - São Paulo</em> fez questão de se reunir e comemorar esse marco tão importante da comunidade <em>open source</em>.</p>
<hr />
<h1 id="heading-como-foi-o-encontro">Como foi o encontro?</h1>
<p>Como todos os nossos encontros do <em>chapter cloud native</em>, as principais regras de participação são o <strong>respeito</strong> e a <strong>diversidade</strong>, mantendo um ambiente confortável para que todos possam se expressar da maneira que bem desejarem.</p>
<p>O encontro foi hospedado no escritório da Claro Brasil em São Paulo, no dia 06/06/2024, quinta-feira das 18:00 às 21:00. Como todos os eventos, contamos com uma série de patrocinadores que de diferentes formas, mantém as ações da comunidade vivas e acessíveis para todos. O <em>flyer</em> abaixo contém informações sobre o evento e sobre os patrocinadores.</p>
<p><a target="_blank" href="https://www.linkedin.com/feed/update/urn:li:activity:7203839569237127168/"><img src="https://media.licdn.com/dms/image/D4D22AQGs6PpXB4MLfA/feedshare-shrink_800/0/1717529192836?e=1721865600&amp;v=beta&amp;t=BYOtT-y59dyfOKlRyNyCQa_UEeuwaUScm0SF2Eu5z0k" alt="Pré-visualização da imagem" class="image--center mx-auto" /></a></p>
<p>Nosso encontro se iniciou com uma <em>talk</em> sobre "a vida de um contribuidor <em>open source</em>", comandada pelo amigo <em>Ricardo Katz</em>. Logo em seguida, partimos para o <em>open mic</em> e seção de <em>networking</em>, onde pudemos sentar para conversar com amigos contribuidores e entusiastas e discutir sobre as iniciativas <em>open source</em> em que estamos presentes.</p>
<p>Os encontros costumam contar com o apoio das empresas patrocinadoras para compra de caixas de pizzas e bebidas (refrigerantes, sucos e cervejas) e ao final das <em>talks</em>, nos juntamos por algumas horas para conversar com os amigos e conhecer novos integrantes do grupo.</p>
<hr />
<h1 id="heading-talks-e-open-mic"><em>Talks</em> e <em>Open Mic</em></h1>
<p>Como comentei brevemente na seção anterior, o <em>meetup</em> foi dividido em duas partes, sendo a primeira uma <em>talk</em> sobre contribuição aos projetos <em>open source</em> e a segunda um espaço aberto para qualquer um que desejasse compartilhar sua experiência com os projetos.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1719269629865/ba1b7985-7f19-4d3e-9cb6-f698047ef6d4.jpeg" alt class="image--center mx-auto" /></p>
<p>Na seção de <em>open mic</em> tivemos diversos amigos compartilhando suas experiências com <em>open source</em>. Alguns falaram sobre como a comunidade e os responsáveis pelos projetos foram acolhedores e essenciais para que continuassem interagindo com os grupos, mas também tivemos alguns colegas reportando suas experiências negativas e como agiram em cima disso para melhorar a comunidade que abriga o projeto.</p>
<hr />
<h1 id="heading-algumas-fotos-e-posts">Algumas fotos e <em>posts</em></h1>
<p>Para registrarmos o sucesso do nosso encontro, aqui vão algumas fotos com os amigos e alguns dos <em>posts</em> feitos no Linkedin.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1719271965022/276e021f-5daa-4844-aa5f-b595845f47ea.png" alt class="image--center mx-auto" /></p>
<p>Meus registros sobre o <em>meetup</em> bem como informações sobre os outros participantes e organizadores: <a target="_blank" href="https://www.linkedin.com/posts/pedroirufo_kubertenes-activity-7204887843180072962-jwAU?utm_source=share&amp;utm_medium=member_desktop">linkedin</a>.</p>
<hr />
<p>Esse foi apenas um dos muitos encontros que temos ao longo do ano, se você se interessa por tecnologias <em>open source</em> e gostaria de fazer parte do grupo pode se inscrever no <em>website</em> oficial da <em>CNCF</em> e se juntar ao nosso grupo <strong><em>CNCF Cloud Native São Paulo</em></strong>: <a target="_blank" href="https://community.cncf.io/cloud-native-sao-paulo/"><em>website</em></a>. Temos outros <em>chapters</em> que podem ser visualizados aqui: <a target="_blank" href="https://community.cncf.io/"><em>community groups</em></a>.</p>
<p>Até mais!</p>
]]></content:encoded></item><item><title><![CDATA[Qual a importância de termos uma solução de CNAPP?]]></title><description><![CDATA[A boa gestão de segurança dos ambientes foi um problema levado do on-premise à nuvem pública. A necessidade de termos diversas ferramentas para monitorar a postura de segurança dos recursos deixava os times desconfortáveis, pois os times frequentemen...]]></description><link>https://pedroignacio.dev/defender-for-cloud</link><guid isPermaLink="true">https://pedroignacio.dev/defender-for-cloud</guid><category><![CDATA[#cybersecurity]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[Azure]]></category><category><![CDATA[Security]]></category><category><![CDATA[AWS]]></category><dc:creator><![CDATA[Pedro Ignácio]]></dc:creator><pubDate>Wed, 05 Jun 2024 00:40:47 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1717541235537/4fa36186-64f5-4b9d-bc35-2fe618ad3cdf.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A boa gestão de segurança dos ambientes foi um problema levado do on-premise à nuvem pública. A necessidade de termos diversas ferramentas para monitorar a postura de segurança dos recursos deixava os times desconfortáveis, pois os times frequentemente descobriam recursos não monitorados (e que consequentemente apresentavam riscos à saúde do ambiente). Hoje falaremos do CNAPP (em especial do Microsoft Defender for Cloud), uma solução que veio para deixar a vida dos times de segurança mais tranquila.</p>
<hr />
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Antes de iniciarmos o conteúdo, faço questão de mencionar meu amigo Yuri Diógenes (<a target="_blank" href="https://www.linkedin.com/in/yuridiogenes/">https://www.linkedin.com/in/yuridiogenes/</a>), <em>Principal PM</em> do <strong>Microsoft Defender for Cloud</strong> e a maior referência quando o assunto é CNAPP. Aproveito para deixar este link para uma de suas palestras sobre o tema: <a target="_blank" href="https://www.youtube.com/watch?v=5w42kQ_QjZg">Improving your multi-cloud security with a Cloud Native Application Protection Platform (CNAPP).</a></div>
</div>

<hr />
<h1 id="heading-o-que-e-cnapp">O que é CNAPP?</h1>
<p><img src="https://sp-ao.shortpixel.ai/client/to_auto,q_glossy,ret_img,w_1024,h_508/https://www.deepfactor.io/wp-content/uploads/2022/01/Devops-History-Definition-Business-Impact-1024x508.png" alt="What is a Cloud Native Application Protection Platform (CNAPP)?" /></p>
<p>O termo <strong>CNAPP</strong> (<em>Cloud Native Application Protection Platform</em>) faz referência a uma solução centralizada de segurança para ambientes <em>cloud</em>. Todas as funcionaliades de segurança necessárias em um ambiente <em>cloud</em>, estão presentes na solução, facilitando o trabalho dos administradores e dos times de segurança.</p>
<p>Uma característica importantíssima das soluções de CNAPP é a segurança de ambientes <em>multi-cloud</em>, não se limitando apenas a um provedor. Para que sua organização consiga extrair todos os benefícios da solução, é importante que você escolha uma ferramenta que habilite essa visão <em>cross-provider</em>, caso contrário, teremos replicado o problema de se ter múltiplas visões dos ambientes, tendo que orquestrar diferentes soluções, paineis e acessos.</p>
<p>Além do suporte <em>multi-cloud</em> e visão centralizada, as seguintes (também) são características das soluções de CNAPP existentes no mercado:</p>
<ul>
<li><p><strong>CSPM</strong> (<em>Cloud Security Posture Management</em>) - importante em qualquer ambiente <em>cloud</em>, a solução de CSPM é a responsável por fornecer uma visão de como o ambiente está em relação aos <em>benchmarks</em> e melhores práticas de mercado. Com ela podemos visualizar as configurações críticas que não estão aplicadas em nosso ambiente e solucionar o tal problema, garantindo assim uma melhor cobertura das boas práticas de segurança.</p>
</li>
<li><p><strong>CWPP</strong> (<em>Cloud Workload Protection Platform</em>) - focado nos recursos do provedor de nuvem, o CWPP identifica e analisa ameaças nos recursos da plataforma. A análise de ameaças é feita nos <em>workloads</em> que estão sendo rodando em seu ambiente, explorando a variedade de opções existentes para execução dessas aplicações.</p>
</li>
<li><p><strong>CIEM</strong> (<em>Cloud Infrastructure Entitlement Management</em>) - considerado uma parte da disciplina de IAM (<em>Identity and Access Management</em>) o CIEM é responsável por centralizar o gerenciamento de acessos privilegiados nos provedores. Essas contas (muitas vezes superpoderosas) apresentam alto risco ao ambiente, pois caso comprometidas, possibilitarão ao detentor das credenciais, alto escopo de acessos ou de permissões.</p>
</li>
</ul>
<p>Essa são algumas das principais características de uma solução de CNAPP. Com o intuito de incentivar a adoção desse tipo de ferramenta em sua organização, vamos agora falar sobre os benefícios que uma ferramenta como o Defender for Cloud pode trazer para o seu ambiente.</p>
<hr />
<h1 id="heading-beneficios">Benefícios</h1>
<p>Na seção anterior, mencionamos algumas vezes a tendência das empresas de adoatarem múltiplos provedores de nuvem e a complexidade que isso gera no trabalho dos times de segurança. Somado a isso, a vasta variedade de recursos que podem ser criados nas plataformas fazem com que qualquer problema de configuração possa se tornar em uma tremenda dor de cabeça para a sua organização.</p>
<p>Se tirarmos os olhos do painel centralizado e focarmos nos recursos existentes em cada uma das ofertas da solução, enxergaremos ainda melhor os benefícios gerados.</p>
<p>Para as integrações ao <em>SDLC</em> (<em>Software Development Lifecycle</em>), podemos garantir aos times de engenharia de software a tranquilidade de saber que o código executado em produção foi escaneado para vulnerabilidades de diversas maneiras. Análises do código foram feitas durante o pipeline, buscando situações perigosas e que pudessem comprometer a integridade do código. As dependências também foram "varridas", evitando que uma dependência com vulnerabilidades altas seja utilizada nos códigos produtivos. <strong>"Segredos!"</strong>, que são tão problemáticos, são identificados em tempo de <em>commit</em>, garantindo que as credenciais não cheguem aos repositórios (independente se forem públicos ou privados).</p>
<p>Em relação aos recursos de infraestrutura, temos uma série de atribuições que nos permitem protegê-los. Servidores poderão ser varridos e monitorados para ameaças e recomendações de <em>hardening</em>. Bases de dados diversas serão analisadas, na busca de servidores com autenticação fraca, criptografia <em>at-rest</em> desabilitada e até falta de mascaramento de dados. Sendo o alicerce de qualquer infraestrutura em nuvem, as estruturas de <em>networking</em> capturam muitos pontos de informação, que serão utilizados para detecção avançada de ataques ao seu ambiente e também na identificação de atores maliciosos ali presentes.</p>
<blockquote>
<p>Até agora falamos apenas dos benefícios tecnológicos. E os benefícios financeiros? Afinal de contas, essa será a informação questionada pelos times de negócio que financiarão essas iniciativas de segurança.</p>
</blockquote>
<p>O benefício financeiro está "escondido" no valor gerado pela solução de CNAPP. Não será logo de cara que os executivos da sua organização notarão o retorno financeiro da adoção do CNAPP, mas isso ficará evidente quando (e é só questão de tempo) houver um problema de segurança em algum dos ambientes da sua empresa. Um incidente grave, uma ameaça detectada, ou algo parecido. Após a rápida identificação e mitigação do problema de segurança, os analistas reportarão aos executivos (e ao CISO) o impacto no ambiente e é aí que estará escondido o valor dessa solução.</p>
<p>A rápida capacidade de identificação e remediação reduziu exponencialmente os danos à sua organização, poupando muuuuuuita dor de cabeça aos times de segurança e infraestrutura. É importante que os times de segurança levem esse <em>report</em> aos executivos para garantir o constante patrocínio para compra e manutenção das ferramentas de segurança, possibilitando a constante evolução nas camadas de proteção dos ativos da sua organização.</p>
<hr />
<h1 id="heading-microsoft-defender-for-cloud">Microsoft Defender for Cloud</h1>
<p><img src="https://learn.microsoft.com/pt-br/azure/defender-for-cloud/media/defender-for-cloud-introduction/defender-for-cloud-pillars.png" alt="Microsoft Defender for Cloud" /></p>
<p>Falando especificamente da solução da Microsoft, o <strong>Defender for Cloud</strong> se apresenta como a principal ferramenta de <em>CNAPP</em> do mercado, tanto em capacidades funcionais quanto em cobertura. Atendendo ambientes <em>multi-cloud</em> (<em>Azure</em>, <em>AWS</em>, <em>GCP</em> e <em>on-premise</em>), o Defender possibilita a proteção dos <em>workloads</em> desde a concepção do código, ao sair da máquina do desenvolvedor, passar pelas <em>pipelines</em> e ter seu <em>deploy</em> feito em ambiente produtivo.</p>
<p>Para entrar em mais detalhes nas capacidades existentes no Defender for Cloud, vamos partir da seguinte imagem:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1717538415612/16be1563-d487-43be-9da7-c4530aa797b3.png" alt class="image--center mx-auto" /></p>
<p>Temos mapeado acima os domínios específicos do Defender for Cloud, não havendo necessariamente um serviço do Defender para cada um dos domínios apresentados.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">É importante declarar que as integrações do Defender com outros <em>cloud providers</em> está em constante evolução, então é possível que nem todas as funcionalidades existentes em um dos produtos com o Azure esteja disponível no recurso equivalente do provedor de sua escolha.</div>
</div>

<p>Com o <em>landscape</em> apresentado acima, podemos enxergar claramente a cobertura <em>cloud-wide</em> do Defender. Baseado nos 3 pilares do <em>gartner</em>, podemos classificar as soluções da seguinte maneira:</p>
<h3 id="heading-artifact-scanning">Artifact Scanning</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1717539508200/0334f342-8f08-4390-9cce-c5b91a2333e2.png" alt class="image--center mx-auto" /></p>
<p>No <strong>Defender for Cloud DevOps Security</strong>, temos diversos recursos de segurança aplicados nos artefatos que passam nas soluções do <strong>Azure Pipelines</strong>, <strong>Azure DevOps</strong> e <strong>Github</strong>, nesse caso protegendo não apenas os códigos das aplicações, mas também os artefatos de <em>IaC</em> (<em>Infrastructure as Code</em>) que passam por ali.</p>
<h3 id="heading-cloud-configuration">Cloud Configuration</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1717539680878/8b0be8f9-85ff-4d69-b209-42b6d645a74f.png" alt class="image--center mx-auto" /></p>
<p>Tudo que diz respeito às boas práticas de segurança em uma plataforma <em>cloud</em> estão aqui representadas. Com soluções como o <strong>Defender for Servers, Defender for Storage, Defender for Database, Defender for Container, Defender for App Service, Defender for Key Vault, Defender for APIs, Defender for DNS, Defender for Resource Manager</strong> e principalmente o <strong>CSPM</strong> habilitadas, receberemos recomendações de segurança baseadas nos <em>benchmarks</em> utilizados pelo <strong>Azure</strong>, que nos permitirão reforçar a configuração dos nossos recursos, reduzindo a superfície de ataque para atores maliciosos.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Os <em>benchmarks</em> utilizados por padrão são construídos pela própria Microsoft, com base nas melhores práticas de mercado e padrões de segurança reconhecidos. Você pode criar regras de identificação personalizadas, com o objetivo de garantir a aderência aos requisitos de <em>compliance</em> da sua empresa.</div>
</div>

<h3 id="heading-runtime-protection">Runtime Protection</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1717540129586/f49b1958-b802-4e0e-9543-dfc28cf930c9.png" alt class="image--center mx-auto" /></p>
<p>Os recursos de <em>runtime protection</em> visão garantir a proteção das plataformas de execução de aplicações. Nesses recursos, não são feitas apenas recomendações de melhora nas configurações, mas também temos a análise das possíveis ameaças que permeiam aquela plataforma.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Outro recurso que é importante comentar é o <strong>Defender for Identity</strong>, que não foi representado nos diagramas anteriores. O Defender for identity faz parte do conjunto de capacidades do Defender for Cloud, mas não é considerado um "integrante" das funções de CNAPP da ferramenta. Sua responsabilidade é potencializar a proteção das soluções de identidade de uma empresa, fornecendo <em>insights </em>e recomendações em ambientes <strong>Entra</strong> e <strong>Active Directory</strong>.</div>
</div>

<hr />
<p><em>CNAPP</em> pode ser um conceito novo para você, da mesma forma que é um termo recente no campo da cibersegurança. É um daqueles assuntos que a cada dia que passa, ganha mais força e reconhecimento no mercado, por isso é importante ficar ligado!</p>
<p>Espero que tenha gostado do texto, me coloco à disposição para conversarmos sobre o tema, caso deseje.</p>
<p>Até logo!</p>
]]></content:encoded></item><item><title><![CDATA[Microsoft Entra ID: Cross-tenant Access]]></title><description><![CDATA[Sua empresa faz parte de um grupo de outras organizações? Seus times de segurança tem problemas para gerenciar o acesso de usuários externos (terceirizados, colaboradores, parceiros)? Controlar quem pode acessar o seu tenant é essencial e tem ficado ...]]></description><link>https://pedroignacio.dev/microsoft-entra-id-cross-tenant-access</link><guid isPermaLink="true">https://pedroignacio.dev/microsoft-entra-id-cross-tenant-access</guid><category><![CDATA[#cybersecurity]]></category><category><![CDATA[Azure]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[IAM]]></category><category><![CDATA[microsoft-entra-id]]></category><dc:creator><![CDATA[Pedro Ignácio]]></dc:creator><pubDate>Thu, 23 May 2024 00:41:49 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1716294379601/58070352-4e5a-4e5f-8e89-4b8fe18d507f.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Sua empresa faz parte de um grupo de outras organizações? Seus times de segurança tem problemas para gerenciar o acesso de usuários externos (terceirizados, colaboradores, parceiros)? Controlar quem pode acessar o seu <em>tenant</em> é essencial e tem ficado cada vez mais simples. Hoje vamos falar sobre o <em>cross-tenant access</em>, recurso do Entra que permite configurar as diferentes formas de conexão entre <em>tenants</em> e os controles que devem ser aplicados.</p>
<hr />
<h1 id="heading-por-que-conectar-multiplos-tenants">Por quê conectar múltiplos tenants?</h1>
<p>A dinâmica das organizações hoje em dia é muito diferente do que era há alguns anos atrás. A velocidade de entrega esperada pelos gestores de negócio é frequentemente impulsionada pelo uso de empresas parceiras, as chamadas "consultorias". Essas consultorias trazem expertise de mercado e profissionais capacitados para as tarefas planejadas pelos gestores.</p>
<p>Geralmente esses profissionais não vem em unidades, mas sim em grupos. São contratados desenvolvedores, engenheiros, arquitetos, <em>scrum masters</em> e <em>tech leads</em>, todos em somente uma "leva".</p>
<p>Dentro dos times de IAM da sua organização, esses casos são mais do que comuns e exigem a boa aplicação dos controles de acesso. Esses controles são implementados pelas integrações entre as ferramentas de IAM e IGA e podem deixar a transição dos consultores para a sua organização muito mais simples!</p>
<hr />
<h1 id="heading-entendendo-o-cross-tenant-access">Entendendo o Cross-tenant Access</h1>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1716396187741/c2a784af-4e9c-4d92-a363-c96b8777c801.jpeg" alt class="image--center mx-auto" /></p>
<p>Como comentamos anteriormente, as capacidades de acesso <em>cross-tenant</em> existem para facilitar a integração entre diferentes <em>tenants</em>, sejam eles de empresas parceiras ou da mesma organização. Independente do cenário apresentado pela sua empresa, a conexão entre <em>tenants</em> é utilizada para disponibilizar acesso a recursos de um <em>tenant</em> a outro.</p>
<p>Um ponto que é importante endereçarmos em relação a conexão entre os <em>tenants</em> é a <strong>direção</strong>. A partir do seu <em>tenant</em>, é possível controlar o que os usuários que vem de fora (convidados singulares ou de outros <em>tenants</em>) podem acessar e visualizar no seu diretório, MASSSSS também podemos controlar o que os usuários do <em>tenant</em> da nossa empresa podem fazer em aplicações de empresas externas, conectadas ao nosso diretório. É possível controlar por exemplo se os usuários podem ou não ser convidados por <em>tenants</em> externos.</p>
<p>Hoje o Entra disponibiliza duas maneiras diferentes de colaboração entre organizações (<em>tenants</em>), vamos desvendar nas próximas seções as características de cada um dos métodos disponíveis.</p>
<h2 id="heading-b2b-collaboration">B2B Collaboration</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1716396940164/ca700576-6e26-46ae-8f78-21f58e71cdc3.jpeg" alt class="image--center mx-auto" /></p>
<p>Este é o modelo que mais estamos acostumados, um usuário (representado por uma conta), recebe um convite para se juntar à sua organização (através do e-mail de sua escolha) ou realiza um cadastro caso esteja disponível. Uma vez inscritos (independente do método), os usuários terão suas contas criadas, utilizando como base os dados fornecidos no momento de cadastro.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Nesse modelo, as contas dos usuários convidados são representadas como contas <em>guest</em> dentro do <em>tenant</em>.</div>
</div>

<p>Ter a conta do usuário representada no seu diretório permite que sejam aplicados os controles requeridos pelo time de segurança da sua organização em cima das aplicações expostas para os usuários. Essas contas estarão sujeitas às políticas de acesso condicional configuradas no seu ambiente, bem como aos processos de IAM da sua empresa.</p>
<h2 id="heading-b2b-direct-connect">B2B Direct Connect</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1716397866775/c128b776-ceea-44a6-88f3-1fc12b870b20.jpeg" alt class="image--center mx-auto" /></p>
<p>Com o <em>direct connect</em>, é configurada uma relação de confiança entre o <em>tenant</em> da empresa parceira e da sua empresa. O <em>tenant</em> que esta recebendo a solicitação de conexão não recebe os usuários em sua base, fazendo com que as suas contas não sejam visíveis dentro do diretório.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Diferente do <em>B2B Collaboration</em>, os usuários NÃO são representados como contas <em>guest</em>.</div>
</div>

<p>Outro ponto importante de ressaltar é a necessidade de configuração dos dois lados. Como nesse modelo os objetos das organizações serão "compartilhados" entre elas, é importante que os administradores dos dois lados tenham configurado a relação de confiança.</p>
<h2 id="heading-cross-tenant-synchronization">Cross-tenant Synchronization</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1716399295189/74b78f73-2d7b-42d5-8aac-6fa2304fe520.jpeg" alt class="image--center mx-auto" /></p>
<p>Diferente dos dois modelos apresentados anteirormente, essa não é uma forma de integração. Com a sincronização entre <em>tenants</em>, podemos automatizar a criação de contas entre os diretórios de diferentes organizações.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Importante frisar que para configurar a sincronização entre <em>tenants</em>, os diretórios devem ter licenças P1 ou P2 atribuídas para seus usuários.</div>
</div>

<p>Esse recurso é especialmente interessante para cenários onde a colaboração entre organizações é constante e frequente, muitas vezes sendo empresas do mesmo grupo que por algum motivo, tem diretórios diferentes. Uma vez configurado, a sincronização entre <em>tenants</em> manterá as identidades atualizadas com as últimas mudanças feitas no <em>tenant</em> de origem.</p>
<hr />
<h1 id="heading-configurando-os-acessos">Configurando os acessos</h1>
<p>Dentro do <a target="_blank" href="http://entra.microsoft.com">Portal do Entra</a>, podemos navegar até <em>External Identities</em> e acessar <em>Cross-tenant Access Settings</em>.</p>
<p>O portal em que caímos nos apresenta uma visualização das configurações de acesso padrão, das organizações conectadas ao nosso <em>tenant</em> e as opções de configuração para as instâncias "especiais" do Azure (fazendo parte desse grupo as regiões governamentais e as operadas pela 21vianet).</p>
<h2 id="heading-organizational-settings">Organizational settings</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1716422790862/10fa8ee8-d58e-4d20-8b04-260e026ab6de.png" alt class="image--center mx-auto" /></p>
<p>Pensando no cenário apresentado na seção anterior sobre múltiplos <em>tenants</em> em uma mesma organização, neste painel podemos configurar os acessos dos diretórios que devem se conectar ao da empresa principal.</p>
<p>A informação obrigatória para configuração desse <em>tenant</em> é o <em>Tenant ID</em>, informação útnica de cada diretório e que permite sua identificação através da internet. Após ser configurado, a organização sofrerá o impacto das configurações existentes no <em>Default Settings</em>, podendo ser alteradas para configurações específicas da organização (imagine que você tenha <em>tenants</em> em que todo o acesso deve ser concedido mas tenha alguns onde deve-se manter restrito apenas à alguns usuários e aplicações, nesse modelo podemos determinar essas restrições e manter nosso ambiente seguro).</p>
<h2 id="heading-default-settings">Default Settings</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1716422943251/1b9dad8d-a27c-497f-a377-11d4d4f73f8e.png" alt class="image--center mx-auto" /></p>
<p>Com o propósito de proteger os ambientes de forma padrão, os <em>Default Settings</em> apresentam restrições que "fecham" seu <em>tenant</em> para conexões externas e colaborações com outras empresas.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Alterar essas configurações pode gerar alta exposição ao seu <em>tenant</em>, visto que elas serão aplicadas a todas as identidades e aplicações convidadas e sincronizadas, portanto tome cuidado ao alterar as configurações <em>default</em>.</div>
</div>

<p>Aqui podemos configurar os dois caminhos de acesso/sincronização, <em>inbound</em> (para os acessos que estão sendo feitos em nosso <em>tenant</em>) e <em>outbound</em> (para tudo que estiver sendo feito pelos usuários do <em>tenant</em> principal em <em>tenants</em> externos, que tenham colaboração ativa e configurada).</p>
<p>As configurações são combinações de <strong>objetos</strong> (usuários, grupos e aplicações) e <strong>ações</strong> (permitir ou negar).</p>
<hr />
<p>Para as grandes organizações de hoje em dia, manter seus colaboradores com os acessos devidos representa produtividade, segurança e conforto. É importante garantir que o ambiente esteja protegido de atores mal intencionados e de possíveis vulnerabilidades causadas por erros de configuração.</p>
<p>Espero que tenha gostado do texto e que eu tenha conseguido te mostrar a importância das configurações entre <em>tenants</em> e o valor que elas podem trazer para a sua empresa.</p>
<p>Até logo!</p>
]]></content:encoded></item><item><title><![CDATA[Entra MFA: guia completo!]]></title><description><![CDATA[As identidades são os principais insumos na defesa (e também no ataque) de um ambiente em nuvem. Com elas que realizamos nossas tarefas do dia a dia e acessamos os sistemas e aplicações da nossa organização. Garantir a integridade dos acessos e a gar...]]></description><link>https://pedroignacio.dev/entra-mfa-guia-completo</link><guid isPermaLink="true">https://pedroignacio.dev/entra-mfa-guia-completo</guid><category><![CDATA[#cybersecurity]]></category><category><![CDATA[IAM]]></category><category><![CDATA[Azure]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[Security]]></category><dc:creator><![CDATA[Pedro Ignácio]]></dc:creator><pubDate>Wed, 15 May 2024 01:30:54 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1715736395360/70518947-8f0c-493f-9220-922d25673e17.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As identidades são os principais insumos na defesa (e também no ataque) de um ambiente em nuvem. Com elas que realizamos nossas tarefas do dia a dia e acessamos os sistemas e aplicações da nossa organização. Garantir a integridade dos acessos e a garantir da segurança de uma conta é fundamental para a boa operaçaõ do ambiente em nuvem. Por isso, hoje falaremos sobre MFA e as possibilidades disponibilizadas pelo Microsoft Entra ID.</p>
<hr />
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Em adição ao primeiro artigo sobre MFA do blog (que você pode acessar clicando <a target="_blank" href="https://pedroscloudsecurity.com/adocao-de-mfa-capacidades-do-entra-id">aqui</a>) hoje vamos fazer um <em>deep dive</em> nas soluções de MFA presentes no Microsoft Entra ID.</div>
</div>

<hr />
<h1 id="heading-a-importancia-do-mfa">A importância do MFA</h1>
<p>Garantir a segurança nos acessos dos funcionários da sua organização é fundamental para a manutenção da boa operação dos ambientes em nuvem. O mercado vem aderindo à tendência de ambientes <em>passwordless</em>, fugindo das credenciais tradicionais e combinando fatores de autenticação que façam uso de outros recursos. Independente do modelo de autenticação adotado pela sua organização, o <strong>MFA</strong> é exigência para manter a tranquilidade e segurança do ambiente.</p>
<p>A solução de MFA escolhida pela sua organização irá variar de acordo com os recursos disponíveis e também com os casos de uso apresentados pelos <em>stakeholders</em>. As restrições que os ambientes impõem e os custos das soluções (compra, distribuição, operação, resolução de problemas) são pontos que podem rapidamente inviabilizar uma ferramenta escolhida para servir como solução de MFA corporativa.</p>
<blockquote>
<p>Por isso é de extrema importância que antes de se definir às cegas qual solução deve ser utilizada na organização, os times técnicos e de negócio tenham ciência dos requisitos funcionais e não funcionais apresentados pelo negócio.</p>
</blockquote>
<p>Nas próximas seções, vamos discutir as possibilidades expostas pelo Entra, bem como suas aplicações e seus controles.</p>
<hr />
<h1 id="heading-mfa-no-entra-id">MFA no Entra ID</h1>
<p><img src="https://learn.microsoft.com/pt-br/entra/identity/authentication/media/concept-authentication-methods/authentication-methods.png" alt class="image--center mx-auto" /></p>
<p>O desenho acima nos fornece uma visão interessante sobre os diferentes tipos de MFA disponíveis no Entra ID, bem como seu posicionamento em uma escala que julga as soluções como <strong>não recomendadas</strong> (soluções à esquerda) e <strong>recomendadas</strong> (soluções mais à direita).</p>
<p>Note que como qualquer recomendação, as menções sobre uma solução ser boa ou ruim, são apenas <strong>recomendações</strong>. Apenas você pode avaliar uma solução como boa no contexto da sua organização, seja por capacidade de segurança ou puramente por restrições em relação ao ambiente/aplicação.</p>
<p>O <em>insight</em> que é importante tirar dessa imagem é a ida para as soluções <em>passwordless</em>, soluções essas que já são uma realidade há anos. Para garantir a proteção de mais alto nível para os ambientes, sua organização deve caminhar para implementar esse modelo em um futuro próximo.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Cuidado para não pular etapas! Partir de uma solução de autenticação tradicional baseada em credenciais para soluções <em>passwordless</em> pode ser uma catastrofe. É importante que os integrantes da organização passem por um período de adaptação, aprendendo a utilizar a ferramenta distribuída e ganhando confiança e conforto no modelo implementado.</div>
</div>

<p>Agora que interpretamos o diagrama, entraremos em mais detalhes sobre as soluções representadas acima, e em cada caso, comentaremos os motivos da colocação da ferramenta na posição onde se encontra.</p>
<h2 id="heading-solucoes-disponiveis">Soluções disponíveis</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1715725108742/c4b3b33c-2c45-499b-b741-e9d069b9e7a4.jpeg" alt class="image--center mx-auto" /></p>
<p>Começando pelas <strong>senhas</strong>, são cadeias de caracteres que foram previamente cadastradas pelo usuário. Estão sujeitas aos vetores de ataque mais comuns (<em>password spray</em>, <em>engenharia social</em>, <em>phishing</em>, etc.). O usuário utiliza a credencial previamente cadastrada para acessar as aplicações e apenas esse primeiro fator de autenticação satisfaz a segurança do acesso.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1715725586133/9ff3bc48-d059-41a1-a17d-fbceafeec40a.jpeg" alt class="image--center mx-auto" /></p>
<p>Evoluindo a estratégia de segurança da nossa empresa, temos agora a configuração de um segundo fator de autenticação, podendo ser um OTP enviado via <strong>SMS</strong> ou via <strong>chamada de voz</strong>. O uso de qualquer um dos dois realmente eleva a segurança do acesso, mas ainda não deixa o ambiente da organização protegido da forma que deveria. Ambas as soluções são vulneráveis a ataques de <strong>engenharia social</strong>, onde é possível que um atacante engane o usuário a fornecer o código repassado a ele.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1715727416753/1d36d779-02e6-4fc1-a395-ca9c023d106d.jpeg" alt class="image--center mx-auto" /></p>
<p>Melhorando ainda mais a segurança do nosso ambiente, temos a adoção de "2FAs" mais poderosos (porém ainda orquestrados com uma credencial). Aqui passamos a fazer uso de "<strong>algo que o usuário tem</strong>" que permite que o acesso ao nosso ambiente seja mais reforçado. Esses métodos de MFA são resistentes aos vetores de ataque mencionados anteriormente, porém o elo frágil nesse modelo são as credenciais, que ainda tornam os usuários suscetíveis a esses ataques. As soluções representadas nesse modelo são o <strong>hardware OTP tokens</strong>, os <strong>software OTP tokens</strong> e o <strong>microsoft authenticator</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1715728848886/a06612d4-8ad6-4c31-b4c1-99201aba0ad6.jpeg" alt class="image--center mx-auto" /></p>
<p><strong>PASSWORDLESS!</strong> Chegamos ao suprassumo das formas de autenticação. Nesse modelo, esquecemos completamente das senhas, não serão mais utilizadas pelos usuários da nossa organização no acesso aos sistemas da empresa. Aqui podemos fazer uso de soluções extremamente seguras e recomendadas pelas principais referências de cibersegurança do mercado. O uso das chaves <strong>FIDO2 Key</strong>, <strong>Microsoft Authenticator</strong> (somado da digital ou biometria facial para confirmação do <em>login</em>), <strong>certificados</strong> e <strong>Windows Hello for Business</strong> (fazendo uso da leitura biométrica ou da digital nos dispositivos que a tem disponível) possibilita uma experiência completamente sem senhas e sem os principais fardos que são gerados pelo uso delas.</p>
<h2 id="heading-estrategias-de-adocao">Estratégias de adoção</h2>
<p>Antes de configurarmos qualquer recurso em nosso ambiente, devemos ter ciência do que será impactado com aquelas mudanças (e principalmente se algo der errado). É importante que decisões como essa, que afetam uma organização em toda sua escala, sejam comunicadas aos usuários finais e aos times de suporte, para que saibam como agir quando forem acionados.</p>
<p>Outra boa prática é realizarmos o lançamento dessas funcionalidades de maneira faseada, isto é, iniciar com um grupo pequeno de usuários e com o passar das semanas incluir mais usuários nos grupos de teste, até o momento em que a organização estará madura para suportar uma migração total desses usuários.</p>
<h3 id="heading-registration-campaign">Registration Campaign</h3>
<p><strong>E</strong>sse recurso do Entra permite configurar alguns controles que garantem que todos os usuários registrem seus dispositivos e habilitem o <strong>Microsoft Authenticator</strong> para que possa ser utilizado em seus acessos posteriores.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1715729546992/479ba083-0fd4-4da3-9d53-b29669eeecc5.png" alt class="image--center mx-auto" /></p>
<p>Nesse exemplo, estamos permitindo que os usuários adiem o registro do dispositivo no máximo 3 vezes, sendo obrigados a seguir o fluxo de registro após os 3 adiamentos.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Esse recurso hoje tem efeito apenas para o uso do Microsoft Authenticator, não podendo ser utilizado com nenhum dos outros recursos disponíveis no Entra.</div>
</div>

<h3 id="heading-policies">Policies</h3>
<p>Pensando em implementar controles de acordo com o método de autenticação escolhido, nessa <em>blade</em> podemos configurar regras de uso e também controlar quem pode utilizar determinado recurso (extremamente útil quando estamos testando ao mesmo tempo diversos métodos e queremos garantir que um não tenha interferência no outro).</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1715729769768/c06b61a9-12c9-47b3-afd9-d1d68b9ac109.png" alt class="image--center mx-auto" /></p>
<p>Todos os métodos terão duas seções, "Enable and Target" e "Configure". Em "Enable and Target" você poderá configurar quais usuários e grupos poderão utilizar aquele recurso (pelo menos até que seja ativo globalmente no <em>tenant</em>), em "Configure" você entra em configurações mais específicas do método, variando de recurso para recurso.</p>
<h3 id="heading-reporting-suspicious-activity">Reporting Suspicious Activity</h3>
<p>Um recurso interessante para incrementarmos a segurança das soluções de MFA são os alertas de atividade suspeita. Uma vez configurado, os usuários poderão notificar que estão recebendo tentativas de autenticação que não foram eles que iniciaram. Esse <em>report</em> classifica o acesso do usuário como de <strong>alto risco</strong>, o colocando como alvo de possíveis políticas de acesso condicional que podem estar configuradas em seu ambiente.</p>
<p>Algumas ações das políticas de acesso condicional podem exigir que o usuário: altere a senha ou registre novamente o dispositivo no Entra.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1715731432546/9ecd6622-457a-4691-8154-c40f4fa271cf.png" alt class="image--center mx-auto" /></p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Esse recurso tem impacto apenas para usuários que estejam utilizando o <strong>Microsoft Authenticator</strong> ou as <strong>chamadas de voz</strong> como segundo fator de autenticação.</div>
</div>

<h3 id="heading-weekly-digest">Weekly Digest</h3>
<p>Com a proposta de fornecer visibilidade das atividades do <em>tenant</em> aos administradores, uma vez configurado, esse recurso envia e-mails semanais aos usuários e grupos cadastrados, contendo informações sobre os acessos considerados arriscados identificados pelo <strong>ID Protection</strong>.</p>
<h2 id="heading-implementacao">Implementação</h2>
<p>Indo além dos recursos mencionados anteriormente, uma peça fundamental para toda a estratégia de segurança da sua organização (não apenas para a implementação das soluções de MFA) são as <strong>Regras de Acesso Condicional</strong>. Essas regras determinam qual controle deve ser aplicado, em quais aplicações essas regras devem ser implementadas e quais usuários e grupos sofrerão os impactos dessas regras.</p>
<p>Com o <em>conditional access</em> nós podemos personalizar as atividades que devem ser cumpridas pelos usuários de acordo com os cenários que são apresentados. Nós podemos interpretar os acessos baseados no nível de risco que eles apresentam e aí sim controlar de diferentes maneiras o que deve ser feito. Podemos também implementar proteção contra os ataques mais sofisticados, garantindo a integridade máxima dos nossos ativos.</p>
<p>Estabeleça um padrão para criar e utilizar as políticas de acesso condicional, aplique-as de maneira faseada até que cubram todos os acessos da organização. Document corretamente o processo de montagem da política, bem como o que ela faz e quais públicos atinge. E acima de tudo, governe corretamente as políticas do seu ambiente, para evitar que políticas existentes sejam muito alteradas e percam seu propósito. Essas mudanças sem histórico podem gerar riscos sérios por não serem planejadas e deixarem alguma "porta aberta" no seu <em>tenant</em>.</p>
<hr />
<h1 id="heading-arquitetura">Arquitetura</h1>
<p>Pensando em unificar todos os pontos que tratamos nesse artigo, trago esse desenho de alto nível que demonstra todas as capacidades que utilizariamos para implementar uma arquitetura que disponibiliza aos usuários uma série de soluções de MFA e ao mesmo tempo, implementa controles de segurança para garantir a integridade dos dispositivos e dos acessos.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1715733477775/d2ea05c5-23b9-4683-83ad-ca899d256981.jpeg" alt class="image--center mx-auto" /></p>
<p>Todos os recursos devem ter seu uso bem planejado e configurado, sempre tendo em mente o usuário final.</p>
<p>Sua empresa não terá ganhos se implementar controles e proteções que dificultam o dia a dia do usuário. Sistemas com usabilidade ruim (por excesso de controles ou aplicação errada dos mesmos) fará com que os usuários busquem caminhos alternativos para acessar aquela aplicação, não seguindo os <em>baselines</em> determinados pelos times de segurança.</p>
<p>Outro ponto que é importante destacar é a visibilidade do ambiente. Precisamos ter monitoramento constante por parte das ferramentas de SIEM da sua empresa nos eventos privilegiados gerados no seu tenant. Isso garantirá que as atividades consideradas suspeitas possam ser avaliadas pelo time de SOC da organização, garantindo um controle ainda mais granular e efetivo em cima dos acessos.</p>
<hr />
<p>Não é de um dia para outro que uma organização passa a adotar soluções de MFA de maneira corporativa, isso leva tempo. O importante é que caso sua organização ainda não tenha esses controles implementados, você comece levantar os riscos de ter o ambiente tão desprotegido.</p>
<p>Esse artigo foi construído para te fornecer um ponto de partida para iniciar a implementação do MFA, sugerindo alguns controles e mencionando os principais recursos, utilizados em quase todas as arquiteturas.</p>
<p>Espero que tenha gostado, nos vemos na semana que vem.</p>
<p>Até logo"</p>
]]></content:encoded></item><item><title><![CDATA[Passkeys: o presente do MFA]]></title><description><![CDATA[Deixando de ser apenas uma tendência, o uso do passwordless passou a ser expandido nas organizações e empresas ao redor do mundo. Sua chegada trouxe como benefícios não apenas a segurança do ambiente, mas também a melhora na experiência do usuário, q...]]></description><link>https://pedroignacio.dev/passkeys</link><guid isPermaLink="true">https://pedroignacio.dev/passkeys</guid><category><![CDATA[#cybersecurity]]></category><category><![CDATA[IAM]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[Security]]></category><category><![CDATA[Azure]]></category><dc:creator><![CDATA[Pedro Ignácio]]></dc:creator><pubDate>Wed, 08 May 2024 02:15:15 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1715134461427/1e4dfed0-ccd2-4c81-aab8-3e01fc8bb2c4.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Deixando de ser apenas uma tendência, o uso do <em>passwordless</em> passou a ser expandido nas organizações e empresas ao redor do mundo. Sua chegada trouxe como benefícios não apenas a segurança do ambiente, mas também a melhora na experiência do usuário, que não precisa recordar senhas complexas. Apresentando uma outra opção para uma autenticação <em>passwordless</em> temos as <strong>Passkeys</strong>!</p>
<hr />
<h1 id="heading-o-que-sao-passkeys">O que são Passkeys?</h1>
<p>Com a tendência de desativação das tradicionais senhas por problemas de segurança e usabilidade, os métodos de autenticação <em>passwordless</em> surgem como principais opções para a autenticação dos usuários.</p>
<p>Dentro desse grupo, temos como novo integrante as <strong><em>Passkeys</em></strong>!</p>
<p>As <em>passkeys</em> foram criadas e divulgadas pela <strong>FIDO Alliance</strong>, uma das principais referências quando o tema é <strong>identity security</strong>. A proposta cumprida pela criação das <em>passkeys</em> foi: deixar os acessos mais seguros, ao mesmo tempo fornecendo para o usuário maior conforto em seu uso.</p>
<p>Com o uso de uma <em>passkey</em> para se autenticar na aplicação, o usuário se beneficia do uso de um dos fatores de autenticação configurados para acessar aquele dispositivo (sendo um <strong><em>PIN</em></strong> ou sua <strong><em>biometria</em></strong>) para confirmar o acesso a aplicação. O "cumprimento" dessa etapa de autenticação permitirá que o processo de interação com a aplicação seja concluído.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Em dispositivos <em>windows</em> que contenham as capacidades do <em>windows hello for business</em>, podemos fazer uso da biometria facial para desbloqueio da máquina, bem como para autenticação na aplicação.</div>
</div>

<hr />
<h1 id="heading-como-elas-funcionam">Como elas funcionam?</h1>
<p>Antes de entrarmos no detalhe sobre como as <em>passkeys</em> funcionam, é importante deixar claro que o pré-requisito para as utilizarmos é: a plataforma que estamos acessando deve fornecer suporte a esse método de autenticação. Isso se dá por conta das interações que serão feitas entre <strong><em>cliente</em></strong> e <strong><em>servidor</em></strong>, sendo necessário validar o "desafio" gerado pelo evento de autenticação.</p>
<p>Após garantirmos que a plataforma que será utilizada suporta o uso desse método de autenticação, chegou a hora de entrarmos no detalhe sobre o que mais é necessário e como ocorrem as interações.</p>
<p>As <em>passkeys</em> contém 2 componentes principais utilizados em suas interações:</p>
<ul>
<li><p><strong>Chave Privada</strong> - armazenado no cliente (dispositivo do usuário)</p>
</li>
<li><p><strong>Chave Pública</strong> - armazenada no servidor da aplicação</p>
</li>
</ul>
<p>A chave pública será gerada à partir da chave privada e enviada ao servidor de aplicação, onde será armazenada. Quando um fluxo de autenticação for executado, um "desafio" será enviado para o dispositivo do usuário. Será solicitado que o usuário desbloqueie o dispositivo, "assinando" o desafio e retornando para o servidor, que validará o resultado da assinatura, garantindo que o usuário autenticado é o detentor daquela <em>passkey</em>.</p>
<p>Esse é de maneira simplificada, o processo de uso de uma <em>passkey</em>. Antes do uso, temos seu cadastro, que se dá dessa forma:</p>
<p><img src="https://web.dev/static/articles/passkey-registration/image/passkey-registration-diagram_856.png" alt class="image--center mx-auto" /></p>
<p>O usuário inicia a interação na aplicação <em>web</em> selecionando a opção de "criar uma <em>passkey</em>". A partir dessa interação, o <em>back-end</em> iniciará o processo de criação da <em>passkey</em>, enviando ao dispositivo a solicitação para criação da chave privada e chave pública e recebendo a própria chave pública, gerada após o desbloqueio do dispositivo pelo usuário.</p>
<p>Após a criação da <em>passkey</em>, toda vez que for se autenticar na aplicação em questão, o usuário poderá selecionar a opção "<em>login with passkey</em>". Receberá uma solicitação para selecionar a <em>passkey</em> e se autenticará utilizando um PIN ou uma biometria.</p>
<p><strong>E é isso!</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1715132002350/bb083820-6b65-4e6d-87c2-0b4157d8e1c7.png" alt class="image--center mx-auto" /></p>
<p>Um exemplo de aplicação que tem o uso das <em>passkeys</em> habilitado é o <a target="_blank" href="http://github.com">GitHub</a>. Logo na primeira página (formulário de <em>login</em>) você será questionado se deseja acessar sua conta utilizando uma <em>passkey</em> ou seu conjunto de credenciais padrão (usuário + senha + 2FA).</p>
<p>Ao clicar em "<em>sign in with a passkey</em>" você receberá uma tela parecida com essa:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1715132813364/14e0a320-1014-4b5d-baaf-b841b3e06fc2.jpeg" alt class="image--center mx-auto" /></p>
<p>Esse <em>prompt</em> é do Windows Hello e permite que você selecione com qual <em>passkey</em> deseja autenticar na aplicação.</p>
<p>Você também tem a opção de utilizar uma <em>passkey</em> diferente, como por exemplo uma existente em outro dispositivo.</p>
<hr />
<h1 id="heading-beneficios">Benefícios</h1>
<p>Sendo um método de autenticação <em>phishing resistant</em>, temos bem claro que a segurança contra <strong>vazamentos de dados</strong> e <strong>roubo de credenciais</strong> são benefícios herdados quando utilizamos esse método de autenticação.</p>
<p>Do ponto de vista do usuário, o fato de não ser mais necessário recordar as credenciais para todos os acessos traz conforto e confiança no momento de acesso à aplicação. Do lado da aplicação, não se preocupar com armazenar informações sensíveis e protegê-las contra o vazamento de dados retira uma significativa carga de trabalho dos administradores.</p>
<p>Outro benefício das <em>passkeys</em> que nenhum outro método de autenticação tem é o "link" com informações que não podem ser utilizadas por outros usuários. Em dispositivos que contém o <em>windows hello for business</em>, você pode utilizar sua biometria facial para acessar sua conta. Esse recurso garante que você (e apenas você) possa acessar aquela conta com a <em>passkey</em> selecionada.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Se a sua organização fizer uso do <strong>Microsoft Entra ID</strong>, é possível configurar o uso das <em>passkeys</em> junto do aplicativo <strong>Microsoft Authenticator</strong> para permitir a autenticação nas aplicações que estão conectadas ao Entra.</div>
</div>

<hr />
<p>O futuro é <em>passwordless</em> e o quanto antes as organizações implementarem esse novo modelo de acesso, mais rápido os times de segurança e os usuários poderão usufruir dos benefícios gerados pela sua adoção.</p>
<p>Espero que tenha gostado do texto e nos veremos em breve.</p>
<p>Até logo!</p>
]]></content:encoded></item><item><title><![CDATA[Zero Trust: identity at the center]]></title><description><![CDATA[Nas últimas semanas falamos sobre um tema constantemente abordado nas discussões sobre cibersegurança, o Zero Trust. Ao nos aprofundarmos no tema, percebemos que entre os três pilares que regem o conceito, temos 1 propriedade em comum, as Identidades...]]></description><link>https://pedroignacio.dev/zero-trust-identity-at-the-center</link><guid isPermaLink="true">https://pedroignacio.dev/zero-trust-identity-at-the-center</guid><category><![CDATA[#cybersecurity]]></category><category><![CDATA[IAM]]></category><category><![CDATA[Azure]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[Security]]></category><dc:creator><![CDATA[Pedro Ignácio]]></dc:creator><pubDate>Thu, 02 May 2024 01:51:14 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1714614614633/d8289caf-f1dd-4808-a4e2-266de0ca6d1f.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Nas últimas semanas falamos sobre um tema constantemente abordado nas discussões sobre cibersegurança, o <strong>Zero Trust</strong>. Ao nos aprofundarmos no tema, percebemos que entre os três pilares que regem o conceito, temos 1 propriedade em comum, as <strong>Identidades</strong>. Todos os controles implementados avaliam de alguma maneira a identidade do consumidor, sendo ele uma aplicação ou um usuário. Hoje vamos falar sobre como as identidades se aplicam dentro do conceito e quais controles podemos aplicar utilizando o <strong>Microsoft Entra ID</strong>.</p>
<hr />
<h1 id="heading-importancia-do-zero-trust">Importância do Zero Trust</h1>
<p><img src="https://cdn-dynmedia-1.microsoft.com/is/image/microsoftcorp/RWIwt2_tbmnl_en-us?scl=1" alt class="image--center mx-auto" /></p>
<p>A guinada das empresas para a nuvem pública levantou uma série de preocupações para os times de segurança.</p>
<blockquote>
<p>Com menos controle sobre o ambiente, como será possível garantir a segurança em todas as etapas do processo?</p>
</blockquote>
<p>Esse questionamento é gerado pela experiência dos administradores em manter ambientes próprios, onde o controle de acesso à infraestrutura era de completa responsabilidade da empresa, devendo garantir a proteção do acesso físico e também dos acessos lógicos.</p>
<p>Essa perspectiva foi alterada com a chegada da nuvem pública e seu modelo de <strong>responsabilidade compartilhada</strong>. Agora, os administradores e times de segurança só precisam se preocupar com o acesso lógico aos seus ambientes e soluções. Essa "redução" de responsabilidade pode representar uma maior facilidade na manutenção dos ambientes, porém para os usuários de ambientes em nuvem mais experientes, essa afirmação é completamente <strong>enganosa</strong>.</p>
<p>Com isso estabelecido, podemos tratar do "novo" modelo de segurança recomendado para os ambientes em nuvem pública, saindo do modelo de <strong>3 camaddas</strong> e chegando com o modelo <strong>Zero Trust</strong>.</p>
<hr />
<h1 id="heading-identidade-nos-3-pilares">Identidade nos 3 pilares</h1>
<p>Centralizando nossa estratégia de segurança nas identidades, chegou a hora de avaliarmos o comportamento de cada um dos princípios e também a aplicação de alguns controles que nos permitirão ter sucesso em nossa implementação.</p>
<h2 id="heading-minimum-privilege">Minimum Privilege</h2>
<p>Toda e qualquer operação dentro do nosso ambiente será executado por uma identidade, que terá o permissionamento necessário para executar tal ação. Independente do tipo de identidade utilizada (<em>humana</em> para ações executadas por usuários e <em>sistêmica</em> para atividades comandadas por aplicações), sempre teremos uma conta por trás da ação, permitindo primeiramente a autenticação e posteriormente a autorização da credencial.</p>
<p>Pensando na execução da estratégia e implementação do pilar, temos o <strong>RBAC</strong> (<em>Role Based Access Control</em>) como principal "aliado". Ao utilizarmos o mecanismo de <em>RBAC</em> do nosso <em>Cloud Provider</em> é possível granularizar o acesso aos recursos da plataforma, sejam eles feitos por usuários humanos ou contas de sistema.</p>
<p>Atribuindo acesso apenas ao escopo necessário e com as permissões controladas para que a identidade possa realizar as ações requeridas, nós reduzimos a capacidade de danos que podem ser feitos ao nosso ambiente, caso aquela credencial seja comprometida ou o usuário por trás dela tenha más intenções.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1714613562051/12c54640-dbd6-48c8-98a5-442e3c8cc1b1.jpeg" alt class="image--center mx-auto" /></p>
<p>O simples desenho acima mostra a aplicação das <strong><em>roles</em></strong> em diversos tipos de identidades (e trambém grupos) e seu uso para acessar os recursos da plataforma. Temos também o uso do <strong><em>PIM</em></strong>, feito para acessos privilegiados dentro do <strong>Azure</strong> e do <strong>Entra</strong>.</p>
<h2 id="heading-verify-explicitly">Verify Explicitly</h2>
<p>O nosso segundo pilar exige a validação de todas as requisições feitas para a plataforma, independente de quem esteja fazendo.</p>
<p>Para requisições feitas para as APIs do <em>cloud provider</em> esse conceito é aplicado por padrão. Todas as chamadas exigem que as credenciais do usuário que está acessando o recurso, sejam validadas. Quando utilizamos identidades sistêmicas (tanto <strong><em>service principalls</em></strong> quanto <strong><em>managed identities</em></strong>), as validações são as mesmas, sendo feitas pelo <strong>Entra</strong> a cada chamada.</p>
<p>O desenho abaixo mostra de maneira simplificada e sem detalhes de implementação, como as requisições são feitas e autorizadas pelo <em>IdP</em>:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1714609728807/97a9d71e-5129-4e3b-80b2-3b9f72eb9df5.jpeg" alt class="image--center mx-auto" /></p>
<p>As chamadas à plataforma são feitas utilizando um <em>access_token</em>, gerado pelo <strong>Microsoft Entra ID</strong> e vaildado a cada passo da jornada.</p>
<h2 id="heading-assume-breach">Assume Breach</h2>
<p>O último dos pilares determina que devemos tratar todo o nosso ambiente como "hostil", assumindo que todos os acessos são <strong>inseguros</strong>.</p>
<p>A aplicação desse princípio permite assegurar que a identidade que está realizando o acesso é de fato uma identidade válida e poderá ter sua requisição permitida após todas as validações necessárias.</p>
<p>Dentro da plataforma, outros controles devem ser aplicados para satisfazer esse pilar, porém com as nossas identidades, deveremos validar diferentes pontos de informação para garantir que aquela conta não está sendo utilizada indevidamente.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1714612959617/0a845b78-fb10-4e0b-9838-2b32b21263c2.jpeg" alt class="image--center mx-auto" /></p>
<p>O uso de algumas dessas funcionalidades requer a adesão de recursos extras, como <strong>licenças</strong> do Entra e também o <strong>Microsoft Intune</strong>, para gestão dos dispositivos.</p>
<hr />
<h1 id="heading-garantindo-os-controles-com-o-microsoft-entra-id">Garantindo os controles com o Microsoft Entra ID</h1>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1714613984008/90d26337-df67-41b9-8838-c87be0027d07.jpeg" alt class="image--center mx-auto" /></p>
<p>Na seção anterior falamos sobre os pilares que compõem o <strong>Zero Trust</strong> e como as identidades podem se tornar o centro de cada um deles. Utilizando o <strong>Microsoft Entra ID</strong>, podemos implementar controles robustos, que permitirão proteger o acesso aos nosso recursos.</p>
<ul>
<li><p><strong>Azure RBAC</strong> e <strong>Entra RBAC</strong>: utilizados para permissionar o acesso aos recursos, o acesso baseado em funções do Azure e do Entra nos permite aplicar o <strong>minimum privilege</strong>, oferecendo diferentes escopos de acesso e níveis de privilégio;</p>
</li>
<li><p><strong>Certificados</strong>, <strong>Credenciais</strong> e <strong>Passwordless</strong>: para o <strong>verify explicitly</strong> podemos configurar para a identidade diferentes tipos de autenticação. Para identidades de aplicação, temos disponíveis apenas as credenciais e certificados, porém para contas humandas, podemos configurar todas as opções existentes;</p>
</li>
<li><p><strong>Conditional Access</strong>: recurso utilizado em todos os pilares, as políticas de acesso condicional nos permitem avaliar uma série de informações sobre um acesso feito por uma identidade. É com essas políticas que nós poderemos validar a origem da chamada feita pela identidade, o dispositivo que está sendo utilizado, o risco da atividade, entre outras informações.</p>
</li>
</ul>
<p>Esses controles somados às soluções existentes do Azure (como as <strong>Azure Policies</strong>) garantirão a excelência da postura de segurança da sua organização, bem como a boa operação das jornadas de negócio!</p>
<hr />
<p>Identidade é um tema quente nas comunidades de cibersegurança, por isso é importante que você e sua organização estejam preparados para aplicar os controles mais modernos com o intuito de proteger seu ambiente da melhor maneira possível.</p>
<p>Espero que de alguma forma eu tenha conseguido contribuir com a melhora na segurança do seu ambiente e que tenha gostado do texto.</p>
<p>Até logo!</p>
]]></content:encoded></item><item><title><![CDATA[Identidades para aplicações]]></title><description><![CDATA[Um conceito vindo do on-premise e potencializado com o uso da nuvem pública, as identidades para aplicações (workload IDs) existem para que possamos aplicar permissões no consumo dos recursos e controlar o acesso aos insumos da organização. Elas nos ...]]></description><link>https://pedroignacio.dev/identidades-para-aplicacoes</link><guid isPermaLink="true">https://pedroignacio.dev/identidades-para-aplicacoes</guid><category><![CDATA[#cybersecurity]]></category><category><![CDATA[IAM]]></category><category><![CDATA[Azure]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[software development]]></category><dc:creator><![CDATA[Pedro Ignácio]]></dc:creator><pubDate>Wed, 24 Apr 2024 00:49:10 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1713919484292/9e85abfb-bbb2-4763-b63c-9086a797d368.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Um conceito vindo do on-premise e potencializado com o uso da nuvem pública, as identidades para aplicações (<em>workload IDs</em>) existem para que possamos aplicar permissões no consumo dos recursos e controlar o acesso aos insumos da organização. Elas nos permitem identificar o consumidor (aplicação) e funcionam como se fossem credenciais de usuários humanos. Hoje falaremos sobre essas identidades, suas características técnicas e aplicações dentro do <strong>Microsoft Entra ID</strong>.</p>
<hr />
<h1 id="heading-entendendo-o-conceito">Entendendo o Conceito</h1>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713908898492/7279c5ab-4591-441c-b8f8-6a74bdce9885.png" alt class="image--center mx-auto" /></p>
<p>Dentro do seu ambiente de nuvem pública (independente do provedor), os diversos <em>workloads</em> que estarão sendo executados precisarão de uma forma para autenticar e autorizar o consumo dos seus serviços e dos recursos de plataforma. Esses dois processos se dão por meio das chamadas <strong>Identidades de Aplicação</strong> (ou <strong><em>Workload IDs</em></strong>).</p>
<p>Ter bem estabelecida uma boa estratégia de autorização na sua organização é essencial para a boa manutenção do seu ambiente e para a aplicação do <strong><em>Zero Trust</em></strong>, por isso é de extrema importância que os times de segurança e arquitetura definam os <em>baselines</em> para uso dessas identidades e as melhores práticas de acordo com o fornecedor e com a empresa.</p>
<hr />
<h1 id="heading-estrategias-para-a-protecao-das-identidades">Estratégias para a proteção das identidades</h1>
<p>Como qualquer identidade, o <em>IdP</em> (<em>Identity Provider</em>) necessita de algumas informações para validar a veracidade daquele recurso. Se tratando do <strong>Microsoft Entra ID</strong> (<em>Identity Provider</em> da <em>Microsoft</em>), nós temos duas maneiras de identificar o nosso <em>workload id</em>:</p>
<ul>
<li><p><strong>Object ID + Secret</strong></p>
</li>
<li><p><strong>Object ID + Certificate</strong></p>
</li>
</ul>
<p>As duas formas tem seus pontos positivos e negativos, vamos comentar sobre eles agora e entender melhor esses pontos e as características de cada um dos métodos.</p>
<h2 id="heading-secret">Secret</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713912357990/af166691-c727-464b-9e23-d6a0a1d9bb34.png" alt class="image--center mx-auto" /></p>
<p>Os segredos (também conhecidos como "senhas") são utilizados pela aplicação em questão para autenticar a chamada frente ao <em>Identity Provider</em>. Em todas as requisições, tanto o <strong>Object ID</strong> (que representa a aplicação perante do <em>IdP</em>) quando o <strong>Secret</strong>, devem ser transmitidos, para que o provedor de identidade consiga validar a veracidade daquela chamada.</p>
<p>As <em>secrets</em> são <em>strings</em> que apenas através da visualização a olho nu, não representam nada, porém devem ser guardadas a "sete chaves" pelos times de segurança da organização, visto que são valores sensíveis e que se expostos, poderão representar alto risco ao ambiente.</p>
<p>Por serem geradas diretamente no <em>Identity Provider</em>, a gestão das <em>secrets</em> pode ser considerada mais complicada pelo time de segurança, visto que novos processos e controles deverão ser implementados para identificar a expiração de uma <em>secret</em>, sendo necessário renová-la antes da expiração para evitar a interrupção nos serviços que utilizam aquelas credenciais.</p>
<p>Outro problema frequentemente enfrentado é o envio das <em>secrets</em> para os repositórios de código. Por serem utilizadas direto no código, é possível que algumas <em>secrets</em> sejam enviadas para o repositório de código da sua organização. Isso é especialmente perigoso caso o repositório seja público, expondo a <em>secret</em> para qualquer um que acessar o <em>repo</em>. Para evitar esse problema, é importante termos dentro da pipeline de desenvolvimento, controles para identificar essas <em>secrets</em> que foram enviadas de maneira errônea, reduzindo ainda mais a chance de termos problemas de segurança.</p>
<h2 id="heading-certificate">Certificate</h2>
<p><img src="https://learn.microsoft.com/en-us/cli/azure/media/sp-tutorial/pem-file.png" alt="Screenshot of PEM file" class="image--center mx-auto" /></p>
<p>Os certificados são "objetos" de segurança utilizados de diversas maneiras. Nesse caso, o utilizariamos para identificar uma identidade e garantir que a mesma é valida dentro do nosso <em>tenant</em>.</p>
<p>Diferente dos segredos, um certificado não é apenas uma <em>string</em>, ele tem uma série de outras informações e atributos próprios, que permitem qualquer uma das partes possa identificar o certificado em questão e validar sua veracidade.</p>
<p>Os certificados devem ser gerados por uma <strong>autoridade certificadora</strong> confiável e devem ser carregados dentro do <em>Microsoft Entra ID</em>, sendo referenciados diretamente na identidade criada. Dessa forma, o <em>identity provider</em> consegue validar o certificado e garantir que o mesmo não tenha sido revogado.</p>
<p>Ainda fazendo referência aos certificados, seu uso é mais recomendado que o das <em>secrets</em> pois não só porque não são passados diretamente no código, mas também por conta dos processos de gestão de certificados já existentes na sua empresa. Por ser uma solução utilizada de diversas maneiras nas organizações, é costume que as empresas já tenham uma boa gestão desses objetos, pois a má gestão pode levar a interrupções nos serviços fornecidos pela organização, impactando não apenas clientes internos mas também os clientes finais.</p>
<h2 id="heading-estrategias-de-protecao">Estratégias de proteção</h2>
<p>Não importa se estivermos falando sobre <em>secrets</em> ou <em>certificates</em>, algo imprescindível é a boa gestão de expiração e distribuição desses objetos. Visando manter seus serviços disponíveis e sem interrupções, identificar quando um objeto estiver próximo da expiração permitirá que os times de segurança e engenharia atualizem o recurso em questão (manualmente ou via automação). O envio de alertas quando o objeto estiver próximo do vencimento facilitará esse trabalho.</p>
<p>Aplicar regras de acesso condicional pode reduzir drasticamente a possibilidade de uso de uma credencial comprometida. Criar regras referêntes à localização de onde vem a requisição possibilitará a recusa de conexões vindas de localidades não reconhecidas. Isso pode ser feito utilizando as <strong><em>Named Locations</em></strong> do <em>Entra</em>, que permitem o cadastro de <em>ranges</em> de IP para que possam ser utilizados posteriormente dentro das políticas de acesso condicional.</p>
<p>Como qualquer identidade dentro do <em>Entra</em>, as <em>workload IDs</em> também geram logs. Esses logs são objetos extremamente valiosos para o reforço da postura de identidade da organização, pois permitem validar para o que a identidade foi utilizada.</p>
<hr />
<h1 id="heading-explorando-o-workload-ids-do-microsoft-entra-id">Explorando o Workload IDs do Microsoft Entra ID</h1>
<p>Dentro do <em>Microsoft Entra ID</em>, as <em>workload IDs</em> podem ser visualizadas em um painel centralizado, parecido com esse:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713913717667/24c55d86-1f52-421f-a9b7-b1a424f54c34.png" alt class="image--center mx-auto" /></p>
<p>Podemos visualizar a quantidade de identidades que temos dentro do nosso <em>tenant</em>, também separado pelo tipo de identidade.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Essa seção dentro do Portal do Entra é relativamente nova, então tome seu tempo para explorá-la dentro do seu <em>tenant</em> e avalie tudo que ela há de oferecer.</div>
</div>

<p>Ter visibilidade e controle do que é criado no seu <em>tenant</em> é de extrema importância, para que os recursos possam ser bem governados e terem seu ciclo de vida gerenciado e acompanhado pelos times responsáveis.</p>
<p>Além disso, ao rolar a página para baixo, temos uma série de recomendações de melhores práticas fornecidas pela <em>Microsoft</em>, que podem ser acessadas e implementadas para incrementar os controles do seu ambiente.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713914525878/6fb94151-86f0-4cf9-bafe-a1d839189ff5.png" alt class="image--center mx-auto" /></p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Essa visão do <em>workload IDs</em> é oferecida no plano <em>free</em>. A versão <em>premium</em> será tratada posteriormente em outro texto.</div>
</div>

<hr />
<p>As identidades são o objeto central dentro da estratégia <strong><em>Zero Trust</em></strong> de todas as empresas, porém não podemos pensar que identidades são apenas de usuários humanos. Negligenciar as contas sistêmicas pode se tornar um problema de forma repentina caso sua empresa não tenha controles bem estabelecidos e ajustados.</p>
<p>Espero que tenha gostado do texto e que de alguma forma eu tenha conseguido contribuir com o seu planejamento de segurança.</p>
<p>Até logo!</p>
]]></content:encoded></item></channel></rss>