

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.

# Requisitos previos de actualización OTA
<a name="ota-prereqs"></a>

Para usar las actualizaciones over-the-air (OTA), haga lo siguiente:
+ Compruebe el [Requisitos previos para las actualizaciones de OTA mediante HTTP](ota-http-freertos.md) o el [Requisitos previos para las actualizaciones de OTA mediante MQTT](ota-mqtt-freertos.md).
+ [Creación de un bucket de Amazon S3 para almacenar la actualización](dg-ota-bucket.md).
+ [Crear un rol de servicio de actualizaciones OTA](create-service-role.md).
+ [Crear una política de usuario de OTA](create-ota-user-policy.md).
+ [Crear un certificado de firma de código](ota-code-sign-cert.md).
+ Si utiliza la firma de código para AWS IoT,[Conceda acceso a la firma de código para AWS IoT](code-sign-policy.md).
+ [Descarga de FreeRTOS con la biblioteca de OTA](ota-download-freertos.md).

# Creación de un bucket de Amazon S3 para almacenar la actualización
<a name="dg-ota-bucket"></a>

Los archivos de actualización OTA se almacenan en buckets de Amazon S3.

Si utilizas la firma de código AWS IoT, el comando que utilizas para crear un trabajo de firma de código ocupa un depósito de origen (donde se encuentra la imagen de firmware sin firmar) y un depósito de destino (donde se escribe la imagen de firmware firmada). Puede especificar el mismo bucket para el origen y el destino. Los nombres de los archivos se cambian para GUIDs que no se sobrescriban los archivos originales.<a name="create-bucket"></a>

**Creación de un bucket de Amazon S3**

1. Inicie sesión en la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. Elija **Crear bucket**.

1. Escriba un **nombre de bucket**.

1. En **Configuración del bucket para Bloquear acceso público**, mantenga seleccionada la opción **Bloquear todo el acceso público** para aceptar los permisos predeterminados.

1. En **Control de versiones de buckets**, seleccione **Habilitar** para conservar todas las versiones en el mismo bucket.

1. Elija **Crear bucket**.

Para obtener más información acerca de Amazon S3, consulte la [Guía del usuario de Amazon Simple Storage Service](https://docs.aws.amazon.com/AmazonS3/latest/userguide/).

# Crear un rol de servicio de actualizaciones OTA
<a name="create-service-role"></a>

El servicio de actualizaciones OTA toma este rol para crear y administrar trabajos de actualización OTA en su nombre.<a name="create-service-role-steps"></a>

**Creación de un rol de servicio de OTA**

1. Inicie sesión en la [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. En el panel de navegación, elija **Roles**.

1. Elija **Crear rol**.

1. En **Select type of trusted entity** (Seleccionar el tipo de entidad de confianza), elija **AWS Service** (Servicio de AWS ).

1. Elija **IoT** de la lista de AWS servicios.

1. En **Select your use case (Seleccione su caso de uso)**, elija **IoT**.

1. Elija **Siguiente: Permisos**.

1. Elija **Siguiente: Etiquetas**.

1. Elija **Siguiente: Revisar**.

1. Introduzca un nombre y una descripción del rol y, a continuación, elija **Create rol (Crear rol)**.

Para obtener más información sobre los roles de IAM, consulte [Roles de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html).

**importante**  
Para abordar el confuso problema de los agentes de seguridad, debe seguir las instrucciones de la guía de [AWS IoT Core](https://docs.aws.amazon.com/iot/latest/developerguide/cross-service-confused-deputy-prevention.html).<a name="add-ota-permissions"></a>

**Adición de permisos de actualización OTA a su rol de servicio de OTA**

1. En el campo de búsqueda de la página de la consola de IAM, escriba el nombre del rol y, a continuación, selecciónelo de la lista.

1. Seleccione **Asociar políticas**.

1. En el cuadro de **búsqueda**, escriba "AmazonFreeRTOSOTAUpdate«, seleccione una **AmazonFreeRTOSOTAUpdate**de las políticas filtradas y, a continuación, elija **Adjuntar política** para adjuntar la política a su función de servicio.<a name="add-iam-permissions"></a>

**Adición de los permisos de IAM necesarios a su rol de servicio de OTA**

1. En el campo de búsqueda de la página de la consola de IAM, escriba el nombre del rol y, a continuación, selecciónelo de la lista.

1. Elija **Agregar política insertada**.

1. Seleccione la pestaña **JSON**.

1. Copie y pegue el siguiente documento de política en el cuadro de texto:

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "iam:GetRole",
                   "iam:PassRole"
               ],
               "Resource": "arn:aws:iam::111122223333:role/your_role_name"
           }
       ]
   }
   ```

------

   Asegúrese de *your\$1account\$1id* reemplazarla por su ID de AWS cuenta y *your\$1role\$1name* por el nombre de la función de servicio de la OTA.

1. Elija **Revisar política**.

1. Escriba un nombre para la política y elija **Create policy (Crear política)**.

**nota**  
El procedimiento siguiente no es necesario si el nombre del bucket de Amazon S3 comienza por “afr-ota”. Si es así, la política AWS gestionada `AmazonFreeRTOSOTAUpdate` ya incluye los permisos necesarios. <a name="add-s3-permissions"></a>

****Adición de los permisos de Amazon S3 necesarios a su rol de servicio de OTA****

1. En el campo de búsqueda de la página de la consola de IAM, escriba el nombre del rol y, a continuación, selecciónelo de la lista.

1. Elija **Agregar política insertada**.

1. Seleccione la pestaña **JSON**.

1. Copie y pegue el siguiente documento de política en el cuadro.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "s3:GetObjectVersion",
                   "s3:GetObject",
                   "s3:PutObject"
               ],
               "Resource": [
                   "arn:aws:s3:::example-bucket/*"
               ]
           }
       ]
   }
   ```

------

   Esta política concede a su rol de servicio de OTA permisos para leer objetos de Amazon S3. Asegúrese de *example-bucket* reemplazarlos por el nombre de su depósito.

1. Elija **Revisar política**.

1. Escriba un nombre para la política y elija **Create policy (Crear política)**.

# Crear una política de usuario de OTA
<a name="create-ota-user-policy"></a>

Debes conceder permiso a tu usuario para realizar over-the-air actualizaciones. Su usuario debe tener permisos para:
+ Acceder al bucket de S3 donde se almacenan las actualizaciones de firmware.
+ Acceda a los certificados almacenados en AWS Certificate Manager.
+ Acceda a la función de entrega de archivos AWS IoT basada en MQTT.
+ Acceder a las actualizaciones OTA de FreeRTOS.
+ Acceda a los trabajos AWS IoT .
+ Acceder a IAM.
+ Firma de códigos de acceso para AWS IoT. Consulte [Conceda acceso a la firma de código para AWS IoT](code-sign-policy.md).
+ Enumerar las plataformas de certificación de FreeRTOS.
+ Etiquete y desetiquete AWS IoT los recursos.

Para otorgar los permisos necesarios al usuario, consulte [Políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html). Consulte también [Autorizar a los usuarios y los servicios en la nube a usar AWS IoT Jobs](https://docs.aws.amazon.com/iot/latest/developerguide/iam-policy-users-jobs.html).

Para dar acceso, agregue permisos a los usuarios, grupos o roles:
+ Usuarios y grupos en AWS IAM Identity Center:

  Cree un conjunto de permisos. Siga las instrucciones de [Creación de un conjunto de permisos](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html) en la *Guía del usuario de AWS IAM Identity Center *.
+ Usuarios gestionados en IAM a través de un proveedor de identidades:

  Cree un rol para la federación de identidades. Siga las instrucciones descritas en [Creación de un rol para un proveedor de identidad de terceros (federación)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html) en la *Guía del usuario de IAM*.
+ Usuarios de IAM:
  + Cree un rol que el usuario pueda aceptar. Siga las instrucciones descritas en [Creación de un rol para un usuario de IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html) en la *Guía del usuario de IAM*.
  + (No recomendado) Adjunte una política directamente a un usuario o agregue un usuario a un grupo de usuarios. Siga las instrucciones descritas en [Adición de permisos a un usuario (consola)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) de la *Guía del usuario de IAM*.

# Crear un certificado de firma de código
<a name="ota-code-sign-cert"></a>

Para firmar digitalmente las imágenes de firmware, necesita un certificado de firma de código y una clave privada. Para realizar pruebas, puede crear un certificado autofirmado y una clave privada. Para entornos de producción, debe adquirir un certificado firmado a través de una entidad de certificación (CA) conocida.

Las distintas plataformas requieren diferentes tipos de certificados de firma de código. En las siguientes secciones se describe cómo crear certificados de firma de código para diferentes plataformas calificadas para FreeRTOS.

**Topics**
+ [Creación de un certificado de firma de código para el SF-LAUNCHXL de Texas Instruments CC3220](ota-code-sign-cert-ti.md)
+ [Crear un certificado de firma de código para el Espressif ESP32](ota-code-sign-cert-esp.md)
+ [Creación de un certificado de firma de código para Nordic nrf52840-dk](ota-code-sign-cert-nordic.md)
+ [Creación de un certificado de firma de código para el simulador de Windows de FreeRTOS](ota-code-sign-cert-win.md)
+ [Creación de un certificado de firma de código para hardware personalizado](ota-code-sign-cert-other.md)

# Creación de un certificado de firma de código para el SF-LAUNCHXL de Texas Instruments CC3220
<a name="ota-code-sign-cert-ti"></a>

**importante**  <a name="deprecation-message"></a>
Esta integración de referencia está alojada en el repositorio de Amazon-FreeRTOS, que está en desuso. Recomendamos [empezar por aquí](freertos-getting-started-modular.md) al crear un nuevo proyecto. Si ya tiene un proyecto FreeRTOS existente basado en el repositorio Amazon FreeRTOS, ahora obsoleto, consulte [Guía de migración del repositorio Github de Amazon-FreeRTOS](github-repo-migration.md).

El kit de desarrollo Launchpad del microcontrolador inalámbrico SimpleLink Wi-Fi CC3220 SF admite dos cadenas de certificados para la firma de códigos de firmware:
+ Producción (certificado-catalogo)

  Para utilizar la cadena de certificados de producción, debe comprar un certificado de firma de código comercial y utilizar la [herramienta Uniflash de TI](http://www.ti.com/tool/UNIFLASH) para colocar la placa en el modo de producción.
+ Pruebas y desarrollo (certificado-sitio de pruebas) 

  La cadena de certificados de sitio de pruebas le permite probar actualizaciones OTA con un certificado de firma de código autofirmado.

Úselo AWS Command Line Interface para importar su certificado de firma de código, su clave privada y su cadena de certificados. AWS Certificate Manager Para obtener más información, consulte [ Instalación de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) en la *Guía del usuario de AWS Command Line Interface *.

[Descarga e instala la última versión del SimpleLink CC3220 SDK.](http://www.ti.com/tool/download/SIMPLELINK-CC3220-SDK) De forma predeterminada, los archivos que necesita se encuentran aquí:

`C:\ti\simplelink_cc32xx_sdk_version\tools\cc32xx_tools\certificate-playground` (Windows) 

`/Applications/Ti/simplelink_cc32xx_version/tools/cc32xx_tools/certificate-playground` (macOS)

Los certificados del SimpleLink CC3220 SDK están en formato DER. Para crear un certificado de firma de código autofirmado, debe convertirlo a formato PEM.

Siga estos pasos para crear un certificado de firma de código que esté vinculado a la jerarquía de certificados para parques infantiles de Texas Instruments y que cumpla con AWS Certificate Manager los criterios de firma de AWS IoT código.

**nota**  
Para crear un certificado de firma de código, instale [OpenSSL](https://www.openssl.org/) en su equipo. Después de instalar OpenSSL, asegúrese de que `openssl` se asigna al ejecutable de OpenSSL en el símbolo del sistema o el terminal entorno.

**Creación de un certificado de firma de código autofirmado**

1. Abra un símbolo del sistema o terminal con permisos de administrador.

1. En el directorio de trabajo, use el siguiente texto para crear un archivo llamado `cert_config.txt`. *test\$1signer@amazon.com*Sustitúyala por tu dirección de correo electrónico.

   ```
   [ req ]
   prompt             = no
   distinguished_name = my dn
   
   [ my dn ]
   commonName = test_signer@amazon.com
   
   [ my_exts ]
   keyUsage         = digitalSignature
   extendedKeyUsage = codeSigning
   ```

1. Cree una clave privada y una solicitud de firma de certificado (CSR):

   ```
   openssl req -config cert_config.txt -extensions my_exts -nodes -days 365 -newkey rsa:2048 -keyout tisigner.key -out tisigner.csr
   ```

1. Convierta la clave privada de CA de la raíz de sitio de pruebas de Texas Instruments del formato DER al formato PEM.

   La clave privada de CA de raíz de sitio de pruebas de TI se encuentra aquí:

   `C:\ti\simplelink_cc32xx_sdk_version\tools\cc32xx_tools\certificate-playground\dummy-root-ca-cert-key` (Windows) 

   `/Applications/Ti/simplelink_cc32xx_sdk_version/tools/cc32xx_tools/certificate-playground/dummy-root-ca-cert-key` (macOS)

   ```
   openssl rsa -inform DER -in dummy-root-ca-cert-key -out dummy-root-ca-cert-key.pem
   ```

1. Convierta el certificado de CA de raíz de sitio de pruebas de Texas Instruments del formato DER al formato PEM.

   La clave privada del certificado de raíz de sitio de pruebas de TI se encuentra aquí:

   `C:\ti\simplelink_cc32xx_sdk_version\tools\cc32xx_tools\certificate-playground/dummy-root-ca-cert` (Windows) 

   `/Applications/Ti/simplelink_cc32xx_sdk_version/tools/cc32xx_tools/certificate-playground/dummy-root-ca-cert` (macOS)

   ```
   openssl x509 -inform DER -in dummy-root-ca-cert -out dummy-root-ca-cert.pem
   ```

1. Firme la CSR con la CA raíz de Texas Instruments:

   ```
   openssl x509 -extfile cert_config.txt -extensions my_exts  -req -days 365 -in tisigner.csr -CA dummy-root-ca-cert.pem -CAkey dummy-root-ca-cert-key.pem -set_serial 01 -out tisigner.crt.pem -sha1
   ```

1. Convierta su certificado de firma de código (`tisigner.crt.pem`) a formato DER: 

   ```
   openssl x509 -in tisigner.crt.pem -out tisigner.crt.der -outform DER
   ```
**nota**  
Puede escribir el certificado `tisigner.crt.der` en la placa de desarrollo de TI más tarde.

1. Importe el certificado de firma de código, la clave privada y la cadena de certificados a: AWS Certificate Manager

   ```
   aws acm import-certificate --certificate fileb://tisigner.crt.pem --private-key fileb://tisigner.key --certificate-chain fileb://dummy-root-ca-cert.pem
   ```

   Este comando muestra un ARN para su certificado. Necesita este ARN al crear un trabajo de actualización OTA.
**nota**  
Este paso se ha escrito con el supuesto de que va a utilizar la firma de código AWS IoT para firmar las imágenes del firmware. Aunque se AWS IoT recomienda utilizar la firma de código para, puede firmar las imágenes del firmware manualmente.

# Crear un certificado de firma de código para el Espressif ESP32
<a name="ota-code-sign-cert-esp"></a>

**importante**  <a name="deprecation-message"></a>
Esta integración de referencia está alojada en el repositorio de Amazon-FreeRTOS, que está en desuso. Recomendamos [empezar por aquí](freertos-getting-started-modular.md) al crear un nuevo proyecto. Si ya tiene un proyecto FreeRTOS existente basado en el repositorio Amazon FreeRTOS, ahora obsoleto, consulte [Guía de migración del repositorio Github de Amazon-FreeRTOS](github-repo-migration.md).

Las ESP32 placas Espressif admiten un SHA-256 autofirmado con un certificado de firma de código ECDSA.

**nota**  
Para crear un certificado de firma de código, instale [OpenSSL](https://www.openssl.org/) en su equipo. Después de instalar OpenSSL, asegúrese de que `openssl` se asigna al ejecutable de OpenSSL en el símbolo del sistema o el terminal entorno.  
Úselo para importar su certificado de firma AWS Command Line Interface de código, su clave privada y su cadena de certificados. AWS Certificate Manager Para obtener información sobre cómo instalar el AWS CLI, consulte [Instalación](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) del. AWS CLI

1. En el directorio de trabajo, use el siguiente texto para crear un archivo llamado `cert_config.txt`. *test\$1signer@amazon.com*Sustitúyala por tu dirección de correo electrónico:

   ```
   [ req ]
   prompt             = no
   distinguished_name = my_dn
                       
   [ my_dn ]
   commonName = test_signer@amazon.com
                       
   [ my_exts ]
   keyUsage         = digitalSignature
   extendedKeyUsage = codeSigning
   ```

1. Cree una clave privada de firma de código ECDSA:

   ```
   openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -outform PEM -out ecdsasigner.key
   ```

1. Cree un certificado de firma de código ECDSA:

   ```
   openssl req -new -x509 -config cert_config.txt -extensions my_exts -nodes -days 365 -key ecdsasigner.key -out ecdsasigner.crt
   ```

1. Importe el certificado de firma de código, la clave privada y la cadena de certificados a: AWS Certificate Manager

   ```
   aws acm import-certificate --certificate fileb://ecdsasigner.crt --private-key fileb://ecdsasigner.key
   ```

   Este comando muestra un ARN para su certificado. Necesita este ARN al crear un trabajo de actualización OTA.
**nota**  
Este paso se ha escrito con el supuesto de que va a utilizar la firma de código AWS IoT para firmar las imágenes del firmware. Aunque se AWS IoT recomienda utilizar la firma de código para, puede firmar las imágenes del firmware manualmente.

# Creación de un certificado de firma de código para Nordic nrf52840-dk
<a name="ota-code-sign-cert-nordic"></a>

**importante**  <a name="deprecation-message"></a>
Esta integración de referencia está alojada en el repositorio de Amazon-FreeRTOS, que está en desuso. Recomendamos [empezar por aquí](freertos-getting-started-modular.md) al crear un nuevo proyecto. Si ya tiene un proyecto FreeRTOS existente basado en el repositorio Amazon FreeRTOS, ahora obsoleto, consulte [Guía de migración del repositorio Github de Amazon-FreeRTOS](github-repo-migration.md).

El nrf52840-dk de Nordic admite un certificado de firma de código ECDSA autofirmado SHA256 .

**nota**  
Para crear un certificado de firma de código, instale [OpenSSL](https://www.openssl.org/) en su equipo. Después de instalar OpenSSL, asegúrese de que `openssl` se asigna al ejecutable de OpenSSL en el símbolo del sistema o el terminal entorno.  
Úselo para importar el certificado de AWS Command Line Interface firma de código, la clave privada y la cadena de certificados. AWS Certificate Manager Para obtener información sobre cómo instalar el AWS CLI, consulte [Instalación](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) del. AWS CLI

1. En el directorio de trabajo, use el siguiente texto para crear un archivo llamado `cert_config.txt`. *test\$1signer@amazon.com*Sustitúyala por tu dirección de correo electrónico:

   ```
   [ req ]
   prompt             = no
   distinguished_name = my_dn
                       
   [ my_dn ]
   commonName = test_signer@amazon.com
                       
   [ my_exts ]
   keyUsage         = digitalSignature
   extendedKeyUsage = codeSigning
   ```

1. Cree una clave privada de firma de código ECDSA:

   ```
   openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -outform PEM -out ecdsasigner.key
   ```

1. Cree un certificado de firma de código ECDSA:

   ```
   openssl req -new -x509 -config cert_config.txt -extensions my_exts -nodes -days 365 -key ecdsasigner.key -out ecdsasigner.crt
   ```

1. Importe el certificado de firma de código, la clave privada y la cadena de certificados a: AWS Certificate Manager

   ```
   aws acm import-certificate --certificate fileb://ecdsasigner.crt --private-key fileb://ecdsasigner.key
   ```

   Este comando muestra un ARN para su certificado. Necesita este ARN al crear un trabajo de actualización OTA.
**nota**  
Este paso se ha escrito con el supuesto de que va a utilizar la firma de código AWS IoT para firmar las imágenes del firmware. Aunque se AWS IoT recomienda utilizar la firma de código para, puede firmar las imágenes del firmware manualmente.

# Creación de un certificado de firma de código para el simulador de Windows de FreeRTOS
<a name="ota-code-sign-cert-win"></a>

El simulador de Windows de FreeRTOS requiere un certificado de firma de código con una clave ECDSA P-256 y hash SHA-256 para realizar actualizaciones OTA. Si no dispone de un certificado de firma de código, siga estos pasos para crear uno.

**nota**  
Para crear un certificado de firma de código, instale [OpenSSL](https://www.openssl.org/) en su equipo. Después de instalar OpenSSL, asegúrese de que `openssl` se asigna al ejecutable de OpenSSL en el símbolo del sistema o el terminal entorno.  
Úselo AWS Command Line Interface para importar el certificado de firma de código, la clave privada y la cadena de certificados. AWS Certificate Manager Para obtener información sobre cómo instalar el AWS CLI, consulte [Instalación](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) del. AWS CLI

1. En el directorio de trabajo, use el siguiente texto para crear un archivo llamado `cert_config.txt`. *test\$1signer@amazon.com*Sustitúyala por tu dirección de correo electrónico:

   ```
   [ req ]
   prompt             = no
   distinguished_name = my_dn
                       
   [ my_dn ]
   commonName = test_signer@amazon.com
                       
   [ my_exts ]
   keyUsage         = digitalSignature
   extendedKeyUsage = codeSigning
   ```

1. Cree una clave privada de firma de código ECDSA:

   ```
   openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -outform PEM -out ecdsasigner.key
   ```

1. Cree un certificado de firma de código ECDSA:

   ```
   openssl req -new -x509 -config cert_config.txt -extensions my_exts -nodes -days 365 -key ecdsasigner.key -out ecdsasigner.crt
   ```

1. Importe el certificado de firma de código, la clave privada y la cadena de certificados a: AWS Certificate Manager

   ```
   aws acm import-certificate --certificate fileb://ecdsasigner.crt --private-key fileb://ecdsasigner.key
   ```

   Este comando muestra un ARN para su certificado. Necesita este ARN al crear un trabajo de actualización OTA.
**nota**  
Este paso se ha escrito con el supuesto de que va a utilizar la firma de código AWS IoT para firmar las imágenes del firmware. Aunque se AWS IoT recomienda utilizar la firma de código para, puede firmar las imágenes del firmware manualmente.

# Creación de un certificado de firma de código para hardware personalizado
<a name="ota-code-sign-cert-other"></a>

Con el conjunto de herramientas adecuado, cree una clave privada y un certificado auto-firmado para su hardware.

Úselo AWS Command Line Interface para importar el certificado de firma de código, la clave privada y la cadena de certificados. AWS Certificate Manager Para obtener información sobre cómo instalar el AWS CLI, consulte [Instalación](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) del. AWS CLI

Tras crear el certificado de firma de código, puede usarlo AWS CLI para importarlo a ACM:

```
aws acm import-certificate --certificate fileb://code-sign.crt --private-key fileb://code-sign.key
```

La salida de este comando muestra un ARN para su certificado. Necesita este ARN al crear un trabajo de actualización OTA.

ACM requiere que los certificados utilicen algoritmos y tamaños de claves específicos. Para obtener más información, consulte [Requisitos previos para la importación de certificados](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate-prerequisites.html). Para obtener más información acerca de ACM, consulte [Importación de certificados a AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html).

Debe copiar, pegar y formatear el contenido de su certificado de firma de código en el archivo `vendors/vendor/boards/board/aws_demos/config_files/ota_demo_config.h` que forma parte del código de FreeRTOS que descargará más adelante.

# Conceda acceso a la firma de código para AWS IoT
<a name="code-sign-policy"></a>

Para dar acceso, agregue permisos a los usuarios, grupos o roles:
+ Usuarios y grupos en AWS IAM Identity Center:

  Cree un conjunto de permisos. Siga las instrucciones de [Creación de un conjunto de permisos](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html) en la *Guía del usuario de AWS IAM Identity Center *.
+ Usuarios gestionados en IAM a través de un proveedor de identidades:

  Cree un rol para la federación de identidades. Siga las instrucciones descritas en [Creación de un rol para un proveedor de identidad de terceros (federación)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html) en la *Guía del usuario de IAM*.
+ Usuarios de IAM:
  + Cree un rol que el usuario pueda aceptar. Siga las instrucciones descritas en [Creación de un rol para un usuario de IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html) en la *Guía del usuario de IAM*.
  + (No recomendado) Adjunte una política directamente a un usuario o agregue un usuario a un grupo de usuarios. Siga las instrucciones descritas en [Adición de permisos a un usuario (consola)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) de la *Guía del usuario de IAM*.

# Descarga de FreeRTOS con la biblioteca de OTA
<a name="ota-download-freertos"></a>

Puedes clonar o descargar FreeRTOS desde. [GitHub](https://github.com/freertos/freertos) Consulte el archivo [README.md](https://github.com/freertos/freertos/blob/main/README.md) para obtener instrucciones.

Para obtener más información acerca de cómo configurar y ejecutar la aplicación de demostración de OTA, consulte [Over-the-air actualiza la aplicación de demostración](ota-demo.md).

**importante**  
En este tema, la ruta al directorio de descargas de FreeRTOS se denomina `freertos`.
Los caracteres de espacio en la ruta `freertos` pueden causar errores de compilación. Cuando clone o copie el repositorio, asegúrese de que la ruta que crea no contiene caracteres de espacio.
La longitud máxima de una ruta de archivo en Microsoft Windows es de 260 caracteres. Las rutas largas al directorio de descargas de FreeRTOS pueden provocar errores de creación.
Como el código fuente puede contener enlaces simbólicos, si utiliza Windows para extraer el archivo, es posible que tenga que:  
Habilitar el [ modo de desarrollador](https://docs.microsoft.com/en-us/windows/apps/get-started/enable-your-device-for-development) o 
Utilizar una consola que tenga el rango de administrador.
De esta forma, Windows puede crear correctamente enlaces simbólicos al extraer el archivo. De lo contrario, los enlaces simbólicos se escribirán como archivos normales que contengan las rutas de los enlaces simbólicos como texto o estarán vacíos. Para obtener más información, consulte la entrada del blog [ Symlinks in Windows 10](https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/).  
Si usa Git en Windows, debe habilitar el modo desarrollador o debe:   
Establecer `core.symlinks` en verdadero con el siguiente comando:  

    ```
    git config --global core.symlinks true
    ```
Usar una consola que tenga el rango de administrador siempre que utilice un comando git que escriba en el sistema (por ejemplo**git pull**, **git clone** y **git submodule update --init --recursive**).

# Requisitos previos para las actualizaciones de OTA mediante MQTT
<a name="ota-mqtt-freertos"></a>

En esta sección se describen los requisitos generales para utilizar MQTT con fines de ejecución over-the-air (actualizaciones OTA).

## Requisitos mínimos
<a name="ota-mqtt-freertos-min-requirements"></a>
+ El firmware del dispositivo debe incluir las bibliotecas de FreeRTOS necesarias (agente de coreMQTT, actualización OTA y sus dependencias).
+ Se necesita la versión 1.4.0 o posterior de FreeRTOS. Sin embargo, le recomendamos que utilice la versión más reciente cuando sea posible.

## Configuraciones
<a name="ota-mqtt-freertos-config"></a>

A partir de la versión 201912.00, FreeRTOS OTA puede usar el protocolo HTTP o MQTT para transferir imágenes de actualización de firmware de los dispositivos a otros. AWS IoT Si especifica ambos protocolos al crear una actualización OTA en FreeRTOS, cada dispositivo determinará el protocolo utilizado para transferir la imagen. Para obtener más información, consulte [Requisitos previos para las actualizaciones de OTA mediante HTTP](ota-http-freertos.md).

De manera predeterminada, la configuración de los protocolos OTA en [https://github.com/aws/amazon-freertos/blob/main/vendors/vendor/boards/board/aws_demos/config_files/ota_config.h](https://github.com/aws/amazon-freertos/blob/main/vendors/vendor/boards/board/aws_demos/config_files/ota_config.h) es utilizar el protocolo MQTT.

## Configuraciones específicas del dispositivo
<a name="ota-mqtt-freertos-dev-config"></a>

Ninguna.

## Uso de memoria
<a name="ota-mqtt-freertos-memory"></a>

Cuando se utiliza MQTT para la transferencia de datos, no se requiere memoria adicional para la conexión MQTT porque se comparte entre operaciones de control y datos. 

## Política de dispositivos
<a name="ota-mqtt-freertos-device-policy"></a>

Cada dispositivo que reciba una actualización OTA mediante MQTT debe estar registrado AWS IoT y tener una política adjunta como la que se indica aquí. Puede encontrar más información acerca de los elementos de los objetos `"Resource"` y `"Action"` en las [Acciones de la política principal de AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-actions.html) y en los [recursos de acciones principales de AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-action-resources.html).

**Notas**
+ Los `iot:Connect` permisos permiten que el dispositivo se conecte a AWS IoT través de MQTT.
+ Los `iot:Subscribe` `iot:Publish` permisos relacionados con los AWS IoT trabajos (`.../jobs/*`) permiten al dispositivo conectado recibir notificaciones y documentos de trabajo, y publicar el estado de finalización de la ejecución de un trabajo.
+ Los `iot:Publish` permisos `iot:Subscribe` y los permisos sobre los temas de las transmisiones AWS IoT OTA (`.../streams/*`) permiten al dispositivo conectado obtener datos de actualización de AWS IoT la OTA. Estos permisos son necesarios para realizar actualizaciones de firmware sobre MQTT.
+ Los `iot:Receive` permisos permiten AWS IoT Core publicar mensajes sobre esos temas en el dispositivo conectado. Este permiso se verifica en cada entrega de un mensaje MQTT. Puede utilizar este permiso para revocar el acceso a los clientes que están actualmente suscritos a un tema.

# Requisitos previos para las actualizaciones de OTA mediante HTTP
<a name="ota-http-freertos"></a>

En esta sección se describen los requisitos generales para usar HTTP para realizar actualizaciones over-the-air (OTA). A partir de la versión 201912.00, FreeRTOS OTA puede usar el protocolo HTTP o MQTT para transferir imágenes de actualización de firmware de los dispositivos a otros. AWS IoT 

**nota**  
Aunque se puede usar el protocolo HTTP para transferir la imagen del firmware, la biblioteca de agentes de CoreMQTT sigue siendo necesaria debido a otras interacciones con el AWS IoT Core uso de la biblioteca de agentes de CoreMQTT, como el envío o la recepción de notificaciones de ejecución de tareas, documentos de tareas y actualizaciones del estado de ejecución. 
Cuando se especifican los protocolos MQTT y HTTP para el trabajo de actualización de OTA, la configuración del software del Agente OTA en cada dispositivo determina el protocolo utilizado para transferir la imagen de firmware. Para cambiar el agente OTA del método de protocolo MQTT predeterminado al protocolo HTTP, puede modificar los archivos de encabezado utilizados para compilar el código fuente de FreeRTOS para el dispositivo.

## Requisitos mínimos
<a name="ota-http-freertos-min-requirements"></a>
+ El firmware del dispositivo debe incluir las bibliotecas de FreeRTOS necesarias (agente coreMQTT, HTTP, Agente de OTA y sus dependencias).
+ Se requiere la versión 201912.00 o posterior de FreeRTOS para cambiar la configuración de los protocolos de OTA para habilitar la transferencia de datos de OTA a través de HTTP.

## Configuraciones
<a name="ota-http-freertos-config"></a>

Consulte la siguiente configuración de los protocolos OTA en el archivo [https://github.com/aws/amazon-freertos/blob/main/vendors/vendor/boards/board/aws_demos/config_files/ota_config.h](https://github.com/aws/amazon-freertos/blob/main/vendors/vendor/boards/board/aws_demos/config_files/ota_config.h).

**Habilitación de la transferencia de datos de OTA a través de HTTP**

1. Cambie `configENABLED_DATA_PROTOCOLS` a `OTA_DATA_OVER_HTTP`.

1. En las actualizaciones OTA, puede especificar ambos protocolos para que se pueda utilizar el protocolo MQTT o HTTP. Puede establecer el protocolo principal utilizado por el dispositivo en HTTP cambiando `configOTA_PRIMARY_DATA_PROTOCOL` por `OTA_DATA_OVER_HTTP`. 

**nota**  
HTTP solo se admite para operaciones de datos de OTA. Para operaciones de control, debe utilizar MQTT.

## Configuraciones específicas del dispositivo
<a name="ota-http-freertos-device-configuration"></a>

**ESP32**  
Debido a una cantidad limitada de RAM, debe desactivar BLE cuando habilite HTTP como protocolo de datos OTA. En el archivo [https://github.com/aws/amazon-freertos/blob/main/vendors/espressif/boards/esp32/aws_demos/config_files/aws_iot_network_config.h](https://github.com/aws/amazon-freertos/blob/main/vendors/espressif/boards/esp32/aws_demos/config_files/aws_iot_network_config.h), cambie `configENABLED_NETWORKS` por `AWSIOT_NETWORK_TYPE_WIFI` solamente.  

```
/**
     * @brief Configuration flag which is used to enable one or more network interfaces for a board.
     *
     * The configuration can be changed any time to keep one or more network enabled or disabled.
     * More than one network interfaces can be enabled by using 'OR' operation with flags for
     * each network types supported. Flags for all supported network types can be found
     * in "aws_iot_network.h"
     *
     */
    #define configENABLED_NETWORKS      ( AWSIOT_NETWORK_TYPE_WIFI )
```

## Uso de memoria
<a name="ota-http-freertos-memory"></a>

Cuando se utiliza MQTT para la transferencia de datos, no se requiere memoria de montón adicional para la conexión MQTT porque se comparte entre operaciones de control y datos. Sin embargo, para habilitar los datos a través de HTTP se requiere memoria de montón adicional. A continuación, se muestran los datos de uso de memoria de montón para todas las plataformas compatibles, calculados mediante la API `xPortGetFreeHeapSize` de FreeRTOS. Debe asegurarse de que hay suficiente RAM para usar la biblioteca OTA.

****Texas Instruments SF-LAUNCHXL CC3220****  
Operaciones de control (MQTT): 12 KB  
Operaciones de datos (HTTP): 10 KB  
 TI usa mucha menos memoria RAM porque aplica SSL en el hardware, por lo que no usa la biblioteca mbedtls.

****Microchip PIC32 Curiosity MZEF****  
Operaciones de control (MQTT): 65 KB  
Operaciones de datos (HTTP): 43 KB

****Espressif ESP32****  
Operaciones de control (MQTT): 65 KB  
Operaciones de datos (HTTP): 45 KB  
El BLE ESP32 ocupa unos 87 KB de RAM. No hay suficiente RAM para habilitarlos todos, lo que se menciona en las configuraciones específicas del dispositivo anteriores.

****Simulador de Windows****  
Operaciones de control (MQTT): 82 KB   
Operaciones de datos (HTTP): 63 KB 

****Nordic nrf52840-dk****  
No se admite HTTP.

## Política de dispositivos
<a name="ota-http-freertos-device-policy"></a>

Esta política le permite utilizar MQTT o HTTP para las actualizaciones de OTA.

Cada dispositivo que reciba una actualización OTA utilizando HTTP debe estar registrado como una cosa en AWS IoT y debe tener una política adjunta como la que se muestra aquí. Puede encontrar más información acerca de los elementos de los objetos `"Resource"` y `"Action"` en las [Acciones de la política principal de AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-actions.html) y en los [recursos de acciones principales de AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-action-resources.html).

**Notas**
+ Los permisos `iot:Connect` permiten que su dispositivo se conecte a AWS IoT a través de MQTT. 
+ Los `iot:Subscribe` `iot:Publish` permisos relacionados con los AWS IoT trabajos (`.../jobs/*`) permiten al dispositivo conectado recibir notificaciones y documentos de trabajo, y publicar el estado de finalización de la ejecución de un trabajo.
+ Los `iot:Receive` permisos permiten AWS IoT Core publicar mensajes sobre esos temas en el dispositivo conectado actual. Este permiso se verifica en cada entrega de un mensaje MQTT. Puede utilizar este permiso para revocar el acceso a los clientes que están actualmente suscritos a un tema.