AWS IoT Greengrass:将密钥部署到核心
步骤 1:创建 Secrets Manager 密钥
在本步骤中,使用 AWS Secrets Manager 控制台创建密钥。
-
注意
有关该过程的更多信息,请参阅 AWS Secrets Manager 用户指南中的步骤 1:在 AWS Secrets Manager 中创建并存储密钥。
-
选择存储新密钥。
-
在 (选择密钥类型) 下,选择 (其他密钥类型)。
-
在 (指定要为此密钥存储的键值对) 下:
- 对于 Key (键),输入
test
。 - 对于 Value (值),输入
abcdefghi
。
请确保为加密密钥保持选中 DefaultEncryptionKey,然后选择 (下一步)。
- 对于 Key (键),输入
-
对于密钥名称,输入
greengrass-TwilioAuthToken
,然后选择下一步。 -
本教程不需要轮换,因此,请选择 (禁用自动轮换),然后选择 (下一步)。
-
在 (审核) 页上,审核您的设置,然后选择 (存储)。
接下来,在 Greengrass 组中创建一个引用该密钥的密钥资源。
步骤 2:将密钥资源添加到 Greengrass 组
在此步骤中,您将一个密钥资源 添加到 Greengrass 组。该资源是对上一步中创建的密钥的引用。
-
在 AWS IoT 控制台中,选择 Greengrass,然后选择 (组)。
-
选择要将密钥资源添加到的组。
-
在组配置页面上,选择 (资源),然后选择 (密钥)。此选项卡显示属于该组的密钥资源。您可以从此选项卡添加、编辑和删除密钥资源。
-
选择 (添加密钥资源)。
-
在 (向组中添加密钥资源) 页面上,选择 (选择),然后选择 greengrass-TestSecret。
-
在 (为密钥资源命名) 页面上,输入
MyTestSecret
,然后选择 (保存)。
步骤 3:创建 Lambda 函数部署程序包
-
从 AWS IoT Greengrass Core 开发工具包 下载 页面下载 适用于 Python 的 AWS IoT Greengrass Core 开发工具包。
-
解压缩下载的程序包以获取软件开发工具包。软件开发工具包是
greengrasssdk
文件夹。 -
将以下 Python 代码函数保存在名为
secret_test.py
的本地文件中。import greengrasssdk # Create SDK clients. secrets_client = greengrasssdk.client('secretsmanager') message_client = greengrasssdk.client('iot-data') message = '' # This handler is called when the function is invoked. # It uses the 'secretsmanager' client to get the value of the test secret using the secret name. # The test secret is a text type, so the SDK returns a string. # For binary secret values, the SDK returns a base64-encoded string. def function_handler(event, context): response = secrets_client.get_secret_value(SecretId='greengrass-TestSecret') secret_value = response.get('SecretString') if secret_value is None: message = 'Failed to retrieve secret.' else: message = 'Success! Retrieved secret.' message_client.publish(topic='secrets/output', payload=message) print('published: ' + message)
get_secret_value
函数支持对SecretId
值使用 Secrets Manager 的名称或 ARN。此示例使用密钥名称。对于此示例密钥,AWS IoT Greengrass 返回键值对:{"test":"abcdefghi"}
。 -
将以下项目压缩到名为
secret_test_python.zip
的文件中。在创建 ZIP 文件时,应仅包含代码和依赖项,而不包含文件夹。- secret_test.py。应用程序逻辑。
- greengrasssdk。所有 Python Greengrass Lambda 函数必需的库。
此即 Lambda 函数部署程序包。
步骤 4:创建 Lambda 函数
-
在组配置页面选择Lambda。选择(添加Lambda)。
-
选择(新建Lambda)。
-
在 (基本信息) 部分中,使用以下值:
- 对于 (函数名称),输入
SecretTest
。 - 对于 (运行时),选择 Python 3.7。
- 对于权限,请保留默认设置。这将创建一个授予基本 Lambda 权限的执行角色。(此角色未由 AWS IoT Greengrass 使用。)
- 对于 (函数名称),输入
-
在页面底部,选择 Create function。
-
在 SecretTest 函数的 (配置) 选项卡的 (函数代码) 中,使用以下值:
- 对于 (代码输入种类),选择上传 .zip 文件。
- 对于 (运行时),选择 Python 3.7。
- 对于 (处理程序),输入
secret_test.function_handler
。
-
选择 (上传)。
-
选择您的
secret_test_python.zip
部署程序包。 -
选择 (保存)。
注意
AWS Lambda 控制台上的测试键不可与该函数一同使用。AWS IoT Greengrass 核心 SDK 不包含在 AWS Lambda 控制台中独立运行 Greengrass Lambda 函数所需的模块。这些模块(例如
greengrass_common
)会在被部署到您的 Greengrass 核心之后提供给这些函数。提示
从代码输入种类菜单中选择编辑内联代码,即可在函数代码部分中查看您的代码。
-
在 (操作) 菜单上,选择 (发布新版本)。
-
对于 (版本描述),输入
First version
,然后选择 (发布)。 -
在 SecretTest: 1 配置页面上,从操作菜单中选择创建别名。
-
在创建新别名页面上,使用以下值:
- 对于名称,输入
GG_SecretTest
。 - 对于 Version (版本),选择 1。
注意
AWS IoT Greengrass 不支持 $LATEST 版本的 Lambda 别名。
- 对于名称,输入
-
选择 Create。
步骤 5:将 Lambda 函数添加到 Greengrass 组
-
在组配置页面上,选择 Lambdas,然后选择 (添加Lambda)。
-
在 (将 Lambda 添加到 Greengrass 组) 页面上,选择 (使用现有Lambda)。
-
在使用现有的 Lambda 页面上,选择 SecretTest,然后选择下一步。
-
在(选择Lambda版本)页面上,选择 别名:GG_SecretTest,然后选择(完成)。
步骤 6:将密钥资源附加到 Lambda 函数
-
在组的 Lambda 页面上,选择 SecretTest 函数。
-
在函数的详细信息页面上,依次选择资源、密钥和Attach a secret resource (附加密钥资源)。
-
在 (将密钥资源附加到 Lambda 函数) 页面上,选择 (选择密钥资源)。
-
在 (从您的组中选择密钥资源) 页面上,选择 MyTestSecret,然后选择 (保存)。
步骤 7:将订阅添加到 Greengrass 组
-
在组配置页面上,选择 (订阅),然后选择 (添加订阅)。
-
创建一个允许 AWS IoT 向该函数发布消息的订阅:
在选择您的源和目标页面上,配置源和目标:
- 对于选择源,选择服务,然后选择 IoT Cloud。
- 对于选择目标,选择 Lambda,然后选择 SecretTest。
- 选择 (下一步)。
-
在利用主题筛选您的数据页面上,对于主题筛选条件,输入
secrets/input
,然后选择下一步。 -
选择 Finish。
-
重复执行步骤 1 至 4,以创建允许该函数向 AWS IoT 发布状态的订阅。
- 对于选择源,选择 Lambda,然后选择 SecretTest。
- 对于选择目标,选择服务,然后选择 IoT Cloud。
- 对于 Topic filter (主题筛选条件),输入
secrets/output
。
步骤 8:部署 Greengrass 组
将组部署到核心设备。在部署期间,AWS IoT Greengrass 从 Secrets Manager 中提取密钥的值并在核心上创建本地加密副本。
-
确保 AWS IoT Greengrass Core正在运行。根据需要在您的 Raspberry Pi 终端中运行以下命令。
-
要检查守护程序是否正在运行,请执行以下操作:
ps aux | grep -E 'greengrass.*daemon'
如果输出包含
root
的/greengrass/ggc/packages/ggc-version/bin/daemon
条目,则表示守护程序正在运行。注意
路径中的版本取决于您的核心设备上安装的 AWS IoT Greengrass 核心软件版本。
-
要启动守护程序,请执行以下操作:
cd /greengrass/ggc/core/ sudo ./greengrassd start
-
-
在组配置页面上,选择部署,然后从操作菜单中,选择部署。
测试函数
-
在 AWS IoT 控制台主页上,选择 (测试)。
-
对于订阅,请使用以下值,然后选择订阅主题。
属性 值 订阅主题 secrets/output MQTT 负载显示 将负载显示为字符串 -
对于 (发布),请使用以下值,然后选择 (发布到主题) 来调用函数。
属性 值 主题 secrets/input 消息 保留默认消息。发布消息可调用 Lambda 函数,但本教程中的该函数不处理消息正文。 如果成功,则该函数会发布“成功”消息。