<?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>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>
