Esta é uma postagem de blog co-escrita com Patrick Oberherr da Contentful e Johannes Günther da Netlight Consulting.
Esta postagem do blog mostra como melhorar a segurança em uma arquitetura de pipeline de dados baseada em Fluxos de trabalho gerenciados da Amazon para Apache Airflow (Amazon MWAA) e Serviço Amazon Elastic Kubernetes (Amazon EKS) configurando permissões refinadas, usando HashiCorp Terraforma para infraestrutura como código.
Muitos clientes da AWS usam o Amazon EKS para executar cargas de trabalho de dados. As vantagens do Amazon EKS incluem diferentes opções de computação e armazenamento, dependendo das necessidades da carga de trabalho, maior utilização de recursos por meio do compartilhamento da infraestrutura subjacente e uma comunidade vibrante de código aberto que fornece extensões específicas. O Dados sobre EKS project fornece uma série de modelos e outros recursos para ajudar os clientes a iniciar essa jornada. Inclui uma descrição do uso Amazon MWAA como agendador de tarefas.
Contente é um cliente da AWS e parceiro da AWS Partner Network (APN). Nos bastidores de seu produto de software como serviço (SaaS), a Contentful Composable Content Platform, a Contentful usa insights de dados para melhorar a tomada de decisões de negócios e a experiência do cliente. Envolvido com conteúdo Netlight, um parceiro de consultoria da APN, para ajudar a configurar uma plataforma de dados para coletar esses insights.
A maioria das cargas de trabalho de aplicativos da Contentful são executadas no Amazon EKS, e o conhecimento desse serviço e do Kubernetes é difundido na organização. É por isso que a equipe de engenharia de dados da Contentful decidiu executar pipelines de dados também no Amazon EKS. Para trabalho agendamento, eles começaram com um Apache Airflow autooperado em um cluster do Amazon EKS e depois migraram para o Amazon MWAA para reduzir a sobrecarga de engenharia e operações. O emprego execução permaneceu no Amazon EKS.
Contentful executa um pipeline de dados complexo usando esta infraestrutura, incluindo ingestão de múltiplas fontes de dados e diferentes trabalhos de transformação, por exemplo, usando dbt. Todo o pipeline compartilha um único ambiente Amazon MWAA e um único cluster Amazon EKS. Com um conjunto diversificado de cargas de trabalho em um único ambiente, é necessário aplicar o princípio do menor privilégio, garantindo que tarefas ou componentes individuais tenham apenas as permissões específicas necessárias para funcionar.
Ao segmentar as permissões de acordo com funções e responsabilidades, a equipe de engenharia de dados da Contentful conseguiu criar um ambiente de processamento de dados mais robusto e seguro, essencial para manter a integridade e confidencialidade dos dados tratados.
Nesta postagem do blog, explicamos como configurar a infraestrutura do zero e implantar um aplicativo de exemplo usando Terraform, a ferramenta preferida da Contentful para infraestrutura como código.
Pré-requisitos
Para acompanhar esta postagem do blog, você precisa da versão mais recente das seguintes ferramentas instaladas:
Visão geral
Nesta postagem do blog, você criará um aplicativo de exemplo com a seguinte infraestrutura:
O fluxo de trabalho de amostra do Airflow lista objetos no bucket de origem e armazena temporariamente essa lista usando XComs de fluxo de are grava a lista como um arquivo no bucket de destino. Esta aplicação é executada usando pods Amazon EKS, programados por um ambiente Amazon MWAA. Você implanta o cluster EKS e o ambiente MWAA em um nuvem privada virtual (VPC) e aplicar permissões de privilégio mínimo aos pods EKS usando Papéis IAM para contas de serviço. O bucket de configuração do Amazon MWAA contém requisitos de tempo de execução, bem como o código do aplicativo que especifica um Gráfico acíclico direcionado de fluxo de ar (DAG).
Inicialize o projeto e crie buckets
Crie um arquivo main.tf
com o seguinte conteúdo em um diretório vazio:
Este arquivo define o Provedor Terraform AWS bem como o bucket de origem e destino, cujos nomes são exportados como Parâmetros do AWS Systems Manager. Também diz ao Terraform para fazer upload de um objeto vazio chamado dummy.txt
no bucket de origem, o que permite que o aplicativo de amostra do Airflow que criaremos posteriormente receba um resultado ao listar o conteúdo do bucket.
Inicialize o projeto Terraform e baixe as dependências do módulo emitindo o seguinte comando:
Crie a infraestrutura:
O Terraform solicita que você reconheça as alterações no ambiente e, em seguida, começa a implantar recursos na AWS. Após a implantação bem-sucedida, você verá a seguinte mensagem de sucesso:
Criar VPC
Crie um novo arquivo vpc.tf
no mesmo diretório que main.tf
e insira o seguinte:
Este arquivo define a VPC, uma rede virtual, que posteriormente hospedará o cluster Amazon EKS e o ambiente Amazon MWAA. Observe que usamos um existente Terraform módulo para isso, que envolve a configuração de recursos de rede subjacentes como sub-redes, tabelas de rotas e gateways NAT.
Baixe o módulo VPC:
Implante os novos recursos:
Observe quais recursos estão sendo criados. Ao usar o módulo VPC em nosso arquivo Terraform, grande parte da complexidade subjacente é eliminada ao definir nossa infraestrutura, mas ainda é útil saber exatamente o que está sendo implantado.
Observe que o Terraform agora lida com recursos que definimos em ambos os arquivos, main.tf
e vpc.tf
, porque o Terraform inclui todos .tf
arquivos no diretório de trabalho atual.
Crie o ambiente Amazon MWAA
Crie um novo arquivo mwaa.tf
e insira o seguinte conteúdo:
Como antes, usamos um módulo existente para economizar esforço de configuração para o ambiente Amazon MWAA. O módulo também cria o bucket de configuração, que usamos para especificar o dependência de tempo de execução do aplicativo (Apache-airflow-cncf-kubernetes) Na requirements.txt
arquivo. Este pacote, em combinação com o pacote pré-instalado apache-airflow-amazon, permite a interação com o Amazon EKS.
Baixe o módulo MWAA:
Implante os novos recursos:
Esta operação leva de 20 a 30 minutos para ser concluída.
Crie o cluster do Amazon EKS
Crie um arquivo eks.tf
com o seguinte conteúdo:
Para criar o cluster propriamente dito, aproveitamos o Esquemas Amazon EKS para Terraform projeto. Também definimos um grupo de nós gerenciados com um nó como tamanho de destino. Observe que em casos com carga flutuante, dimensionar seu cluster com carpinteiro em vez da abordagem de grupo de nós gerenciados mostrada acima, torna a escala do cluster mais flexível. Usamos grupos de nós gerenciados principalmente devido à facilidade de configuração.
Definimos a identidade que o Função de execução do Amazon MWAA assume no Kubernetes usando o map_roles
variável. Depois de configurar o Provedor Terraform Kubernetes, concedemos permissões à função de execução do Amazon MWAA para gerenciar pods no cluster.
Baixe o módulo EKS Blueprints para Terraform:
Implante os novos recursos:
Esta operação leva cerca de 12 minutos para ser concluída.
Criar funções do IAM para contas de serviço
Crie um arquivo roles.tf
com o seguinte conteúdo:
Este arquivo define duas contas de serviço do Kubernetes, source-bucket-reader-sa
e destination-bucket-writer-sa
e suas permissões na API da AWS, usando funções do IAM para contas de serviço (IRSA). Novamente, usamos um módulo do projeto Amazon EKS Blueprints for Terraform para simplificar a configuração do IRSA. Observe que ambas as funções obtêm apenas as permissões mínimas necessárias, definidas usando Políticas AWS IAM.
Baixe o novo módulo:
Implante os novos recursos:
Criar o DAG
Crie um arquivo dag.py
definindo o Airflow DAG:
O DAG é definido para ser executado de hora em hora, com duas tarefas read_bucket
com conta de serviço source-bucket-reader-sa
e write_bucket
com conta de serviço destination-bucket-writer-sa
, correndo um atrás do outro. Ambos são executados usando o Operador EksPod, que é responsável por agendar as tarefas no Amazon EKS, usando o Imagem Docker da AWS CLI para executar comandos. A primeira tarefa lista os arquivos no bucket de origem e grava a lista no Airflow XCom. A segunda tarefa lê a lista do XCom e a armazena no bucket de destino. Observe que o service_account_name
parâmetro diferencia o que cada tarefa tem permissão para fazer.
Crie um arquivo dag.tf
para fazer upload do código DAG para o bucket de configuração do Amazon MWAA:
Implante as mudanças:
O ambiente Amazon MWAA importa automaticamente o arquivo do bucket S3.
Execute o DAG
No seu navegador, navegue até o Console Amazon MWAA e selecione seu ambiente. No canto superior direito, selecione Abra a IU do Airflow . Você deverá ver o seguinte:
Para acionar o DAG, no Opções coluna, selecione o símbolo de reprodução e, em seguida, selecione Acionar DAG. Clique no nome do DAG para explorar a execução do DAG e seus resultados.
Navegue até a Console Amazon S3 e escolha o balde começando com “destino”. Deve conter um arquivo list.json
recentemente criado pelo write_bucket
tarefa. Baixe o arquivo para explorar seu conteúdo, uma lista JSON com uma única entrada.
limpar
Os recursos criados neste passo a passo incorrem em custos da AWS. Para excluir os recursos criados, emita o seguinte comando:
E aprove as alterações na caixa de diálogo CLI do Terraform.
Conclusão
Nesta postagem do blog, você aprendeu como melhorar a segurança do seu pipeline de dados em execução no Amazon MWAA e no Amazon EKS restringindo as permissões de cada tarefa individual.
Para se aprofundar, use o exemplo prático criado neste passo a passo para explorar ainda mais o tópico: O que acontece se você remover o service_account_name
parâmetro de uma tarefa do Airflow? O que acontece se você trocar os nomes das contas de serviço nas duas tarefas?
Para simplificar, neste passo a passo usamos uma estrutura de arquivo simples com arquivos Terraform e Python dentro de um único diretório. Não aderimos ao estrutura de módulo padrão proposto pelo Terraform, o que geralmente é recomendado. Em um projeto da vida real, dividir o projeto em vários projetos ou módulos Terraform também pode aumentar a flexibilidade, a velocidade e a independência entre equipes que possuem diferentes partes da infraestrutura.
Por último, certifique-se de estudar o Dados sobre EKS documentação, que fornece outros recursos valiosos para executar seu pipeline de dados no Amazon EKS, bem como o Amazon MWAA e Fluxo de ar Apache documentação para implementar seus próprios casos de uso. Especificamente, dê uma olhada nisso implementação de amostra de um módulo Terraform para Amazon MWAA e Amazon EKS, que contém uma abordagem mais madura para configuração do Amazon EKS e escalabilidade automática de nós, bem como rede.
Se você tiver alguma dúvida, você pode iniciar um novo tópico no AWS re:Postagem ou chegar a Suporte AWS.
Sobre os autores
Ulrich Hinze é arquiteto de soluções na AWS. Ele faz parceria com empresas de software para arquitetar e implementar soluções baseadas em nuvem na AWS. Antes de ingressar na AWS, ele trabalhou para clientes e parceiros da AWS em funções de engenharia, consultoria e arquitetura de software por mais de oito anos.
Patrick Oberherr é engenheiro de dados da equipe da Contentful com mais de 4 anos de trabalho na AWS e mais de 10 anos na área de dados. Na Contentful ele é responsável pela infraestrutura e operações da pilha de dados hospedada na AWS.
Johannes Gunther é consultor de nuvem e dados na Netlight com mais de 5 anos de trabalho com AWS. Ele ajudou clientes de vários setores a projetar plataformas de nuvem sustentáveis e é certificado pela AWS.
- Conteúdo com tecnologia de SEO e distribuição de relações públicas. Seja amplificado hoje.
- PlatoData.Network Gerativa Vertical Ai. Capacite-se. Acesse aqui.
- PlatoAiStream. Inteligência Web3. Conhecimento Amplificado. Acesse aqui.
- PlatãoESG. Carbono Tecnologia Limpa, Energia, Ambiente, Solar, Gestão de resíduos. Acesse aqui.
- PlatoHealth. Inteligência em Biotecnologia e Ensaios Clínicos. Acesse aqui.
- Fonte: https://aws.amazon.com/blogs/big-data/set-up-fine-grained-permissions-for-your-data-pipeline-using-mwaa-and-eks/
- :tem
- :é
- :não
- $UP
- 1
- 10
- 100
- 12
- 16
- 2023
- 27
- 41
- 8
- 9
- a
- Capaz
- Sobre
- acima
- Segundo
- Conta
- Contas
- reconhecer
- em
- ações
- acíclico
- adicionado
- aderir
- Vantagem
- vantagens
- Depois de
- novamente
- contra
- Todos os Produtos
- juntamente
- tb
- Amazon
- Amazon Web Services
- an
- e
- Outro
- qualquer
- apache
- api
- Aplicação
- Aplicar
- abordagem
- aprovar
- arquitetura
- SOMOS
- AS
- assume
- At
- autorização
- Automático
- automaticamente
- disponível
- longe
- AWS
- Certificado AWS
- Cliente AWS
- baseado
- Porque
- antes
- atrás
- Por trás das cenas
- ser
- entre
- Blog
- ambos
- navegador
- negócio
- mas a
- by
- CAN
- casos
- Non-GMO
- mudado
- Alterações
- escolha
- Escolha
- clique
- clientes
- Na nuvem
- Agrupar
- código
- Coluna
- combinação
- comunidade
- Empresas
- completar
- integrações
- complexidade
- componentes
- Computar
- confidencialidade
- Configuração
- cônsul
- consultor
- consultor
- não contenho
- contém
- conteúdo
- plataforma de conteúdo
- Canto
- correta
- custos
- crio
- criado
- cria
- Atual
- cliente
- experiência do cliente
- Clientes
- DAG
- dados,
- engenheiro de dados
- Plataforma de dados
- informática
- datetime
- decidido
- Tomada de Decisão
- mais profunda
- definir
- definido
- Define
- definição
- dependências
- Dependência
- Dependendo
- implantar
- implantado
- Implantação
- desenvolvimento
- descrição
- concepção
- destino
- destruído
- diálogo
- DID
- diferente
- dirigido
- mergulho
- diferente
- do
- Estivador
- documentação
- download
- desenho
- cada
- facilidade
- eco
- esforço
- vazio
- permite
- contratado
- engenheiro
- Engenharia
- assegurando
- entrada
- Meio Ambiente
- essencial
- Éter (ETH)
- exatamente
- exemplo
- exchange
- executar
- executado
- execução
- vasta experiência
- explorar
- extensões
- falso
- campo
- Envie o
- Arquivos
- Primeiro nome
- plano
- Flexibilidade
- flexivelmente
- seguir
- seguinte
- Escolha
- da
- função
- mais distante
- reunir
- geralmente
- ter
- GitHub
- OFERTE
- gráfico
- Grupo
- Do grupo
- Locatário
- Blog convidado
- Alças
- acontece
- Ter
- he
- ajudar
- ajudou
- superior
- hospedeiro
- hospedado
- Como funciona o dobrador de carta de canal
- Como Negociar
- HTML
- HTTPS
- IAM
- Identidade
- if
- executar
- implementação
- importar
- importações
- melhorar
- in
- incluir
- inclui
- Incluindo
- Crescimento
- independência
- Individual
- indústrias
- Infraestrutura
- dentro
- insights
- em vez disso
- integridade
- interação
- Interface
- para dentro
- emitem
- Emissão
- IT
- ESTÁ
- se
- Trabalho
- Empregos
- juntando
- viagem
- jpg
- json
- Chave
- Tipo
- Saber
- Conhecimento
- Kubernetes
- mais tarde
- mais recente
- aprendido
- mínimo
- como
- Lista
- listagem
- listas
- carregar
- local
- registrado
- olhar
- manutenção
- fazer
- FAZ
- gerencia
- gerenciados
- Gerente
- maduro
- Posso..
- mensagem
- metadados
- mínimo
- minutos
- módulo
- Módulos
- mais
- muito
- múltiplo
- nome
- Nomeado
- nomes
- Navegar
- necessário
- você merece...
- Cria
- rede
- networking
- Novo
- nó
- nota
- agora
- objeto
- objetos
- of
- on
- ONE
- só
- open source
- operação
- Operações
- operadores
- Opções
- or
- organização
- Outros
- A Nossa
- Fora
- saída
- próprio
- pacote
- parâmetro
- parceiro
- rede de parceiros
- Parceiros
- peças
- Remendo
- caminho
- patrick
- permissões
- oleoduto
- plataforma
- Plataformas
- platão
- Inteligência de Dados Platão
- PlatãoData
- Jogar
- vagens
- Privacidade
- retrato
- Publique
- principalmente
- privado
- em processamento
- Produto
- Perfil
- projeto
- projetos
- proposto
- provedor
- fornecedores
- fornece
- Python
- Frequentes
- RE
- alcançar
- receber
- recentemente
- Recomenda
- reduzir
- região
- remover
- Requisitos
- recurso
- utilização de recursos
- Recursos
- responsabilidades
- responsável
- resultar
- Resultados
- uma conta de despesas robusta
- Tipo
- papéis
- Regra
- Execute
- corrida
- é executado
- SaaS
- mesmo
- Salvar
- Escala
- dimensionamento
- Cenas
- cronograma
- programado
- agendamento
- arranhar
- Segundo
- seguro
- segurança
- Vejo
- Série
- serviço
- Serviços
- conjunto
- contexto
- ações
- compartilhando
- rede de apoio social
- mostrando
- Shows
- simplicidade
- simplificar
- solteiro
- ambiente único
- Tamanho
- pequeno
- Software
- Engenharia de software
- Soluções
- fonte
- Fontes
- específico
- especificamente
- velocidade
- pilha
- Staff
- começo
- começado
- Comece
- começa
- Declaração
- Ainda
- armazenamento
- opções de armazenamento
- lojas
- estrutura
- Estudo
- sujeito
- sucesso
- bem sucedido
- certo
- sustentável
- comutado
- símbolo
- sistemas
- Tire
- tomado
- toma
- Target
- Tarefa
- tarefas
- Profissionais
- equipes
- conta
- modelos
- Terraform
- texto
- que
- A
- A fonte
- deles
- então
- Este
- deles
- isto
- Através da
- para
- token
- ferramenta
- ferramentas
- topo
- tópico
- Transformação
- desencadear
- verdadeiro
- dois
- tipo
- subjacente
- Atualizar
- sobre
- usar
- usava
- Utilizador
- Interface de Usuário
- usos
- utilização
- Valioso
- valor
- variável
- vário
- versão
- vibrante
- Virtual
- andar
- Passo a passo
- foi
- we
- web
- serviços web
- BEM
- O Quê
- quando
- qual
- inteiro
- de quem
- porque
- generalizada
- precisarão
- de
- trabalhou
- de gestão de documentos
- fluxos de trabalho
- trabalhar
- anos
- Você
- investimentos
- zefirnet