

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Registro y autenticación de la flota de dispositivos
<a name="edge-getting-started-step3"></a>

En esta sección, crearás tu AWS IoT objeto, crearás una flota de dispositivos, registrarás tu flota de dispositivos para que pueda interactuar con la nube, crearás X.509 certificados para autenticar tus dispositivos AWS IoT Core, asociarás el alias de rol al AWS IoT que se generó cuando creaste tu flota, obtendrás el punto de enlace AWS específico de tu cuenta para el proveedor de credenciales, obtendrás un archivo CA raíz oficial de Amazon y subirás el archivo CA de Amazon a Amazon S3.

1. **Crea cosas. AWS IoT **

   SageMaker Edge Manager aprovecha los AWS IoT Core servicios para facilitar la conexión entre los dispositivos periféricos y los puntos finales de la AWS nube. Puede aprovechar las AWS IoT funciones existentes después de configurar sus dispositivos para que funcionen con Edge Manager.

   Para conectar su dispositivo AWS IoT, debe crear *objetos, AWS IoT crear* y registrar un certificado de cliente con AWS IoT y crear y configurar la función de IAM para sus dispositivos.

   En primer lugar, cree AWS IoT objetos tipo objeto con el AWS IoT cliente (`iot_client`) que creó anteriormente con Boto3. En el ejemplo siguiente se muestra cómo crear dos objetos de cosa:

   ```
   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
   )
   ```

1. **Crear su flota de dispositivos.**

   Cree una flota de dispositivos con el objeto cliente de SageMaker IA definido en un paso anterior. También puedes usar la consola de SageMaker IA para crear una flota de dispositivos.

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

   Especifique el ARN de su rol de IoT. Esto permite AWS IoT conceder credenciales temporales a los dispositivos.

   ```
   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
       }
   )
   ```

   Al crear una flota de dispositivos, se crea un alias de AWS IoT rol. Este alias de rol se asocia al AWS IoT uso del `iot_client` objeto en un paso posterior.

1. **Registrar su flota de dispositivos.**

   Para interactuar con la nube, debe registrar su dispositivo en SageMaker Edge Manager. En este ejemplo, registra un único dispositivo con la flota que ha creado. Para registrar el dispositivo, debe proporcionar un nombre de dispositivo y el nombre de la cosa AWS IoT , tal y como se muestra en el siguiente ejemplo:

   ```
   # 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
           }
       ]
   )
   ```

1. **Crea X.509 certificados.**

   Tras crear el AWS IoT objeto objeto, debe crear un certificado de X.509 dispositivo para el objeto objeto objeto. Este certificado autentica su dispositivo en AWS IoT Core.

   Utilice lo siguiente para crear una clave privada, una clave pública y un archivo de X.509 certificado utilizando el AWS IoT cliente definido (`iot_client`) anteriormente.

   ```
   # 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')
   ```

1. **Asocie el alias del rol a AWS IoT.**

   Cuando creas una flota de dispositivos con SageMaker AI (`sagemaker_client.create_device_fleet()`), se genera un alias de rol para ti. Un alias de AWS IoT rol proporciona un mecanismo para que los dispositivos conectados se autentiquen AWS IoT mediante X.509 certificados y, a continuación, obtengan AWS credenciales efímeras de un rol de IAM asociado a un AWS IoT alias de rol. El alias de rol le permite cambiar el rol del dispositivo sin tener que actualizarlo. Utilice `DescribeDeviceFleet` para obtener el nombre del alias y el ARN del rol.

   ```
   # 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:]
   ```

   Úselo `iot_client` para facilitar la asociación del alias de rol generado al crear la flota de dispositivos con: AWS IoT

   ```
   role_alias = iot_client.describe_role_alias(
                       roleAlias=role_alias_name)
   ```

   Para obtener más información sobre el alias de rol de IAM, consulte [Alias de rol permite el acceso a servicios no utilizados](https://docs.aws.amazon.com/iot/latest/developerguide/audit-chk-role-alias-unused-svcs.html).

   Creó y registró un certificado AWS IoT anteriormente para autenticar correctamente su dispositivo. Ahora, debe crear y asociar una política al certificado para autorizar la solicitud del token de seguridad.

   ```
   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'])
   ```

1. **Obtenga el punto de conexión AWS específico de su cuenta para el proveedor de credenciales.**

   Los dispositivos periféricos necesitan un punto de conexión para poder asumir las credenciales. Obtenga el punto de conexión específico de su cuenta AWS para el proveedor de credenciales.

   ```
   # 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)
   ```

1. **Obtenga el archivo Amazon root CA oficial y cárguelo en el bucket de Amazon S3.**

   Usa lo siguiente en tu Jupyter Notebook o AWS CLI (si usas tu terminal), quita el símbolo «\!» función mágica):

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

   Utilice el punto de conexión para realizar una solicitud HTTPS al proveedor de credenciales para devolver un token de seguridad. El ejemplo de comando siguiente utiliza `curl`, pero puede utilizar cualquier cliente HTTP.

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

   Si el certificado está verificado, suba las claves y el certificado al URI de su bucket de Amazon S3:

   ```
   !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/
   ```

   Limpie su directorio de trabajo moviendo las claves y el certificado a un directorio distinto:

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