設定最小的可行資料空間,以便在組織之間共用資料 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

設定最小的可行資料空間,以便在組織之間共用資料

創建者:拉米·赫奇尼(想想),伊斯梅爾·阿卜杜勒勞伊(Think-It),馬爾特·加塞林(Think-It),豪爾赫·埃爾南德斯蘇亞雷斯(AWS)和邁克爾·米勒(AWS)

環境:PoC 或試點

技術:分析;容器與微服務;資料湖;資料庫;基礎架構

工作負載:開源

AWS 服務:Amazon Aurora; AWS Certificate Manager (ACM); AWS CloudFormation; Amazon EC2; Amazon EFS; Amazon EKS; Elastic Load Balancing (ELB); Amazon RDS; Amazon S3; AWS Systems Manager

Summary

數據空間是用於數據交換的聯合網絡,以信任和控制數據作為核心原則。透過提供符合成本效益且與技術無關的解決方案,讓組織能夠大規模地共用、交換和協作資料。

數據空間有可能通過使用涉及所有相關利益相關者的 end-to-end 方法來解決數據驅動的問題,以顯著推動可持續發展的 future 努力。

此模式會引導您瞭解兩家公司如何使用 Amazon Web Services (AWS) 上的資料空間技術來推動碳排放和減少策略向前發展的範例。在這種情況下,X 公司提供了 Y 公司消耗的碳排放數據。如需下列料空間規格詳細資訊,請參閱「其他資訊」一節:

  • 參加者

  • 商業案例

  • 数据空间权威

  • 資料空間元件

  • 資料空間服務

  • 要交換的數據

  • 資料模型

  • 氣管-X EDC 連接器

該陣列包括以下步驟:

  • 部署執行兩個參與者的基本資料空間所需的基礎結構 AWS。

  • 以安全的方式使用連接器交換碳排放強度資料。

此模式會部署將透過 Amazon 彈性 Kubernetes 服務 (Amazon EKS) 託管資料空間連接器及其服務的 Kubernetes 叢集。

Eclipse 資料空間元件 (EDC) 控制平面和資料平面都部署在 Amazon EKS 上。Tractus-X 掌舵官方圖表將 PostgreSQL 和保管庫服務作為依賴項部署。 HashiCorp

此外,身分識別服務部署在 Amazon Elastic Compute Cloud (Amazon EC2) 上,以複寫最小可行資料空間 (MVDS) 的真實案例。

先決條件和限制

先決條件

  • 在您選擇的基礎架構中部署活 AWS 帳戶 動 AWS 區域

  • 具有 Amazon S3 存取權的 AWS Identity and Access Management (IAM) 使用者,該使用者將暫時作為技術使用者使用 (嵌入式設計中心連接器目前不支援使用角色。 我們建議您專門為此示範建立一個 IAM 使用者,並且此使用者將擁有與其相關聯的有限許可。)

  • AWS Command Line Interface (AWS CLI)在您選擇的安裝和配置 AWS 區域

  • AWS 安全認證

  • 您的工作站上查

  • Git 在你的工作站上

  • 庫貝克特爾

  • 頭盔

  • 邮递员

  • 一個 AWS Certificate Manager (ACM) SSL/TLS 憑證

  • 將指向 Application Load Balancer 的 DNS 名稱 (ACM 憑證必須涵蓋 DNS 名稱)

  • HashiCorp 保管 (如需使用 AWS Secrets Manager 來管理密碼的相關資訊,請參閱其他資訊一節。)

產品版本

限制

  • 連接器選擇-此部署使用 EDC 型連接器。但是,請務必考慮入式設計中心和 FIWARE True 連接器的優勢和功能,以做出符合部署特定需求的明智決策。

  • 嵌入式設計中心連接器構建-選擇的部署解決方案依賴 Tractus-X EDC 連接器頭盔圖,這是一個完善且經過廣泛測試的部署選項。使用此圖表的決定是由其常見用法以及在提供的組建中包含基本擴充功能所驅動。雖然 PostgreSQL 和文件 HashiCorp 庫是預設元件,但您可以根據需要彈性自訂自己的連接器組建。

  • 私有叢集存取-對已部署 EKS 叢集的存取僅限於私有通道。與叢集的互動僅透過使用kubectl和 IAM 來執行。您可以使用負載平衡器和網域名稱來啟用叢集資源的公用存取權,這些平衡器和網域名稱必須選擇性地實作,才能將特定服務公開給更廣泛的網路。但是,我們不建議提供公共訪問權限。

  • 安全性焦點-重點放在將安全性組態抽象為預設規格,以便您可以專注於 EDC 連接器資料交換所涉及的步驟。雖然會維護預設安全性設定,但必須先啟用安全通訊,然後再將叢集公開給公用網路。此預防措施可確保安全資料處理的穩健基礎。

  • 基礎設施成本-基礎設施成本的估計可以使用 AWS Pricing Calculator. 一個簡單的計算表明,部署的基礎設施每月成本可以高達 162.92 美元。

架構

MVDS 架構由兩個虛擬私有雲 (VPC) 組成,一個用於動態屬性佈建系統 (DAPS) 身分識別服務,另一個用於 Amazon EKS。

DAP 架構

下圖顯示在由 Auto Scaling 群組控制的 EC2 執行個體上執行的 DAPS。應用程式負載平衡器和路由資料表會公開 DAPS 伺服器。Amazon Elastic File System (Amazon EFS) 可在 DAPS 執行個體之間同步資料。

Amazon EKS 架構

數據空間被設計為與技術無關的解決方案,並且存在多個實現。此模式使用 Amazon EKS 叢集部署資料空間技術元件。下圖顯示 EKS 叢集的部署。工作者節點安裝在私有子網路中。Kubernetes 網繭可存取適用於 PostgreSQL 執行個體的 Amazon Relational Database Service 服務 (Amazon RDS),該執行個體也位於私有子網路中。Kubernetes 網繭會在 Amazon S3 中存放共用資料。

工具

AWS 服務

其他工具

  • eksctl 是一個命令列公用程式,用於在 Amazon EKS 上建立和管理 Kubernetes 叢集。

  • Git 是一個開源的,分佈式版本控制系統。

  • HashiCorp 保管箱提供安全的儲存空間,並可控制憑證和其他敏感資訊的存取

  • Helm 是 Kubernetes 的開放原始碼套件管理員,可協助您在 Kubernetes 叢集上安裝和管理應用程式。

  • kubectl 是一種命令列介面,可協助您針對 Kubernetes 叢集執行命令。

  • 郵遞員是一個 API 平台。

代碼存儲庫

此模式的 Kubernetes 設定 YAML 檔案和 Python 指令碼可在儲存庫中取得。 GitHub aws-patterns-edc該模式還使用 Tractus-X 嵌入式設計中心存儲庫。

最佳實務

Amazon EKS 和參與者基礎設施的隔離

Kubernetes 中的命名空間將在此模式中將公司 X 提供者的基礎結構與公司 Y 消費者的基礎結構分開。如需詳細資訊,請參閱 EKS 最佳做法指南

在更現實的情況下,每個參與者都會有一個獨立的 Kubernetes 叢集在自己的範圍內執行。 AWS 帳戶數據空間參與者可以訪問共享基礎設施(DAPS 在這種模式中),同時與參與者的基礎設施完全分開。

史诗

任務描述所需技能

複製儲存庫。

若要將儲存庫複製到工作站,請執行下列命令:

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

工作站必須能夠存取您的 AWS 帳戶.

DevOps 工程師

佈建 Kubernetes 叢集並設定命名空間。

若要在您的帳戶中部署簡化的預設 EKS 叢集,請在複製存放庫的工作站上執行下列eksctl命令:

eksctl create cluster

此命令會建立跨越三個不同可用區域的 VPC 以及私有和公用子網路。建立網路層之後,命令會在一個 Auto Scaling 群組中建立兩個 m5.large EC2 執行個體。

如需詳細資訊和範例輸出,請參閱 eksctl 指南。

佈建私人叢集之後,請執行下列命令,將新的 EKS 叢集新增至您的本機 Kubernetes 組態:

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

此模式使用eu-west-1 AWS 區域 來執行所有命令。但是,您可以在首選中運行相同的命令 AWS 區域。

若要確認您的 EKS 節點正在執行且處於就緒狀態,請執行下列命令:

kubectl get nodes
DevOps 工程師

設定命名空間。

若要為提供者和取用者建立命名空間,請執行下列命令:

kubectl create ns provider kubectl create ns consumer

在這種模式中,使用providerconsumer作為命名空間以適應後續步驟中的配置非常重要。

DevOps 工程師
任務描述所需技能

使 AWS CloudFormation用部署 DAPS。

為了便於管理 DAPS 操作,DAPS 伺服器安裝在 EC2 執行個體上。

若要安裝 DAPS,請使用AWS CloudFormation 範本。您將需要 [必要條件] 區段中的 ACM 憑證和 DNS 名稱。範本會部署並設定下列項目:

  • Application Load Balancer

  • Auto Scaling 群組

  • 設定使用者資料的 EC2 執行個體,以安裝所有必要套件

  • IAM 角色

  • DAP

您可以登入並使用AWS CloudFormation 主控台 AWS Management Console來部署 AWS CloudFormation 範本。您也可以使用如下 AWS CLI 命令來部署範本:

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

環境名稱是您自己的選擇。我們建議您使用有意義的術語DapsInfrastructure,例如,因為它會反映在 AWS 資源標籤中。

對於此模式,t3.small足以執行具有三個 Docker 容器的 DAPS 工作流程。

範本會在私有子網路中部署 EC2 執行個體。這表示執行個體無法透過網際網路透過 SSH (安全殼層) 直接存取。這些執行個體會佈建必要的 IAM 角色和 AWS Systems Manager 代理程式,以透過工作階段管理員存取執行中的執行個體,此功能具有的功能 AWS Systems Manager。

我們建議使用工作階段管理員來存取。或者,您可以佈建防禦主機,以允許從網際網路存取 SSH。使用防禦主機方法時,EC2 執行個體可能需要幾分鐘的時間才能開始執行。

成功部署 AWS CloudFormation 範本後,請將 DNS 名稱指向您的 Application Load Balancer DNS 名稱。若要確認,請執行下列命令:

dig <DNS NAME>

輸出格式應類似以下內容:

; <<>> 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 工程師

將參與者的連接器註冊到 DAPS 服務。

在為 DAPS 佈建的任何 EC2 執行個體中,註冊參與者:

  1. 使用 root 使用者在 EC2 執行個體上執行可用的指令碼:

    cd /srv/mvds/omejdn-daps
  2. 註冊提供者:

    bash scripts/register_connector.sh <provider_name>
  3. 註冊消費者:

    bash scripts/register_connector.sh <consumer_name>

名稱的選擇不會影響後續步驟。我們建議使用 provider and consumercompanyxcompanyy

註冊命令還將自動配置 DAPS 服務,並使用從創建的證書和密鑰中獲取所需的信息。

當您登入 DAPS 伺服器時,請收集安裝後續步驟所需的資訊:

  1. omejdn-daps/config/clients.yml獲取提client id供者和消費者。這些client id值是十六進制數字的長字符串。

  2. 從目omejdn-daps/keys錄中複製、consumer.certconsumer.keyprovider.cert、和provider.key檔案的內容。

我們建議您將文字複製並貼到工作站daps-上以前綴的類似名稱檔案中。

您應該擁有提供者和消費者的用戶端 ID,而且工作站上的工作目錄中應該有四個檔案:

  • 來源檔案名稱consumer.cert會變成工作站檔案名稱daps-consumer.cert

  • 來源檔案名稱consumer.key會變成工作站檔案名稱daps-consumer.key

  • 來源檔案名稱provider.cert會變成工作站檔案名稱daps-provider.cert

  • 來源檔案名稱provider.key會變成工作站檔案名稱daps-provider.key

DevOps 工程師
任務描述所需技能

複製 Tractus-X 嵌入式設計中心儲存庫並使用 0.4.1 版本。

Tractus-X 嵌入式設計中心連接器的組建需要 PostgreSQL (資產資料庫) 和文件 HashiCorp 庫 (密碼管理) 服務才能部署並可供使用。

有許多不同版本的 Tractus-X EDC 頭盔圖表。此病毒碼會指定 0.4.1 版,因為它使用 DAPS 伺服器。

最新版本使用託管身份錢包(MIW)與身份服務的分佈式實現。

在您建立兩個 Kubernetes 命名空間的工作站上,複製 tractusx-edc 儲存庫,然後簽出分支。release/0.4.1

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

設定 Tractus-X 嵌入式設計中心頭盔圖表。

修改 Tractus-X Helm 圖表範本組態,使兩個連接器能夠一起互動。

若要這麼做,您可以將命名空間新增至服務的 DNS 名稱,以便叢集中的其他服務可以解析該名稱空間。應對charts/tractusx-connector/templates/_helpers.tpl檔案進行這些修改。此病毒碼提供此檔案的最終修改版本供您使用。複製它並將其放在文件的daps部分中charts/tractusx-connector/templates/_helpers.tpl

確保在charts/tractusx-connector/Chart.yaml以下位置註釋所有 DAPS 依賴關係:

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

設定連接器以在 Amazon RDS 上使用 PostgreSQL。

(選用) 此模式不需要 Amazon 關聯式資料庫服務 (Amazon RDS) 執行個體。不過,我們強烈建議您使用 Amazon RDS 或 Amazon Aurora,因為它們提供高可用性以及備份和復原等功能。

若要以 Amazon RDS 取代庫伯尼特斯上的 PostgreSQL,請執行下列動作:

  1. 佈建適用於 PostgreSQL 執行個體的亞馬遜 RDS

  2. 在中Chart.yaml,為PostgreSQL區段加上註解。

  3. provider_values.yml和中consumer_values.yml,如下所示設定postgresql區段:

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 工程師

設定和部署提供者連接器及其服務。

若要設定提供者連接器及其服務,請執行下列動作:

  1. 若要將provider_edc.yaml檔案從edc_helm_configs目錄下載到目前的 Helm 圖表資料夾,請執行下列命令:

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

  2. 將下列變數 (也標記在檔案中) 取代為其值:

    • CLIENT_ID‒ DAPS 所產生的識別碼。CLIENT_ID應該位/srv/mvds/omejdn-daps/config/clients.yml/config/clients.yml於 DAPS 伺服器上。它應該由十六進制字符組成的字符串。

    • DAPS_URL‒ DAPS 伺服器的網址。它應該https://{DNS name}使用您在運行 AWS CloudFormation 模板時設置的 DNS 名稱。

    • VAULT_TOKEN‒ 用於保管庫授權的令牌。選擇任何值。

    • vault.fullnameOverridevault-provider.

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

    先前的值假設部署名稱和命名空間名稱是 Provider。

  3. 若要從工作站執行 Helm 圖表,請使用下列指令:

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

將憑證和金鑰新增至提供者儲存庫。

為避免混淆,請在tractusx-edc/charts目錄之外產生下列憑證。

例如,執行下列命令以變更為您的主目錄:

cd ~

現在,您需要將提供者所需的密碼新增至 Vault。

Vault 中密碼的名稱是provider_edc.yml檔案secretNames:區段中金鑰的值。依預設,它們的設定方式如下:

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

一開始會產生進階加密標準 (AES) 金鑰、私密金鑰、公開金鑰和自我簽署憑證。這些隨後會作為密碼新增至 Vault。

此外,此目錄應包含您從 DAPS 伺服器複製的daps-provider.certdaps-provider.key檔案。

  1. 執行下列命令:

    # 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. 在將密碼加入 Vault 之前,請透過以下方式取代換行符號,將密碼從多行轉換為單行\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. 若要格式化將加入至 Vault 的密碼,請執行下列命令:

    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

    密碼現在為 JSON 格式,可以新增至保存庫。

  4. 若要取得儲存庫的網繭名稱,請執行下列命令:

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

    網繭名稱將類似於"vault-provider-0"。建立轉寄至資料保險箱的連接埠時會使用此名稱。端口轉發使您可以訪問文件庫以添加密碼。您應該從已設定 AWS 登入資料的工作站執行此指令。

  5. 若要存取資料保險箱,請使用kubectl來規劃連接埠轉發:

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

您現在應該可以透過瀏覽器或 CLI 存取保管庫。

瀏覽器

  1. 使用瀏覽器瀏覽至 http://127.0.0.1:8200,這將使用您設定的連接埠轉送。

  2. 使用您先前設定的權杖登入provider_edc.yml。在秘密引擎中,建立三個密碼。每個密碼都會有一個Path for this secret值,這是下列清單中顯示的秘密名稱。在該secret data部分中,密鑰的名稱將是content,該值將是命名的相應文件中的單行文本.line

  3. 密碼名稱來自provider_edc.yml檔案中的secretNames區段。

  4. 建立下列密碼:

    • transfer-proxy-token-signer-private-key使用檔案名稱的密碼 provider-private-key.pem.line

    • transfer-proxy-token-signer-public-key使用檔案名稱的密碼 provider-cert.pem.line

    • transfer-proxy-token-encryption-aes-key使用檔案名稱的密碼 provider-aes.key.line

    • daps-private-key使用檔案名稱的密碼 daps-provider.key.line

    • daps-public-key使用檔案名稱的密碼 daps-provider.cert.line

文件庫 CLI

CLI 也會使用您設定的連接埠轉送。

  1. 在您的工作站上,依照 Vault 文件中的指示安裝 HashiCorp Vault CLI。

  2. 若要使用您設定的權杖登入 Vaultprovider_edc.yml,請執行下列命令:

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

    使用正確的令牌,您應該會看到該消息 "Success! You are now authenticated."

  3. 若要使用先前建立的 JSON 格式檔案來建立密碼,請執行下列程式碼:

    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 工程師

設定和部署用戶連接器及其服務。

設定和部署用戶的步驟與您為提供者完成的步驟類似:

  1. consumer_edc.yamlaws-patterns-edcrepo 複製到 tractusx-edc/charts/tractusx-connecto r 文件夾中,請運行以下命令:

    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. 使用其實際值更新下列變數:

    • CONSUMER_CLIENT_ID‒ DAPS 所產生的識別碼。CONSUMER_CLIENT_ID應該位config/clients.yml於 DAPS 伺服器上。

    • DAPS_URL‒ 與您用於提供者的 DAPS 網址相同。

    • VAULT_TOKEN‒ 用於保管庫授權的令牌。選擇任何值。

    • vault.fullnameOverridevault-consumer

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

    先前的值假設部署名稱和命名空間名稱為consumer

  3. 要運行頭盔圖,請使用以下命令:

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

將憑證和金鑰新增至取用者保存庫。

從安全的角度來看,我們建議為每個資料空間參與者重新產生憑證和金鑰。此病毒碼會重新產生取用者的憑證和金鑰。

這些步驟與提供者的步驟非常相似。您可以驗證consumer_edc.yml檔案中的密碼名稱。

儲存庫內的密碼名稱是的一secretNames:節中的金鑰值consumer_edc.yml file。依預設,它們的設定方式如下:

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

您從 DAPS 伺服器複製的daps-consumer.certdaps-consumer.key檔案應該已存在於此目錄中。

  1. 執行下列命令:

    # 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. 手動編輯要取代換行符號的檔案\n,或使用類似下列的三個指令:

    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. 若要格式化將加入至 Vault 的密碼,請執行下列命令:

    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

    密碼現在為 JSON 格式,可以新增至保存庫。

  4. 若要取得用戶儲存庫的網繭名稱,請執行下列命令:

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

    網繭名稱將類似於"vault-consumer-0"。建立轉寄至資料保險箱的連接埠時會使用此名稱。端口轉發使您可以訪問文件庫以添加密碼。您應該從已設定 AWS 認證的工作站執行此指令。

  5. 若要存取資料保險箱,請使用kubectl來規劃連接埠轉發:

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

這次本地端口是 8201,因此您可以為生產者和消費者提供端口轉發。

瀏覽器

您可以使用瀏覽器連接到 http://localhost:8201/ 訪問消費者保管庫,並按照概述使用名稱和內容創建密碼。

包含內容的密碼和檔案如下:

  • transfer-proxy-token-signer-private-key使用檔案名稱的密碼 consumer-private-key.pem.line

  • transfer-proxy-token-signer-public-key使用檔案名稱的密碼 consumer-cert.pem.line

  • transfer-proxy-token-encryption-aes-key使用檔案名稱的密碼 consumer-aes.key.line

文件庫 CLI

使用 Vault CLI,您可以執行下列命令來登入儲存庫並建立密碼:

  1. 使用您在以下內容中設定的權杖登入資料保管庫consumer_edc.yml

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

    使用正確的令牌,您應該會看到該消息 "Success! You are now authenticated."

  2. 若要使用先前建立的 JSON 格式檔案建立密碼,請執行下列程式碼:

    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 工程師
任務描述所需技能

設定連接埠轉送。

  1. 若要檢查網繭的狀態,請執行下列命令:

    kubectl get pods -n provider kubectl get pods -n consumer
  2. 若要確定 Kubernetes 部署成功,請執行下列命令來查看提供者和取用者 Kubernetes 網繭的記錄檔:

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

叢集是私有的,不可公開存取。若要與連接器互動,請使用 Kubernetes 連接埠轉送功能將機器產生的流量轉送至連接器控制平面。

  1. 在第一個終端機上,透過連接埠 8300 將消費者的要求轉寄至管理 API:

    kubectl port-forward deployment/consumer-tractusx-connector-controlplane 8300:8081 -n consumer
  2. 在第二個終端機上,透過連接埠 8400 將提供者的要求轉寄至管理 API:

    kubectl port-forward deployment/provider-tractusx-connector-controlplane 8400:8081 -n provider
DevOps 工程師

為提供者和消費者建立 S3 儲存貯體。

EDC 連接器目前不使用臨時 AWS 登入資料,例如假定角色所提供的登入資料。嵌入式設計中心僅支援使用 IAM 存取金鑰 ID 和秘密存取金鑰組合

稍後的步驟需要兩個 S3 儲存貯體。一個 S3 儲存貯體用於存放供應商提供的資料。另一個 S3 儲存貯體用於取用者接收到的資料。

IAM 使用者應該只有在兩個具名值區中讀取和寫入物件的權限。

需要創建訪問密鑰 ID 和秘密訪問密鑰對並保持安全。解除委任此 MVDS 之後,應該刪除 IAM 使用者。

下列程式碼是使用者的 IAM 政策範例:

{ "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 工程師

設定郵差以與連接器互動。

您現在可以透過 EC2 執行個體與連接器互動。使用 Postman 做為 HTTP 用戶端,並為提供者和取用者連接器提供郵遞員集合。

合從aws-pattern-edc儲存庫匯入 Postman 執行個體。

此模式使用 Postman 集合變量為您的請求提供輸入。

應用程式開發人員、資料
任務描述所需技能

準備要共享的碳排放強度數據。

首先,您需要決定要共用的資料資產。X 公司的數據表示其車隊的碳排放足跡。重量是以公噸為單位的車輛總重(GVW),根據輪到井(WTW)測量結果,排放量單位為每噸公里二氧化碳的克數(克 CO2 e/t-km):

  • 車輛類型:廂型車; 重量:< 3.5; 排放:800

  • 車輛類型:城市卡車; 重量:3.57.5; 排放:315

  • 車輛類型:中型貨車; 重量:7.520; 廢氣排放:195

  • 車輛類型:重型貨車; 重量:> 20; 廢氣排放:115

範例資料位於aws-patterns-edc儲存庫中的carbon_emissions_data.json檔案中。

X 公司使用 Amazon S3 存放對象。

建立 S3 儲存貯體並將範例資料物件存放在該處。下列命令會建立具有預設安全性設定的 S3 儲存貯體。我們強烈建議您諮詢 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>

S3 儲存貯體名稱應該是全域唯一的。如需命名規則的詳細資訊,請參閱 AWS 文件

資料工程師、App 開發人員

使用 Postman 將資料資產註冊到提供者的連接器。

EDC 連接器資料資產會保留資料的名稱及其位置。在此情況下,EDC 連接器資料資產將指向 S3 儲存貯體中建立的物件:

  • 連接器:供應商

  • 請求:建立資產

  • 集合變數:更新ASSET_NAME。選擇代表資產的有意義名稱。

  • 要求主體:使用您為提供者建立的 S3 儲存貯體更新要求主體。

    "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>" }
  • 回應:成功的要求會傳回建立的時間和新建立資產的資產 ID。

    { "@id": "c89aa31c-ec4c-44ed-9e8c-1647f19d7583" }
  • 收集變數 ASSET_ID:ASSET_ID使用嵌入式設計中心連接器在建立之後自動產生的識別碼來更新郵遞員集合變數。

應用程式開發人員、資料

定義資產的使用政策。

嵌入式設計中心資產必須與明確的使用政策相關聯。首先,在提供者連接器中建立原則定義。

X 公司的政策是允許數據空間的參與者使用碳排放足跡數據。

  • 請求主體:

    • 連接器:供應商

    • 要求:建立原則

    • 收集Policy Name變數:以原則名稱更新變數。

  • 應:成功的要求會傳回建立的時間和新建立之原則的原則識別碼。在建立之後,POLICY_ID使用 EDC 連接器所產生的原則識別碼來更新收集變數。

應用程式開發人員、資料

定義資產的嵌入式設計中心合約方案及其使用政策。

若要允許其他參與者要求存取您的資料,請在指定使用條件和權限的合約中提供資料:

  • 連接器:供應商

  • 請求:建立合約定義

  • 收集Contract Name變數:使用合約提案或定義的名稱更新變數。

應用程式開發人員、資料
任務描述所需技能

索取 X 公司共用的資料目錄。

身為資料空間中的資料消費者,Y 公司首先需要探索其他參與者共用的資料。

在此基本設定中,您可以要求取用者連接器直接向提供者連接器要求可用資產目錄來執行此操作。

  • 連接器:消費者

  • 索取:索取目錄

  • 回應:來自提供者的所有可用資料資產及其附加的使用政策。身為資料使用者,請尋找您感興趣的合約,並相應地更新下列收集變數。

    • CONTRACT_OFFER_ID‒ 消費者希望談判的合同提供的 ID

    • ASSET_ID‒ 消費者想談判的資產 ID

    • PROVIDER_CLIENT_ID‒ 與之交涉的供應商連接器 ID

應用程式開發人員、資料

就 X 公司的碳排放強度數據展開合同談判。

現在您已經識別出要使用的資產,請啟動取用者與提供者連接器之間的合約協商程序。

  • 連接器:消費者

  • 請求:合同談判

  • 集合CONSUMER_CLIENT_ID變數:使用要交涉之取用者連接器的 ID 更新變數。

該過程可能需要一些時間才能到達「已驗證」狀態。

您可以使用Get Negotiation請求來檢查「合約協議」的狀態和對應的「合約 ID」。

應用程式開發人員、資料
任務描述所需技能

使用來自 HTTP 端點的資料。

(選項 1)要使用 HTTP 數據平面消耗數據空間中的數據,可以使用 webhook.site 模擬 HTTP 服務器,並在消費者連接器中啟動傳輸過程:

  • 連接器:消費者

  • 請求:合同談判

  • 收集Contract Agreement ID變數:使用 EDC 連接器所產生之合約的 ID 來更新變數。

  • 請求主體:更新請求主體以指定HTTPdataDestination與 webhook URL 旁邊的一個:

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

    連接器會將直接下載檔案所需的資訊傳送至 Webhook URL。

    接收到的裝載類似於以下內容:

    { "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" } }

    使用接收到的登入資料取得供應商共用的 S3 資產。

在最後一個步驟中,您必須將請求發送到消費者數據平面(正確轉發端口),如有效負載(endpoint)中所述。

應用程式開發人員、資料

直接使用 S3 儲存貯體中的資料。

(選項 2) 使用 Amazon S3 與 EDC 連接器整合,並直接指向消費者基礎設施中的 S3 儲存貯體做為目的地:

  • 要求主體:更新要求主體,將 S3 儲存貯體指定為資料目標。

    這應該是您先前為存放取用者接收到的資料而建立的 S3 儲存貯體。

    { "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 }}" } } }
資料工程師、App 開發人員

故障診斷

問題解決方案

連接器可能會引發有關憑證 PEM 格式的問題。

通過添加將\n每個文件的內容連接到單行。

相關資源

其他資訊

資料空間規格

參加者

參與者

公司描述

公司焦點

公司 X

經營整個歐洲和南美洲的車隊運輸各種貨物。

旨在做出數據驅動的決策,以減少碳排放強度。

Y 公司名稱

環境監管機構

執行環境法規和政策,以監察和減輕企業和行業的環境影響,包括碳排放強度。

商業案例

X 公司使用數據空間技術與合規審核員 Y 公司共享碳足跡數據,以評估和解決 X 公司物流運營對環境的影響。

数据空间权威

數據空間權威是管理數據空間的組織的聯盟。在此模式中,X 公司和 Y 公司都會組成治理主體,並代表聯合資料空間授權單位。

資料空間元件

元件

選擇的實作

其他資訊

資料集交換協定

資料空間通訊協定 0.8 版

資料空間連接器

拖曳-X 嵌入式設計中心連接器 0.4.1 版

資料交換政策

預設使用原則

資料空間服務

服務

實施

其他資訊

身份服務

動態屬性佈建系統 (DAPS)

「動態屬性佈建系統 (DAPS) 旨在確定組織和連接器的某些屬性。因此,只要他們信任 DAPS 斷言,第三方就不需要信任後者。」 — DAP

為了專注於連接器的邏輯,資料空間會使用 Docker 撰寫在 Amazon EC2 機器上部署。

探索服務

蓋亞-X 聯邦產品目錄

「聯合目錄構成了 Gaia-X 自我描述的索引存儲庫,以便發現和選擇提供者及其服務產品。自我描述是參與者以屬性和索賠形式提供的有關自己和他們的服務的信息。」 — 蓋亞-X 生態系統啟動器

要交換的數據

資料資產

Description

Format (格式)

碳排放數據

指定地區(歐洲和南美洲)不同車輛類型的強度值來自整個車隊

JSON 檔案

資料模型

{ "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" } } ] }

氣管-X EDC 連接器

如需每個 Tractus-X 嵌入式設計中心參數的說明文件,請參閱原始值檔案。

下表列出所有服務,以及其對應的暴露連接埠和端點,以供參考。

服務名稱

連接埠和路徑

控制平台

管理:-港口:8081 路徑:/management

控制-港口:8083 路徑:/control

通訊協定連接埠:8084 路徑:/api/v1/dsp

指標-港口:9090 路徑:/metrics

可觀察性-港口:8085 路徑:/observability

資料平面

預設-連接埠:8080 路徑:/api

公共-港口:8081 路徑:/api/dataplane/control

代理伺服器-連接埠:8186 路徑:/proxy

度量-港口:9090 路徑:/metrics

可觀測性-港口:8085 路徑:/observability

保存庫

連接埠:

PostgreSQL

連接埠:

使用 AWS Secrets Manager 管理員

可以使用 Secrets Manager 而不是 HashiCorp 保管庫作為秘密管理器。若要這麼做,您必須使用或建置 AWS Secrets Manager EDC 延伸模組。

您將負責創建和維護自己的圖像,因為 Tractus-X 不為 Secrets Manager 提供支持。

為此,您需要通過引入 AWS Secrets Manager EDC 擴展來修改控制平面和連接器數據平面的構建 Gradle 文件(請參閱此 Maven 工件的示例),然後構建,維護和引用 Docker 映像。

如需有關重構 Tractus-X 連接器泊塢視窗影像的詳細資訊,請參閱重構 Tractus-X 嵌入式設計中心頭盔圖表。

為了簡單起見,我們避免以此樣式重建連接器影像並使用 HashiCorp Vault。