创建和注册队列并验证设备 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建和注册队列并验证设备

在本部分中,您将创建Amazon IoTthing 对象、创建设备队列、注册您的设备队列以便与云交互、创建 X.509 证书以对设备进行身份验证Amazon IoT Core,请将角色别名与Amazon IoT(在创建队列时生成),请将您的Amazon账户特定终端节点,获取正式的 Amazon 根 CA 文件,然后将 Amazon CA 文件上传到 Amazon S3。

  1. CreateAmazon IoT事物。

    SageMaker 边缘管理器利用Amazon IoT Core服务,以便于边缘设备和Amazon云。您可以利用现有的Amazon IoT功能,然后将设备设置为使用边缘管理器。

    将您的设备连接到Amazon IoT,您需要创建Amazon IoT Thing Shadow,创建并注册客户端证书AmazonIoT,并为您的设备创建和配置 IAM 角色。

    首先,创建Amazon IoT事物对象与Amazon IoT客户端 (iot_client)您之前使用 Bto3 创建的。以下示例演示如何创建两个事物对象:

    iot_thing_name = 'sample-device' iot_thing_type = 'getting-started-demo' iot_client.create_thing_type( thingTypeName=iot_thing_type ) # Create an Amazon IoT thing objects iot_client.create_thing( thingName=iot_thing_name, thingTypeName=iot_thing_type )
  2. 创建您的设备队列。

    使用上一步中定义的 SageMaker 客户端对象创建设备队列。您还可以使用 SageMaker 控制台创建设备队列。

    import time device_fleet_name="demo-device-fleet" + str(time.time()).split('.')[0] device_name="sagemaker-edge-demo-device" + str(time.time()).split('.')[0]

    指定 IoT 角色 ARN。使用这可以Amazon IoT向设备授予临时证书。

    device_model_directory='device_output' s3_device_fleet_output = 's3://{}/{}'.format(bucket, device_model_directory) sagemaker_client.create_device_fleet( DeviceFleetName=device_fleet_name, RoleArn=iot_role_arn, # IoT Role ARN specified in previous step OutputConfig={ 'S3OutputLocation': s3_device_fleet_output } )

    网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon IoT角色别名是在创建设备队列时创建的。此角色别名与Amazon IoT使用iot_client对象在后面的步骤中。

  3. 注册您的设备队列。

    要与云交互,您需要在 SageMaker Edge 管理器中注册设备。在此示例中,您将单个设备注册到您创建的队列。要注册设备,您需要提供设备名称和Amazon IoT事物名称,如以下示例所示:

    # Device name should be 36 characters device_name = "sagemaker-edge-demo-device" + str(time.time()).split('.')[0] sagemaker_client.register_devices( DeviceFleetName=device_fleet_name, Devices=[ { "DeviceName": device_name, "IotThingName": iot_thing_name } ] )
  4. 创建 X.509 证书。

    在创建Amazon IoT事物对象,则必须为事物对象创建 X.509 设备证书。此证书将您的设备身份验证Amazon IoT Core.

    使用以下内容创建私有密钥、公有密钥和 X.509 证书文件,使用Amazon IoT客户端定义 (iot_client)之前的。

    # Creates a 2048-bit RSA key pair and issues an X.509 # certificate # using the issued public key. create_cert = iot_client.create_keys_and_certificate( setAsActive=True ) # Get certificate from dictionary object and save in its own with open('./device.pem.crt', 'w') as f: for line in create_cert['certificatePem'].split('\n'): f.write(line) f.write('\n') # Get private key from dictionary object and save in its own with open('./private.pem.key', 'w') as f: for line in create_cert['keyPair']['PrivateKey'].split('\n'): f.write(line) f.write('\n') # Get a private key from dictionary object and save in its own with open('./public.pem.key', 'w') as f: for line in create_cert['keyPair']['PublicKey'].split('\n'): f.write(line) f.write('\n')
  5. 将角色别名与关联Amazon IoT.

    当您使用 SageMaker 创建设备队列时(sagemaker_client.create_device_fleet()),则会为您生成一个角色别名。网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon IoT角色别名为连接的设备提供了一种机制来验证Amazon IoT使用 X.509 证书,然后获得短暂Amazon从 IAM 角色中获取凭证,该角色与Amazon IoT角色别名。角色别名允许您更改设备的角色,而无需更新设备。使用DescribeDeviceFleet获取角色别名和 ARN。

    # Print Amazon Resource Name (ARN) and alias that has access # to Amazon Internet of Things (IoT). sagemaker_client.describe_device_fleet(DeviceFleetName=device_fleet_name) # Store iot role alias string in a variable # Grabs role ARN full_role_alias_name = sagemaker_client.describe_device_fleet(DeviceFleetName=device_fleet_name)['IotRoleAlias'] start_index = full_role_alias_name.find('SageMaker') # Find beginning of role name role_alias_name = full_role_alias_name[start_index:]

    使用iot_client,以便于将创建设备队列时生成的角色别名与Amazon IoT:

    role_alias = iot_client.describe_role_alias( roleAlias=role_alias_name)

    有关 IAM 角色别名的更多信息,请参阅角色别名允许访问未使用的服务.

    您创建并注册了Amazon IoT以成功验证您的设备。现在,您需要创建策略并将其附加到证书上来授权对安全令牌的请求。

    alias_policy = { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "iot:AssumeRoleWithCertificate", "Resource": role_alias['roleAliasDescription']['roleAliasArn'] } } policy_name = 'aliaspolicy-'+ str(time.time()).split('.')[0] aliaspolicy = iot_client.create_policy(policyName=policy_name, policyDocument=json.dumps(alias_policy)) # Attach policy iot_client.attach_policy(policyName=policy_name, target=create_cert['certificateArn'])
  6. 获取您的Amazon凭证提供程序的账户特定的终端节点。

    边缘设备需要一个端点才能承担凭据。获取您的Amazon凭证提供程序的账户特定的终端节点。

    # Get the unique endpoint specific to your Amazon account that is making the call. iot_endpoint = iot_client.describe_endpoint( endpointType='iot:CredentialProvider' ) endpoint="https://{}/role-aliases/{}/credentials".format(iot_endpoint['endpointAddress'],role_alias_name)
  7. 获取官方 Amazon 根 CA 文件,并将其上传到 Amazon S3 存储桶中。

    请在 Jupyter 笔记本中使用以下内容或Amazon CLI(如果你使用你的终端,删除 '!' 魔术函数):

    !wget https://www.amazontrust.com/repository/AmazonRootCA1.pem

    使用终端节点向凭证提供程序发出 HTTPS 请求以返回安全令牌。以下示例命令使用 curl,但您可以使用任何 HTTP 客户端。

    !curl --cert device.pem.crt --key private.pem.key --cacert AmazonRootCA1.pem $endpoint

    如果证书已验证,请将密钥和证书上传到您的 Amazon S3 存储桶 URI:

    !aws s3 cp private.pem.key s3://{bucket}/authorization-files/ !aws s3 cp device.pem.crt s3://{bucket}/authorization-files/ !aws s3 cp AmazonRootCA1.pem s3://{bucket}/authorization-files/

    通过将密钥和证书移动到其他目录来清理您的工作目录:

    # Optional - Clean up working directory !mkdir authorization-files !mv private.pem.key device.pem.crt AmazonRootCA1.pem authorization-files/