디바이스 플릿 등록 및 인증 - Amazon SageMaker

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

디바이스 플릿 등록 및 인증

이 섹션에서는 AWS IoT 사물 객체를 생성하고, 디바이스 플릿을 생성하고, 디바이스 플릿을 등록하여 클라우드와 상호 작용하고, X.509 인증서를 생성하여 디바이스를 에 인증하고 AWS IoT Core, 플릿을 생성할 때 AWS IoT 생성된 에 역할 별칭을 연결하고, 자격 증명 공급자의 AWS 계정별 엔드포인트를 가져오고, 공식 Amazon Root CA 파일을 가져오고, Amazon CA 파일을 Amazon S3에 업로드합니다.

  1. AWS IoT 사물을 생성합니다.

    SageMaker Edge Manager는 AWS IoT Core 서비스를 활용하여 AWS 클라우드의 엣지 디바이스와 엔드포인트 간의 연결을 용이하게 합니다. Edge Manager와 함께 작동하도록 디바이스를 설정한 후 기존 AWS IoT 기능을 활용할 수 있습니다.

    디바이스를 에 연결하려면 AWS IoT 사물 객체를 생성하고, AWS IoT 에 클라이언트 인증서를 생성 및 등록하고, 디바이스의 IAM 역할을 생성 및 구성 AWS IoT해야 합니다.

    먼저 이전에 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 )
  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. 이렇게 하면 디바이스에 임시 자격 증명을 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 역할 별칭이 생성됩니다. 이 역할 별칭은 이후 단계에서 iot_client 객체를 AWS IoT 사용하는 것과 연결됩니다.

  3. 디바이스 플릿을 등록합니다.

    클라우드와 상호 작용하려면 디바이스를 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 } ] )
  4. 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')
  5. 역할 별칭을 와 연결합니다 AWS IoT.

    (sagemaker_client.create_device_fleet())를 사용하여 SageMaker 디바이스 플릿을 생성하면 역할 별칭이 생성됩니다. AWS IoT 역할 별칭은 연결된 디바이스가 X.509 인증서를 AWS IoT 사용하여 를 인증한 다음 역할 별칭과 연결된 IAM 역할에서 수명이 짧은 AWS 보안 인증 정보를 얻을 수 있는 메커니즘을 AWS IoT 제공합니다. 역할 별칭을 사용하면 디바이스를 업데이트하지 않고도 역할을 변경할 수 있습니다. 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'])
  6. 자격 증명 공급자의 AWS 계정별 엔드포인트를 가져옵니다.

    엣지 디바이스에서 자격 증명을 수락하려면 엔드포인트가 필요합니다. 자격 증명 공급자를 위한 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)
  7. 공식 Amazon 루트 CA 파일을 가져와 Amazon S3 버킷에 업로드합니다.

    Jupyter Notebook 또는 에서 다음을 사용합니다 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/