Configuração de um espaço de dados mínimo viável para compartilhar dados entre organizações - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Configuração de um espaço de dados mínimo viável para compartilhar dados entre organizações

Ramy Hcini, Michael Miller e Jorge Hernandez Suarez, Amazon Web Services

Ismail Abdellaoui e Malte Gasseling, Think-it

Resumo

Os espaços de dados são redes federadas para troca de dados com confiança e controle sobre os dados como princípios fundamentais. Eles permitem que as organizações compartilhem, troquem e colaborem em dados em grande escala, oferecendo uma solução econômica e independente de tecnologia.

Os espaços de dados têm o potencial de impulsionar significativamente os esforços para um futuro sustentável usando a solução de problemas baseada em dados com uma end-to-end abordagem que envolve todas as partes interessadas relevantes.

Este padrão orienta você pelo exemplo de como duas empresas podem usar a tecnologia de espaço de dados na Amazon Web Services (AWS) para impulsionar sua estratégia de redução de emissões de carbono. Nesse cenário, a empresa X fornece dados de emissões de carbono, que a empresa Y consome. Consulte a seção Informações adicionais para obter os seguintes detalhes da especificação do espaço de dados:

  • Participantes

  • Caso de negócios

  • Autoridade do espaço de dados

  • Componentes do espaço de dados

  • Serviços do espaço de dados

  • Dados a serem trocados

  • Modelo de dados

  • Conector Tractus-X EDC

O padrão inclui etapas para o seguinte:

  • Implantação da infraestrutura necessária para um espaço de dados básico com dois participantes em AWS execução.

  • Troca de dados sobre emissões de carbono usando os conectores de forma segura.

Este padrão implanta um cluster do Kubernetes que hospedará conectores de espaço de dados e seus serviços por meio do Amazon Elastic Kubernetes Service (Amazon EKS).

O ambiente de gerenciamento e o plano de dados do Eclipse Dataspace Components (EDC) são ambos implantados no Amazon EKS. O gráfico oficial do Tractus-X Helm implanta os serviços PostgreSQL e Vault como dependências. HashiCorp

Além disso, o serviço de identidade é implantado no Amazon Elastic Compute Cloud EC2 (Amazon) para replicar um cenário real de um espaço de dados mínimo viável (MVDS).

Pré-requisitos e limitações

Pré-requisitos

  • Um ativo Conta da AWS para implantar a infraestrutura de sua escolha Região da AWS

  • Um usuário AWS Identity and Access Management (IAM) com acesso ao Amazon S3 que será usado temporariamente como usuário técnico (o conector EDC atualmente não suporta o uso de funções). Recomendamos que você crie um usuário do IAM especificamente para essa demonstração e que esse usuário tenha permissões limitadas associadas a ela.)

  • AWS Command Line Interface (AWS CLI) instalado e configurado em sua escolha Região da AWS

  • AWS credenciais de segurança

  • eksctl na sua estação de trabalho

  • Git na sua estação de trabalho

  • kubectl

  • Helm

  • Carteiro

  • Um AWS Certificate Manager certificado (ACM) SSL/TLS

  • Um nome DNS que apontará para um Application Load Balancer (o nome DNS deve estar coberto pelo certificado ACM)

  • HashiCorp Vault (Para obter informações sobre como usar AWS Secrets Manager para gerenciar segredos, consulte a seção Informações adicionais.)

Versões do produto

Limitações

  • Seleção de conectores: essa implantação usa um conector baseado em EDC. No entanto, certifique-se de considerar os pontos fortes e as funcionalidades dos conectores EDC e FIWARE True para tomar uma decisão informada que se alinhe às necessidades específicas da implantação.

  • Compilação do conector EDC: a solução de implantação escolhida se baseia no chart do Helm Tractus-X EDC Connector, uma opção de implantação bem estabelecida e amplamente testada. A decisão de usar esse gráfico é motivada por seu uso comum e pela inclusão de extensões essenciais na compilação fornecida. Embora o PostgreSQL HashiCorp e o Vault sejam componentes padrão, você tem a flexibilidade de personalizar sua própria construção de conectores, se necessário.

  • Acesso ao cluster privado: o acesso ao cluster do EKS implantado é restrito aos canais privados. A interação com o cluster é realizada exclusivamente por meio do uso de kubectl e o IAM. O acesso público aos recursos do cluster pode ser habilitado usando balanceadores de carga e nomes de domínio, que devem ser implementados seletivamente para expor serviços específicos a uma rede mais ampla. No entanto, não recomendamos fornecer acesso público.

  • Foco na segurança: a ênfase é colocada na abstração das configurações de segurança de acordo com as especificações padrão para que você possa se concentrar nas etapas envolvidas na troca de dados do conector EDC. Embora as configurações de segurança padrão sejam mantidas, é fundamental habilitar comunicações seguras antes de expor o cluster à rede pública. Essa precaução garante uma base sólida para o manuseio seguro de dados.

  • Custo da infraestrutura: uma estimativa do custo da infraestrutura pode ser encontrada usando o AWS Calculadora de Preços. Um cálculo simples mostra que os custos podem chegar a USD 162,92 por mês para a infraestrutura implantada.

Arquitetura

A arquitetura MVDS compreende duas nuvens privadas virtuais (VPCs), uma para o serviço de identidade Dynamic Attribute Provisioning System (DAPS) e outra para o Amazon EKS.

Arquitetura do DAPS

O diagrama a seguir mostra o DAPS em execução em EC2 instâncias controladas por um grupo de Auto Scaling. Um Application Load Balancer e uma tabela de rotas expõem os servidores DAPS. O Amazon Elastic File System (Amazon EFS) sincroniza dados entre instâncias do DAPS.

Nuvem AWS architecture with VPC, public/private subnets, load balancer, and DAPS servers across two availability zones.

Arquitetura Amazon EKS

Os espaços de dados são projetados para serem soluções independentes de tecnologia, e existem várias implementações. Este padrão usa um cluster do Amazon EKS para implantar os componentes técnicos do espaço de dados. O diagrama a seguir mostra a implantação de um cluster do EKS. Os nós de processamento são instalados em sub-redes privadas. Os pods do Kubernetes acessam a instância do Amazon Relational Database Service (Amazon RDS) para PostgreSQL, que também está nas sub-redes privadas. Os pods do Kubernetes armazenam dados compartilhados no Amazon S3.

Nuvem AWS architecture with VPC, public/private subnets, NAT gateways, and EKS cluster across two availability zones.

Ferramentas

AWS serviços

  • AWS CloudFormationajuda você a configurar AWS recursos, provisioná-los de forma rápida e consistente e gerenciá-los em todo o ciclo de vida em todas Contas da AWS as regiões.

  • O Amazon Elastic Compute Cloud (Amazon EC2) fornece capacidade de computação escalável no. Nuvem AWS Você poderá iniciar quantos servidores virtuais precisar e escalá-los na vertical rapidamente.

  • Amazon Elastic File System (Amazon EFS) ajuda você a criar e configurar sistemas de arquivos compartilhados na Nuvem AWS.

  • O Amazon Elastic Kubernetes Service (Amazon EKS) ajuda você a executar o AWS Kubernetes sem precisar instalar ou manter seu próprio plano de controle ou nós do Kubernetes.

  • O Amazon Simple Storage Service (Amazon S3) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.

  • O ELB (ELB) distribui o tráfego de entrada do aplicativo ou da rede em vários destinos. Por exemplo, você pode distribuir o tráfego entre EC2 instâncias, contêineres e endereços IP em uma ou mais zonas de disponibilidade.

Outras ferramentas

  • O eksctl é utilitário de linha de comando para criar e gerenciar clusters do Kubernetes no Amazon EKS.

  • O Git é um sistema de controle de versão distribuído e de código aberto.

  • HashiCorp O Vault fornece armazenamento seguro com acesso controlado para credenciais e outras informações confidenciais.

  • O Helm é um gerenciador de pacotes de código aberto para o Kubernetes que auxilia na instalação e no gerenciamento de aplicações no cluster do Kubernetes.

  • kubectl é uma interface de linha de comando que ajuda você na execução de comandos em clusters do Kubernetes.

  • O Postman é uma plataforma de API.

Repositório de código

Os arquivos YAML de configuração do Kubernetes e os scripts Python para esse padrão estão disponíveis no repositório. GitHub aws-patterns-edc O padrão também usa o repositório Tractus-X EDC.

Práticas recomendadas

Amazon EKS e isolamento das infraestruturas dos participantes

Os namespaces no Kubernetes separarão a infraestrutura do provedor da empresa X da infraestrutura do consumidor da empresa Y neste padrão. Para obter mais informações, consulte EKS Best Practices Guide.

Em uma situação mais realista, cada participante teria um cluster do Kubernetes separado executado em sua própria Conta da AWS. A infraestrutura compartilhada (DAPS neste padrão) seria acessível pelos participantes do espaço de dados e estaria completamente separada das infraestruturas dos participantes.

Épicos

TarefaDescriptionHabilidades necessárias

Clonar o repositório.

Para clonar o repositório na sua estação de trabalho, execute o seguinte comando:

git clone https://github.com/Think-iT-Labs/aws-patterns-edc

A estação de trabalho deve ter acesso ao seu Conta da AWS.

DevOps engenheiro

Provisione o cluster do Kubernetes e configure namespaces.

Para implantar um cluster do EKS padrão simplificado em sua conta, execute o seguinte comando eksctl na estação de trabalho em que você clonou o repositório:

eksctl create cluster

O comando cria a VPC e as sub-redes públicas e privadas que abrangem três zonas de disponibilidade diferentes. Depois que a camada de rede é criada, o comando cria duas m5.large EC2 instâncias dentro de um grupo de Auto Scaling.

Para obter mais informações e exemplos de resultados, consulte o guia eksctl.

Depois de provisionar o cluster privado, adicione o novo cluster do EKS à sua configuração local do Kubernetes executando o seguinte comando:

aws eks update-kubeconfig --name <EKS CLUSTER NAME> --region <AWS REGION>

Esse padrão usa o eu-west-1 Região da AWS para executar todos os comandos. No entanto, você pode executar os mesmos comandos de sua preferência Região da AWS.

Para confirmar se os nós do EKS estão em funcionamento e em estado de prontidão, execute o seguinte comando:

kubectl get nodes
DevOps engenheiro

Configure os namespaces.

Para criar namespaces para o provedor e o consumidor, execute os seguintes comandos:

kubectl create ns provider kubectl create ns consumer

Neste padrão, é importante usar provider e consumer como namespaces para ajustar as configurações nas próximas etapas.

DevOps engenheiro
TarefaDescriptionHabilidades necessárias

Implante o DAPS usando AWS CloudFormation.

Para facilitar o gerenciamento das operações do DAPS, o servidor DAPS é instalado nas EC2 instâncias.

Para instalar o DAPS, use o modelo do AWS CloudFormation. Você precisará do certificado ACM e do nome DNS na seção Pré-requisitos. O modelo implanta e configura o seguinte:

  • Application Load Balancer

  • Auto Scaling group (Grupo do Auto Scaling)

  • EC2 instâncias configuradas com dados do usuário para instalar todos os pacotes necessários

  • Perfis do IAM

  • DAPS

Você pode implantar o AWS CloudFormation modelo fazendo login Console de gerenciamento da AWS e usando o AWS CloudFormation console. Você também pode implantar o modelo usando um AWS CLI comando como o seguinte:

aws cloudformation create-stack --stack-name daps \ --template-body file://aws-patterns-edc/cloudformation.yml --parameters \ ParameterKey=CertificateARN,ParameterValue=<ACM Certificate ARN> \ ParameterKey=DNSName,ParameterValue=<DNS name> \ ParameterKey=InstanceType,ParameterValue=<EC2 instance type> \ ParameterKey=EnvironmentName,ParameterValue=<Environment Name> --capabilities CAPABILITY_NAMED_IAM

O nome do ambiente é de sua própria escolha. Recomendamos usar um termo significativo, comoDapsInfrastructure, porque ele será refletido nas tags AWS de recursos.

Para esse padrão, t3.small é grande o suficiente para executar o fluxo de trabalho DAPS, que tem três contêineres do Docker.

O modelo implanta as EC2 instâncias em sub-redes privadas. Isso significa que as instâncias não podem ser acessadas diretamente por meio de SSH (Secure Shell) pela Internet. As instâncias são provisionadas com a função e o AWS Systems Manager agente do IAM necessários para permitir o acesso às instâncias em execução por meio do Gerenciador de sessões, um recurso de. AWS Systems Manager

Recomendamos usar o Gerenciador de Sessões para acesso. Como alternativa, você pode provisionar um bastion host para permitir o acesso SSH da Internet. Ao usar a abordagem bastion host, a EC2 instância pode levar mais alguns minutos para começar a ser executada.

Depois que o AWS CloudFormation modelo for implantado com sucesso, aponte o nome DNS para o nome DNS do Application Load Balancer. Para confirmar, execute o seguinte comando:

dig <DNS NAME>

A saída deve ser semelhante ao seguinte:

; <<>> DiG 9.16.1-Ubuntu <<>> edc-pattern.think-it.io ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42344 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;edc-pattern.think-it.io. IN A ;; ANSWER SECTION: edc-pattern.think-it.io. 276 IN CNAME daps-alb-iap9zmwy3kn8-1328773120.eu-west-1.elb.amazonaws.com. daps-alb-iap9zmwy3kn8-1328773120.eu-west-1.elb.amazonaws.com. 36 IN A 52.208.240.129 daps-alb-iap9zmwy3kn8-1328773120.eu-west-1.elb.amazonaws.com. 36 IN A 52.210.155.124
DevOps engenheiro

Registre os conectores dos participantes no serviço DAPS.

Em qualquer uma das EC2 instâncias provisionadas para o DAPS, registre os participantes:

  1. Execute o script disponível na EC2 instância usando o usuário root:

    cd /srv/mvds/omejdn-daps
  2. Registre o provedor:

    bash scripts/register_connector.sh <provider_name>
  3. Registre o consumidor:

    bash scripts/register_connector.sh <consumer_name>

A escolha dos nomes não afeta as próximas etapas. Recomendamos usar provider e consumer ou companyx e companyy.

Os comandos de registro também configurarão automaticamente o serviço DAPS com as informações necessárias obtidas dos certificados e chaves criados.

Enquanto estiver conectado a um servidor DAPS, reúna as informações necessárias para as etapas posteriores da instalação:

  1. Em omejdn-daps/config/clients.yml obtenha o client id para o provedor e o consumidor. Os valores client id são strings longas de dígitos hexadecimais.

  2. No diretório omejdn-daps/keys, copie o conteúdo dos arquivos consumer.cert, consumer.key, provider.cert e provider.key.

Recomendamos copiar e colar o texto em arquivos com nomes semelhantes prefixados com daps- em sua estação de trabalho.

Você deve ter o cliente IDs para o provedor e o consumidor e deve ter quatro arquivos em seu diretório de trabalho em sua estação de trabalho:

  • O nome do arquivo de origem consumer.cert se torna o nome do arquivo da estação de trabalho daps-consumer.cert.

  • O nome do arquivo de origem consumer.key se torna o nome do arquivo da estação de trabalho daps-consumer.key.

  • O nome do arquivo de origem provider.cert se torna o nome do arquivo da estação de trabalho daps-provider.cert.

  • O nome do arquivo de origem provider.key se torna o nome do arquivo da estação de trabalho daps-provider.key.

DevOps engenheiro
TarefaDescriptionHabilidades necessárias

Clone o repositório Tractus-X EDC e use a versão 0.4.1.

A construção do conector Tractus-X EDC requer que os serviços PostgreSQL (banco de dados de ativos) e HashiCorp Vault (gerenciamento de segredos) sejam implantados e disponibilizados.

Há muitas versões diferentes dos charts do Helm Tractus-X EDC. Este padrão especifica a versão 0.4.1 porque usa o servidor DAPS.

As versões mais recentes usam o Managed Identity Wallet (MIW) com uma implementação distribuída do serviço de identidade.

Na estação de trabalho em que você criou os dois namespaces do Kubernetes, clone o repositório tractusx-edc e confira a ramificação release/0.4.1.

git clone https://github.com/eclipse-tractusx/tractusx-edc cd tractusx-edc git checkout release/0.4.1
DevOps engenheiro

Configure chart do Helm Tractus-X EDC.

Modifique a configuração do modelo do chart do Helm Tractus-X para permitir que os dois conectores interajam juntos.

Para fazer isso, você adicionaria o namespace ao nome DNS do serviço para que ele pudesse ser resolvido por outros serviços no cluster. Essas modificações devem ser feitas no arquivo charts/tractusx-connector/templates/_helpers.tpl. Este padrão fornece uma versão final modificada desse arquivo para você usar. Copie e coloque na seção daps do arquivo charts/tractusx-connector/templates/_helpers.tpl.

Certifique-se de comentar todas as dependências do DAPS em charts/tractusx-connector/Chart.yaml:

dependencies: # IDS Dynamic Attribute Provisioning Service (IAM) # - name: daps # version: 0.0.1 # repository: "file://./subcharts/omejdn" # alias: daps # condition: install.daps
DevOps engenheiro

Configure os conectores para usar o PostgreSQL no Amazon RDS.

(Opcional) A instância do Amazon Relational Database Service (Amazon RDS) não é necessária neste padrão. No entanto, é altamente recomendável usar o Amazon RDS ou o Amazon Aurora, pois eles oferecem recursos como alta disponibilidade, backup e recuperação.

Para substituir o PostgreSQL no Kubernetes pelo Amazon RDS, faça o seguinte:

  1. Provisionar a instância do Amazon RDS para PostgreSQL.

  2. Em Chart.yaml, comente a seção PostgreSQL.

  3. Em provider_values.yml e consumer_values.yml, configure a seção postgresql da seguinte forma:

postgresql: auth: database: edc password: <RDS PASSWORD> username: <RDS Username> jdbcUrl: jdbc:postgresql://<RDS DNS NAME>:5432/edc username: <RDS Username> password: <RDS PASSWORD> primary: persistence: enabled: false readReplicas: persistence: enabled: false
DevOps engenheiro

Configure e implante o conector do provedor e seus serviços.

Para configurar o conector do provedor e seus serviços, faça o seguinte:

  1. Para baixar o arquivo provider_edc.yaml do diretório edc_helm_configs para a pasta atual do chart do Helm, execute o seguinte comando:

    wget -q https://raw.githubusercontent.com/Think-iT-Labs/aws-patterns-edc/main/edc_helm_configs/provider_edc.yaml> -P charts/tractusx-connector/

  2. Substitua as seguintes variáveis (também marcadas no arquivo) por seus valores:

    • CLIENT_ID: o ID gerado pelo DAPS. O CLIENT_ID deve estar em /srv/mvds/omejdn-daps/config/clients.yml/config/clients.yml no servidor DAPS. Ele deve ser uma string de caracteres hexadecimais.

    • DAPS_URL: o URL do servidor DAPS. Ele deve https://{DNS name} usar o nome DNS que você configurou ao executar o AWS CloudFormation modelo.

    • VAULT_TOKEN: o token a ser usado para autorização do Vault. Escolha qualquer valor.

    • vault.fullnameOverridevault-provider.

    • vault.hashicorp.urlhttp://vault-provider:8200/.

    Os valores anteriores pressupõem que o nome da implantação e o nome do namespace sejam provider.

  3. Para executar o chart do Helm em sua estação de trabalho, use os seguintes comandos:

    cd charts/tractusx-connector helm dependency build helm upgrade --install provider ./ -f provider_edc.yaml -n provider
DevOps engenheiro

Adicione o certificado e as chaves ao cofre do provedor.

Para evitar confusão, produza os seguintes certificados fora do diretório tractusx-edc/charts.

Por exemplo, execute o comando a seguir para mudar para o diretório principal:

cd ~

Agora você precisa adicionar os segredos necessários ao provedor no cofre.

Os nomes dos segredos dentro do cofre são os valores das chaves na seção secretNames: do arquivo provider_edc.yml. Por padrão, eles são configurados da seguinte forma:

secretNames: transferProxyTokenSignerPrivateKey: transfer-proxy-token-signer-private-key transferProxyTokenSignerPublicKey: transfer-proxy-token-signer-public-key transferProxyTokenEncryptionAesKey: transfer-proxy-token-encryption-aes-key dapsPrivateKey: daps-private-key dapsPublicKey: daps-public-key

Uma chave Advanced Encryption Standard (AES), uma chave privada, uma chave pública e um certificado autoassinado são gerados inicialmente. Posteriormente, eles são adicionados como segredos ao cofre.

Além disso, esse diretório deve conter os arquivos daps-provider.cert e daps-provider.key que você copiou do servidor DAPS.

  1. Execute os seguintes comandos :

    # generate a private key openssl ecparam -name prime256v1 -genkey -noout -out provider-private-key.pem # generate corresponding public key openssl ec -in provider-private-key.pem -pubout -out provider-public-key.pem # create a self-signed certificate openssl req -new -x509 -key provider-private-key.pem -out provider-cert.pem -days 360 # generate aes key openssl rand -base64 32 > provider-aes.key
  2. Antes de adicionar os segredos ao cofre, converta-os de várias linhas em linhas únicas substituindo as quebras de linha por \n:

    cat provider-private-key.pem | sed 's/$/\\\\n/'|tr -d '\\n' > provider-private-key.pem.line cat provider-public-key.pem | sed 's/$/\\\\n/'|tr -d '\\n' > provider-public-key.pem.line cat provider-cert.pem | sed 's/$/\\\\n/'|tr -d '\\n' > provider-cert.pem.line cat provider-aes.key | sed 's/$/\\\\n/'|tr -d '\\n' > provider-aes.key.line ## The following block is for daps certificate and key openssl x509 -in daps-provider.cert -outform PEM | sed 's/$/\\\\n/'|tr -d '\\n' > daps-provider.cert.line cat daps-provider.key | sed 's/$/\\\\n/'|tr -d '\\n' > daps-provider.key.line
  3. Para formatar os segredos que serão adicionados ao Vault, execute os seguintes comandos:

    JSONFORMAT='{"content": "%s"}' #create a single line in JSON format printf "${JSONFORMAT}\\n" "`cat provider-private-key.pem.line`" > provider-private-key.json printf "${JSONFORMAT}\\n" "`cat provider-public-key.pem.line`" > provider-public-key.json printf "${JSONFORMAT}\\n" "`cat provider-cert.pem.line`" > provider-cert.json printf "${JSONFORMAT}\\n" "`cat provider-aes.key.line`" > provider-aes.json printf "${JSONFORMAT}\\n" "`cat daps-provider.key.line`" > daps-provider.key.json printf "${JSONFORMAT}\\n" "`cat daps-provider.cert.line`" > daps-provider.cert.json

    Os segredos agora estão no formato JSON e estão prontos para serem adicionados ao cofre.

  4. Para obter o nome do pod do cofre, execute o seguinte comando:

    kubectl get pods -n provider|egrep "vault|NAME"

    O nome do pod será semelhante a "vault-provider-0". Esse nome é usado ao criar uma porta de encaminhamento para o cofre. A porta de encaminhamento permite que você acesse o cofre para adicionar o segredo. Você deve executar isso em uma estação de trabalho que tenha as credenciais da AWS configuradas.

  5. Para acessar o cofre, use kubectl para configurar um encaminhamento de porta:

    kubectl port-forward <VAULT_POD_NAME> 8200:8200 -n provider

Agora você deve conseguir acessar o cofre por meio de seu navegador ou da CLI.

Navegador

  1. Usando o navegador, navegue até http://127.0.0.1:8200, que usará a porta de encaminhamento que você configurou.

  2. Faça login usando o token que você configurou anteriormente em provider_edc.yml. No mecanismo de segredos, crie três segredos. Cada segredo terá um valor Path for this secret, que é o nome secreto mostrado na lista a seguir. Na seção secret data, o nome da chave será content e o valor será a única linha de texto do respectivo arquivo chamado .line.

  3. Os nomes secretos são provenientes da seção secretNames do arquivo provider_edc.yml.

  4. Crie os seguintes segredos:

    • Segredo transfer-proxy-token-signer-private-key com nome de arquivo provider-private-key.pem.line

    • Segredo transfer-proxy-token-signer-public-key com nome de arquivo provider-cert.pem.line

    • Segredo transfer-proxy-token-encryption-aes-key com nome de arquivo provider-aes.key.line

    • Segredo daps-private-key com nome de arquivo daps-provider.key.line

    • Segredo daps-public-key com nome de arquivo daps-provider.cert.line

CLI do Vault

A CLI também usará a porta de encaminhamento que você configurou.

  1. Em sua estação de trabalho, instale a CLI do Vault seguindo as instruções na documentação do Vault. HashiCorp

  2. Para fazer login no cofre usando o token que você configurou em provider_edc.yml, execute o seguinte comando:

    vault login -address=http://127.0.0.1:8200

    Com o token correto, você deverá ver a mensagem "Success! You are now authenticated."

  3. Para criar os segredos usando os arquivos formatados em JSON que você criou anteriormente, execute o seguinte código:

    vault kv put -address=http://127.0.0.1:8200 secret/transfer-proxy-token-signer-private-key @provider-private-key.json vault kv put -address=http://127.0.0.1:8200 secret/transfer-proxy-token-signer-public-key @provider-cert.json vault kv put -address=http://127.0.0.1:8200 secret/transfer-proxy-token-encryption-aes-key @provider-aes.json vault kv put -address=http://127.0.0.1:8200 secret/daps-private-key @daps-provider.key.json vault kv put -address=http://127.0.0.1:8200 secret/daps-public-key @daps-provider.cert.json
DevOps engenheiro

Configure e implante o conector do consumidor e seus serviços.

As etapas para configurar e implantar o consumidor são semelhantes às que você concluiu para o provedor:

  1. Para copiar o consumer_edc.yaml do aws-patterns-edcrepositório para a pasta tractusx-edc/charts/tractusx-connecto r, execute os seguintes comandos:

    cd tractusx-edc wget -q https://raw.githubusercontent.com/Think-iT-Labs/aws-patterns-edc/main/edc_helm_configs/consumer_edc.yaml -P charts/tractusx-connector/
  2. Atualize as seguintes variáveis com seus valores reais:

    • CONSUMER_CLIENT_ID: o ID gerado pelo DAPS. O CONSUMER_CLIENT_ID deve estar em config/clients.yml no servidor DAPS.

    • DAPS_URL: o mesmo URL do DAPS que você usou para o provedor.

    • VAULT_TOKEN: o token a ser usado para autorização do Vault. Escolha qualquer valor.

    • vault.fullnameOverridevault-consumer

    • vault.hashicorp.urlhttp://vault-provider:8200/

    Os valores anteriores pressupõem que o nome da implantação e o nome do namespace sejam consumer.

  3. Para executar o chart do Helm, use os seguintes comandos:

    cd charts/tractusx-connector helm upgrade --install consumer ./ -f consumer_edc.yaml -n consumer

Adicione o certificado e as chaves ao cofre do consumidor.

Do ponto de vista da segurança, recomendamos a regeneração dos certificados e chaves de cada participante do espaço de dados. Este padrão regenera certificados e chaves para o consumidor.

As etapas são muito semelhantes às do provedor. Você pode verificar os nomes secretos no arquivo consumer_edc.yml.

Os nomes dos segredos dentro do cofre são os valores das chaves na seção secretNames: de consumer_edc.yml file. Por padrão, eles são configurados da seguinte forma:

secretNames: transferProxyTokenSignerPrivateKey: transfer-proxy-token-signer-private-key transferProxyTokenSignerPublicKey: transfer-proxy-token-signer-public-key transferProxyTokenEncryptionAesKey: transfer-proxy-token-encryption-aes-key dapsPrivateKey: daps-private-key dapsPublicKey: daps-public-key

Os arquivos daps-consumer.cert e daps-consumer.key que você copiou do servidor DAPS já devem existir nesse diretório.

  1. Execute os seguintes comandos :

    # generate a private key openssl ecparam -name prime256v1 -genkey -noout -out consumer-private-key.pem # generate corresponding public key openssl ec -in consumer-private-key.pem -pubout -out consumer-public-key.pem # create a self-signed certificate openssl req -new -x509 -key consumer-private-key.pem -out consumer-cert.pem -days 360 # generate aes key openssl rand -base64 32 > consumer-aes.key
  2. Edite manualmente os arquivos para substituir quebras de linha por \n ou use três comandos semelhantes aos seguintes:

    cat consumer-private-key.pem | sed 's/$/\\\\n/'|tr -d '\\n' > consumer-private-key.pem.line cat consumer-public-key.pem | sed 's/$/\\\\n/'|tr -d '\\n' > consumer-public-key.pem.line cat consumer-cert.pem | sed 's/$/\\\\n/'|tr -d '\\n' > consumer-cert.pem.line cat consumer-aes.key | sed 's/$/\\\\n/'|tr -d '\\n' > consumer-aes.key.line cat daps-consumer.cert | sed 's/$/\\\\n/'|tr -d '\\n' > daps-consumer.cert.line cat daps-consumer.key | sed 's/$/\\\\n/'|tr -d '\\n' > daps-consumer.key.line
  3. Para formatar os segredos que serão adicionados ao Vault, execute os seguintes comandos:

    JSONFORMAT='{"content": "%s"}' #create a single line in JSON format printf "${JSONFORMAT}\\n" "`cat consumer-private-key.pem.line`" > consumer-private-key.json printf "${JSONFORMAT}\\n" "`cat consumer-public-key.pem.line`" > consumer-public-key.json printf "${JSONFORMAT}\\n" "`cat consumer-cert.pem.line`" > consumer-cert.json printf "${JSONFORMAT}\\n" "`cat consumer-aes.key.line`" > consumer-aes.json printf "${JSONFORMAT}\\n" "`cat daps-consumer.key.line`" > daps-consumer.key.json printf "${JSONFORMAT}\\n" "`cat daps-consumer.cert.line`" > daps-consumer.cert.json

    Os segredos agora estão no formato JSON e estão prontos para serem adicionados ao cofre.

  4. Para obter o nome do pod para o cofre do consumidor, execute o seguinte comando:

    kubectl get pods -n consumer | egrep "vault|NAME"

    O nome do pod será semelhante a "vault-consumer-0". Esse nome é usado ao criar uma porta de encaminhamento para o cofre. A porta de encaminhamento permite que você acesse o cofre para adicionar o segredo. Você deve executar isso em uma estação de trabalho que tenha AWS credenciais configuradas.

  5. Para acessar o cofre, use kubectl para configurar um encaminhamento de porta:

    kubectl port-forward <VAULT_POD_NAME> 8201:8200 -n consumer

Desta vez, a porta local é 8201, para que você possa ter portas de encaminhamento em vigor tanto para o produtor quanto para o consumidor.

Navegador

Você pode usar seu navegador para se conectar a http://localhost:8201/ para acessar o cofre do consumidor e criar os segredos com nomes e conteúdo conforme descrito.

Os segredos e arquivos que contêm o conteúdo são os seguintes:

  • Segredo transfer-proxy-token-signer-private-key com nome de arquivo consumer-private-key.pem.line

  • Segredo transfer-proxy-token-signer-public-key com nome de arquivo consumer-cert.pem.line

  • Segredo transfer-proxy-token-encryption-aes-key com nome de arquivo consumer-aes.key.line

CLI do Vault

Usando a CLI do Vault, você pode executar os seguintes comandos para fazer login no cofre e criar os segredos:

  1. Faça login no cofre usando o token que você configurou em consumer_edc.yml:

    vault login -address=http://127.0.0.1:8201

    Com o token correto, você deverá ver a mensagem "Success! You are now authenticated."

  2. Para criar os segredos usando os arquivos formatados em JSON que você criou anteriormente, execute o seguinte código:

    vault kv put -address=http://127.0.0.1:8201 secret/transfer-proxy-token-signer-private-key @consumer-private-key.json vault kv put -address=http://127.0.0.1:8201 secret/transfer-proxy-token-signer-public-key @consumer-cert.json vault kv put -address=http://127.0.0.1:8201 secret/transfer-proxy-token-encryption-aes-key @consumer-aes.json vault kv put -address=http://127.0.0.1:8201 secret/daps-private-key @daps-consumer.key.json vault kv put -address=http://127.0.0.1:8201 secret/daps-public-key @daps-consumer.cert.json
DevOps engenheiro
TarefaDescriptionHabilidades necessárias

Configure o encaminhamento de portas.

  1. Para verificar o status dos pods, execute os seguintes comandos:

    kubectl get pods -n provider kubectl get pods -n consumer
  2. Para garantir que as implantações do Kubernetes tenham sido bem-sucedidas, veja os registros dos pods do Kubernetes do provedor e do consumidor executando os seguintes comandos:

    kubectl logs -n provider <producer control plane pod name> kubectl logs -n consumer <consumer control plane pod name>

O cluster é privado e não pode ser acessado publicamente. Para interagir com os conectores, use o recurso de encaminhamento de portas do Kubernetes para encaminhar o tráfego gerado pela sua máquina para o ambiente de gerenciamento do conector.

  1. No primeiro terminal, encaminhe as solicitações do consumidor para a API de gerenciamento pela porta 8300:

    kubectl port-forward deployment/consumer-tractusx-connector-controlplane 8300:8081 -n consumer
  2. No segundo terminal, encaminhe as solicitações do provedor para a API de gerenciamento pela porta 8400:

    kubectl port-forward deployment/provider-tractusx-connector-controlplane 8400:8081 -n provider
DevOps engenheiro

Crie buckets do S3 para o provedor e o consumidor.

Atualmente, o conector EDC não usa credenciais temporárias da AWS, como as fornecidas ao assumir uma função. O EDC oferece suporte somente ao uso de uma combinação de ID de chave de acesso do IAM e de uma chave de acesso secreta.

São necessários dois buckets do S3 para as etapas posteriores. Um bucket do S3 é usado para armazenar dados disponibilizados pelo provedor. O outro bucket do S3 é para dados recebidos pelo consumidor.

O usuário do IAM deve ter permissão para ler e gravar objetos somente nos dois buckets nomeados.

Um ID de chave de acesso e um par de chaves de acesso secretas precisam ser criadas e mantidas em segurança. Depois que esse MVDS for desativado, o usuário do IAM deverá ser excluído.

O código abaixo é um exemplo de política do IAM para o usuário:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1708699805237", "Action": [ "s3:GetObject", "s3:GetObjectVersion", "s3:ListAllMyBuckets", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:ListBucketVersions", "s3:PutObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::<S3 Provider Bucket>", "arn:aws:s3:::<S3 Consumer Bucket>", "arn:aws:s3:::<S3 Provider Bucket>/*", "arn:aws:s3:::<S3 Consumer Bucket>/*" ] } ] }
DevOps engenheiro

Configure o Postman para interagir com o conector.

Agora você pode interagir com os conectores por meio da sua EC2 instância. Use o Postman como um cliente HTTP e forneça Coleções Postman para os conectores do provedor e do consumidor.

Importe as coleções do repositório aws-pattern-edc para sua instância do Postman.

Este padrão usa variáveis de coleção Postman para fornecer informações às suas solicitações.

Desenvolvedor de aplicativos, Engenheiro de dados
TarefaDescriptionHabilidades necessárias

Prepare os dados de intensidade das emissões de carbono a serem compartilhados.

Primeiro, você precisa decidir sobre o ativo de dados a ser compartilhado. Os dados da empresa X representam a pegada de emissões de carbono de sua frota de veículos. O peso é o peso bruto do veículo (GVW) em toneladas e as emissões estão em gramas por tonelada-quilômetro (g CO2 e/t-km) de CO2 acordo com a medição (WTW): Wheel-to-Well

  • Tipo de veículo: Van; peso: < 3,5; emissões: 800

  • Tipo de veículo: caminhão urbano; peso: 3,5 ± 7,5; emissões: 315

  • Tipo de veículo: veículo médio de mercadorias (MGV); peso: 7,5 ± 20; emissões: 195

  • Tipo de veículo: veículo pesado de mercadorias (HGV); peso: > 20; emissões: 115

Os dados de exemplo estão no arquivo carbon_emissions_data.json no repositório aws-patterns-edc.

A empresa X usa o Amazon S3 para armazenar objetos.

Crie o bucket do S3 e armazene o objeto de dados de exemplo nele. Os comandos a seguir criam um bucket do S3 com configurações de segurança padrão. É altamente recomendável consultar as práticas recomendadas de segurança para o Amazon S3.

aws s3api create-bucket <BUCKET_NAME> --region <AWS_REGION> # You need to add '--create-bucket-configuration # LocationConstraint=<AWS_REGION>' if you want to create # the bucket outside of us-east-1 region aws s3api put-object --bucket <BUCKET_NAME> \ --key <S3 OBJECT NAME> \ --body <PATH OF THE FILE TO UPLOAD>

O nome do bucket do S3 deve ser globalmente exclusivo. Para obter mais informações sobre as regras de nomenclatura, consulte a documentação da AWS.

Engenheiro de dados, desenvolvedor de aplicativos

Registre o ativo de dados no conector do provedor usando o Postman.

Um ativo de dados do conector EDC contém o nome dos dados e sua localização. Nesse caso, o ativo de dados do conector EDC apontará para o objeto criado no bucket do S3:

  • Conector: provedor

  • Solicitação: criar ativo

  • Variáveis da coleção: atualize ASSET_NAME. Escolha um nome significativo que represente o ativo.

  • Corpo da solicitação: atualize o corpo da solicitação com o bucket do S3 que você criou para o provedor.

    "dataAddress": { "edc:type": "AmazonS3", "name": "Vehicle Carbon Footprint", "bucketName": "<REPLACE WITH THE SOURCE BUCKET NAME>", "keyName": "<REPLACE WITH YOUR OBJECT NAME>", "region": "<REPLACE WITH THE BUCKET REGION>", "accessKeyId": "<REPLACE WITH YOUR ACCESS KEY ID>", "secretAccessKey": "<REPLACE WITH SECRET ACCESS KEY>" }
  • Resposta: uma solicitação bem-sucedida retorna a hora de criação e o ID do ativo recém-criado.

    { "@id": "c89aa31c-ec4c-44ed-9e8c-1647f19d7583" }
  • Variável de coleção ASSET_ID: atualize a variável de coleção Postman ASSET_ID com o ID que foi gerado automaticamente pelo conector EDC após a criação.

Desenvolvedor de aplicativos, Engenheiro de dados

Defina a política de uso do ativo.

Um ativo de dados EDC deve estar associado a políticas de uso claras. Primeiro, crie a definição de política no conector do provedor.

A política da empresa X é permitir que os participantes do espaço de dados usem os dados da pegada de carbono.

  • Corpo da solicitação:

    • Conector: provedor

    • Solicitação: criar política

    • Variáveis de coleção: atualize a variável Policy Name com o nome da política.

  • Resposta: uma solicitação bem-sucedida retornará o horário de criação e o ID da política criada recentemente. Atualize a variável de coleta POLICY_ID com o ID da política gerada pelo conector EDC após a criação.

Desenvolvedor de aplicativos, Engenheiro de dados

Defina uma oferta de contrato EDC para o ativo e sua política de uso.

Para permitir que outros participantes solicitem acesso aos seus dados, ofereça-os em um contrato que especifique as condições e permissões de uso:

  • Conector: provedor

  • Solicitação: criar definição de contrato

  • Variáveis de coleta: atualize a variável Contract Name com um nome para a oferta ou definição do contrato.

Desenvolvedor de aplicativos, Engenheiro de dados
TarefaDescriptionHabilidades necessárias

Solicite o catálogo de dados compartilhado pela empresa X.

Como consumidora de dados no espaço de dados, a empresa Y precisa primeiro descobrir os dados que estão sendo compartilhados por outros participantes.

Nessa configuração básica, você pode fazer isso solicitando que o conector do consumidor solicite o catálogo de ativos disponíveis diretamente do conector do provedor.

  • Conector: consumidor

  • Solicitação: solicitar catálogo

  • Resposta: todos os ativos de dados disponíveis do provedor, juntamente com suas políticas de uso anexadas. Como consumidor de dados, procure o contrato de seu interesse e atualize as seguintes variáveis de coleta de acordo.

    • CONTRACT_OFFER_ID: o ID da oferta de contrato que o consumidor deseja negociar

    • ASSET_ID: o ID do ativo que o consumidor deseja negociar

    • PROVIDER_CLIENT_ID: o ID do conector do provedor com o qual negociar

Desenvolvedor de aplicativos, Engenheiro de dados

Inicie uma negociação de contrato para os dados de intensidade de emissões de carbono da empresa X.

Agora que você identificou o ativo que deseja consumir, inicie um processo de negociação de contrato entre os conectores do consumidor e do provedor.

  • Conector: consumidor

  • Solicitação: negociação de contrato

  • Variáveis de coleção: atualize a variável CONSUMER_CLIENT_ID com o ID do conector do consumidor com o qual negociar.

O processo pode levar algum tempo até atingir o estado VERIFICADO.

Você pode verificar o estado da negociação do contrato e o ID do contrato correspondente usando a solicitação Get Negotiation.

Desenvolvedor de aplicativos, Engenheiro de dados
TarefaDescriptionHabilidades necessárias

Consuma dados de endpoints HTTP.

(Opção 1) Para usar o plano de dados HTTP para consumir dados no espaço de dados, você pode usar webhook.site para emular um servidor HTTP e iniciar o processo de transferência no conector do consumidor:

  • Conector: consumidor

  • Solicitação: negociação de contrato

  • Variáveis de coleta: atualize a variável Contract Agreement ID com o ID do contrato gerado pelo conector EDC.

  • Corpo da solicitação: atualize o corpo da solicitação para especificar HTTP como dataDestination junto com o URL do webhook:

    { "dataDestination": { "type": "HttpProxy" }, "privateProperties": { "receiverHttpEndpoint": "<WEBHOOK URL>" } }

    O conector enviará as informações necessárias para baixar o arquivo diretamente para o URL do webhook.

    A carga útil recebida é semelhante à seguinte:

    { "id": "dcc90391-3819-4b54-b401-1a005a029b78", "endpoint": "http://consumer-tractusx-connector-dataplane.consumer:8081/api/public", "authKey": "Authorization", "authCode": "<AUTH CODE YOU RECEIVE IN THE ENDPOINT>", "properties": { "https://w3id.org/edc/v0.0.1/ns/cid": "vehicle-carbon-footprint-contract:4563abf7-5dc7-4c28-bc3d-97f45e32edac:b073669b-db20-4c83-82df-46b583c4c062" } }

    Use as credenciais recebidas para obter o ativo do S3 que foi compartilhado pelo provedor.

Nesta última etapa, você deve enviar a solicitação para o plano de dados do consumidor (portas de encaminhamento adequadas), conforme indicado na carga útil (endpoint).

Desenvolvedor de aplicativos, Engenheiro de dados

Consuma dados diretamente dos buckets do S3.

(Opção 2) Use a integração do Amazon S3 com o conector EDC e aponte diretamente para o bucket do Amazon S3 na infraestrutura do consumidor como destino:

  • Corpo da solicitação: atualize o corpo da solicitação para especificar o bucket do S3 como um DataDestination.

    Esse deve ser o bucket do S3 que você criou anteriormente para armazenar dados recebidos pelo consumidor.

    { "dataDestination": { "type": "AmazonS3", "bucketName": "{{ REPLACE WITH THE DESTINATION BUCKET NAME }}", "keyName": "{{ REPLACE WITH YOUR OBJECT NAME }}", "region": "{{ REPLACE WITH THE BUCKET REGION }}", "accessKeyId": "{{ REPLACE WITH YOUR ACCESS KEY ID }}", "secretAccessKey": "{{ REPLACE WITH SECRET ACCESS KEY }}" } } }
Engenheiro de dados, desenvolvedor de aplicativos

Solução de problemas

ProblemaSolução

O conector pode levantar um problema sobre o formato PEM do certificado.

Concatene o conteúdo de cada arquivo em uma única linha adicionando \n.

Recursos relacionados

Mais informações

Especificações do espaço de dados

Participantes

Participante

Descrição da empresa

Foco da empresa

Empresa X

Opera uma frota de veículos na Europa e América do Sul para transportar várias mercadorias.

O objetivo é tomar decisões orientadas por dados para reduzir a intensidade de emissões de carbono.

Empresa Y

Uma autoridade reguladora ambiental

Aplica regulamentações e políticas ambientais projetadas para monitorar e mitigar o impacto ambiental de empresas e indústrias, incluindo a intensidade das emissões de carbono.

Caso de negócios

A empresa X usa tecnologia de espaço de dados para compartilhar dados de pegada de carbono com um auditor de conformidade, a empresa Y, para avaliar e abordar o impacto ambiental das operações logísticas da empresa X.

Autoridade do espaço de dados

A autoridade do espaço de dados é um consórcio de organizações que governam o espaço de dados. Neste padrão, tanto a empresa X quanto a empresa Y formam o órgão de governança e representam uma autoridade federada de espaço de dados.

Componentes do espaço de dados

Componente

Implementação escolhida

Mais informações

Protocolo de troca de conjuntos de dados

Dataspace Protocol versão 0.8

Conector do espaço de dados

Conector Tractus-X EDC versão 0.4.1

Políticas de troca de dados

Política USE padrão

Serviços do espaço de dados

Serviço

Implementação

Mais informações

Serviço de identidade

Dynamic Attribute Provisioning System (DAPS)

“Um Dynamic Attribute Provisioning System (DAPS) tem a intenção de determinar certos atributos para organizações e conectores. Portanto, terceiros não precisam confiar neste último, desde que confiem nas afirmações do DAPS.” — DAPS

Para focar na lógica do conector, o espaço de dados é implantado em uma EC2 máquina Amazon usando o Docker Compose.

Serviço de descoberta

Catálogo federado Gaia-X

“O Catálogo Federado constitui um repositório indexado de autodescrições do Gaia-X para permitir a descoberta e seleção de provedores e suas ofertas de serviços. As autodescrições são as informações fornecidas pelos participantes sobre si mesmos e sobre seus serviços na forma de propriedades e reivindicações.” — Kickstarter do ecossistema Gaia-X

Dados a serem trocados

Ativos de dados

Description

Formato

Dados de emissões de carbono

Valores de intensidade para diferentes tipos de veículos na região especificada (Europa e América do Sul) de toda a frota de veículos

Arquivo JSON

Modelo de dados

{ "region": "string", "vehicles": [ // Each vehicle type has its Gross Vehicle Weight (GVW) category and its emission intensity in grams of CO2 per Tonne-Kilometer (g CO2 e/t-km) according to the "Well-to-Wheel" (WTW) measurement. { "type": "string", "gross_vehicle_weight": "string", "emission_intensity": { "CO2": "number", "unit": "string" } } ] }

Conector Tractus-X EDC

Para a documentação de cada parâmetro EDC do Tractus-X, consulte o arquivo de valores original.

A tabela a seguir lista todos os serviços, junto com suas portas e endpoints expostos correspondentes para referência.

Nome do serviço

Porta e caminho

Ambiente de gerenciamento

●        gerenciamento: ‒ Porta: 8081 Caminho: /management

●        controle ‒ Porta: 8083 Caminho: /control

●        protocolo   Porta: 8084 Caminho: /api/v1/dsp

●        métricas ‒ Porta: 9090 Caminho: /metrics

●        observabilidade ‒ Porta: 8085 Caminho: /observability

Plano de dados

padrão ‒ Porta: 8080 Caminho: /api

público ‒ Porta: 8081 Caminho: /api/dataplane/control

proxy ‒ Porta: 8186 Caminho: /proxy

métricas ‒ Porta: 9090 Caminho: /metrics

observabilidade ‒ Porta: 8085 Caminho: /observability

Cofre

Porta: 8200

PostgreSQL

Porta: 5432

Usando o AWS Secrets Manager Manager

É possível usar o Secrets Manager em vez do HashiCorp Vault como gerenciador de segredos. Para fazer isso, você deve usar ou criar a extensão AWS Secrets Manager EDC.

Você será responsável por criar e manter sua própria imagem, porque o Tractus-X não fornece suporte para o Secrets Manager.

Para fazer isso, você precisa modificar os arquivos Gradle de compilação do plano de controle e do plano de dados do conector introduzindo sua extensão AWS Secrets Manager EDC (veja este artefato maven para ver um exemplo) e, em seguida, criar, manter e referenciar a imagem do Docker.

Para obter mais insights sobre a refatoração da imagem do Docker do conector Tractus-X, consulte Refactor Tractus-X EDC Helm charts.

Para simplificar, evitamos reconstruir a imagem do conector nesse padrão e usamos o HashiCorp Vault.