本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
註冊和驗證您的裝置機群
在本節中,您將建立 AWS IoT 物件物件、建立裝置機群、註冊裝置機群,以便與雲端互動、建立 X.509 憑證以驗證裝置與 的身分 AWS IoT Core、建立機群時 AWS IoT 產生的角色別名與 建立關聯、取得憑證提供者 AWS 的帳戶特定端點、取得官方 Amazon Root CA 檔案,以及將 Amazon CA 檔案上傳至 Amazon S3。
-
建立 AWS IoT 物件。
SageMaker Edge Manager 利用 AWS IoT Core 服務來促進 AWS 雲端中邊緣裝置和端點之間的連線。您可以在設定裝置以使用 Edge Manager 之後,利用現有的 AWS IoT 功能。
若要將裝置連線至 AWS IoT,您需要建立 AWS IoT 物件 、使用 AWS IoT 建立並註冊用戶端憑證,以及為裝置建立並設定IAM角色。
首先,使用您先前使用 Boto3 建立的 AWS IoT 用戶端 (
iot_client
) 建立 AWS IoT 物件物件。下列範例說明如何建立兩個實物物件:iot_thing_name = 'sample-device' iot_thing_type = 'getting-started-demo' iot_client.create_thing_type( thingTypeName=iot_thing_type ) # Create an AWS IoT thing objects iot_client.create_thing( thingName=iot_thing_name, thingTypeName=iot_thing_type )
-
建立您的裝置機群。
使用上一個步驟中定義的 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。這可讓 將臨時憑證 AWS 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 } )
當您建立裝置機群時,即會建立 AWS IoT 角色別名。此角色別名與在稍後的步驟中使用 AWS IoT
iot_client
物件相關聯。 -
註冊您的裝置機群。
若要與雲端互動,您需要向 SageMaker Edge Manager 註冊您的裝置。在此範例中,您會使用建立的機群註冊單一裝置。若要註冊裝置,您需要提供裝置名稱和 AWS 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 } ] )
-
建立 X.509 憑證。
建立 AWS IoT 物件後,您必須為物件建立 X.509 裝置憑證。此憑證將您的裝置授權給 AWS IoT Core。
使用下列項目,使用先前定義的 AWS IoT 用戶端 (
iot_client
) 建立私有金鑰、公有金鑰和 X.509 憑證檔案。# 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')
-
將角色別名與 建立關聯 AWS IoT。
當您使用 SageMaker (
sagemaker_client.create_device_fleet()
) 建立裝置機群時,會為您產生角色別名。 AWS IoT 角色別名提供機制,讓連線的裝置 AWS IoT 使用 X.509 憑證進行身分驗證,然後從與 AWS IoT 角色別名相關聯的IAM角色取得短期 AWS 憑證。此角色別名讓您無需更新裝置即可變更裝置角色。使用DescribeDeviceFleet
取得角色別名名稱 和 ARN。# Print Amazon Resource Name (ARN) and alias that has access # to AWS 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
來協助將建立裝置機群時產生的角色別名與 建立關聯 AWS IoT:role_alias = iot_client.describe_role_alias( roleAlias=role_alias_name)
如需IAM角色別名的詳細資訊,請參閱角色別名允許存取未使用的服務。
您先前已使用 建立並註冊憑證 AWS 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'])
-
取得憑證提供者 AWS 的帳戶特定端點。
Edge 裝置需要端點才能擔任憑證。獲得憑證供應商的 AWS 帳戶特有端點。
# Get the unique endpoint specific to your AWS 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)
-
取得官方 Amazon 根 CA 檔案並將其上傳至 Amazon S3 儲存貯體。
在 Jupyter 筆記本 或 AWS 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/