기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
디바이스 플릿 등록 및 인증
이 섹션에서는 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 에 클라이언트 인증서를 생성 및 등록하고, 디바이스의 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 )
-
디바이스 플릿을 생성합니다.
이전 단계에서 정의된 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 사용하는 것과 연결됩니다. -
디바이스 플릿을 등록합니다.
클라우드와 상호 작용하려면 디바이스를 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_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'])
-
자격 증명 공급자의 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)
-
공식 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/