<?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: Hugo Lemos da Silva</title>
    <description>The latest articles on DEV Community by Hugo Lemos da Silva (@hugollemos).</description>
    <link>https://dev.to/hugollemos</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F638472%2F9f52027f-943d-46ba-90d2-b798eb51d1c7.jpeg</url>
      <title>DEV Community: Hugo Lemos da Silva</title>
      <link>https://dev.to/hugollemos</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hugollemos"/>
    <language>en</language>
    <item>
      <title>Boas Práticas de Segurança e Qualidade no Terraform</title>
      <dc:creator>Hugo Lemos da Silva</dc:creator>
      <pubDate>Mon, 24 Mar 2025 02:29:31 +0000</pubDate>
      <link>https://dev.to/hugollemos/boas-praticas-de-seguranca-e-qualidade-no-terraform-29oi</link>
      <guid>https://dev.to/hugollemos/boas-praticas-de-seguranca-e-qualidade-no-terraform-29oi</guid>
      <description>&lt;h1&gt;
  
  
  Introdução
&lt;/h1&gt;

&lt;p&gt;Olá! Recentemente, tenho mergulhado no universo do Terraform e descobri ferramentas incríveis que podem elevar a segurança e a conformidade da nossa infraestrutura para outro nível.&lt;/p&gt;

&lt;p&gt;Mas, antes de tudo, vale lembrar: ferramentas são apenas parte da equação. Sem processos bem definidos, até mesmo o "cinto de utilidades do Batman" pode se tornar inútil. Saber quando e por que usar cada ferramenta é tão importante quanto tê-las à disposição.&lt;/p&gt;

&lt;p&gt;Aqui estão algumas ferramentas que podem fazer a diferença na sua jornada!&lt;/p&gt;




&lt;h1&gt;
  
  
  Segurança &amp;amp; Compliance
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Checkov
&lt;/h2&gt;

&lt;p&gt;O &lt;strong&gt;Checkov&lt;/strong&gt; é como um "detetive digital" para seus arquivos de infraestrutura como código (IaC). Ele analisa e identifica configurações que podem comprometer a segurança ou a conformidade, com mais de 750 políticas predefinidas e a possibilidade de criar suas próprias regras.&lt;/p&gt;

&lt;h3&gt;
  
  
  Principais Recursos
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Compatível com diversos formatos: Terraform, CloudFormation, Kubernetes, Docker, entre outros.&lt;/li&gt;
&lt;li&gt;Integração com pipelines de CI/CD.&lt;/li&gt;
&lt;li&gt;Relatórios detalhados com links para guias de correção.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Exemplos de Uso
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Usando Docker
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull bridgecrew/checkov
docker run &lt;span class="nt"&gt;--tty&lt;/span&gt; &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;--volume&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;:/tf &lt;span class="nt"&gt;--workdir&lt;/span&gt; /tf bridgecrew/checkov &lt;span class="nt"&gt;--directory&lt;/span&gt; /tf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Escaneando um diretório ou arquivo específico
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;checkov &lt;span class="nt"&gt;--directory&lt;/span&gt; /user/path/to/iac/code
checkov &lt;span class="nt"&gt;--file&lt;/span&gt; /user/tf/example.tf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Escaneando um plano Terraform em formato JSON
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform init
terraform plan &lt;span class="nt"&gt;-out&lt;/span&gt; tf.plan
terraform show &lt;span class="nt"&gt;-json&lt;/span&gt; tf.plan &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; tf.json
checkov &lt;span class="nt"&gt;-f&lt;/span&gt; tf.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Personalizando verificações
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Executar verificações específicas:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  checkov &lt;span class="nt"&gt;--directory&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--check&lt;/span&gt; CKV_AWS_20,CKV_AWS_57
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Ignorar verificações específicas:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  checkov &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--skip-check&lt;/span&gt; CKV_AWS_20
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://www.checkov.io" rel="noopener noreferrer"&gt;Documentação oficial&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  tfsec
&lt;/h2&gt;

&lt;p&gt;O &lt;strong&gt;tfsec&lt;/strong&gt;, desenvolvido pela Aqua Security, é uma ferramenta poderosa para identificar permissões excessivas e configurações inseguras em arquivos Terraform. Ele é como um "guarda-costas digital" para sua infraestrutura.&lt;/p&gt;

&lt;h3&gt;
  
  
  Principais Recursos
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Suporte a múltiplos provedores de nuvem.&lt;/li&gt;
&lt;li&gt;Avaliação de expressões HCL e funções Terraform.&lt;/li&gt;
&lt;li&gt;Integração com IDEs e pipelines CI/CD.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Usando Docker
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;:/tfsec aquasec/tfsec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/aquasecurity/tfsec" rel="noopener noreferrer"&gt;Repositório oficial&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Trivy
&lt;/h2&gt;

&lt;p&gt;O &lt;strong&gt;Trivy&lt;/strong&gt; é uma ferramenta multifuncional que escaneia desde imagens de contêiner até repositórios Git e clusters Kubernetes. Ele é como um "canivete suíço" para segurança.&lt;/p&gt;

&lt;h3&gt;
  
  
  Exemplos de Uso
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Escaneando uma imagem Docker:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  trivy image python:3.4-alpine
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Escaneando vulnerabilidades, segredos e configurações:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  trivy fs &lt;span class="nt"&gt;--scanners&lt;/span&gt; vuln,secret,misconfig myproject/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/aquasecurity/trivy" rel="noopener noreferrer"&gt;Repositório oficial&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Terrascan
&lt;/h2&gt;

&lt;p&gt;O &lt;strong&gt;Terrascan&lt;/strong&gt; é uma ferramenta que ajuda a identificar configurações incorretas e vulnerabilidades antes mesmo de você provisionar sua infraestrutura. Pense nele como um "consultor de segurança" para IaC.&lt;/p&gt;

&lt;h3&gt;
  
  
  Principais Recursos
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Mais de 500 políticas de segurança.&lt;/li&gt;
&lt;li&gt;Suporte a Terraform, CloudFormation, Kubernetes, Docker, entre outros.&lt;/li&gt;
&lt;li&gt;Integração com pipelines CI/CD.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Exemplos de Uso
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Instalação como executável nativo:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  curl &lt;span class="nt"&gt;-L&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://api.github.com/repos/tenable/terrascan/releases/latest | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s2"&gt;"https://.+?_Darwin_x86_64.tar.gz"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; terrascan.tar.gz
  &lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-xf&lt;/span&gt; terrascan.tar.gz terrascan &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;rm &lt;/span&gt;terrascan.tar.gz
  &lt;span class="nb"&gt;install &lt;/span&gt;terrascan /usr/local/bin &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;rm &lt;/span&gt;terrascan
  terrascan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Escaneando um repositório Git:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  terrascan scan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://runterrascan.io/docs/integrations/" rel="noopener noreferrer"&gt;Documentação oficial&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Se você chegou até aqui, tenho uma surpresa para você! Estou montando um repositório com todas as ferramentas que encontrei ao longo da minha jornada, cobrindo Terraform, Kubernetes, Docker, segurança e muito mais. O repositório é público, e você está convidado a contribuir com suas descobertas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Hugollemos/tools" rel="noopener noreferrer"&gt;Repositório no GitHub&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://hugollemos.github.io/tools/" rel="noopener noreferrer"&gt;Site do projeto&lt;/a&gt;&lt;/p&gt;

</description>
      <category>terraform</category>
      <category>tutorial</category>
      <category>cybersecurity</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Segurança em Contêineres: Como Melange e apko Ajudam a Proteger Seus Projetos e Criar Imagens Minimalistas</title>
      <dc:creator>Hugo Lemos da Silva</dc:creator>
      <pubDate>Thu, 30 Jan 2025 23:57:52 +0000</pubDate>
      <link>https://dev.to/hugollemos/seguranca-em-conteineres-como-melange-e-apko-ajudam-a-proteger-seus-projetos-e-criar-imagens-51b2</link>
      <guid>https://dev.to/hugollemos/seguranca-em-conteineres-como-melange-e-apko-ajudam-a-proteger-seus-projetos-e-criar-imagens-51b2</guid>
      <description>&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;Chainguard&lt;/strong&gt; é uma empresa que desenvolve ferramentas para criação de imagens de contêineres seguras e minimalistas. Entre suas principais soluções open source estão:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Melange&lt;/strong&gt;: Uma ferramenta para criar pacotes de software reprodutíveis e auditáveis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apko&lt;/strong&gt;: Um criador de imagens de contêiner baseadas em pacotes APK, com ênfase em segurança e controle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wolfi&lt;/strong&gt;: Uma distribuição Linux mínima e não-GNU projetada especificamente para ambientes de contêiner.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Chainguard Apko
&lt;/h2&gt;

&lt;h3&gt;
  
  
  O que é?
&lt;/h3&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.amazonaws.com%2Fuploads%2Farticles%2F1srophjnxsqsiki44url.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.amazonaws.com%2Fuploads%2Farticles%2F1srophjnxsqsiki44url.png" alt="Image description" width="800" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;Apko&lt;/strong&gt; é uma ferramenta para criar imagens de contêineres minimalistas e seguras usando pacotes APK sem camadas desnecessárias, melhorando a segurança e o desempenho. O Docker, por exemplo, combina etapas de construção como executar comandos para copiar arquivos, construir e implementar aplicativos. O Apko, por outro lado, é apenas uma ferramenta de &lt;strong&gt;composição&lt;/strong&gt; que se concentra na produção de imagens base leves e "planas" que são reprodutíveis e contêm arquivos SBOM gerados automaticamente para cada construção bem-sucedida.&lt;/p&gt;

&lt;h3&gt;
  
  
  Principais recursos do Apko:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Geração de imagens OCI a partir de arquivos YAML.&lt;/li&gt;
&lt;li&gt;Totalmente integrada ao ecossistema Wolfi.&lt;/li&gt;
&lt;li&gt;Controle granular sobre dependências.&lt;/li&gt;
&lt;li&gt;Ferramenta declarativa para construção de imagens OCI baseada no apk.&lt;/li&gt;
&lt;li&gt;Parte do kit de ferramentas utilizado para criar imagens Wolfi/Chainguard.&lt;/li&gt;
&lt;li&gt;As imagens são definidas em arquivos &lt;strong&gt;YAML&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Builds são totalmente reprodutíveis.&lt;/li&gt;
&lt;li&gt;Gera automaticamente &lt;strong&gt;SBOMs&lt;/strong&gt; (Bill of Materials) para cada imagem.&lt;/li&gt;
&lt;li&gt;Suporte para builds agnósticos de plataforma via &lt;strong&gt;Docker&lt;/strong&gt; + imagem &lt;strong&gt;apko&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Início rápido com Apko
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Baixe a imagem apko
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull cgr.dev/chainguard/apko
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso fará o download da versão mais recente da imagem apko distroless, que é reconstruída todas as noites para maior atualização.&lt;/p&gt;

&lt;p&gt;Verifique se você consegue executar o apko com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; cgr.dev/chainguard/apko version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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.amazonaws.com%2Fuploads%2Farticles%2F9mbinfki6qng20zpsnyn.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.amazonaws.com%2Fuploads%2Farticles%2F9mbinfki6qng20zpsnyn.png" alt="Image description" width="544" height="326"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Criando uma imagem de teste
&lt;/h3&gt;

&lt;p&gt;Vamos criar uma imagem de teste usando um dos exemplos fornecidos no &lt;a href="https://github.com/chainguard-dev/apko/tree/main/examples" rel="noopener noreferrer"&gt;repositório oficial do apko&lt;/a&gt;, usaremos o exemplo &lt;code&gt;wolfi-base.yaml&lt;/code&gt; para demonstração.&lt;/p&gt;

&lt;p&gt;Vamos criar uma pasta para salvar os arquivos de imagem e mover para esse diretório:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; ~/apko
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/apko
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Em seguida, crie um arquivo chamado wolfi-base.yaml para salvar sua definição de imagem. Você pode usar &lt;code&gt;touch&lt;/code&gt; para isso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;wolfi-base.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A &lt;code&gt;wolfi-base.yaml&lt;/code&gt; imagem de exemplo é definida da seguinte forma:&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;contents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;keyring&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;https://packages.wolfi.dev/os/wolfi-signing.rsa.pub&lt;/span&gt;
  &lt;span class="na"&gt;repositories&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;https://packages.wolfi.dev/os&lt;/span&gt;
  &lt;span class="na"&gt;packages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;wolfi-base&lt;/span&gt;

&lt;span class="na"&gt;cmd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/bin/sh -l&lt;/span&gt;

&lt;span class="na"&gt;archs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
 &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;x86_64&lt;/span&gt;
 &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;aarch64&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Contents:&lt;/code&gt;&lt;br&gt;
Define o que será incluído na imagem.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;keyring:&lt;/code&gt;&lt;br&gt;
Lista de chaves públicas usadas para verificar a assinatura dos pacotes.&lt;br&gt;
Exemplo:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://packages.wolfi.dev/os/wolfi-signing.rsa.pub&lt;/code&gt;&lt;br&gt;
Isso garante que apenas pacotes assinados e confiáveis sejam instalados. &lt;br&gt;&lt;br&gt;
&lt;code&gt;repositories:&lt;/code&gt;&lt;br&gt;
URLs dos repositórios de onde os pacotes serão baixados.&lt;br&gt;
Exemplo:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://packages.wolfi.dev/os&lt;/code&gt;&lt;br&gt;
Aqui, todos os pacotes vêm do repositório oficial do Wolfi.&lt;br&gt;
&lt;code&gt;packages:&lt;/code&gt;&lt;br&gt;
Lista de pacotes que serão instalados na imagem.&lt;br&gt;
Exemplo:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;wolfi-base&lt;/code&gt;&lt;br&gt;
Esse pacote fornece o sistema básico do Wolfi. &lt;br&gt;&lt;br&gt;
&lt;code&gt;cmd:&lt;/code&gt;&lt;br&gt;
Comando padrão que será executado quando o container iniciar.&lt;br&gt;
Exemplo:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/sh -l&lt;/code&gt;&lt;br&gt;
Isso abre um shell interativo (login shell).&lt;br&gt;
&lt;code&gt;archs:&lt;/code&gt;&lt;br&gt;
Arquiteturas para as quais a imagem será construída. &lt;br&gt;&lt;br&gt;
Exemplo: &lt;br&gt;&lt;br&gt;
&lt;code&gt;x86_64 (64 bits Intel/AMD)&lt;/code&gt;&lt;br&gt;
&lt;code&gt;aarch64 (64 bits ARM)&lt;/code&gt; &lt;br&gt;&lt;/p&gt;

&lt;p&gt;Obs: Existem bem mais seções no arquivo para se falar, aqui eu explico algumas delas: &lt;a href="https://github.com/Hugollemos/docs-public/blob/main/chainguard/chainguard.md" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Salve e feche o arquivo depois de terminar de incluir esses conteúdos. Com o &lt;code&gt;vim&lt;/code&gt;, você pode fazer isso use o &lt;code&gt;:wq&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A única coisa que resta fazer agora é executar o apko para construir esta imagem.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PWD&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;:/work &lt;span class="nt"&gt;-w&lt;/span&gt; /work cgr.dev/chainguard/apko build wolfi-base.yaml wolfi-base:test wolfi-test.tar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O seguinte comando de construção irá:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;configurar um compartilhamento de volume no diretório atual, sincronizando seu conteúdo com o diretório de trabalho da imagem do apko; dessa forma, os artefatos gerados estarão disponíveis no seu sistema host.&lt;/li&gt;
&lt;li&gt;executar a

&lt;code&gt;cgr.dev/chainguard/apko&lt;/code&gt;

imagem com o

&lt;code&gt;build&lt;/code&gt;

comando, marcando a imagem como

&lt;code&gt;wolfi-base:test-amd64&lt;/code&gt;

e salvando a compilação como

&lt;code&gt;wolfi-test.tar&lt;/code&gt;

.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A sua saida pode se parecer com essa image:&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.amazonaws.com%2Fuploads%2Farticles%2Fm206if5gytjfjw8zq8lw.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.amazonaws.com%2Fuploads%2Farticles%2Fm206if5gytjfjw8zq8lw.png" alt="Image description" width="800" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Verifique se o arquivo &lt;code&gt;wolfi-test.tar&lt;/code&gt; foi criado no seu diretório.&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.amazonaws.com%2Fuploads%2Farticles%2Fs3x6f1p629qxjj0cha79.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.amazonaws.com%2Fuploads%2Farticles%2Fs3x6f1p629qxjj0cha79.png" alt="Image description" width="800" height="82"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Teste a imagem com o Docker
&lt;/h3&gt;

&lt;p&gt;Para testar a imagem gerada com o Docker, você precisará usar o comando &lt;code&gt;docker load&lt;/code&gt; e importar o arquivo &lt;code&gt;.tar&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker load &amp;lt;  wolfi-test.tar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você de obter uma saída como essa aqui:&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.amazonaws.com%2Fuploads%2Farticles%2Fii3n22b5t0adz5h0md8f.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.amazonaws.com%2Fuploads%2Farticles%2Fii3n22b5t0adz5h0md8f.png" alt="Image description" width="800" height="74"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Você pode verificar se a imagem esta disponível com o comando&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker image list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora você deve conseguir encontrar a imagem &lt;code&gt;wolfi-base:test-amd64&lt;/code&gt; na lista de imagens disponíveis.&lt;br&gt;
Execute a imagem com o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; wolfi-base:test-amd64
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso o levará a um contêiner executando a imagem apko-built &lt;code&gt;wolfi-base:test-amd64&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Chainguard Melange
&lt;/h2&gt;

&lt;h3&gt;
  
  
  O que é?
&lt;/h3&gt;

&lt;p&gt;O &lt;strong&gt;Melange&lt;/strong&gt; é uma ferramenta que ajuda a criar pacotes reprodutíveis com foco na rastreabilidade e segurança. Ele usa arquivos de configuração YAML para definir como o software será empacotado e construído.&lt;/p&gt;

&lt;h3&gt;
  
  
  Principais recursos:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Compatível com APK (pacotes do Alpine Linux).&lt;/li&gt;
&lt;li&gt;Reprodutibilidade: builds são auditáveis e podem ser recriados em qualquer ambiente.&lt;/li&gt;
&lt;li&gt;Integração com &lt;strong&gt;Wolfi&lt;/strong&gt; para criar um ecossistema de pacotes seguro.&lt;/li&gt;
&lt;li&gt;Ferramenta declarativa para construção de pacotes apk.&lt;/li&gt;
&lt;li&gt;Parte do kit de ferramentas utilizado para criar imagens Wolfi/Chainguard.&lt;/li&gt;
&lt;li&gt;Pipelines de build são definidos (via &lt;strong&gt;QEMU&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;Suporte para builds agnósticos de plataforma via &lt;strong&gt;Docker&lt;/strong&gt; + imagem &lt;strong&gt;apko&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Início rápido com Apko
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Baixando a imagem melange:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull cgr.dev/chainguard/melange:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Baixando a imagem Melange
&lt;/h2&gt;

&lt;p&gt;Isso fará o download da versão mais recente da imagem de mesclagem, que é reconstruída todas as noites para maior frescor.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull cgr.dev/chainguard/melange:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verifique se você consegue executar o Melange com o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; cgr.dev/chainguard/melange version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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.amazonaws.com%2Fuploads%2Farticles%2F2gq6v2pygg2zd5jb487t.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.amazonaws.com%2Fuploads%2Farticles%2F2gq6v2pygg2zd5jb487t.png" alt="Image description" width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Clonando o Repositório de Demonstração
&lt;/h2&gt;

&lt;p&gt;Para demonstrar os recursos do Melange com um aplicativo minimalista que tem funcionalidade do mundo real, consiste em um aplicativo de linha de comando PHP que consulta a API de conselhos do Slip e gera um conselho aleatório. O aplicativo é um script de arquivo único criado com Minicli.&lt;/p&gt;

&lt;p&gt;Vamos clonar o repositório de demonstração e navegar até o diretório &lt;code&gt;melange-php-demos/hello-minicli&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone git@github.com:chainguard-dev/melange-php-demos.git
&lt;span class="nb"&gt;cd &lt;/span&gt;melange-php-demos/hello-minicli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Execute o seguinte comando, que usará a imagem oficial do Composer para gerar um arquivo &lt;code&gt;composer.json&lt;/code&gt; e baixar &lt;code&gt;minicli/minicli&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PWD&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;:/app composer require minicli/minicli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Após receber a confirmação de que o download foi concluído, você precisará de uma segunda dependência para consultar a API do Advice Slip. Execute o comando a seguir para incluir &lt;code&gt;minicli/curly&lt;/code&gt;, um curl wrapper para Minicli:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PWD&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;:/app composer require minicli/curly
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora você pode executar o aplicativo para ter certeza de que ele está funcional. Você pode fazer isso usando o Docker e a imagem PHP do Chainguard:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PWD&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;:/app cgr.dev/chainguard/php /app/minicli advice
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você deve receber um conselho aleatório como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Gratitude is said to be the secret to happiness.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  O arquivo YAML Melange
&lt;/h2&gt;

&lt;p&gt;O arquivo &lt;code&gt;melange.yaml&lt;/code&gt; é onde você declara os detalhes e especificações do seu pacote APK. Para código que gera binários autocontidos, é aqui que você normalmente construirá seus artefatos de aplicativo com ferramentas de compilador. No caso de linguagens interpretadas, você provavelmente construirá seu aplicativo baixando dependências de fornecedores, configurando caminhos relevantes e configurando o ambiente para produção.&lt;/p&gt;

&lt;p&gt;O arquivo de especificação do Melange contém três seções principais:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;package&lt;/strong&gt;: define especificações do pacote, como nome, licença e dependências de tempo de execução. Dependências de tempo de execução serão trazidas para o sistema automaticamente como dependências quando o APK for instalado.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;environment&lt;/strong&gt;: define como o ambiente deve ser preparado para a construção, incluindo pacotes necessários e seus repositórios de origem. Qualquer coisa que seja necessária apenas no momento da construção vai aqui, e não deve fazer parte das dependências do tempo de execução.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pipeline&lt;/strong&gt;: define o pipeline de construção para este pacote.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Uma das melhores vantagens de usar Melange é poder controlar todas as etapas do seu pipeline de construção e incluir apenas o que é necessário. Dessa forma, você poderá construir imagens de contêiner menores e mais seguras removendo dependências desnecessárias.&lt;/p&gt;

&lt;p&gt;É assim que o &lt;code&gt;melange.yaml&lt;/code&gt; incluído em nossa demonstração se parece, para sua referência:&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;package&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;hello-minicli&lt;/span&gt;
    &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;0.1.0&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Minicli&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;melange&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;demo"&lt;/span&gt;
    &lt;span class="na"&gt;target-architecture&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;all&lt;/span&gt;
    &lt;span class="na"&gt;copyright&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;license&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;MIT&lt;/span&gt;
    &lt;span class="na"&gt;dependencies&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;runtime&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;php&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;php-curl&lt;/span&gt;

&lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;contents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;keyring&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;https://packages.wolfi.dev/os/wolfi-signing.rsa.pub&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./melange.rsa.pub&lt;/span&gt;
        &lt;span class="na"&gt;repositories&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;https://packages.wolfi.dev/os&lt;/span&gt;
        &lt;span class="na"&gt;packages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;ca-certificates-bundle&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;busybox&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;curl&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;git&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;php&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;php-phar&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;php-iconv&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;php-openssl&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;php-curl&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;composer&lt;/span&gt;

&lt;span class="na"&gt;pipeline&lt;/span&gt;&lt;span class="pi"&gt;:&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;Build Minicli application&lt;/span&gt;
        &lt;span class="s"&gt;runs&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
            &lt;span class="s"&gt;MINICLI_HOME="${{targets.destdir}}/usr/share/minicli"&lt;/span&gt;
            &lt;span class="s"&gt;EXEC_DIR="${{targets.destdir}}/usr/bin"&lt;/span&gt;
            &lt;span class="s"&gt;mkdir -p "${MINICLI_HOME}" "${EXEC_DIR}"&lt;/span&gt;
            &lt;span class="s"&gt;cp ./composer.json "${MINICLI_HOME}"&lt;/span&gt;
            &lt;span class="s"&gt;/usr/bin/composer install -d "${MINICLI_HOME}" --no-dev&lt;/span&gt;
            &lt;span class="s"&gt;cp ./minicli "${EXEC_DIR}"&lt;/span&gt;
            &lt;span class="s"&gt;chmod +x "${EXEC_DIR}/minicli"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nosso pipeline de construção configurará dois diretórios distintos, separando as dependências do aplicativo de seu ponto de entrada executável. O script executável &lt;code&gt;minicli&lt;/code&gt; será copiado para &lt;code&gt;/usr/bin&lt;/code&gt;, enquanto os arquivos do fornecedor estarão localizados em &lt;code&gt;/usr/share/minicli&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Construindo o Minicli APK com Melange
&lt;/h2&gt;

&lt;p&gt;Antes de construir o pacote, você precisará criar um keypair temporário para assiná-lo. Você pode usar o seguinte comando para isso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PWD&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;:/work cgr.dev/chainguard/melange keygen
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso gerará um arquivo &lt;code&gt;melange.rsa&lt;/code&gt; e &lt;code&gt;melange.rsa.pub&lt;/code&gt; no diretório atual.&lt;/p&gt;

&lt;p&gt;Saída:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2024/08/01 16:55:31 INFO generating keypair with a 4096 bit prime, please wait...
2024/08/01 16:55:33 INFO wrote private key to melange.rsa
2024/08/01 16:55:33 INFO wrote public key to melange.rsa.pub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Em seguida, crie o APK definido no arquivo &lt;code&gt;melange.yaml&lt;/code&gt; com o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--privileged&lt;/span&gt; &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PWD&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;:/work &lt;span class="se"&gt;\&lt;/span&gt;
    cgr.dev/chainguard/melange build melange.yaml &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--arch&lt;/span&gt; amd64,aarch64 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--signing-key&lt;/span&gt; melange.rsa
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso configurará um volume compartilhando sua pasta atual com o local &lt;code&gt;/work&lt;/code&gt; dentro do contêiner. Nós construiremos pacotes para as plataformas &lt;code&gt;amd64&lt;/code&gt; e &lt;code&gt;aarch64&lt;/code&gt; e os assinaremos usando a chave &lt;code&gt;melange.rsa&lt;/code&gt; criada no comando anterior.&lt;/p&gt;

&lt;p&gt;Quando a compilação estiver concluída, você deverá encontrar uma pasta &lt;code&gt;packages&lt;/code&gt; contendo os APKs gerados (e os arquivos de índice APK associados):&lt;/p&gt;

&lt;p&gt;Saída:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;packages
├── aarch64
│   ├── APKINDEX.json
│   ├── APKINDEX.tar.gz
│   └── hello-minicli-0.1.0-r0.apk
└── x86_64
        ├── APKINDEX.json
        ├── APKINDEX.tar.gz
        └── hello-minicli-0.1.0-r0.apk

3 directories, 6 files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você construiu com sucesso um pacote de software multiarquitetura com Melange!&lt;/p&gt;

&lt;h2&gt;
  
  
  Construindo uma Imagem de Contêiner com Apko
&lt;/h2&gt;

&lt;p&gt;Com os pacotes APK e o índice APK em vigor, agora você pode criar uma imagem de contêiner e instalar seus APK(s) nela.&lt;/p&gt;

&lt;p&gt;O arquivo &lt;code&gt;apko.yaml&lt;/code&gt; a seguir criará uma imagem de contêiner adaptada ao aplicativo que construímos nas etapas anteriores. Como definimos as dependências do PHP como dependências de tempo de execução dentro do APK, você não precisa exigir esses pacotes novamente aqui. O comando container entrypoint será definido como &lt;code&gt;/usr/bin/minicli&lt;/code&gt;, onde o executável do aplicativo está localizado.&lt;/p&gt;

&lt;p&gt;Uma coisa importante a ser notada é como referenciamos o &lt;code&gt;hello-minicli&lt;/code&gt; APK como um pacote local dentro da seção &lt;code&gt;repositories&lt;/code&gt; do arquivo YAML. A notação &lt;code&gt;@local&lt;/code&gt; diz ao Apko para procurar por APKs no diretório especificado, neste caso &lt;code&gt;/work/packages&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Esta é a aparência do arquivo &lt;code&gt;apko.yaml&lt;/code&gt; incluído em nossa demonstração, para sua referência:&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;contents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;keyring&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;https://packages.wolfi.dev/os/wolfi-signing.rsa.pub&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./melange.rsa.pub&lt;/span&gt;
    &lt;span class="na"&gt;repositories&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;https://packages.wolfi.dev/os&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;@local&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;/work/packages'&lt;/span&gt;
    &lt;span class="na"&gt;packages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;wolfi-base&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;ca-certificates-bundle&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;hello-minicli@local&lt;/span&gt;
&lt;span class="na"&gt;accounts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;groups&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;groupname&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nonroot&lt;/span&gt;
            &lt;span class="s"&gt;gid&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="m"&gt;65532&lt;/span&gt;
    &lt;span class="na"&gt;users&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;username&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nonroot&lt;/span&gt;
            &lt;span class="s"&gt;uid&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="m"&gt;65532&lt;/span&gt;
    &lt;span class="na"&gt;run-as&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;65532&lt;/span&gt;
&lt;span class="na"&gt;entrypoint&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/usr/bin/minicli advice&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O comando a seguir configurará um volume compartilhando sua pasta atual com o local &lt;code&gt;/work&lt;/code&gt; no contêiner Apko, executando o comando &lt;code&gt;apko build&lt;/code&gt; para gerar uma imagem com base no seu arquivo de definição &lt;code&gt;apko.yaml&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;--workdir&lt;/span&gt; /work &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PWD&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;:/work cgr.dev/chainguard/apko &lt;span class="se"&gt;\&lt;/span&gt;
    build apko.yaml hello-minicli:test hello-minicli.tar &lt;span class="nt"&gt;--arch&lt;/span&gt; host
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso criará uma imagem OCI com base na arquitetura do seu sistema host (especificada pelo sinalizador &lt;code&gt;--arch host&lt;/code&gt;). Se você receber avisos neste ponto, eles provavelmente estão relacionados aos tipos de SBOMs que estão sendo carregados e podem ser ignorados com segurança.&lt;/p&gt;

&lt;p&gt;O comando irá gerar alguns novos arquivos no diretório do aplicativo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;hello-minicli.tar&lt;/code&gt; — a imagem OCI empacotada que pode ser importada com um comando &lt;code&gt;docker load&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;sbom-%host-architecture%.spdx.json&lt;/code&gt; — um arquivo SBOM para sua arquitetura de host no formato &lt;code&gt;spdx-json&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Em seguida, carregue sua imagem no Docker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker load &amp;lt; hello-minicli.tar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Saída:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;7cbaefdf1c30: Loading layer   13.7MB/13.7MB
Loaded image: hello-minicli:test-%host-architecture%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Observe que o &lt;code&gt;%host-architecture%&lt;/code&gt; variará, e pode haver várias imagens carregadas no seu daemon Docker. Certifique-se de editar a variável no comando &lt;code&gt;docker run&lt;/code&gt; a seguir para corresponder à sua arquitetura de destino.&lt;/p&gt;

&lt;p&gt;Agora você pode executar seu programa Minicli com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; hello-minicli:test-%host-architecture%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A demonstração deve gerar um aviso como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Only those who attempt the impossible can achieve the absurd.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você construiu com sucesso uma imagem de contêiner minimalista com seu pacote APK instalado nela. Esta imagem é totalmente compatível com OCI e pode ser assinada com Cosign para atestado de procedência.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Neste guia, empacotamos um aplicativo de linha de comando PHP com Melange. Também criamos uma imagem de contêiner para instalar e executar nosso APK personalizado, usando a ferramenta Apko. Para mais informações sobre o Apko, confira nosso guia &lt;a href="https://github.com/chainguard-dev/apko" rel="noopener noreferrer"&gt;Getting Started with Apko&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Os arquivos de demonstração estão disponíveis no repositório &lt;a href="https://github.com/chainguard-dev/melange-php-demos" rel="noopener noreferrer"&gt;melange-php-demos&lt;/a&gt;, na subpasta &lt;code&gt;hello-minicli&lt;/code&gt;. Para obter informações adicionais sobre como depurar suas compilações e outros recursos, verifique os repositórios &lt;a href="https://github.com/chainguard-dev/melange" rel="noopener noreferrer"&gt;Melange&lt;/a&gt; e &lt;a href="https://github.com/chainguard-dev/apko" rel="noopener noreferrer"&gt;Apko&lt;/a&gt; no GitHub.&lt;/p&gt;




&lt;h2&gt;
  
  
  Chainguard Wolfi
&lt;/h2&gt;

&lt;h3&gt;
  
  
  O que é?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Wolfi&lt;/strong&gt; é uma distribuição Linux não-GNU projetada para ambientes de contêiner, com pacotes otimizados para segurança e desenvolvimento moderno. Não possui shell ou gerenciador de pacotes.&lt;/p&gt;

&lt;p&gt;Uma referência ao &lt;a href="https://en.wikipedia.org/wiki/Octopus_wolfi" rel="noopener noreferrer"&gt;menor polvo&lt;/a&gt; do mundo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Principais recursos:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Focado em contêineres.&lt;/li&gt;
&lt;li&gt;Sem glibc, usando &lt;code&gt;musl&lt;/code&gt; como libc.&lt;/li&gt;
&lt;li&gt;Repositório de pacotes confiáveis.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tiny Linux Distribution&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Uma distribuição Linux minimalista.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;"Undistro"&lt;/strong&gt; porque não inclui itens que normalmente fazem parte de uma distribuição Linux (como o kernel, páginas de manual e vários outros pacotes que não fazem sentido para contêineres).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Baseado no &lt;strong&gt;apk&lt;/strong&gt; (gerenciador de pacotes do Alpine).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Usa principalmente &lt;strong&gt;glibc&lt;/strong&gt;, mas &lt;strong&gt;MUSL&lt;/strong&gt; está no roadmap.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Os pacotes são definidos como &lt;strong&gt;YAML&lt;/strong&gt; e construídos com o &lt;strong&gt;melange&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Principais Características das Imagens Chainguard
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Design minimalista, sem software desnecessário.&lt;/li&gt;
&lt;li&gt;Builds noturnos automatizados para garantir que as imagens estejam sempre atualizadas e contenham todos os patches de segurança disponíveis.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://edu.chainguard.dev/chainguard/chainguard-images/working-with-images/retrieve-image-sboms/" rel="noopener noreferrer"&gt;SBOMs de alta qualidade&lt;/a&gt; (Bill of Materials) atestando a proveniência de todos os artefatos dentro da imagem.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://edu.chainguard.dev/chainguard/chainguard-images/working-with-images/retrieve-image-sboms/" rel="noopener noreferrer"&gt;Assinaturas verificáveis&lt;/a&gt; fornecidas pelo &lt;a href="https://edu.chainguard.dev/open-source/sigstore/cosign/an-introduction-to-cosign/" rel="noopener noreferrer"&gt;Sigstore&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Builds reprodutíveis com Cosign e apko (&lt;a href="https://www.chainguard.dev/unchained/reproducing-chainguards-reproducible-image-builds" rel="noopener noreferrer"&gt;leia mais sobre reprodutibilidade&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As imagens Chainguard estão disponíveis principalmente no &lt;a href="https://edu.chainguard.dev/chainguard/chainguard-registry/overview/" rel="noopener noreferrer"&gt;Chainguard Registry&lt;/a&gt;, mas uma seleção de imagens para desenvolvedores também está disponível no &lt;a href="https://hub.docker.com/u/chainguard" rel="noopener noreferrer"&gt;Docker Hub&lt;/a&gt;. Você pode encontrar a lista completa de imagens Chainguard disponíveis em nosso &lt;a href="https://images.chainguard.dev/?utm_source=cg-academy&amp;amp;utm_medium=website&amp;amp;utm_campaign=dev-enablement&amp;amp;utm_content=edu-content-chainguard-chainguard-images-overview" rel="noopener noreferrer"&gt;Directório de Imagens&lt;/a&gt; público ou no &lt;a href="https://console.chainguard.dev/" rel="noopener noreferrer"&gt;Chainguard Console&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Note que geralmente há uma variante &lt;code&gt;-dev&lt;/code&gt; de cada imagem Chainguard disponível. Por exemplo, a variante &lt;code&gt;-dev&lt;/code&gt; da imagem &lt;code&gt;mariadb:latest&lt;/code&gt; é &lt;code&gt;mariadb:latest-dev&lt;/code&gt;. Essas imagens normalmente contêm um shell e ferramentas como um gerenciador de pacotes para permitir que os usuários depurem e modifiquem a imagem mais facilmente.&lt;/p&gt;

&lt;p&gt;Você pode analisar mais comparações de imagens do Chainguard e imagens externas verificando nosso painel de &lt;a href="https://edu.chainguard.dev/chainguard/chainguard-images/vuln-comparison/" rel="noopener noreferrer"&gt;comparações de vulnerabilidades&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Por padrão, todas as imagens baseadas em Wolfi são construídas para x86_64.&lt;/p&gt;

&lt;p&gt;Você pode confirmar a arquitetura disponível de uma determinada imagem Chainguard com Crane. Neste exemplo, usaremos a imagem mais recente do Ruby, mas você pode optar por usar uma imagem alternativa.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crane manifest cgr.dev/chainguard/ruby:latest | jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.manifests[] | .platform'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"architecture"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"amd64"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"os"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"linux"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"architecture"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arm64"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"os"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"linux"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>devops</category>
      <category>docker</category>
      <category>security</category>
      <category>opensource</category>
    </item>
    <item>
      <title>AWS Well-Architected</title>
      <dc:creator>Hugo Lemos da Silva</dc:creator>
      <pubDate>Wed, 07 Sep 2022 14:18:18 +0000</pubDate>
      <link>https://dev.to/hugollemos/aws-well-architected-100m</link>
      <guid>https://dev.to/hugollemos/aws-well-architected-100m</guid>
      <description>&lt;h1&gt;
  
  
  CINCO PILARES WELL-ARCHITECTED
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Operational Excellence: executar e monitorar para entregar valor

&lt;ul&gt;
&lt;li&gt;Execute operações como código&lt;/li&gt;
&lt;li&gt;Faça alterações frequentes, pequenas e reversíveis&lt;/li&gt;
&lt;li&gt;Refine os procedimentos operacionais com frequência&lt;/li&gt;
&lt;li&gt;Antecipe falhas&lt;/li&gt;
&lt;li&gt;Aprenda com todas as falhas operacionais&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Security: proteger informações e sistemas&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implementar uma forte base de identidade&lt;/li&gt;
&lt;li&gt;Habilitar a rastreabilidade&lt;/li&gt;
&lt;li&gt;Aplicar segurança a todas as camadas&lt;/li&gt;
&lt;li&gt;Automatizar as melhores práticas de segurança&lt;/li&gt;
&lt;li&gt;Proteger dados em trânsito e em repouso&lt;/li&gt;
&lt;li&gt;Manter as pessoas afastadas dos dados&lt;/li&gt;
&lt;li&gt;Preparar-se para eventos de segurança&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Realiability: garantir que uma carga de trabalho execute sua função prentendida corretamente e de modo consistente&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Recuperação automática de falhas&lt;/li&gt;
&lt;li&gt;Testar os procedimentos de recuperação&lt;/li&gt;
&lt;li&gt;Escale horizontalmente para aumentar a disponibilidade agregada da carga de trabalho&lt;/li&gt;
&lt;li&gt;Parar de tentar adivinhar a capacidade&lt;/li&gt;
&lt;li&gt;Gerencie as alterações na automação&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Perfomance Efficiency: uso eficiente de recursos e computação&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Democratizar tecnologias avançadas&lt;/li&gt;
&lt;li&gt;Tornar-se global em minutos&lt;/li&gt;
&lt;li&gt;Usar arquiteturas sem servidor&lt;/li&gt;
&lt;li&gt;Experimentar com mais frequência&lt;/li&gt;
&lt;li&gt;Considere a afinidade mecânica&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Cost Optimazion: compreensão e controle de onde o dinheiro está sendo gasto, ajustando os recursos e serviços &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implemente o gerenciamento financeiro na nuvem&lt;/li&gt;
&lt;li&gt;Adote um modelo de consumo&lt;/li&gt;
&lt;li&gt;Avalie a eficiência geral&lt;/li&gt;
&lt;li&gt;Pare de gastar dinheiro em tarefas pesadas genéricas&lt;/li&gt;
&lt;li&gt;Analise e atribua despesas&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h1&gt;
  
  
  PRINCÍPIOS GERAIS
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Pare de ficar adivinhando a sua capacidade&lt;/li&gt;
&lt;li&gt;Teste o seu produto em escala de produção&lt;/li&gt;
&lt;li&gt;Automatze a sua arquitetura para sua experimentação ser fácil&lt;/li&gt;
&lt;li&gt;Permita a evolução da arquitetura&lt;/li&gt;
&lt;li&gt;Construa sua arquitetura baseado em dados&lt;/li&gt;
&lt;li&gt;Melhore através de gamedays&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  PRINCÍPIOS DO DESIGN
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Escalabilidade: vertical &amp;amp; horizontal&lt;/li&gt;
&lt;li&gt;Recursos descartáveis: nada é para sempre&lt;/li&gt;
&lt;li&gt;Automação: serverless, IasS, auto scaling&lt;/li&gt;
&lt;li&gt;Loose couple: falhas não podem cascatear &amp;amp; não ao monolíto&lt;/li&gt;
&lt;li&gt;Serviços não Servidores: será que não tem um serviço para isso&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O intuito é criar um artigo rápido na hora da dúvida para uso pessoal, ficarei feliz caso tenha te ajudado ou esclarecido algo.&lt;/p&gt;

&lt;p&gt;Dúvidas, me chama no linkedin: &lt;a href="https://www.linkedin.com/in/hugo-lemos-da-silva/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/hugo-lemos-da-silva/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ou no insta: &lt;a href="https://www.instagram.com/hugollemos.s/" rel="noopener noreferrer"&gt;https://www.instagram.com/hugollemos.s/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Criando contas com AWS Organizations.</title>
      <dc:creator>Hugo Lemos da Silva</dc:creator>
      <pubDate>Wed, 07 Sep 2022 02:32:09 +0000</pubDate>
      <link>https://dev.to/hugollemos/criando-contas-com-aws-organizations-21aj</link>
      <guid>https://dev.to/hugollemos/criando-contas-com-aws-organizations-21aj</guid>
      <description>&lt;p&gt;&lt;strong&gt;No console da aws possuo duas formas para criar as contas&lt;/strong&gt;&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.amazonaws.com%2Fuploads%2Farticles%2Fyrvf8qb0e6kd435eymo6.gif" 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.amazonaws.com%2Fuploads%2Farticles%2Fyrvf8qb0e6kd435eymo6.gif" alt="Image description" width="800" height="400"&gt;&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2Fzy7eyb1b4m3enqxmchu9.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.amazonaws.com%2Fuploads%2Farticles%2Fzy7eyb1b4m3enqxmchu9.png" alt="Image description" width="726" height="236"&gt;&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2F2znfcmpxk1wrraypptx8.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.amazonaws.com%2Fuploads%2Farticles%2F2znfcmpxk1wrraypptx8.png" alt="Image description" width="343" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clique no botão: &lt;strong&gt;adicionar uma conta da aws&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Fthn93uqtz34acxbqh0dk.gif" 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.amazonaws.com%2Fuploads%2Farticles%2Fthn93uqtz34acxbqh0dk.gif" alt="Image description" width="1000" height="500"&gt;&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2F8qgzta2pn4uare88ec45.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.amazonaws.com%2Fuploads%2Farticles%2F8qgzta2pn4uare88ec45.png" alt="Image description" width="800" height="466"&gt;&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2Ffmofcspkvutuafjfjbxc.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.amazonaws.com%2Fuploads%2Farticles%2Ffmofcspkvutuafjfjbxc.png" alt="Image description" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Criando OU(unidades de organização)
vá para a raiz de todas as contas lá voce pode criar as OU,&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Frnf754mivoqa6i9u82mp.gif" 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.amazonaws.com%2Fuploads%2Farticles%2Frnf754mivoqa6i9u82mp.gif" alt="Image description" width="1000" height="500"&gt;&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2Fciky8m7w7hzlly00jjva.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.amazonaws.com%2Fuploads%2Farticles%2Fciky8m7w7hzlly00jjva.png" alt="Image description" width="800" height="400"&gt;&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2F0k0p7cmerdmlf0su1l7i.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.amazonaws.com%2Fuploads%2Farticles%2F0k0p7cmerdmlf0su1l7i.png" alt="Image description" width="800" height="423"&gt;&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2F4yiop5dmhnpwefq784yd.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.amazonaws.com%2Fuploads%2Farticles%2F4yiop5dmhnpwefq784yd.png" alt="Image description" width="800" height="468"&gt;&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2Ftm3sf8lqn2bcv8df9cgx.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.amazonaws.com%2Fuploads%2Farticles%2Ftm3sf8lqn2bcv8df9cgx.png" alt="Image description" width="800" height="460"&gt;&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2Fktnovcxvhy1w9niiih43.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.amazonaws.com%2Fuploads%2Farticles%2Fktnovcxvhy1w9niiih43.png" alt="Image description" width="800" height="497"&gt;&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2Fjh5zcwumt7fapwzwhe79.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.amazonaws.com%2Fuploads%2Farticles%2Fjh5zcwumt7fapwzwhe79.png" alt="Image description" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aplicando policies.
as mesmas servem para aplicar permissões ou restringir acessos dos usuários.
Por padrão as politicas são desabilitadas, para ativa-las:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Navegue até a página Policies (Políticas) e escolha Service Control Policies (Políticas de controle de serviço).&lt;/p&gt;

&lt;p&gt;Na página Service Control Policies (Políticas de controle de serviço), escolha Enable service control policies (Ativar políticas de controle de serviço).&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.amazonaws.com%2Fuploads%2Farticles%2Ftvx0rzuldmbdm65t2s99.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.amazonaws.com%2Fuploads%2Farticles%2Ftvx0rzuldmbdm65t2s99.png" alt="Image description" width="800" height="368"&gt;&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2F5cbgbjh03g3nbzglyu4l.gif" 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.amazonaws.com%2Fuploads%2Farticles%2F5cbgbjh03g3nbzglyu4l.gif" alt="Image description" width="800" height="400"&gt;&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2F39s2sax3pdpay8pea8eg.gif" 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.amazonaws.com%2Fuploads%2Farticles%2F39s2sax3pdpay8pea8eg.gif" alt="Image description" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;você pode habilitar as policys em OU's ou em contas.
Aplicando nas OU's todas as contas pertencentes do grupo herdaram a policy.
Para adicionar as policys é simples:
Ainda na conta Root na AWS Organizations acesse uma conta ou OU&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Policy-&amp;gt;Anexar-&amp;gt;Policy criada-&amp;gt;Anexar Política.&lt;/p&gt;




&lt;p&gt;O intuito é criar um artigo rápido na hora da dúvida para uso pessoal, ficarei feliz caso tenha te ajudado ou esclarecido algo.&lt;/p&gt;

&lt;p&gt;Dúvidas, me chama no linkedin: &lt;a href="https://www.linkedin.com/in/hugo-lemos-da-silva/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/hugo-lemos-da-silva/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ou no insta: &lt;a href="https://www.instagram.com/hugollemos.s/" rel="noopener noreferrer"&gt;https://www.instagram.com/hugollemos.s/&lt;/a&gt; &lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>help</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
