AWS IoT Greengrass:将密钥部署到核心

AWS IoT Greengrass:将密钥部署到核心

步骤 1:创建 Secrets Manager 密钥

在本步骤中,使用 AWS Secrets Manager 控制台创建密钥。

  1. 登录 AWS Secrets Manager 控制台

    注意

    有关该过程的更多信息,请参阅 AWS Secrets Manager 用户指南中的步骤 1:在 AWS Secrets Manager 中创建并存储密钥

  2. 选择存储新密钥

  3. (选择密钥类型) 下,选择 (其他密钥类型)

  4. (指定要为此密钥存储的键值对) 下:

    • 对于 Key (键),输入 test
    • 对于 Value (值),输入 abcdefghi

    请确保为加密密钥保持选中 DefaultEncryptionKey,然后选择 (下一步)

  5. 对于密钥名称,输入 greengrass-TwilioAuthToken,然后选择下一步

  6. 本教程不需要轮换,因此,请选择 (禁用自动轮换),然后选择 (下一步)

  7. (审核) 页上,审核您的设置,然后选择 (存储)

    接下来,在 Greengrass 组中创建一个引用该密钥的密钥资源。

步骤 2:将密钥资源添加到 Greengrass 组

在此步骤中,您将一个密钥资源 添加到 Greengrass 组。该资源是对上一步中创建的密钥的引用。

  1. 在 AWS IoT 控制台中,选择 Greengrass,然后选择 (组)

  2. 选择要将密钥资源添加到的组。

  3. 在组配置页面上,选择 (资源),然后选择 (密钥)。此选项卡显示属于该组的密钥资源。您可以从此选项卡添加、编辑和删除密钥资源。

  4. 选择 (添加密钥资源)

  5. (向组中添加密钥资源) 页面上,选择 (选择),然后选择 greengrass-TestSecret

  6. (为密钥资源命名) 页面上,输入 MyTestSecret,然后选择 (保存)

步骤 3:创建 Lambda 函数部署程序包

  1. AWS IoT Greengrass Core 开发工具包 下载 页面下载 适用于 Python 的 AWS IoT Greengrass Core 开发工具包。

  2. 解压缩下载的程序包以获取软件开发工具包。软件开发工具包是 greengrasssdk 文件夹。

  3. 将以下 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"}

  4. 将以下项目压缩到名为 secret_test_python.zip 的文件中。在创建 ZIP 文件时,应仅包含代码和依赖项,而不包含文件夹。

    • secret_test.py。应用程序逻辑。
    • greengrasssdk。所有 Python Greengrass Lambda 函数必需的库。

    此即 Lambda 函数部署程序包。

步骤 4:创建 Lambda 函数

  1. 在组配置页面选择Lambda。选择(添加Lambda)

  2. 选择(新建Lambda)

  3. (基本信息) 部分中,使用以下值:

    • 对于 (函数名称),输入 SecretTest
    • 对于 (运行时),选择 Python 3.7
    • 对于权限,请保留默认设置。这将创建一个授予基本 Lambda 权限的执行角色。(此角色未由 AWS IoT Greengrass 使用。)
  4. 在页面底部,选择 Create function

  5. 在 SecretTest 函数的 (配置) 选项卡的 (函数代码) 中,使用以下值:

    • 对于 (代码输入种类),选择上传 .zip 文件
    • 对于 (运行时),选择 Python 3.7
    • 对于 (处理程序),输入 secret_test.function_handler
  6. 选择 (上传)

  7. 选择您的 secret_test_python.zip 部署程序包。

  8. 选择 (保存)

    注意

    AWS Lambda 控制台上的测试键不可与该函数一同使用。AWS IoT Greengrass 核心 SDK 不包含在 AWS Lambda 控制台中独立运行 Greengrass Lambda 函数所需的模块。这些模块(例如 greengrass_common)会在被部署到您的 Greengrass 核心之后提供给这些函数。

    提示

    代码输入种类菜单中选择编辑内联代码,即可在函数代码部分中查看您的代码。

  9. (操作) 菜单上,选择 (发布新版本)

  10. 对于 (版本描述),输入 First version,然后选择 (发布)

  11. SecretTest: 1 配置页面上,从操作菜单中选择创建别名

  12. 创建新别名页面上,使用以下值:

    • 对于名称,输入 GG_SecretTest
    • 对于 Version (版本),选择 1

    注意

    AWS IoT Greengrass 不支持 $LATEST 版本的 Lambda 别名。

  13. 选择 Create

步骤 5:将 Lambda 函数添加到 Greengrass 组

  1. 在组配置页面上,选择 Lambdas,然后选择 (添加Lambda)

  2. (将 Lambda 添加到 Greengrass 组) 页面上,选择 (使用现有Lambda)

  3. 使用现有的 Lambda 页面上,选择 SecretTest,然后选择下一步

  4. (选择Lambda版本)页面上,选择 别名:GG_SecretTest,然后选择(完成)

步骤 6:将密钥资源附加到 Lambda 函数

  1. 在组的 Lambda 页面上,选择 SecretTest 函数。

  2. 在函数的详细信息页面上,依次选择资源密钥Attach a secret resource (附加密钥资源)

  3. (将密钥资源附加到 Lambda 函数) 页面上,选择 (选择密钥资源)

  4. (从您的组中选择密钥资源) 页面上,选择 MyTestSecret,然后选择 (保存)

步骤 7:将订阅添加到 Greengrass 组

  1. 在组配置页面上,选择 (订阅),然后选择 (添加订阅)

  2. 创建一个允许 AWS IoT 向该函数发布消息的订阅:

    选择您的源和目标页面上,配置源和目标:

    1. 对于选择源,选择服务,然后选择 IoT Cloud
    2. 对于选择目标,选择 Lambda,然后选择 SecretTest
    3. 选择 (下一步)

  3. 利用主题筛选您的数据页面上,对于主题筛选条件,输入 secrets/input,然后选择下一步

  4. 选择 Finish

  5. 重复执行步骤 1 至 4,以创建允许该函数向 AWS IoT 发布状态的订阅。

    1. 对于选择源,选择 Lambda,然后选择 SecretTest
    2. 对于选择目标,选择服务,然后选择 IoT Cloud
    3. 对于 Topic filter (主题筛选条件),输入 secrets/output

步骤 8:部署 Greengrass 组

将组部署到核心设备。在部署期间,AWS IoT Greengrass 从 Secrets Manager 中提取密钥的值并在核心上创建本地加密副本。

  1. 确保 AWS IoT Greengrass Core正在运行。根据需要在您的 Raspberry Pi 终端中运行以下命令。

    1. 要检查守护程序是否正在运行,请执行以下操作:

      ps aux | grep -E 'greengrass.*daemon'
      

      如果输出包含 root/greengrass/ggc/packages/ggc-version/bin/daemon 条目,则表示守护程序正在运行。

      注意

      路径中的版本取决于您的核心设备上安装的 AWS IoT Greengrass 核心软件版本。

    2. 要启动守护程序,请执行以下操作:

      cd /greengrass/ggc/core/
      sudo ./greengrassd start
      
  2. 在组配置页面上,选择部署,然后从操作菜单中,选择部署

测试函数

  1. 在 AWS IoT 控制台主页上,选择 (测试)

  2. 对于订阅,请使用以下值,然后选择订阅主题

    属性
    订阅主题 secrets/output
    MQTT 负载显示 将负载显示为字符串
  3. 对于 (发布),请使用以下值,然后选择 (发布到主题) 来调用函数。

    属性
    主题 secrets/input
    消息 保留默认消息。发布消息可调用 Lambda 函数,但本教程中的该函数不处理消息正文。

    如果成功,则该函数会发布“成功”消息。

posted @ 2020-01-03 11:08  Hi,Simon  阅读(374)  评论(0编辑  收藏  举报