設定 IDT 設定以執行 AWS IoT Greengrass 資格套件 - AWS IoT Greengrass

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

設定 IDT 設定以執行 AWS IoT Greengrass 資格套件

在執行測試之前,您必須設定主機電腦上的 AWS 認證和裝置的設定。

在設定. AWS json 中設定認證

您必須在檔案中設定 IAM 使用者登入<device_tester_extract_location>/configs/config.json資料。使用中建立之 AWS IoT Greengrass V2 使用者之 IDT 的證明資料。建立和設定 AWS 帳戶您可以使用下列兩種方式的其中之一指定登入資料:

  • 在認證檔案中

  • 作為環境變量

IDT 會使用與 AWS CLI相同的登入資料檔案。如需詳細資訊,請參閱組態與登入資料檔案

登入資料檔案的位置會有所不同,取決於您使用的作業系統:

  • macOS, Linux: ~/.aws/credentials

  • Windows:C:\Users\UserName\.aws\credentials

以下列格式將您的 AWS 認證新增至credentials檔案:

[default] aws_access_key_id = <your_access_key_id> aws_secret_access_key = <your_secret_access_key>

若要設定 AWS IoT Greengrass V2 的 IDT 使用credentials檔案中的 AWS 認證,請依照下列步驟編輯config.json檔案:

{ "awsRegion": "region", "auth": { "method": "file", "credentials": { "profile": "default" } } }
注意

如果您不使用default AWS 設定檔,請務必變更檔案中的設定config.json檔名稱。如需詳細資訊,請參閱具名描述檔

環境變數是由作業系統維護且由系統命令使用的變數。如果您關閉 SSH 工作階段,則不會儲存它們。IDT for AWS IoT Greengrass V2 可以使用AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY環境變數來儲存您的 AWS 認證。

若要在 Linux、macOS 或 Unix 上設定這些變數,請使用 export

export AWS_ACCESS_KEY_ID=<your_access_key_id> export AWS_SECRET_ACCESS_KEY=<your_secret_access_key>

若要在 Windows 上設定這些變數,請使用 set

set AWS_ACCESS_KEY_ID=<your_access_key_id> set AWS_SECRET_ACCESS_KEY=<your_secret_access_key>

若要設定 IDT 來使用環境變數,請在 config.json 檔案中編輯 auth 區段。請見此處範例:

{ "awsRegion": "region", "auth": { "method": "environment" } }

設定 device.json

注意

IDT v4.9.3 支援測試mldocker、和功能。streamManagementIDT v4.9.4 及更高版本支援測試。docker如果您不想測試這些功能,請將對應的值設定為no

除了 AWS 認證之外, AWS IoT Greengrass V2 的 IDT 還需要有關在其上運行測試的設備的信息。範例資訊包括 IP 位址、登入資訊、作業系統和 CPU 架構。

您必須使用位於 <device_tester_extract_location>/configs/device.json 中的 device.json 範本提供此資訊:

IDT v4.9.3
[ { "id": "<pool-id>", "sku": "<sku>", "features": [ { "name": "arch", "value": "x86_64 | armv6l | armv7l | aarch64" }, { "name": "ml", "value": "dlr | tensorflowlite | dlr,tensorflowlite | no" }, { "name": "docker", "value": "yes | no" }, { "name": "streamManagement", "value": "yes | no" }, { "name": "hsi", "value": "hsm | no" } ], "devices": [ { "id": "<device-id>", "operatingSystem": "Linux | Windows", "connectivity": { "protocol": "ssh", "ip": "<ip-address>", "port": 22, "publicKeyPath": "<public-key-path>", "auth": { "method": "pki | password", "credentials": { "user": "<user-name>", "privKeyPath": "/path/to/private/key", "password": "<password>" } } } } ] } ]
注意

如果 method 是設定為 pki,則指定 privKeyPath

如果 method 是設定為 password,則指定 password

所有包含值的屬性都是必要的,如下所述:

id

使用者定義的英數字元 ID,可唯一識別裝置的集合,稱為「裝置集區」。屬於同一個集區的裝置必須有相同的硬體。當您執行測試套件,集區中的裝置會用來將工作負載平行化。多個裝置用來執行不同的測試。

sku

可唯一識別測試裝置的英數字元值。SKU 用來追蹤合格的主機板。

注意

如果您要在裝置目錄中刊登您的 AWS Partner 裝置,您在此指定的 SKU 必須與您在刊登程序中使用的 SKU 相符。

features

包含裝置支援功能的陣列。所有功能都是必需的。

arch

測試運行驗證的支持操作系統架構。有效的 值如下:

  • x86_64

  • armv6l

  • armv7l

  • aarch64

ml

驗證裝置是否符合使用 AWS提供的機器學習 (ML) 元件所需的所有技術相依性。

啟用此功能也會驗證裝置是否可以使用深度學習執行階段TensorFlow Lite ML 架構執行 ML 推論。

有效值是dlrtensorflowlite、或的任意組合no

docker

驗證裝置是否符合使用 AWS提供的 Docker 應用程式管理員 () aws.greengrass.DockerApplicationManager 元件所需的所有技術相依性。

啟用此功能也會驗證裝置是否可以從 Amazon ECR 下載 Docker 容器映像

有效值是yes或的任意組合no

streamManagement

驗證裝置是否可以下載、安裝和執行AWS IoT Greengrass 串流管理員

有效值是yes或的任意組合no

hsi

驗證裝置可以使用儲存在硬體安全性模組 (HSM) 中的私密金鑰和憑證來驗證與和 AWS IoT Greengrass 服務的連線。 AWS IoT 此測試也會驗證提供的 PKCS #11 AWS提供者元件是否可以使用廠商提供的 PKCS #11 程式庫與 HSM 連接。如需詳細資訊,請參閱 硬體安全整合

有效值為 hsmno

注意

測試僅hsi適用於 IDT v4.9.3 及更高版本。

devices.id

使用者定義的唯一識別符,用於識別要測試的裝置。

devices.operatingSystem

裝置作業系統。支援的值為 LinuxWindows

connectivity.protocol

用來與此裝置通訊的通訊協定。目前,唯一支援的值ssh適用於實體裝置。

connectivity.ip

要測試之裝置的 IP 位址。

只有當 connectivity.protocol 設為 ssh 時,才會套用此屬性。

connectivity.port

選用。用於 SSH 連線的連接埠號碼。

預設值為 22。

只有當 connectivity.protocol 設為 ssh 時,才會套用此屬性。

connectivity.publicKeyPath

選用。用於驗證與被測設備的連接的公鑰的完整路徑。

當您指定時publicKeyPath,IDT 會在設備與被測設備建立 SSH 連接時驗證設備的公鑰。如果未指定此值,IDT 會建立 SSH 連線,但不會驗證裝置的公開金鑰。

強烈建議您指定公開金鑰的路徑,並使用安全方法來擷取此公開金鑰。對於基於命令行的標準 SSH 客戶端,公鑰在known_hosts文件中提供。如果您指定個別的公開金鑰檔案,則此檔案必須使用與known_hosts檔案相同的格式,也就是 ip-address key-type public-key。如果有多個項目具有相同 IP 位址,IDT 使用的金鑰類型項目必須在檔案中的其他項目之前。

connectivity.auth

連線的驗證資訊。

只有當 connectivity.protocol 設為 ssh 時,才會套用此屬性。

connectivity.auth.method

用來透過指定的連線通訊協定存取裝置的驗證方法。

支援的值如下:

  • pki

  • password

connectivity.auth.credentials

用於驗證的燈入資料。

connectivity.auth.credentials.password

用於登入要測試裝置的密碼。

只有當 connectivity.auth.method 設為 password 時,才會套用此值。

connectivity.auth.credentials.privKeyPath

用來登入待測裝置之私有金鑰的完整路徑。

只有當 connectivity.auth.method 設為 pki 時,才會套用此值。

connectivity.auth.credentials.user

登入要測試之裝置的使用者名稱。

IDT v4.9.4
[ { "id": "<pool-id>", "sku": "<sku>", "features": [ { "name": "arch", "value": "x86_64 | armv6l | armv7l | aarch64" }, { "name": "docker", "value": "yes | no" }, { "name": "hsi", "value": "hsm | no" } ], "devices": [ { "id": "<device-id>", "operatingSystem": "Linux | Windows", "connectivity": { "protocol": "ssh", "ip": "<ip-address>", "port": 22, "publicKeyPath": "<public-key-path>", "auth": { "method": "pki | password", "credentials": { "user": "<user-name>", "privKeyPath": "/path/to/private/key", "password": "<password>" } } } } ] } ]
注意

如果 method 是設定為 pki,則指定 privKeyPath

如果 method 是設定為 password,則指定 password

所有包含值的屬性都是必要的,如下所述:

id

使用者定義的英數字元 ID,可唯一識別裝置的集合,稱為「裝置集區」。屬於同一個集區的裝置必須有相同的硬體。當您執行測試套件,集區中的裝置會用來將工作負載平行化。多個裝置用來執行不同的測試。

sku

可唯一識別測試裝置的英數字元值。SKU 用來追蹤合格的主機板。

注意

如果您要在裝置目錄中刊登您的 AWS Partner 裝置,您在此指定的 SKU 必須與您在刊登程序中使用的 SKU 相符。

features

包含裝置支援功能的陣列。所有功能都是必需的。

arch

測試運行驗證的支持操作系統架構。有效的 值如下:

  • x86_64

  • armv6l

  • armv7l

  • aarch64

docker

驗證裝置是否符合使用 AWS提供的 Docker 應用程式管理員 () aws.greengrass.DockerApplicationManager 元件所需的所有技術相依性。

啟用此功能也會驗證裝置是否可以從 Amazon ECR 下載 Docker 容器映像

有效值是yes或的任意組合no

hsi

驗證裝置可以使用儲存在硬體安全性模組 (HSM) 中的私密金鑰和憑證來驗證與和 AWS IoT Greengrass 服務的連線。 AWS IoT 此測試也會驗證提供的 PKCS #11 AWS提供者元件是否可以使用廠商提供的 PKCS #11 程式庫與 HSM 連接。如需詳細資訊,請參閱 硬體安全整合

有效值為 hsmno

注意

測試僅hsi適用於 IDT v4.9.3 及更高版本。

devices.id

使用者定義的唯一識別符,用於識別要測試的裝置。

devices.operatingSystem

裝置作業系統。支援的值為 LinuxWindows

connectivity.protocol

用來與此裝置通訊的通訊協定。目前,唯一支援的值ssh適用於實體裝置。

connectivity.ip

要測試之裝置的 IP 位址。

只有當 connectivity.protocol 設為 ssh 時,才會套用此屬性。

connectivity.port

選用。用於 SSH 連線的連接埠號碼。

預設值為 22。

只有當 connectivity.protocol 設為 ssh 時,才會套用此屬性。

connectivity.publicKeyPath

選用。用於驗證與被測設備的連接的公鑰的完整路徑。

當您指定時publicKeyPath,IDT 會在設備與被測設備建立 SSH 連接時驗證設備的公鑰。如果未指定此值,IDT 會建立 SSH 連線,但不會驗證裝置的公開金鑰。

強烈建議您指定公開金鑰的路徑,並使用安全方法來擷取此公開金鑰。對於基於命令行的標準 SSH 客戶端,公鑰在known_hosts文件中提供。如果您指定個別的公開金鑰檔案,則此檔案必須使用與known_hosts檔案相同的格式,也就是 ip-address key-type public-key。如果有多個項目具有相同 IP 位址,IDT 使用的金鑰類型項目必須在檔案中的其他項目之前。

connectivity.auth

連線的驗證資訊。

只有當 connectivity.protocol 設為 ssh 時,才會套用此屬性。

connectivity.auth.method

用來透過指定的連線通訊協定存取裝置的驗證方法。

支援的值如下:

  • pki

  • password

connectivity.auth.credentials

用於驗證的燈入資料。

connectivity.auth.credentials.password

用於登入要測試裝置的密碼。

只有當 connectivity.auth.method 設為 password 時,才會套用此值。

connectivity.auth.credentials.privKeyPath

用來登入待測裝置之私有金鑰的完整路徑。

只有當 connectivity.auth.method 設為 pki 時,才會套用此值。

connectivity.auth.credentials.user

登入要測試之裝置的使用者名稱。

配置用戶數據

IDT for AWS IoT Greengrass V2 還需要有關測試成品和 AWS IoT Greengrass 軟件位置的其他信息。

您必須使用位於 <device_tester_extract_location>/configs/userdata.json 中的 userdata.json 範本提供此資訊:

{ "TempResourcesDirOnDevice": "/path/to/temp/folder", "InstallationDirRootOnDevice": "/path/to/installation/folder", "GreengrassNucleusZip": "/path/to/aws.greengrass.nucleus.zip", "PreInstalled": "yes/no", "GreengrassV2TokenExchangeRole": "custom-iam-role-name", "hsm": { "greengrassPkcsPluginJar": "/path/to/aws.greengrass.crypto.Pkcs11Provider-latest.jar", "pkcs11ProviderLibrary": "/path/to/pkcs11-vendor-library", "slotId": "slot-id", "slotLabel": "slot-label", "slotUserPin": "slot-pin", "keyLabel": "key-label", "preloadedCertificateArn": "certificate-arn" "rootCA": "path/to/root-ca" } }

包含值的所有屬性都是必需的,如下所述:

TempResourcesDirOnDevice

待測設備上存儲測試工件的臨時文件夾的完整路徑。請確定不需要 sudo 權限即可寫入此目錄。

注意

IDT 會在完成測試執行時刪除此資料夾的內容。

InstallationDirRootOnDevice

要安裝之裝置上資料夾的完整路徑 AWS IoT Greengrass。對於 PreInstalled Greengrass 來說,這是安裝目錄的路徑。

您必須為此資料夾設定必要的檔案權限。針對安裝路徑中的每個資料夾執行下列命令。

sudo chmod 755 folder-name
GreengrassNucleusZip

主機電腦上 Greengrass 核 ZIP (greengrass-nucleus-latest.zip) 檔案的完整路徑。使用 PreInstalled Greengrass 進行測試時不需要此欄位。

注意

如需 IDT 的 Greengrass 核受支援版本的資訊,請參閱。 AWS IoT Greengrass適用於 V2 的最新 IDT 版本 AWS IoT Greengrass若要下載最新的 Greengrass 軟體,請參閱下載軟體。 AWS IoT Greengrass

PreInstalled

此功能僅適用於 Linux 裝置上的 IDT v4.5.8 及更新版本。

(選擇性) 當值為 yes 時,IDT 會假設中提到的路徑InstallationDirRootOnDevice為安裝 Greengrass 的目錄。

如需有關如何在裝置上安裝 Greengrass 的詳細資訊,請參閱。使用自動資源佈建安裝AWS IoT Greengrass核心軟體如果使用手動佈建進行安裝,請在手動建立 AWS IoT 物件時包含「將物件新增至新的或現有的AWS IoT 物件群組」步驟。IDT 假設物件與物件群組是在安裝設定期間建立的。請確定這些值反映在effectiveConfig.yaml檔案中。IDT 會檢查effectiveConfig.yaml<InstallationDirRootOnDevice>/config/effectiveConfig.yaml的檔案。

若要使用 HSM 執行測試,請確定已在中effectiveConfig.yaml更新aws.greengrass.crypto.Pkcs11Provider欄位。

GreengrassV2TokenExchangeRole

(可選)要用作令牌交換角色的自定義 IAM 角色,該角色被測設備假定與 AWS 資源進行交互。

注意

IDT 使用此自定義 IAM 角色,而不是在測試運行期間創建默認令牌交換角色。如果您使用自訂角色,則可以更新測試使用者的 IAM 許可,以排除允許使用者建立和刪除 IAM 角色和政策的iamResourcesUpdate陳述式。

如需建立自訂 IAM 角色做為權杖交換角色的詳細資訊,請參閱設定自訂權杖交換角色

hsm

此功能適用於 IDT v4.5.1 及更新版本。

(選擇性) 使用 AWS IoT Greengrass 硬體安全性模組 (HSM) 進行測試的組態資訊。否則,應省略 hsm 屬性。如需詳細資訊,請參閱 硬體安全整合

只有當 connectivity.protocol 設為 ssh 時,才會套用此屬性。

警告

如果硬體安全模組在 IDT 與其他系統之間共用,則 HSM 組態可能會被視為敏感資料。在此情況下,您可以避免將這些組態值儲存在參數存放區 AWS SecureString 參數中,並將 IDT 設定為在測試執行期間擷取它們,以避免以純文字形式保護這些組態值。如需更多資訊,請參閱從 AWS 參數存放區擷取組態

hsm.greengrassPkcsPluginJar

您下載至 IDT 主機的 PKCS #11 提供者元件的完整路徑。 AWS IoT Greengrass 將此元件提供為 JAR 檔案,您可以下載該檔案,以便在安裝期間指定為佈建外掛程式。您可以透過下列網址下載最新版本的元件 JAR 檔案:https://d2s8p88vqu9w66.cloudfront.net/releases/Pkcs11Provider/aws.greengrass.crypto.Pkcs11Provider-latest.jar

hsm.pkcs11ProviderLibrary

PKCS #11 程式庫的完整路徑,由硬體安全性模組 (HSM) 廠商所提供,可與 HSM 互動。

hsm.slotId

用來識別您將金鑰和憑證載入的 HSM 插槽的插槽識別碼。

hsm.slotLabel

用於識別您將金鑰和憑證載入的 HSM 插槽的插槽標籤。

hsm.slotUserPin

IDT 用來向 HSM 驗證 AWS IoT Greengrass 核心軟體的使用者 PIN 碼。

注意

安全性最佳做法是,請勿在生產裝置上使用相同的使用者 PIN 碼。

hsm.keyLabel

用於識別硬體模組中之金鑰的標籤。金鑰和憑證都必須使用相同的金鑰標籤。

hsm.preloadedCertificateArn

AWS IoT 雲端中已上傳裝置憑證的 Amazon 資源名稱 (ARN)。

您必須先前使用 HSM 中的金鑰產生此憑證,並將其匯入您的 HSM,並將其上傳到雲端 AWS IoT 。如需產生及匯入憑證的相關資訊,請參閱 HSM 的說明文件。

您必須將憑證上傳到與 config.json 中提供的相同帳戶和區域。 。如需將憑證上傳至的詳細資訊 AWS IoT,請參閱AWS IoT 開發人員指南中的手動註冊用戶端憑證

hsm.rootCAPath

(選擇性) IDT 主機上到簽署憑證之根憑證授權單位 (CA) 的完整路徑。如果在您建立的 HSM 中的憑證未由 Amazon 根 CA 簽署,則需要這個動作。

從 AWS 參數存放區擷取組態

AWS IoT 裝置測試器 (IDT) 包含選用功能,可從「AWS Systems Manager 參數存放區」擷取組態值。 AWS 參數存放區允許安全且加密的組態儲存。設定完成後,IDT 可以從 AWS 參數存放區擷取參數,以取代以純文字形式將參數儲存在檔案內。userdata.json這對於應加密存儲的任何敏感數據非常有用,例如:密碼,PIN 和其他密碼。

  1. 若要使用此功能,您必須更新建立 IDT 使用者時所使用的權限,以允許針對已配置 IDT 使用的參數 GetParameter 執行動作。以下是可新增至 IDT 使用者的權限陳述式範例。如需詳細資訊,請參閱AWS Systems Manager 使用者指南

    { "Sid":"parameterStoreResources", "Effect": "Allow", "Action": [ "ssm:GetParameter" ], "Resource": "arn:aws:ssm:*:*:parameter/IDT*" }

    上述權限設定為允許使用萬用字*元擷取名稱開IDT頭為的所有參數。您應該根據需要對其進行自定義,以便 IDT 可以根據您正在使用的參數的命名獲取任何配置的參數。

  2. 您需要在 AWS 參數商店中存儲配置值。這可以從 AWS 控制台或從 AWS CLI 完成。 AWS 參數存放區可讓您選擇加密或未加密的儲存。若要儲存機密、密碼和 pin 碼等敏感值,您應該使用的是參數類型的加密選項 SecureString。若要使用 AWS CLI 上傳參數,您可以使用下列命令:

    aws ssm put-parameter --name IDT-example-name --value IDT-example-value --type SecureString

    您可以使用下列指令驗證是否已儲存參數。(選擇性) 使用--with-decryption旗標擷取已解密的SecureString 參數。

    aws ssm get-parameter --name IDT-example-name

    使用 AWS CLI 將在目前 CLI 使用者的 AWS 區域中上傳參數,IDT 會從中config.json設定的區域擷取參數。若要從 AWS CLI 檢查您的區域,請使用下列指令:

    aws configure get region
  3. 一旦您在 AWS 雲中有一個配置值,您可以更新 IDT 配置中的任何值以從 AWS 雲中獲取。若要這麼做,您可以在表單{{AWS.Parameter.parameter_name}}的 IDT 組態中使用預留位置,從參數存放區依該名稱擷取 AWS 參數。

    例如,假設您想要在 HSM 組態中使用步驟 2 中的IDT-example-name參數作為 HSM 金鑰標籤。要做到這一點,你可以更新你的userdata.json如下:

    "hsm": { "keyLabel": "{{AWS.Parameter.IDT-example-name}}", [...] }

    IDT 會在執行階段擷取IDT-example-value在步驟 2 中設定為的此參數值。此設定與設定類似,"keyLabel": "IDT-example-value"但是該值會以加密方式儲存在 AWS 雲端中。