本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
配置 IDT 设置以运行 AWS IoT Greengrass 资格认证套件
在运行测试之前,必须配置主机上的 AWS 凭证和设备的设置。
在 config.json 中配置 AWS 凭证
您必须在
文件中配置 IAM 用户凭证。使用在 创建和配置 AWS 账户 中创建的适用于 AWS IoT Greengrass V2 的 IDT 用户的凭证。您可以采用以下两种方法之一来指定凭证:<device_tester_extract_location>
/configs/config.json
-
在凭证文件中
-
作为环境变量
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 会话,则不会保存它们。适用于 AWS IoT Greengrass V2 的 IDT 可使用 AWS_ACCESS_KEY_ID
和 AWS_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 支持测试 ml
、docker
和 streamManagement
功能。IDT v4.9.4 及更高版本支持测试 docker
。如果您不希望测试这些功能,请将相应的值设置为 no
。
除了 AWS 凭证之外,适用于 AWS IoT Greengrass V2 的 IDT 还需要有关运行测试的设备的信息。示例信息包括 IP 地址、登录信息、操作系统和 CPU 架构。
您必须使用位于
中的
<device_tester_extract_location>
/configs/device.jsondevice.json
模板提供此信息:
配置 userdata.json
适用于 AWS IoT Greengrass V2 的 IDT 还需要有关测试构件和 AWS IoT Greengrass 软件位置的更多信息。
您必须使用位于
中的
<device_tester_extract_location>
/configs/userdata.jsonuserdata.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 的文件夹的完整路径。对于预安装的 Greengrass,此为 Greengrass 安装目录的路径。
您必须为该文件夹设置必要的文件权限。对安装路径中的每个文件夹运行以下命令。
sudo chmod 755
folder-name
GreengrassNucleusZip
-
主机上 Greengrass Nucleus ZIP (
greengrass-nucleus-latest.zip
) 文件的完整路径。使用预安装的 Greengrass 测试时不需要此字段。注意
有关适用于 AWS IoT Greengrass 的 IDT 支持的 Greengrass Nucleus 版本的信息,请参阅 适用于 AWS IoT Greengrass V2 的最新版本 IDT。要下载最新的 Greengrass 软件,请参阅下载 AWS IoT Greengrass 软件。
PreInstalled
-
此功能仅适用于 Linux 设备上的 IDT v4.5.8 及更高版本。
(可选)当值为
yes
时,IDT 将假定InstallationDirRootOnDevice
中提到的路径是安装 Greengrass 的目录。有关如何在设备上安装 Greengrass 的更多信息,请参阅 安装具有自动资源配置功能的 AWS IoT Greengrass Core 软件。如果使用手动预置进行安装,请在手动创建 AWS IoT 事物时包含“将 AWS IoT 事物添加到新的或现有的事物组”步骤。IDT 假设事物和事物组是在安装设置期间创建的。确保这些值反映在
effectiveConfig.yaml
文件中。IDT 检查<InstallationDirRootOnDevice>/config/effectiveConfig.yaml
下的文件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 Parameter Store SecureString 参数中并配置 IDT 以在测试执行期间获取这些值,从而避免以纯文本形式保护配置值。有关更多信息,请参阅 从 AWS Parameter Store 获取配置
hsm.greengrassPkcsPluginJar
-
您下载到 IDT 主机的 PKCS#11 提供程序组件的完整路径。AWS IoT Greengrass 将此组件作为 JAR 文件提供,您可以下载该文件以在安装过程中将其指定为预置插件。您可以通过以下 URL 下载该组件 JAR 文件的最新版本:https://d2s8p88vqu9w66.cloudfront.net/releases/Pkcs11Provider/aws.greengrass.crypto.Pkcs11Provider-latest.jar
。 hsm.pkcs11ProviderLibrary
-
硬件安全模块(HSM)供应商提供的 PKCS#11 库的完整路径,用于与 HSM 交互。
hsm.slotId
-
用于识别要加载密钥和证书的 HSM 槽的槽 ID。
hsm.slotLabel
-
用于识别要加载密钥和证书的 HSM 槽的槽标签。
hsm.slotUserPin
-
IDT 用来向 HSM 验证 AWS IoT Greengrass Core 软件身份的用户 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 Parameter Store 获取配置
AWS IoT Device Tester(IDT)包括一项可选功能,可以从 AWS Systems Manager Parameter Store 获取配置值。AWSParameter Store 允许安全加密地存储配置。配置后,IDT 可以从 AWS Parameter Store 获取参数,而不是将参数以纯文本形式存储在 userdata.json
文件中。这对于任何应加密存储的敏感数据都很有用,例如密码、PIN 和其他密钥。
-
要使用此功能,您必须更新创建 IDT 用户时使用的权限,以允许对 IDT 配置使用的参数执行 GetParameter 操作。以下是可以添加到 IDT 用户的权限语句示例。有关更多信息,请参阅《AWS Systems Manager 用户指南》。
{ "Sid":"parameterStoreResources", "Effect": "Allow", "Action": [ "ssm:GetParameter" ], "Resource": "arn:aws:ssm:*:*:parameter/IDT*" }
配置以上权限是为了允许使用通配符
*
获取名称以IDT
开头的所有参数。您应该根据自己的需要进行自定义,以便 IDT 可以根据您正在使用的参数的命名来获取任何已配置的参数。 -
您要将配置值存储在 AWS Paramater Store 中。这可以通过 AWS 控制台或 AWS CLI 完成。AWSParameter Store 允许您选择加密或未加密的存储。要存储密钥、密码和 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
-
在 AWS Cloud 中拥有配置值后,您可以更新 IDT 配置中的任何值以从 AWS Cloud 获取。为此,您可以在表单
{{AWS.Parameter.parameter_name}}
的 IDT 配置中使用占位符,以从 AWS Parameter Store 中按该名称获取该参数。例如,假设您要在 HSM 配置中使用步骤 2 中的
IDT-example-name
参数作为 HSM keyLabel。为此,可以按以下方式更新userdata.json
:"hsm": { "keyLabel": "{{AWS.Parameter.IDT-example-name}}", [...] }
IDT 将在运行时获取步骤 2 中设置为
IDT-example-value
的此参数的值。此配置与设置"keyLabel": "IDT-example-value"
类似,但相反,该值以加密方式存储在 AWS Cloud 中。