<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rogério Fontes</title>
    <description>The latest articles on DEV Community by Rogério Fontes (@rogeriofontes).</description>
    <link>https://dev.to/rogeriofontes</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1356440%2F90403ea9-3412-4c81-b7d6-45cd15baf0a7.png</url>
      <title>DEV Community: Rogério Fontes</title>
      <link>https://dev.to/rogeriofontes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rogeriofontes"/>
    <language>en</language>
    <item>
      <title>Seu agente pode fazer deploy. Mas deveria?</title>
      <dc:creator>Rogério Fontes</dc:creator>
      <pubDate>Tue, 06 Oct 2026 20:04:46 +0000</pubDate>
      <link>https://dev.to/rogeriofontes/seu-agente-pode-fazer-deploy-mas-deveria-74m</link>
      <guid>https://dev.to/rogeriofontes/seu-agente-pode-fazer-deploy-mas-deveria-74m</guid>
      <description>&lt;h2&gt;
  
  
  SDD, Harness, Agents e Segurança em ambientes Multicloud
&lt;/h2&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
São 16h52 de uma sexta-feira.&lt;/p&gt;

&lt;p&gt;Uma vulnerabilidade crítica acabou de ser identificada em uma aplicação em produção.&lt;/p&gt;

&lt;p&gt;O time precisa agir rápido.&lt;/p&gt;

&lt;p&gt;Parte da aplicação está rodando na AWS. Alguns workloads estão no Azure. Outros serviços utilizam Google Cloud.&lt;/p&gt;

&lt;p&gt;Um desenvolvedor pede ajuda para um Agente:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Corrija a vulnerabilidade, execute os testes e prepare o deploy.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Alguns minutos depois, o Agent responde:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Problema resolvido.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ótimo.&lt;/p&gt;

&lt;p&gt;Será mesmo?&lt;/p&gt;

&lt;p&gt;A pergunta mais importante não é se um Agente consegue alterar código, executar testes, modificar Terraform ou iniciar um pipeline.&lt;/p&gt;

&lt;p&gt;A pergunta é:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Até onde deveríamos permitir que ele vá?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Essa é uma discussão que vai muito além de Inteligência Artificial.&lt;/p&gt;

&lt;p&gt;Estamos falando de arquitetura, segurança, DevSecOps, governança e entrega de software (Software Delivery).&lt;/p&gt;

&lt;p&gt;E é aqui que conceitos como &lt;strong&gt;Spec-Driven Development (SDD)&lt;/strong&gt;, Agents e plataformas como o &lt;strong&gt;Harness&lt;/strong&gt; começam a se conectar.&lt;/p&gt;


&lt;h1&gt;
  
  
  Estamos acelerando a parte errada?
&lt;/h1&gt;

&lt;p&gt;Nos últimos anos investimos muito em acelerar o desenvolvimento.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IDE inteligente.&lt;/li&gt;
&lt;li&gt;Copilots.&lt;/li&gt;
&lt;li&gt;Geração automática de código.&lt;/li&gt;
&lt;li&gt;Testes gerados por IA.&lt;/li&gt;
&lt;li&gt;Infrastructure as Code.&lt;/li&gt;
&lt;li&gt;Pipelines automatizados.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agora chegamos aos agentes.&lt;/p&gt;

&lt;p&gt;Um agente pode potencialmente:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F840fo34rx84vlbsdet8g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F840fo34rx84vlbsdet8g.png" alt=" " width="800" height="1000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Isso pode aumentar significativamente a produtividade.&lt;/p&gt;

&lt;p&gt;Mas existe outro lado.&lt;/p&gt;

&lt;p&gt;Se conseguimos gerar código dez vezes mais rápido, também podemos gerar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vulnerabilidades mais rápidas;&lt;/li&gt;
&lt;li&gt;Configurações erradas mais rápido;&lt;/li&gt;
&lt;li&gt;Infraestrutura insegura mais rápida;&lt;/li&gt;
&lt;li&gt;Incidentes mais rápidos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Velocidade sem controles não elimina problemas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ela apenas reduz o tempo necessário para colocá-los em produção.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Por isso, à medida que agentes começam a participar do ciclo de desenvolvimento (Software Development Lifecycle), precisamos mudar a forma como pensamos sobre esse desenvolvimento.&lt;/p&gt;


&lt;h1&gt;
  
  
  Do Prompt para a Spec
&lt;/h1&gt;

&lt;p&gt;Durante muito tempo, nosso fluxo foi relativamente simples:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwo31voakhp0dw0mn52s2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwo31voakhp0dw0mn52s2.png" alt=" " width="800" height="1000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Então surgiram os copilots.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbgzlzjbafq098qws9j9i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbgzlzjbafq098qws9j9i.png" alt=" " width="800" height="1000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora estamos entrando em outro estágio.&lt;/p&gt;

&lt;p&gt;Agentes podem receber objetivos e executar várias etapas de forma relativamente autônoma.&lt;/p&gt;

&lt;p&gt;Nesse cenário, uma instrução como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Crie o serviço de pagamentos."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;é insuficiente.&lt;/p&gt;

&lt;p&gt;Existem dezenas de decisões escondidas nessa frase.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Qual arquitetura utilizar?&lt;/li&gt;
&lt;li&gt;Qual banco?&lt;/li&gt;
&lt;li&gt;Qual protocolo?&lt;/li&gt;
&lt;li&gt;Como os secrets serão armazenados?&lt;/li&gt;
&lt;li&gt;Quais bibliotecas são permitidas?&lt;/li&gt;
&lt;li&gt;A aplicação pode acessar a internet?&lt;/li&gt;
&lt;li&gt;Pode criar recursos de infraestrutura?&lt;/li&gt;
&lt;li&gt;Pode alterar IAM?&lt;/li&gt;
&lt;li&gt;Qual estratégia de deploy deve utilizar?&lt;/li&gt;
&lt;li&gt;Quais controles de segurança são obrigatórios?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;É aqui que o &lt;strong&gt;Spec-Driven Development — SDD&lt;/strong&gt; passa a ser particularmente interessante.&lt;/p&gt;

&lt;p&gt;A ideia é simples:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Antes de delegar implementação, precisamos tornar explícita a intenção.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Podemos imaginar:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl60bmo9d5pv8ot80u7y1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl60bmo9d5pv8ot80u7y1.png" alt=" " width="800" height="1000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A Spec pode definir elementos como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;application&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;payment-service&lt;/span&gt;

&lt;span class="na"&gt;architecture&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;hexagonal&lt;/span&gt;

&lt;span class="na"&gt;runtime&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;language&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;java&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;21&lt;/span&gt;

&lt;span class="na"&gt;deployment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;strategy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;canary&lt;/span&gt;

&lt;span class="na"&gt;security&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;public_database&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
  &lt;span class="na"&gt;secrets_in_code&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;forbidden&lt;/span&gt;
  &lt;span class="na"&gt;privileged_container&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="na"&gt;infrastructure&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;allowed_clouds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;aws&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;azure&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;gcp&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso muda completamente a relação entre desenvolvedor e Agente.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;O prompt deixa de carregar toda a responsabilidade pelo resultado.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Existe um contrato.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Por isso gosto de resumir SDD desta maneira:&lt;/p&gt;

&lt;h2&gt;
  
  
  Prompt é uma instrução. Spec é um contrato. &lt;br&gt;
&lt;/h2&gt;

&lt;p&gt;O agente continua tendo liberdade para resolver o problema.&lt;/p&gt;

&lt;p&gt;Mas sua liberdade existe dentro de limites conhecidos.&lt;/p&gt;




&lt;h1&gt;
  
  
  Mas Spec não é controle de segurança.
&lt;/h1&gt;

&lt;p&gt;Aqui existe uma distinção importante.&lt;/p&gt;

&lt;p&gt;Imagine que nossa Spec diga:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;database&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;public_access&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O agente tenta resolver um problema de conectividade e altera uma regra:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0.0.0.0/0 → TCP 5432
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do ponto de vista operacional, ele resolveu o problema.&lt;/p&gt;

&lt;p&gt;A aplicação voltou a acessar o banco.&lt;/p&gt;

&lt;p&gt;Mas agora o PostgreSQL pode estar exposto para a internet.&lt;/p&gt;

&lt;p&gt;O agente poderia até responder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Connectivity issue fixed successfully.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Tecnicamente correto.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Arquiteturalmente desastroso.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Por isso temos que separar três coisas:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3hl8xwoahqy0dujmai86.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3hl8xwoahqy0dujmai86.png" alt=" " width="800" height="1000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Spec&lt;/strong&gt; descreve o que queremos.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;implementação&lt;/strong&gt; materializa essa intenção.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Policy&lt;/strong&gt; determina o que é permitido.&lt;/p&gt;

&lt;p&gt;Esse último elemento é fundamental.&lt;/p&gt;




&lt;h1&gt;
  
  
  Agente não deve ter autoridade.
&lt;/h1&gt;

&lt;p&gt;Existe um princípio que considero essencial para arquiteturas agentic:&lt;/p&gt;

&lt;h2&gt;
  
  
  Agent != Authority
&lt;/h2&gt;

&lt;p&gt;Um agente pode ter capacidade de executar determinada ação.&lt;/p&gt;

&lt;p&gt;Isso não significa que ele deveria possuir autoridade irrestrita para executá-la.&lt;/p&gt;

&lt;p&gt;Considere:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flvxskber9yf6f6movkf2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flvxskber9yf6f6movkf2.png" alt=" " width="800" height="1000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O agente pode solicitar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;deploy payment-service version 2.8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mas a plataforma deve avaliar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Esse agente pode executar deploy?&lt;/li&gt;
&lt;li&gt;Nesse ambiente?&lt;/li&gt;
&lt;li&gt;Nessa aplicação?&lt;/li&gt;
&lt;li&gt;Essa imagem passou pelos scanners?&lt;/li&gt;
&lt;li&gt;Existem vulnerabilidades críticas?&lt;/li&gt;
&lt;li&gt;O Terraform atende às políticas?&lt;/li&gt;
&lt;li&gt;Existe uma janela permitida para deploy?&lt;/li&gt;
&lt;li&gt;Precisa de aprovação humana?&lt;/li&gt;
&lt;li&gt;O artefato é o mesmo aprovado anteriormente?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Somente depois disso a ação deveria acontecer.&lt;/p&gt;

&lt;p&gt;É uma mudança importante de mentalidade.&lt;/p&gt;

&lt;p&gt;Não queremos construir agentes incapazes de cometer erros.&lt;/p&gt;

&lt;p&gt;Isso provavelmente seria uma expectativa irreal.&lt;/p&gt;

&lt;p&gt;Queremos construir sistemas em que determinados erros &lt;strong&gt;não possam ultrapassar as fronteiras de segurança&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  Onde o Harness entra nessa arquitetura?
&lt;/h1&gt;

&lt;p&gt;É aqui que plataformas de entrega de software (Software Delivery) como o Harness começam a ganhar um papel interessante.&lt;/p&gt;

&lt;p&gt;Não apenas como:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnl17h2a4a227ixm6k019.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnl17h2a4a227ixm6k019.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;mas como:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F58z0jsbo5iqrtsn3ue28.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F58z0jsbo5iqrtsn3ue28.png" alt=" " width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Podemos imaginar:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1tnrg6n35xuz4dly16nr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1tnrg6n35xuz4dly16nr.png" alt=" " width="800" height="1000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A própria Harness vem expandindo essa ideia em 2026.&lt;/p&gt;

&lt;p&gt;Seus agentes de Trabalho Autônomos (Autonomous Worker Agents) podem executar como etapas de pipelines e produzir resultados auditáveis, em vez de operar fora do mecanismo tradicional de entrega.&lt;/p&gt;

&lt;p&gt;Isso é importante porque evita criar uma segunda realidade.&lt;/p&gt;

&lt;p&gt;Uma para humanos:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fke5xp90x6rxbfwb6pt2p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fke5xp90x6rxbfwb6pt2p.png" alt=" " width="800" height="1000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E outra completamente diferente para agentes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkkq43p8fvq6zwfk61gjo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkkq43p8fvq6zwfk61gjo.png" alt=" " width="800" height="1000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O segundo modelo deveria nos preocupar.&lt;/p&gt;

&lt;p&gt;Uma arquitetura mais segura seria:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8rg0i23j05rs61x91zg8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8rg0i23j05rs61x91zg8.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
Humanos e agentes utilizam os mesmos controles.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Os mesmos gates.&lt;/li&gt;
&lt;li&gt;As mesmas políticas.&lt;/li&gt;
&lt;li&gt;As mesmas evidências.&lt;/li&gt;
&lt;li&gt;O mesmo Audit Trail.&lt;/li&gt;
&lt;/ul&gt;


&lt;h1&gt;
  
  
  Policy as Code: transformando segurança em algo executável
&lt;/h1&gt;

&lt;p&gt;Vamos voltar ao nosso exemplo.&lt;/p&gt;

&lt;p&gt;O agente tentou expor PostgreSQL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0.0.0.0/0:5432
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Uma policy poderia simplesmente impedir isso.&lt;/p&gt;

&lt;p&gt;Conceitualmente:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe8yit6ffu7fnn79y1ixb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe8yit6ffu7fnn79y1ixb.png" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Resultado:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fobrgglspqkn6055b7b9t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fobrgglspqkn6055b7b9t.png" alt=" " width="800" height="831"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O Harness disponibiliza Policy as Code baseada em Open Policy Agent — OPA — permitindo centralizar e aplicar políticas sobre pipelines e processos de entrega. Isso permite transformar regras organizacionais em controles executáveis.&lt;/p&gt;

&lt;p&gt;Em vez de escrever em um documento:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Bancos de dados não devem ser expostos publicamente.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Podemos fazer a plataforma efetivamente impedir isso.&lt;/p&gt;

&lt;p&gt;Essa diferença é enorme.&lt;/p&gt;

&lt;p&gt;Uma política escrita em uma Wiki é documentação.&lt;/p&gt;

&lt;p&gt;Uma política executada automaticamente é &lt;strong&gt;arquitetura&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  E quando adicionamos Multicloud?
&lt;/h1&gt;

&lt;p&gt;Agora nosso cenário fica mais interessante.&lt;/p&gt;

&lt;p&gt;Imagine que a empresa opere em:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkqif54bc0ylui143igym.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkqif54bc0ylui143igym.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;É tentador criar três processos diferentes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9ruckd76c90r8tgxv65g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9ruckd76c90r8tgxv65g.png" alt=" " width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E, depois de algum tempo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsnfkcu4mf4ejm6st4jw0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsnfkcu4mf4ejm6st4jw0.png" alt=" " width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Em seguida:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn3css1720k93l2tmutew.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn3css1720k93l2tmutew.png" alt=" " width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Começamos a multiplicar complexidade.&lt;/p&gt;

&lt;p&gt;Uma alternativa é separar:&lt;/p&gt;

&lt;h2&gt;
  
  
  O que deve ser comum?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Políticas;&lt;/li&gt;
&lt;li&gt;Padrões;&lt;/li&gt;
&lt;li&gt;Segurança;&lt;/li&gt;
&lt;li&gt;Approval gates;&lt;/li&gt;
&lt;li&gt;Audit trail;&lt;/li&gt;
&lt;li&gt;Estratégia de deploy;&lt;/li&gt;
&lt;li&gt;Observabilidade;&lt;/li&gt;
&lt;li&gt;compliance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  O que pode variar?
&lt;/h2&gt;

&lt;p&gt;A implementação na cloud.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capacidade&lt;/th&gt;
&lt;th&gt;AWS&lt;/th&gt;
&lt;th&gt;Azure&lt;/th&gt;
&lt;th&gt;GCP&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Kubernetes&lt;/td&gt;
&lt;td&gt;EKS&lt;/td&gt;
&lt;td&gt;AKS&lt;/td&gt;
&lt;td&gt;GKE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identidade&lt;/td&gt;
&lt;td&gt;IAM&lt;/td&gt;
&lt;td&gt;Entra ID&lt;/td&gt;
&lt;td&gt;IAM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secrets&lt;/td&gt;
&lt;td&gt;Secrets Manager&lt;/td&gt;
&lt;td&gt;Key Vault&lt;/td&gt;
&lt;td&gt;Secret Manager&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Serverless&lt;/td&gt;
&lt;td&gt;Lambda&lt;/td&gt;
&lt;td&gt;Functions&lt;/td&gt;
&lt;td&gt;Cloud Functions / Cloud Run&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Observabilidade&lt;/td&gt;
&lt;td&gt;CloudWatch&lt;/td&gt;
&lt;td&gt;Azure Monitor&lt;/td&gt;
&lt;td&gt;Cloud Monitoring&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Então podemos ter:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flpwpchfggshv7i21ru61.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flpwpchfggshv7i21ru61.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A plataforma se torna uma camada de consistência.&lt;/p&gt;

&lt;p&gt;Não precisamos fingir que as três clouds são iguais.&lt;/p&gt;

&lt;p&gt;Elas não são.&lt;/p&gt;

&lt;p&gt;O objetivo é manter consistentes os &lt;strong&gt;princípios&lt;/strong&gt;, não necessariamente as implementações.&lt;/p&gt;

&lt;p&gt;Por isso:&lt;/p&gt;

&lt;h2&gt;
  
  
  Multicloud não significa três processos de entrega.
&lt;/h2&gt;

&lt;p&gt;Significa &lt;strong&gt;um modelo de governança com múltiplos targets&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  Agentes mudam também nosso Threat Model
&lt;/h1&gt;

&lt;p&gt;Existe outro problema.&lt;/p&gt;

&lt;p&gt;Um Agente capaz de participar do entrega de software (Software Delivery) pode ter acesso a:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repositórios;&lt;/li&gt;
&lt;li&gt;Pipelines;&lt;/li&gt;
&lt;li&gt;Secrets;&lt;/li&gt;
&lt;li&gt;APIs;&lt;/li&gt;
&lt;li&gt;MCP Servers;&lt;/li&gt;
&lt;li&gt;Ferramentas internas;&lt;/li&gt;
&lt;li&gt;Sistemas de tickets;&lt;/li&gt;
&lt;li&gt;Terraform;&lt;/li&gt;
&lt;li&gt;Kubernetes;&lt;/li&gt;
&lt;li&gt;Ambientes cloud.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Isso significa que precisamos pensar não apenas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;O Agente pode realizar esta ação?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;mas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;O Agente deve realizar esta ação?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E também:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Sob qual identidade?
- Por quanto tempo?
- Contra qual recurso?
- Com quais credenciais?
- Com qual acesso à rede?
- Com qual evidência de auditoria?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A Harness publicou em 2026 detalhes de como seus Agentes de Execução (Worker Agents) utilizam camadas distintas de isolamento, incluindo hardening de imagem, isolamento de processos, isolamento de secrets e controles de rede.&lt;/p&gt;

&lt;p&gt;Essa abordagem aponta para uma arquitetura de segurança que deveríamos considerar independentemente da tecnologia utilizada:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdtjyzaajczn4rz0h6g2n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdtjyzaajczn4rz0h6g2n.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ou seja:&lt;/p&gt;

&lt;p&gt;não basta proteger &lt;strong&gt;o que o Agente sabe&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Precisamos proteger &lt;strong&gt;o que ele consegue fazer&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  O novo caminho até produção
&lt;/h1&gt;

&lt;p&gt;Se juntarmos tudo, nosso fluxo começa a ficar assim:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6cc056vlajvyro2y07m7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6cc056vlajvyro2y07m7.png" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Isso muda nossa discussão sobre produtividade.&lt;/p&gt;

&lt;p&gt;Talvez a pergunta não seja mais:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Quanto código um Agente consegue produzir?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Talvez seja:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Quanto trabalho conseguimos delegar sem abrir mão de controle?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Essa é uma discussão muito mais interessante.&lt;/p&gt;




&lt;h1&gt;
  
  
  Segurança como restrição arquitetural
&lt;/h1&gt;

&lt;p&gt;Existe uma ideia que considero fundamental para essa nova geração de sistemas.&lt;/p&gt;

&lt;p&gt;Durante muito tempo tratamos segurança como uma etapa:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9smuvqxsqpry2h96eom6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9smuvqxsqpry2h96eom6.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mas, quando Agentes começam a executar ações, segurança precisa aparecer em toda a arquitetura.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcx1rypak0vlf8fh5bc0y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcx1rypak0vlf8fh5bc0y.png" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Segurança deixa de ser apenas:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“encontre vulnerabilidades.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;E passa a ser também:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“limite possibilidades.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Esse talvez seja o principal ponto.&lt;/p&gt;




&lt;h1&gt;
  
  
  Não tente construir um Agente que nunca erre
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Agentes vão errar.&lt;/li&gt;
&lt;li&gt;Desenvolvedores erram.&lt;/li&gt;
&lt;li&gt;Scripts erram.&lt;/li&gt;
&lt;li&gt;Pipelines erram.&lt;/li&gt;
&lt;li&gt;Configurações erram.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A resposta arquitetural não pode depender da expectativa de perfeição.&lt;/p&gt;

&lt;p&gt;Por isso, gosto de resumir essa arquitetura assim:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnqaa4in0e75smdtna15d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnqaa4in0e75smdtna15d.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cada camada tem uma responsabilidade diferente.&lt;/p&gt;




&lt;h1&gt;
  
  
  Voltando para sexta-feira
&lt;/h1&gt;

&lt;p&gt;São agora 17h08.&lt;/p&gt;

&lt;p&gt;Nosso Agente terminou a correção.&lt;/p&gt;

&lt;p&gt;Mas, desta vez, o fluxo foi:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8pogx6kl73vxf5b3za6j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8pogx6kl73vxf5b3za6j.png" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O patch chegou à produção.&lt;/p&gt;

&lt;p&gt;Mas isso não é o aspecto mais importante da história.&lt;/p&gt;

&lt;p&gt;O mais importante é que o Agente conseguiu fazer apenas aquilo que sua arquitetura permitia.&lt;/p&gt;

&lt;p&gt;Essa será uma das grandes discussões de arquitetura dos próximos anos.&lt;/p&gt;

&lt;p&gt;Não simplesmente:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;como utilizar Agentes?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Mas:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;como permitir autonomia sem entregar autoridade irrestrita?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Porque, no final:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Agentes aceleram decisões. (Agents accelerate decisions).&lt;br&gt;&lt;br&gt;
A arquitetura os limita. (Architecture constrains them).&lt;br&gt;&lt;br&gt;
A segurança os rege. (Security governs them).&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;E talvez essa seja a arquitetura que realmente precisamos para o Entrega de Software (Software Delivery) da era dos Agentes.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>cloud</category>
      <category>security</category>
    </item>
    <item>
      <title>Segurança na AWS Inicia com como criar identidade: IAM, além de usuários e roles.</title>
      <dc:creator>Rogério Fontes</dc:creator>
      <pubDate>Mon, 14 Sep 2026 12:49:28 +0000</pubDate>
      <link>https://dev.to/rogeriofontes/seguranca-na-aws-inicia-com-como-criar-identidade-iam-alem-de-usuarios-e-roles-34bm</link>
      <guid>https://dev.to/rogeriofontes/seguranca-na-aws-inicia-com-como-criar-identidade-iam-alem-de-usuarios-e-roles-34bm</guid>
      <description>&lt;p&gt;Se pensamos em segurança na nuvem, é comum começarmos falando sobre firewalls, criptografia, redes privadas, WAF ou ferramentas de detecção de ameaças.&lt;/p&gt;

&lt;p&gt;Mas precisamos pensar algo antes de praticamente todas essas tecnologias:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quem pode fazer o quê dentro do meu ambiente AWS?
Pode parecer um questionamento básico, mas sempre está no centro das decisões de segurança em cloud e não só.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Respondendo a esse questionamento, entra o AWS Identity and Access Management (IAM).&lt;/p&gt;

&lt;p&gt;Neste artigo, pretendo ir além da explicação tradicional de usuários, grupos e roles. A ideia é olhar para IAM do ponto de vista de arquitetura e entender como conceitos como least privilege, roles, policies, permission boundaries e temporary credentials ajudam a construir workloads mais seguros na AWS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Segurança geralmente começa com identidade.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Vamos pensar em uma aplicação relativamente simples:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhwmnrj0295fbj9soqret.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhwmnrj0295fbj9soqret.png" alt=" " width="562" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A primeira pergunta de segurança poderia ser:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Como bloquear que alguém, por meio da internet, acesse diretamente o DynamoDB?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Outra pergunta:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Por que a aplicação precisa ter acesso ao DynamoDB?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;E mais uma que poderíamos fazer:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exatamente quais operações essa aplicação precisa executar no DynamoDB?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ela precisa de:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GetItem&lt;/li&gt;
&lt;li&gt;PutItem&lt;/li&gt;
&lt;li&gt;UpdateItem&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ou realmente precisa de:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;dynamodb:*  ?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essa pequena diferença representa um dos princípios mais importantes de segurança:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Menor Privilégio (Least Privilege)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Uma identidade deve possuir somente as permissões necessárias para realizar sua função.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nada mais que isso.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. O problema do (*), quando faz uma policy.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Durante o desenvolvimento e a criação de provas de conceito, é muito tentador criar algo assim:&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;"Effect": "Allow",&lt;br&gt;
&amp;nbsp;&amp;nbsp;"Action": "&lt;em&gt;",&lt;br&gt;
&amp;nbsp;&amp;nbsp;"Resource": "&lt;/em&gt;"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Isso funciona normalmente, e esse é justamente o "problema".&lt;/p&gt;

&lt;p&gt;Quando damos permissão total para resolver rapidamente um problema de acesso, podemos estar criando uma dívida de segurança.&lt;/p&gt;

&lt;p&gt;Em um ambiente real, uma aplicação que precisa apenas escrever mensagens em uma fila não deveria ter permissão para excluir filas, criar recursos ou acessar outros serviços.&lt;/p&gt;

&lt;p&gt;Podemos começar restringindo:&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;"Effect": "Allow",&lt;br&gt;
&amp;nbsp;&amp;nbsp;"Action": [&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"sqs:SendMessage"&lt;br&gt;
&amp;nbsp;&amp;nbsp;],&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"Resource": "arn:aws:sqs:REGION:ACCOUNT_ID:orders-events"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Agora estamos dizendo algo muito mais específico:&lt;br&gt;
Esta identidade pode enviar mensagens para esta fila.&lt;br&gt;
Essa mudança representa uma evolução importante:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7pdn8irvvz2xypg3gss0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7pdn8irvvz2xypg3gss0.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. IAM não é apenas Users.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Quando começamos a estudar AWS, normalmente conhecemos uma estrutura parecida com:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8pzngwm47fkq2u79c180.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8pzngwm47fkq2u79c180.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Isso é útil para aprender os conceitos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mas arquiteturas modernas na AWS deveriam depender cada vez menos de credenciais permanentes associadas diretamente a aplicações.&lt;/p&gt;

&lt;p&gt;Considere uma aplicação Java executando no ECS.&lt;/p&gt;

&lt;p&gt;Uma abordagem problemática seria armazenar:&lt;br&gt;
aws.accessKeyId=...&lt;br&gt;
aws.secretAccessKey=...&lt;/p&gt;

&lt;p&gt;Agora temos vários problemas.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Onde armazenamos essas credenciais?&lt;/li&gt;
&lt;li&gt;Quem pode vê-las?&lt;/li&gt;
&lt;li&gt;Como fazemos rotação?&lt;/li&gt;
&lt;li&gt;O que acontece se forem expostas?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Prefira credenciais temporárias.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Uma alternativa muito melhor é permitir que o workload assuma uma IAM Role.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Por exemplo:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl85npbpf2s9meqrlg08p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl85npbpf2s9meqrlg08p.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
A aplicação não precisa conhecer uma Access Key fixa.&lt;/p&gt;

&lt;p&gt;O ambiente AWS fornece credenciais temporárias associadas à role.&lt;/p&gt;

&lt;p&gt;Isso reduz significativamente o risco relacionado ao gerenciamento de credenciais de longa duração.&lt;br&gt;
Para quem trabalha com Java e Spring Boot, isso também muda a forma como pensamos configuração.&lt;/p&gt;

&lt;p&gt;Em vez de perguntar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Onde vou colocar minha AWS_ACCESS_KEY_ID?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A pergunta deveria ser:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Qual identidade este workload deve assumir e quais permissões essa identidade realmente precisa?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Essa é uma pergunta de arquitetura, que sempre podemos fazer.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Políticas (Policies) são contratos de autorização.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Podemos pensar que IAM Policy seria como um contrato de autorização.&lt;/p&gt;

&lt;p&gt;Ela responde principalmente:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F95cl6gnlud2aak41r9nw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F95cl6gnlud2aak41r9nw.png" alt=" " width="800" height="900"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Em uma policy encontramos elementos como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Effect&lt;/li&gt;
&lt;li&gt;Action&lt;/li&gt;
&lt;li&gt;Resource&lt;/li&gt;
&lt;li&gt;Condition&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Por exemplo:&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;"Effect": "Allow",&lt;br&gt;
&amp;nbsp;&amp;nbsp;"Action": "s3:GetObject",&lt;br&gt;
&amp;nbsp;&amp;nbsp;"Resource": "arn:aws:s3:::my-secure-bucket/*"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;A identidade não ganhou "acesso ao S3".&lt;/p&gt;

&lt;p&gt;Ela ganhou permissão para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Executar GetObject nos objetos daquele bucket específico.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Essa diferença de interpretação é fundamental.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Identity-based e Resource-based policies&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Outro conceito importante é entender onde a autorização está definida.&lt;/p&gt;

&lt;p&gt;Uma identity-based policy está associada a uma identidade:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9z5jpqvgrwvav0mwwx3n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9z5jpqvgrwvav0mwwx3n.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Já alguns serviços permitem políticas associadas diretamente ao recurso.&lt;br&gt;
Por exemplo:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzqrjuwv3wimgm8nn9sdl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzqrjuwv3wimgm8nn9sdl.png" alt=" " width="800" height="1000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Isso permite construir modelos de autorização mais sofisticados.&lt;/p&gt;

&lt;p&gt;O S3 é um exemplo clássico, mas outros serviços AWS também possuem resource-based policies.&lt;/p&gt;

&lt;p&gt;Como criadores de arquitetura, precisamos entender não apenas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Qual policy devo criar?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Um pensamento melhor seria:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Onde essa decisão de autorização deveria existir?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;7. Permission Boundaries&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Agora chegamos a um conceito muito interessante quando começamos a trabalhar com ambientes maiores.&lt;/p&gt;

&lt;p&gt;Imagine que uma organização permita que desenvolvedores criem suas próprias IAM Roles.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Isso oferece autonomia.&lt;/li&gt;
&lt;li&gt;Mas também cria um risco.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O desenvolvedor poderia criar:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpmuu7g09iwa4lgph8yer.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpmuu7g09iwa4lgph8yer.png" alt=" " width="800" height="731"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Uma &lt;strong&gt;Permission Boundary&lt;/strong&gt; permite estabelecer um limite máximo de permissões que aquela identidade poderá receber.&lt;/p&gt;

&lt;p&gt;Podemos pensar assim:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fabu3krmalur9wikghc2n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fabu3krmalur9wikghc2n.png" alt=" " width="800" height="1000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A policy pode solicitar determinadas permissões, mas a boundary estabelece até onde elas podem chegar.&lt;/p&gt;

&lt;p&gt;Isso é especialmente interessante em ambientes onde queremos combinar:&lt;br&gt;
&lt;em&gt;- Autonomia + governança.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. RBAC e ABAC&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Outro ponto importante de arquiteturas maiores é decidir como as permissões serão organizadas.&lt;/p&gt;

&lt;p&gt;Uma abordagem tradicional é o:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RBAC — Role-Based Access Control&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Permissões baseadas em funções.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developer&lt;/li&gt;
&lt;li&gt;SecurityEngineer&lt;/li&gt;
&lt;li&gt;DatabaseAdministrator&lt;/li&gt;
&lt;li&gt;Auditor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mas, conforme o ambiente cresce, administrar centenas de combinações de roles e policies pode se tornar complicado.&lt;/p&gt;

&lt;p&gt;É aí que entra:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ABAC — Attribute-Based Access Control&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No ABAC, podemos tomar decisões utilizando atributos, frequentemente representados por tags.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Project = Payments&lt;/li&gt;
&lt;li&gt;Environment = Production&lt;/li&gt;
&lt;li&gt;Team = Security&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Isso permite criar modelos de autorização mais dinâmicos.&lt;br&gt;
Imagine uma regra conceitual:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Desenvolvedores podem acessar recursos quando a tag Project do recurso corresponde ao projeto associado à identidade.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agora o modelo pode escalar sem precisarmos criar uma policy diferente para cada novo projeto.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9. IAM é arquitetura.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Esse talvez seja o principal ponto deste artigo.&lt;br&gt;
IAM não deveria ser algo configurado depois que a arquitetura está pronta.&lt;/p&gt;

&lt;p&gt;Ele faz parte da arquitetura.&lt;br&gt;
Quando desenhamos:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5y8hpax3a7xy21klxkfm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5y8hpax3a7xy21klxkfm.png" alt=" " width="800" height="1000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Deveríamos também desenhar:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz3jmxtwc0znqhfk5swzu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz3jmxtwc0znqhfk5swzu.png" alt=" " width="800" height="841"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Assim começamos a tratar identidade como parte do design do sistema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10. Um exercício prático&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Considere uma aplicação de pedidos.&lt;/p&gt;

&lt;p&gt;Ela precisa:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Criar pedidos no DynamoDB.&lt;/li&gt;
&lt;li&gt;Publicar um evento em uma fila SQS.&lt;/li&gt;
&lt;li&gt;Ler configurações.&lt;/li&gt;
&lt;li&gt;Registrar logs.
 
Antes de criar qualquer policy, responda:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;DynamoDB&lt;/strong&gt;&lt;br&gt;
Ele precisa acessar todas as tabelas?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provavelmente não.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;SQS&lt;/strong&gt;&lt;br&gt;
Ela precisa administrar a fila?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provavelmente não.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Talvez apenas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sqs:SendMessage&lt;/li&gt;
&lt;li&gt;IAM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A aplicação precisa criar usuários ou roles?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Não.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Credenciais&lt;/strong&gt;&lt;br&gt;
Precisamos armazenar Access Key e Secret Key?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se o workload está corretamente integrado com IAM Roles, provavelmente não.
 
O resultado começa a parecer:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi216fah8t4b5jb7w6r1q.png" alt=" " width="800" height="841"&gt;
&lt;em&gt;Isso é least privilege aplicado à arquitetura.&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;11. O que eu evitaria&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Algumas práticas deveriam levantar imediatamente um alerta:&lt;br&gt;
Evite roles com muitos privilégios:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AdministratorAccess, para aplicações. Cuidado, sempre lembre-se do privilégio mínimo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Evite políticas (policies) com (*):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Action: *&lt;/li&gt;
&lt;li&gt;Resource: *&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Evite usá-la sem justificativa comprovada.&lt;/p&gt;

&lt;p&gt;Evite usar Access Keys armazenadas no código.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Crie credenciais comitadas no Git (vamos fazer como em um próximo artigo).&lt;/li&gt;
&lt;li&gt;Usar um Vault, como SecretManager para as credenciais.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Evite uma única IAM Role compartilhada por vários workloads.&lt;br&gt;
Evite permissões adicionadas continuamente sem revisão.&lt;/p&gt;

&lt;p&gt;IAM não deveria ser tratado como uma barreira que precisamos remover para fazer a aplicação funcionar. Ele é justamente um dos mecanismos que impedem que uma falha em um componente comprometa todo o ambiente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Segurança na AWS não começa no firewall.&lt;/p&gt;

&lt;p&gt;Ela começa respondendo corretamente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quem pode fazer o quê, em qual recurso e sob quais condições?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;IAM Users, Roles e Policies são apenas as ferramentas.&lt;/p&gt;

&lt;p&gt;Os princípios por trás delas são mais importantes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Menor privilégio (Least privilege);&lt;/li&gt;
&lt;li&gt;Credenciais temporárias;&lt;/li&gt;
&lt;li&gt;Separação de responsabilidades;&lt;/li&gt;
&lt;li&gt;Autorização explícita;&lt;/li&gt;
&lt;li&gt;Redução do blast radius;&lt;/li&gt;
&lt;li&gt;Governança.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para um arquiteto ou mesmo quem está pensando em arquiteturas com segurança primeiro (Security first), portanto, IAM não deveria ser apenas um serviço AWS.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IAM é uma decisão arquitetural.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E essa será justamente a abordagem desta série: não apenas explicar serviços de segurança da AWS, mas entender como eles participam da construção de arquiteturas seguras.&lt;/p&gt;

&lt;p&gt;No próximo artigo, vamos aprofundar esse problema:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Designing Least-Privilege Access on AWS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vamos sair da teoria e construir uma arquitetura real utilizando IAM Roles, Policies e Permission Boundaries, mostrando também alguns erros que podem resultar em privilege escalation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS Security Architecture in Practice — #01&lt;/strong&gt;&lt;br&gt;
Uma série sobre arquitetura, segurança e construção de workloads seguros na AWS.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>iam</category>
      <category>security</category>
      <category>zerotrust</category>
    </item>
  </channel>
</rss>
