

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.

# Conexión de dispositivos de cliente a los dispositivos principales
<a name="connect-client-devices"></a>

Puede configurar *la detección en la nube* para conectar los dispositivos de cliente a los dispositivos principales. Al configurar la detección en la nube, los dispositivos cliente se pueden conectar al servicio AWS IoT Greengrass en la nube para recuperar información sobre los dispositivos principales a los que se pueden conectar. A continuación, los dispositivos de cliente pueden intentar conectarse a cada dispositivo principal hasta que se conecten correctamente.

Para usar la detección en la nube, debe hacer lo siguiente:
+ Asocie los dispositivos de cliente a los dispositivos principales a los que se pueden conectar.
+ Especifique los puntos de conexión del agente MQTT donde los dispositivos de cliente se pueden conectar a cada dispositivo principal.
+ Implemente componentes en el dispositivo principal que permitan la compatibilidad con los dispositivos de cliente.

  Puede implementar componentes opcionales para hacer lo siguiente:
  + Retransmita mensajes entre los dispositivos cliente, los componentes de Greengrass y el servicio AWS IoT Core en la nube.
  + Administre automáticamente los puntos de conexión del agente MQTT de los dispositivos principales para usted.
  + Gestione las sombras de los dispositivos cliente locales y sincronícelas con el servicio AWS IoT Core en la nube.

También debe revisar y actualizar la AWS IoT política del dispositivo principal para comprobar que tiene los permisos necesarios para conectar los dispositivos cliente. Para obtener más información, consulte [Requisitos](#connect-client-devices-requirements).

Después de configurar la detección en la nube, puede probar las comunicaciones entre un dispositivo de cliente y un dispositivo principal. Para obtener más información, consulte [Prueba de las comunicaciones del dispositivo de cliente](test-client-device-communications.md).

**Topics**
+ [Requisitos](#connect-client-devices-requirements)
+ [Componentes de Greengrass para compatibilidad con dispositivos de cliente](#cloud-discovery-components)
+ [Configuración de la detección en la nube (consola)](#configure-cloud-discovery-console)
+ [Configuración de la detección en la nube (AWS CLI)](#configure-cloud-discovery-cli)
+ [Asociación de los dispositivos de cliente](associate-client-devices.md)
+ [Autenticación de clientes sin conexión](offline-authentication.md)
+ [Administración de puntos de conexión del dispositivo principal](manage-core-device-endpoints.md)
+ [Elección de un agente MQTT](choose-local-mqtt-broker.md)
+ [Conexión de dispositivos cliente a un dispositivo AWS IoT Greengrass Core con un intermediario MQTT](connecting-to-mqtt.md)
+ [Prueba de las comunicaciones del dispositivo de cliente](test-client-device-communications.md)
+ [API de descubrimiento de Greengrass RESTful](greengrass-discover-api.md)

## Requisitos
<a name="connect-client-devices-requirements"></a>

Para conectar dispositivos de cliente a un dispositivo principal, debe contar con lo siguiente:
+ El dispositivo principal debe ejecutar la versión 2.2.0 o posterior del [núcleo de Greengrass](greengrass-nucleus-component.md).
+ La función de servicio de Greengrass asociada a usted AWS IoT Greengrass Cuenta de AWS en la AWS región en la que opera el dispositivo principal. Para obtener más información, consulte [Configuración del rol de servicio de Greengrass](#configure-service-role-requirement).
+ La AWS IoT política del dispositivo principal debe permitir los siguientes permisos:<a name="core-device-iot-policy-client-device-permissions"></a>
  + <a name="core-device-iot-policy-client-device-permissions-putcertificateauthorities"></a>`greengrass:PutCertificateAuthorities`
  + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceidentity"></a>`greengrass:VerifyClientDeviceIdentity`
  + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceiotcertificateassociation"></a>`greengrass:VerifyClientDeviceIoTCertificateAssociation`
  + <a name="core-device-iot-policy-client-device-permissions-getconnectivityinfo"></a>`greengrass:GetConnectivityInfo`
  + <a name="core-device-iot-policy-client-device-permissions-updateconnectivityinfo"></a>`greengrass:UpdateConnectivityInfo`— (Opcional) Este permiso es necesario para utilizar el [componente detector de IP](ip-detector-component.md), que envía la información de conectividad de red del dispositivo principal al servicio AWS IoT Greengrass en la nube.
  + <a name="core-device-iot-policy-client-device-permissions-shadows"></a>`iot:GetThingShadow``iot:UpdateThingShadow`, y `iot:DeleteThingShadow` — (opcional) Estos permisos son necesarios para utilizar el [componente administrador](shadow-manager-component.md) de sombras con el que se sincronizan las sombras de los dispositivos cliente AWS IoT Core. Esta característica requiere la versión 2.6.0 o versiones posteriores del [núcleo de Greengrass](greengrass-nucleus-component.md), la versión 2.2.0 y versiones posteriores del administrador de sombras y la versión 2.2.0 o versiones posteriores del [puente de MQTT](mqtt-bridge-component.md).

  Para obtener más información, consulte [Configure la política de AWS IoT cosas](#configure-iot-policy-requirement).
**nota**  
Si utilizó la AWS IoT política predeterminada al [instalar el software AWS IoT Greengrass Core, el](install-greengrass-core-v2.md) dispositivo principal tiene una AWS IoT política que permite el acceso a todas AWS IoT Greengrass las acciones (`greengrass:*`).
+ AWS IoT cosas que se pueden conectar como dispositivos cliente. Para obtener más información, consulte [Crear recursos de AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/create-iot-resources.html) en la *Guía para desarrolladores de AWS IoT Core *.
+ Un dispositivo de cliente debe conectarse mediante un ID de cliente. Un ID de cliente es el nombre de un objeto. No se aceptará ningún otro ID de cliente.
+ La AWS IoT política de cada dispositivo cliente debe permitir el `greengrass:Discover` permiso. Para obtener más información, consulte [AWS IoT Política mínima para los dispositivos cliente](device-auth.md#client-device-minimal-iot-policy).

**Topics**
+ [Configuración del rol de servicio de Greengrass](#configure-service-role-requirement)
+ [Configure la política de AWS IoT cosas](#configure-iot-policy-requirement)

### Configuración del rol de servicio de Greengrass
<a name="configure-service-role-requirement"></a>

<a name="greengrass-service-role-intro"></a>La función de servicio de Greengrass es una función de servicio AWS Identity and Access Management (IAM) que autoriza el acceso AWS IoT Greengrass a los recursos de los AWS servicios en su nombre. Esta función permite verificar la identidad de AWS IoT Greengrass los dispositivos cliente y administrar la información de conectividad principal de los dispositivos.

Si no ha configurado anteriormente la [función de servicio de Greengrass](greengrass-service-role.md) en esta región, debe asociarle una función de servicio de Greengrass en esta región. AWS IoT Greengrass Cuenta de AWS 

Cuando utiliza la página **Configurar la detección de dispositivos principales** de la [AWS IoT Greengrass consola](https://console.aws.amazon.com/greengrass), AWS IoT Greengrass configura el rol de servicio Greengrass automáticamente. De lo contrario, puede configurarlo manualmente mediante la [AWS IoT consola](https://console.aws.amazon.com/iot) o la AWS IoT Greengrass API.

En esta sección, comprueba si el rol de servicio de Greengrass está configurado. Si no está configurado, crea un nuevo rol de servicio de Greengrass AWS IoT Greengrass para asociarlo con usted Cuenta de AWS en esta región.

#### Configuración del rol de servicio de Greengrass (consola)
<a name="configure-service-role-requirement-console"></a>

1. Compruebe si la función de servicio de Greengrass está asociada AWS IoT Greengrass a su función Cuenta de AWS en esta región. Haga lo siguiente:

   1. <a name="open-iot-console"></a>Vaya a la [consola de AWS IoT](https://console.aws.amazon.com/iot).

   1. En el panel de navegación, seleccione **Configuración**.

   1. En la sección **Rol de servicio de Greengrass**, encuentre **Rol de servicio actual** para ver si hay un rol de servicio de Greengrass asociado.

      Si tiene un rol de servicio de Greengrass asociado, cumple con este requisito para usar el componente detector de IP. Vaya a [Configure la política de AWS IoT cosas](#configure-iot-policy-requirement).

1. Si el rol de servicio de Greengrass no está asociado AWS IoT Greengrass para usted Cuenta de AWS en esta región, cree un rol de servicio de Greengrass y asócielo. Haga lo siguiente:

   1. Vaya a la [consola de IAM](https://console.aws.amazon.com/iam).

   1. Elija **Roles**.

   1. Elija **Crear rol**.

   1. En la página **Crear rol**, haga lo siguiente:

      1. En **Tipo de entidad de confianza**, elija **Servicio de AWS**.

      1. En **Caso de uso**, **Casos de uso para otros Servicios de AWS**, elija **Greengrass** y seleccione **Greengrass**. Esta opción especifica agregarlo AWS IoT Greengrass como entidad de confianza que pueda asumir este rol.

      1. Elija **Siguiente**.

      1. En **Políticas de permisos**, elija la **AWSGreengrassResourceAccessRolePolicy** que desee adjuntar al rol.

      1. Elija **Siguiente**.

      1. En **Nombre del rol**, ingrese un nombre para su rol, por ejemplo, **Greengrass\$1ServiceRole**.

      1. Elija **Crear rol**.

   1. <a name="open-iot-console"></a>Vaya a la [consola de AWS IoT](https://console.aws.amazon.com/iot).

   1. En el panel de navegación, seleccione **Configuración**.

   1. En la sección **rol de servicio de Greengrass**, elija **Adjuntar rol**.

   1. En el cuadro **Actualizar rol de servicio de Greengrass**, elija el rol de IAM que creó y, a continuación, elija **Adjuntar rol**.

#### Configuración del rol de servicio de Greengrass (AWS CLI)
<a name="configure-service-role-requirement-cli"></a>

1. Compruebe si la función de servicio de Greengrass está asociada AWS IoT Greengrass a su función Cuenta de AWS en esta región.

   ```
   aws greengrassv2 get-service-role-for-account
   ```

   Si el rol de servicio de Greengrass está asociado, la operación devuelve una respuesta que contiene información sobre el rol.

   Si tiene un rol de servicio de Greengrass asociado, cumple con este requisito para usar el componente detector de IP. Vaya a [Configure la política de AWS IoT cosas](#configure-iot-policy-requirement).

1. Si el rol de servicio de Greengrass no está asociado AWS IoT Greengrass para usted Cuenta de AWS en esta región, cree un rol de servicio de Greengrass y asócielo. Haga lo siguiente:

   1. <a name="create-greengrass-service-role-step-create-role"></a>Cree un rol con una política de confianza que le permita AWS IoT Greengrass asumir el rol. Este ejemplo crea un rol denominado `Greengrass_ServiceRole`, pero puede utilizar un nombre distinto. Le recomendamos que incluya también las claves de contexto de condición global `aws:SourceArn` y `aws:SourceAccount` en su política de confianza para ayudar a prevenir el problema de seguridad del *suplente confuso*. Las claves de contexto de condición restringen el acceso para permitir solo las solicitudes que provienen de la cuenta especificada y del espacio de trabajo de Greengrass. Para obtener más información sobre el problema del suplente confuso, consulte [Prevención de la sustitución confusa entre servicios](cross-service-confused-deputy-prevention.md).

------
#### [ Linux or Unix ]

      ```
      aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "greengrass.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
              "ArnLike": {
                "aws:SourceArn": "arn:aws:greengrass:region:account-id:*"
              },
              "StringEquals": {
                "aws:SourceAccount": "account-id"
              }
            }
          }
        ]
      }'
      ```

------
#### [ Windows Command Prompt (CMD) ]

      ```
      aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document "{\\"Version\\":\\"2012-10-17		 	 	 \\",\\"Statement\\":[{\\"Effect\\":\\"Allow\\",\\"Principal\\":{\\"Service\\":\\"greengrass.amazonaws.com\\"},\\"Action\\":\\"sts:AssumeRole\\",\\"Condition\\":{\\"ArnLike\\":{\\"aws:SourceArn\\":\\"arn:aws:greengrass:region:account-id:*\\"},\\"StringEquals\\":{\\"aws:SourceAccount\\":\\"account-id\\"}}}]}"
      ```

------
#### [ PowerShell ]

      ```
      aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "greengrass.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
              "ArnLike": {
                "aws:SourceArn": "arn:aws:greengrass:region:account-id:*"
              },
              "StringEquals": {
                "aws:SourceAccount": "account-id"
              }
            }
          }
        ]
      }'
      ```

------

   1. <a name="create-greengrass-service-role-step-copy-role-arn"></a>Copie el ARN del rol de los metadatos del rol en la salida. Puede utilizar el ARN para asociar el rol a su cuenta.

   1. <a name="create-greengrass-service-role-step-attach-policy"></a>Asocie la política de `AWSGreengrassResourceAccessRolePolicy` al rol.

      ```
      aws iam attach-role-policy --role-name Greengrass_ServiceRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy
      ```

   1. Asocie la función de servicio de Greengrass con AWS IoT Greengrass su. Cuenta de AWS*role-arn*Sustitúyalo por el ARN de la función de servicio.

      ```
      aws greengrassv2 associate-service-role-to-account --role-arn role-arn
      ```

      La operación devuelve la siguiente respuesta si tiene éxito.

      ```
      {
        "associatedAt": "timestamp"
      }
      ```

### Configure la política de AWS IoT cosas
<a name="configure-iot-policy-requirement"></a>

Los dispositivos principales usan certificados de dispositivo X.509 para autorizar las conexiones a AWS. Debe adjuntar políticas AWS IoT a los certificados de los dispositivos para definir los permisos de un dispositivo principal. Para obtener más información, consulte [AWS IoT políticas para las operaciones del plano de datos](device-auth.md#iot-policies) y [AWS IoT Política mínima de compatibilidad con los dispositivos cliente](device-auth.md#client-device-support-minimal-iot-policy).

Para conectar los dispositivos cliente a un dispositivo principal, la AWS IoT política del dispositivo principal debe permitir los siguientes permisos:<a name="core-device-iot-policy-client-device-permissions"></a>
+ <a name="core-device-iot-policy-client-device-permissions-putcertificateauthorities"></a>`greengrass:PutCertificateAuthorities`
+ <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceidentity"></a>`greengrass:VerifyClientDeviceIdentity`
+ <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceiotcertificateassociation"></a>`greengrass:VerifyClientDeviceIoTCertificateAssociation`
+ <a name="core-device-iot-policy-client-device-permissions-getconnectivityinfo"></a>`greengrass:GetConnectivityInfo`
+ <a name="core-device-iot-policy-client-device-permissions-updateconnectivityinfo"></a>`greengrass:UpdateConnectivityInfo`— (Opcional) Este permiso es necesario para usar el [componente detector de IP](ip-detector-component.md), que envía la información de conectividad de red del dispositivo principal al servicio AWS IoT Greengrass en la nube.
+ <a name="core-device-iot-policy-client-device-permissions-shadows"></a>`iot:GetThingShadow``iot:UpdateThingShadow`, y `iot:DeleteThingShadow` — (opcional) Estos permisos son necesarios para utilizar el [componente administrador](shadow-manager-component.md) de sombras con el que se sincronizan las sombras de los dispositivos cliente AWS IoT Core. Esta característica requiere la versión 2.6.0 o versiones posteriores del [núcleo de Greengrass](greengrass-nucleus-component.md), la versión 2.2.0 y versiones posteriores del administrador de sombras y la versión 2.2.0 o versiones posteriores del [puente de MQTT](mqtt-bridge-component.md).

En esta sección, revisará las AWS IoT políticas de su dispositivo principal y agregará los permisos necesarios que falten. Si utilizaste el [instalador del software AWS IoT Greengrass principal para aprovisionar recursos](quick-installation.md), tu dispositivo principal tiene una AWS IoT política que permite el acceso a todas AWS IoT Greengrass las acciones (`greengrass:*`). En este caso, solo debe actualizar la AWS IoT política si planea implementar el componente de administrador de sombras para sincronizar las sombras de los dispositivos con él AWS IoT Core. De lo contrario, puede omitir esta sección.

#### Configure la política de AWS IoT cosas (consola)
<a name="configure-iot-policy-requirement-console"></a>

1. <a name="update-iot-policy-console-open-greengrass-console"></a>En el menú de navegación de la [consola de AWS IoT Greengrass](https://console.aws.amazon.com/greengrass), elija **Dispositivos principales**.

1. <a name="update-iot-policy-console-choose-core-device"></a>En la página **Dispositivos principales**, elija el dispositivo principal que desea actualizar.

1. <a name="update-iot-policy-console-choose-core-device-thing"></a>En la página de detalles del dispositivo principal, elija el enlace al **Objeto** del dispositivo principal. Este enlace abre la página de detalles del objeto en la consola de AWS IoT .

1. <a name="update-iot-policy-console-choose-thing-security"></a>En la página de detalles del objeto, elija **Certificados**.

1. <a name="update-iot-policy-console-choose-thing-certificate"></a>En la pestaña **Certificados**, elija el certificado activo del objeto.

1. <a name="update-iot-policy-console-choose-certificate-policies"></a>En la página de detalles del certificado, elija **Políticas**.

1. <a name="update-iot-policy-console-choose-policy"></a>En la pestaña **Políticas**, elija la AWS IoT política que desee revisar y actualizar. Puede agregar los permisos necesarios a cualquier política que esté asociada al certificado activo del dispositivo principal.
**nota**  <a name="quick-installation-iot-policies-note"></a>
Si ha utilizado el [instalador de software AWS IoT Greengrass principal para aprovisionar recursos](quick-installation.md), tiene dos AWS IoT políticas. Le recomendamos que elija la política denominada **GreengrassV2IoTThingPolicy**, si existe. Los dispositivos principales que cree con el instalador rápido usan este nombre de política de forma predeterminada. Si agrega permisos a esta política, también los otorga a otros dispositivos principales que usan esta política.

1. <a name="update-iot-policy-console-edit-policy"></a>En la descripción general de la política, elija **Editar la versión activa**.

1. Revise la política para ver los permisos necesarios y agregue los permisos necesarios que falten.<a name="core-device-iot-policy-client-device-permissions"></a>
   + <a name="core-device-iot-policy-client-device-permissions-putcertificateauthorities"></a>`greengrass:PutCertificateAuthorities`
   + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceidentity"></a>`greengrass:VerifyClientDeviceIdentity`
   + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceiotcertificateassociation"></a>`greengrass:VerifyClientDeviceIoTCertificateAssociation`
   + <a name="core-device-iot-policy-client-device-permissions-getconnectivityinfo"></a>`greengrass:GetConnectivityInfo`
   + <a name="core-device-iot-policy-client-device-permissions-updateconnectivityinfo"></a>`greengrass:UpdateConnectivityInfo`— (Opcional) Este permiso es necesario para utilizar el [componente de detección de IP](ip-detector-component.md), que envía la información de conectividad de red del dispositivo principal al servicio AWS IoT Greengrass en la nube.
   + <a name="core-device-iot-policy-client-device-permissions-shadows"></a>`iot:GetThingShadow``iot:UpdateThingShadow`, y `iot:DeleteThingShadow` — (opcional) Estos permisos son necesarios para utilizar el [componente administrador](shadow-manager-component.md) de sombras con el que se sincronizan las sombras de los dispositivos cliente AWS IoT Core. Esta característica requiere la versión 2.6.0 o versiones posteriores del [núcleo de Greengrass](greengrass-nucleus-component.md), la versión 2.2.0 y versiones posteriores del administrador de sombras y la versión 2.2.0 o versiones posteriores del [puente de MQTT](mqtt-bridge-component.md).

1. (Opcional) Para permitir que el dispositivo principal se sincronice con las sombras AWS IoT Core, añada la siguiente declaración a la política. Si planea interactuar con las sombras de los dispositivos cliente, pero no sincronizarlas con ellas AWS IoT Core, omita este paso. Sustituya *region* y *account-id* por la región que utilice y su Cuenta de AWS número.
   + Esta instrucción de ejemplo permite acceder a las sombras de dispositivos de todos los objetos. Para seguir las prácticas recomendadas de seguridad, puede restringir el acceso únicamente al dispositivo principal y a los dispositivos de cliente que conecte al dispositivo principal. Para obtener más información, consulte [AWS IoT Política mínima de compatibilidad con los dispositivos cliente](device-auth.md#client-device-support-minimal-iot-policy).

   ```
   {
     "Effect": "Allow",
     "Action": [
       "iot:GetThingShadow",
       "iot:UpdateThingShadow",
       "iot:DeleteThingShadow"
     ],
     "Resource": [
       "arn:aws:iot:region:account-id:thing/*"
     ]
   }
   ```

   Después de agregar esta instrucción, el documento de política tendrá un aspecto semejante al del siguiente ejemplo.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "iot:Connect",
           "iot:Publish",
           "iot:Subscribe",
           "iot:Receive",
           "greengrass:*"
         ],
         "Resource": "*"
       },
       {
         "Effect": "Allow",
         "Action": [
           "iot:GetThingShadow",
           "iot:UpdateThingShadow",
           "iot:DeleteThingShadow"
         ],
         "Resource": [
           "arn:aws:iot:us-east-1:123456789012:thing/*"
         ]
       }
     ]
   }
   ```

------

1. <a name="update-iot-policy-console-set-as-active-version"></a>Para establecer una nueva versión de la política como la versión activa, en **Estado de la versión de la política**, seleccione **Establecer la versión editada como la versión activa de esta política**.

1. <a name="update-iot-policy-console-save-policy"></a>Seleccione **Guardar como versión nueva**.

#### Configura la política de AWS IoT cosas (AWS CLI)
<a name="configure-iot-policy-requirement-cli"></a>

1. <a name="update-iot-policy-cli-list-thing-principals"></a>Enumere los principios del AWS IoT dispositivo principal. Las entidades principales del objeto pueden ser certificados de dispositivo X.509 u otros identificadores. Ejecute el siguiente comando y *MyGreengrassCore* sustitúyalo por el nombre del dispositivo principal.

   ```
   aws iot list-thing-principals --thing-name MyGreengrassCore
   ```

   La operación devuelve una respuesta que enumera las entidades principales del objeto del dispositivo principal.

   ```
   {
       "principals": [
           "arn:aws:iot:us-west-2:123456789012:cert/certificateId"
       ]
   }
   ```

1. <a name="update-iot-policy-cli-identify-active-certificate"></a>Identifique el certificado activo del dispositivo principal. Ejecute el siguiente comando y *certificateId* sustitúyalo por el ID de cada certificado del paso anterior hasta que encuentre el certificado activo. El ID del certificado es la cadena hexadecimal que se encuentra al final del ARN del certificado. El argumento `--query` especifica que solo se muestre el estado del certificado.

   ```
   aws iot describe-certificate --certificate-id certificateId --query 'certificateDescription.status'
   ```

   La operación devuelve el estado del certificado en forma de cadena. Por ejemplo, si el certificado está activo, la operación muestra `"ACTIVE"`.

1. <a name="update-iot-policy-cli-list-certificate-policies"></a>Enumere las AWS IoT políticas que se adjuntan al certificado. Ejecute el siguiente comando y reemplace ARN del certificado por el ARN del certificado.

   ```
   aws iot list-principal-policies --principal arn:aws:iot:us-west-2:123456789012:cert/certificateId
   ```

   La operación devuelve una respuesta en la que se enumeran AWS IoT las políticas adjuntas al certificado.

   ```
   {
       "policies": [
           {
               "policyName": "GreengrassTESCertificatePolicyMyGreengrassCoreTokenExchangeRoleAlias",
               "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassTESCertificatePolicyMyGreengrassCoreTokenExchangeRoleAlias"
           },
           {
               "policyName": "GreengrassV2IoTThingPolicy",
               "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy"
           }
       ]
   }
   ```

1. <a name="update-iot-policy-cli-choose-policy"></a>Elija la política que desee ver y actualizar.
**nota**  <a name="quick-installation-iot-policies-note"></a>
Si utilizó el [instalador de software AWS IoT Greengrass principal para aprovisionar recursos](quick-installation.md), tiene dos AWS IoT políticas. Le recomendamos que elija la política denominada **GreengrassV2IoTThingPolicy**, si existe. Los dispositivos principales que cree con el instalador rápido usan este nombre de política de forma predeterminada. Si agrega permisos a esta política, también los otorga a otros dispositivos principales que usan esta política.

1. <a name="update-iot-policy-cli-get-policy-document"></a>Obtenga el documento de la política. Ejecute el siguiente comando y *GreengrassV2IoTThingPolicy* sustitúyalo por el nombre de la política.

   ```
   aws iot get-policy --policy-name GreengrassV2IoTThingPolicy
   ```

   La operación devuelve una respuesta que contiene el documento de política y otra información sobre la política. El documento de política es un objeto JSON serializado como una cadena. 

   ```
   {
       "policyName": "GreengrassV2IoTThingPolicy",
       "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy",
       "policyDocument": "{\
     \\"Version\\": \\"2012-10-17		 	 	 \\",\
     \\"Statement\\": [\
       {\
         \\"Effect\\": \\"Allow\\",\
         \\"Action\\": [\
                   \\"iot:Connect\\",\
                   \\"iot:Publish\\",\
                   \\"iot:Subscribe\\",\
                   \\"iot:Receive\\",\
                   \\"greengrass:*\\"\
   ],\
         \\"Resource\\": \\"*\\"\
       }\
     ]\
   }",
       "defaultVersionId": "1",
       "creationDate": "2021-02-05T16:03:14.098000-08:00",
       "lastModifiedDate": "2021-02-05T16:03:14.098000-08:00",
       "generationId": "f19144b798534f52c619d44f771a354f1b957dfa2b850625d9f1d0fde530e75f"
   }
   ```

1. <a name="update-iot-policy-cli-create-policy-document-file"></a>Use un conversor en línea u otra herramienta para convertir la cadena del documento de la política en un objeto JSON y, a continuación, guárdela en un archivo denominado `iot-policy.json`.

   Por ejemplo, si tiene instalada la herramienta [jq](https://stedolan.github.io/jq/), puede ejecutar el siguiente comando para obtener el documento de la política, convertirlo en un objeto JSON y guardar el documento de la política como un objeto JSON.

   ```
   aws iot get-policy --policy-name GreengrassV2IoTThingPolicy --query 'policyDocument' | jq fromjson >> iot-policy.json
   ```

1. Revise la política para ver los permisos necesarios y agregue los permisos necesarios que falten.

   <a name="nano-command-intro-existing-file"></a>Por ejemplo, en un sistema basado en Linux, puede ejecutar el siguiente comando para usar GNU nano para abrir el archivo.

   ```
   nano iot-policy.json
   ```<a name="core-device-iot-policy-client-device-permissions"></a>
   + <a name="core-device-iot-policy-client-device-permissions-putcertificateauthorities"></a>`greengrass:PutCertificateAuthorities`
   + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceidentity"></a>`greengrass:VerifyClientDeviceIdentity`
   + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceiotcertificateassociation"></a>`greengrass:VerifyClientDeviceIoTCertificateAssociation`
   + <a name="core-device-iot-policy-client-device-permissions-getconnectivityinfo"></a>`greengrass:GetConnectivityInfo`
   + <a name="core-device-iot-policy-client-device-permissions-updateconnectivityinfo"></a>`greengrass:UpdateConnectivityInfo`— (Opcional) Este permiso es necesario para usar el [componente detector de IP](ip-detector-component.md), que envía la información de conectividad de red del dispositivo principal al servicio AWS IoT Greengrass en la nube.
   + <a name="core-device-iot-policy-client-device-permissions-shadows"></a>`iot:GetThingShadow``iot:UpdateThingShadow`, y `iot:DeleteThingShadow` — (opcional) Estos permisos son necesarios para utilizar el [componente administrador](shadow-manager-component.md) de sombras con el que se sincronizan las sombras de los dispositivos cliente AWS IoT Core. Esta característica requiere la versión 2.6.0 o versiones posteriores del [núcleo de Greengrass](greengrass-nucleus-component.md), la versión 2.2.0 y versiones posteriores del administrador de sombras y la versión 2.2.0 o versiones posteriores del [puente de MQTT](mqtt-bridge-component.md).

1. <a name="update-iot-policy-cli-create-policy-version"></a>Guarde los cambios como una nueva versión de la política. Ejecute el siguiente comando y *GreengrassV2IoTThingPolicy* sustitúyalo por el nombre de la política.

   ```
   aws iot create-policy-version --policy-name GreengrassV2IoTThingPolicy --policy-document file://iot-policy.json --set-as-default
   ```

   Si se realiza correctamente, la operación devuelve una respuesta similar a la del siguiente ejemplo.

   ```
   {
       "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy",
       "policyDocument": "{\
     \\"Version\\": \\"2012-10-17		 	 	 \\",\
     \\"Statement\\": [\
       {\
         \\"Effect\\": \\"Allow\\",\
         \\"Action\\": [\
   \\t\\t\\"iot:Connect\\",\
   \\t\\t\\"iot:Publish\\",\
   \\t\\t\\"iot:Subscribe\\",\
   \\t\\t\\"iot:Receive\\",\
   \\t\\t\\"greengrass:*\\"\
         ],\
         \\"Resource\\": \\"*\\"\
       }\
     ]\
   }",
       "policyVersionId": "2",
       "isDefaultVersion": true
   }
   ```

## Componentes de Greengrass para compatibilidad con dispositivos de cliente
<a name="cloud-discovery-components"></a>

**importante**  <a name="client-device-support-nucleus-requirement"></a>
El dispositivo principal debe ejecutar la versión 2.2.0 o posterior del [núcleo de Greengrass](greengrass-nucleus-component.md) para que sea compatible con los dispositivos de cliente.

Para permitir que los dispositivos de cliente se conecten y se comuniquen con un dispositivo principal, debe implementar los siguientes componentes de Greengrass en el dispositivo principal:
+ <a name="client-device-component-overview-client-device-auth"></a>[Autenticación del dispositivo de cliente](client-device-auth-component.md) (`aws.greengrass.clientdevices.Auth`)

  Implemente el componente de autenticación del dispositivo de cliente para autenticar los dispositivos de cliente y autorizar las acciones de los dispositivos de cliente. Este componente permite AWS IoT que tus cosas se conecten a un dispositivo principal.

  Este componente requiere alguna configuración para poder usarlo. Debe especificar los grupos de dispositivos de cliente y las operaciones que cada grupo está autorizado a realizar, como conectarse y comunicarse a través de MQTT. Para obtener más información, consulte [configuración del componente de autenticación del dispositivo de cliente](client-device-auth-component.md#client-device-auth-component-configuration).
+ <a name="client-device-component-overview-mqtt-broker-moquette"></a>[Agente MQTT 3.1.1 (Moquette)](mqtt-broker-moquette-component.md) (`aws.greengrass.clientdevices.mqtt.Moquette`)

  Implemente el componente agente MQTT de Moquette para ejecutar un agente MQTT ligero. El agente MQTT de Moquette es compatible con MQTT 3.1.1 e incluye compatibilidad local para QoS 0, QoS 1, QoS 2, mensajes retenidos, mensajes de última voluntad y suscripciones persistentes.

  No es necesario configurar este componente para usarlo. Sin embargo, puede configurar el puerto donde este componente hace funcionar el agente MQTT. Usa el puerto 8883 de manera predeterminada.
+ <a name="client-device-component-overview-mqtt-broker-emqx"></a>[Agente MQTT 5 (EMQX)](mqtt-broker-emqx-component.md) (`aws.greengrass.clientdevices.mqtt.EMQX`)
**nota**  
Para usar el agente MQTT 5 de EMQX, debe usar la versión 2.6.0 o posterior del [núcleo de Greengrass](greengrass-nucleus-component.md) y la versión 2.2.0 o posterior de la autenticación del dispositivo de cliente.

  Implemente el componente agente MQTT de EMQX para usar las características de MQTT 5.0 en la comunicación entre los dispositivos de cliente y el dispositivo principal. El agente MQTT de EMQX es compatible con MQTT 5.0 e incluye compatibilidad para los intervalos de caducidad de las sesiones y los mensajes, las propiedades de los usuarios, las suscripciones compartidas, los alias de los temas y más.

  No es necesario configurar este componente para usarlo. Sin embargo, puede configurar el puerto donde este componente hace funcionar el agente MQTT. Usa el puerto 8883 de manera predeterminada.
+ <a name="client-device-component-overview-mqtt-bridge"></a>[Puente MQTT](mqtt-bridge-component.md) (`aws.greengrass.clientdevices.mqtt.Bridge`)

  (Opcional) Implemente el componente puente MQTT para retransmitir mensajes entre los dispositivos cliente (MQTT local), la publicación/suscripción local y el MQTT. AWS IoT Core Configure este componente para sincronizar los dispositivos cliente AWS IoT Core e interactuar con los dispositivos cliente de los componentes de Greengrass.

  Para poder usar este componente, es necesario configurarlo. Debe especificar las asignaciones de temas en las que este componente retransmite los mensajes. Para obtener más información, consulte la [configuración del componente puente de MQTT](mqtt-bridge-component.md#mqtt-bridge-component-configuration).
+ <a name="client-device-component-overview-ip-detector"></a>[Detector de IP](ip-detector-component.md) (`aws.greengrass.clientdevices.IPDetector`)

  (Opcional) Implemente el componente detector de IP para informar automáticamente al servicio en la nube de los puntos finales del agente MQTT del AWS IoT Greengrass dispositivo principal. No puede usar este componente si tiene una configuración de red compleja, como una en la que un enrutador reenvía el puerto agente MQTT al dispositivo principal.

  No es necesario configurar este componente para usarlo.
+ <a name="client-device-component-overview-shadow-manager"></a>[Administrador de sombras](shadow-manager-component.md) (`aws.greengrass.ShadowManager`)
**nota**  
Para administrar las sombras de dispositivos de cliente, debe usar la versión 2.6.0 o posterior del [núcleo de Greengrass](greengrass-nucleus-component.md), la versión 2.2.0 o posterior del administrador de sombras y la versión 2.2.0 o posterior del [puente de MQTT](mqtt-bridge-component.md).

  (Opcional) Implemente el componente administrador de sombras para administrar las sombras de dispositivos de cliente en el dispositivo principal. Los componentes de Greengrass pueden obtener, actualizar y eliminar las sombras de dispositivos de cliente para interactuar con los dispositivos de cliente. También puede configurar el componente administrador de sombras para sincronizar las sombras de los dispositivos cliente con el servicio en la AWS IoT Core nube.

  Para usar este componente con las sombras de dispositivos de cliente, debe configurar el componente puente de MQTT para que retransmita los mensajes entre los dispositivos de cliente y el administrador de sombras, que usa la función de publicación/suscripción local. De lo contrario, no es necesario configurar este componente para su uso, pero sí para sincronizar las sombras de dispositivos.

**nota**  <a name="note-deploy-one-mqtt-broker"></a>
Se recomienda implementar solo un componente agente MQTT. Los componentes [puente de MQTT](mqtt-bridge-component.md) y [detector de IP](ip-detector-component.md) solo funcionan con un componente agente MQTT a la vez. Si implementa varios componentes agente de MQTT, debe configurarlos para que usen puertos diferentes.

## Configuración de la detección en la nube (consola)
<a name="configure-cloud-discovery-console"></a>

Puede usar la AWS IoT Greengrass consola para asociar los dispositivos cliente, administrar los puntos finales de los dispositivos principales e implementar componentes para habilitar la compatibilidad con los dispositivos cliente. Para obtener más información, consulte [Paso 2: Habilitar la compatibilidad del dispositivo de cliente](client-devices-tutorial.md#enable-client-device-support).

## Configuración de la detección en la nube (AWS CLI)
<a name="configure-cloud-discovery-cli"></a>

Puede usar AWS Command Line Interface (AWS CLI) para asociar los dispositivos cliente, administrar los puntos finales de los dispositivos principales e implementar componentes para habilitar la compatibilidad con los dispositivos del cliente. Para obtener más información, consulte los siguientes temas:
+ [Administración de las asociaciones de dispositivos de cliente (AWS CLI)](associate-client-devices.md#manage-client-device-associations-cli)
+ [Administración de puntos de conexión del dispositivo principal](manage-core-device-endpoints.md)
+ [Componentes de dispositivo de cliente proporcionados por AWS](client-device-components.md)
+ [Crear implementaciones](create-deployments.md)

# Asociación de los dispositivos de cliente
<a name="associate-client-devices"></a>

Para usar la detección en la nube, asocie los dispositivos de cliente a un dispositivo principal para que puedan detectar el dispositivo principal. A continuación, pueden usar la [API de detección de Greengrass](greengrass-discover-api.md) para recuperar la información de conectividad y los certificados de sus dispositivos principales asociados.

Del mismo modo, desasocie los dispositivos de cliente de un dispositivo principal para evitar que detecten el dispositivo principal.

**Topics**
+ [Administración de las asociaciones de dispositivos de cliente (consola)](#manage-client-device-associations-console)
+ [Administración de las asociaciones de dispositivos de cliente (AWS CLI)](#manage-client-device-associations-cli)
+ [Administración de las asociaciones de dispositivos de cliente (API)](#manage-client-device-associations-api)

## Administración de las asociaciones de dispositivos de cliente (consola)
<a name="manage-client-device-associations-console"></a>

Puede usar la AWS IoT Greengrass consola para ver, agregar y eliminar asociaciones de dispositivos cliente.

**Visualización de las asociaciones de dispositivos de cliente de un dispositivo principal (consola)**

1. <a name="navigate-greengrass-console"></a>Vaya a la [consola de AWS IoT Greengrass](https://console.aws.amazon.com/greengrass).

1. Elija **Dispositivos principales**.

1. Elija el dispositivo principal que desee administrar.

1. En la página de detalles del dispositivo principal, elija la pestaña **Client devices (Dispositivos cliente)**.

1. En la sección **Dispositivos cliente asociados**, puede ver qué dispositivos (AWS IoT cosas) cliente están asociados al dispositivo principal.

**Asociación de los dispositivos de cliente al dispositivo principal (consola)**

1. <a name="navigate-greengrass-console"></a>Vaya a la [consola de AWS IoT Greengrass](https://console.aws.amazon.com/greengrass).

1. Elija **Dispositivos principales**.

1. Elija el dispositivo principal que desee administrar.

1. En la página de detalles del dispositivo principal, elija la pestaña **Client devices (Dispositivos cliente)**.

1. En la sección **Associated client devices (Dispositivos cliente asociados)**, seleccione **Associate client devices (Asociar dispositivos cliente)**.

1. En el modal **Associate client devices with core device (Asociar dispositivos cliente a dispositivos principales)**, haga lo siguiente para cada dispositivo cliente que desee asociar:

   1. Introduzca el nombre del elemento AWS IoT que desee asociar como dispositivo cliente.

   1. Elija **Add (Añadir)**.

1. Elija **Associate (Asociar)**.

   Los dispositivos cliente que asoció ahora pueden usar la API de detección de Greengrass para detectar este dispositivo principal.

**Desasociación de dispositivos de cliente de un dispositivo principal (consola)**

1. <a name="navigate-greengrass-console"></a>Vaya a la [consola de AWS IoT Greengrass](https://console.aws.amazon.com/greengrass).

1. Elija **Dispositivos principales**.

1. Elija el dispositivo principal que desee administrar.

1. En la página de detalles del dispositivo principal, elija la pestaña **Client devices (Dispositivos cliente)**.

1. En la sección **Dispositivos de cliente asociados**, elija cada dispositivo de cliente para desasociar.

1. Elija **Desasociar**.

1. En el cuadro de confirmación, elija **Desasociar**.

   Los dispositivos de cliente que desasoció ahora no pueden usar la API de detección de Greengrass para detectar este dispositivo principal.

## Administración de las asociaciones de dispositivos de cliente (AWS CLI)
<a name="manage-client-device-associations-cli"></a>

Puede usar AWS Command Line Interface (AWS CLI) para administrar las asociaciones de dispositivos cliente de un dispositivo principal.

**Visualización de las asociaciones de dispositivos de cliente de un dispositivo principal (AWS CLI)**
+ Use el siguiente comando: [list-client-devices-associated- with-core-device](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/list-client-devices-associated-with-core-device.html).

**Asociación de los dispositivos de cliente al dispositivo principal (AWS CLI)**
+ Use el siguiente comando: [batch-associate-client-device- with-core-device](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/batch-associate-client-device-with-core-device.html).

**Desasociación de los dispositivos de cliente de un dispositivo principal (AWS CLI)**
+ Use el siguiente comando: [batch-disassociate-client-device- from-core-device](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/batch-disassociate-client-device-from-core-device.html).

## Administración de las asociaciones de dispositivos de cliente (API)
<a name="manage-client-device-associations-api"></a>

Puede usar la AWS API para administrar las asociaciones de dispositivos cliente de un dispositivo principal.

**Para ver las asociaciones de dispositivos cliente de un dispositivo principal (AWS API)**
+ Utilice la siguiente operación: [ListClientDevicesAssociatedWithCoreDevice](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_ListClientDevicesAssociatedWithCoreDevice.html).

**Para asociar dispositivos cliente a un dispositivo principal (AWS API)**
+ Utilice la siguiente operación: [BatchAssociateClientDeviceWithCoreDevice](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_BatchAssociateClientDeviceWithCoreDevice.html).

**Para desasociar los dispositivos cliente de un dispositivo principal (AWS API)**
+ Utilice la siguiente operación: [BatchDisassociateClientDeviceFromCoreDevice](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_BatchDisassociateClientDeviceFromCoreDevice.html).

# Autenticación de clientes sin conexión
<a name="offline-authentication"></a>

Con la *autenticación sin conexión*, puede configurar su dispositivo AWS IoT Greengrass principal para que los dispositivos cliente puedan conectarse a un dispositivo principal, incluso cuando el dispositivo principal no esté conectado a la nube. Cuando utiliza la autenticación sin conexión, sus dispositivos de Greengrass pueden seguir funcionando en un entorno parcialmente desconectado.

Para utilizar la autenticación sin conexión en un dispositivo de cliente con conexión a la nube, necesita lo siguiente:
+ Un dispositivo AWS IoT Greengrass Core con el [Autenticación del dispositivo de cliente](client-device-auth-component.md) componente implementado. Debe utilizar la versión 2.3.0 o posterior para la autenticación sin conexión.
+ Una conexión a la nube para el dispositivo principal durante la conexión inicial de los dispositivos de cliente.

## Almacenamiento de credenciales del cliente
<a name="offline-auth-store-credentials"></a>

Cuando un dispositivo cliente se conecta a un dispositivo principal por primera vez, el dispositivo principal llama al AWS IoT Greengrass servicio. Cuando se llama, Greengrass valida el registro del dispositivo de cliente como un objeto AWS IoT . También valida que el dispositivo tenga un certificado válido. El dispositivo principal almacena esta información de forma local.

La próxima vez que el dispositivo se conecte, el dispositivo principal de Greengrass intentará validar el dispositivo cliente con el AWS IoT Greengrass servicio. Si no se puede conectar AWS IoT Greengrass, el dispositivo principal utilizará la información del dispositivo almacenada localmente para validar el dispositivo cliente.

Puede configurar el tiempo durante el que el dispositivo principal de Greengrass almacena las credenciales. Puede establecer el tiempo de espera de un minuto a 2 147 483 647 minutos con la opción de configuración `clientDeviceTrustDurationMinutes` de la configuración del [componente de autenticación del dispositivo de cliente](https://docs.aws.amazon.com//greengrass/v2/developerguide/client-device-auth-component.html#client-device-auth-component-configuration). El valor predeterminado es un minuto, lo que desactiva de forma efectiva la autenticación sin conexión. Cuando establezca este tiempo de espera, le recomendamos que tenga en cuenta sus necesidades de seguridad. También debe tener en cuenta cuánto tiempo espera que funcionen los dispositivos principales mientras estén desconectados de la nube.

El dispositivo principal actualiza su almacenamiento de credenciales tres veces:

1. Cuando un dispositivo se conecta al dispositivo principal por primera vez.

1. Si el dispositivo principal está conectado a la nube, cuando un dispositivo de cliente se vuelve a conectar al dispositivo principal.

1. Si el dispositivo principal está conectado a la nube, una vez al día para actualizar todo el almacén de credenciales.

Cuando el dispositivo principal de Greengrass actualiza su almacén de credenciales, utiliza la operación. [ ListClientDevicesAssociatedWithCoreDevice](https://docs.aws.amazon.com//greengrass/v2/APIReference/API_ListClientDevicesAssociatedWithCoreDevice.html) Greengrass solo actualiza los dispositivos devueltos por esta operación. Para asociar los dispositivos de cliente al dispositivo principal, consulte [Asociación de los dispositivos de cliente](associate-client-devices.md).

Para usar la `ListClientDevicesAssociatedWithCoreDevice` operación, debe añadir el permiso para la operación al rol AWS Identity and Access Management (IAM) asociado a la operación que se está ejecutando. Cuenta de AWS AWS IoT Greengrass Para obtener más información, consulte [Autorizar a los dispositivos principales a interactuar con AWS los servicios](device-service-role.md).

# Administración de puntos de conexión del dispositivo principal
<a name="manage-core-device-endpoints"></a>

Cuando utiliza la detección en la nube, almacena los puntos de conexión del agente de MQTT para los dispositivos principales en el servicio en la nube de AWS IoT Greengrass . Los dispositivos cliente se conectan AWS IoT Greengrass para recuperar estos puntos finales y otra información para sus dispositivos principales asociados.

Para cada dispositivo principal, puede administrar los puntos de conexión de forma automática o manual.
+ **Administración automática de los puntos de conexión con un detector de IP**

  Puede implementar el [componente detector de IP](ip-detector-component.md) para administrar automáticamente los puntos de conexión de los dispositivos principales si tiene una configuración de red no compleja, por ejemplo, si los dispositivos cliente están en la misma red que el dispositivo principal. No puede utilizar el componente detector de IP si el dispositivo principal está detrás de un enrutador que reenvía el puerto agente de MQTT al dispositivo principal, por ejemplo.

  El componente detector de IP también es útil si se implementa en grupos de objetos, ya que administra los puntos de conexión de todos los dispositivos principales del grupo de objetos. Para obtener más información, consulte [Uso del detector de IP para administrar automáticamente los puntos de conexión](#use-ip-detector).
+ **Administración manual de los puntos de conexión**

  Si no puede utilizar el componente detector de IP, debe administrar manualmente los puntos de conexión de los dispositivos principales. Puede actualizar estos puntos de conexión con la consola o la API. Para obtener más información, consulte [Administración manual de los puntos de conexión](#manually-manage-endpoints).

**Topics**
+ [Uso del detector de IP para administrar automáticamente los puntos de conexión](#use-ip-detector)
+ [Administración manual de los puntos de conexión](#manually-manage-endpoints)

## Uso del detector de IP para administrar automáticamente los puntos de conexión
<a name="use-ip-detector"></a>

Si tiene una configuración de red sencilla, como los dispositivos de cliente en la misma red que el dispositivo principal, puede implementar el [componente detector de IP](ip-detector-component.md) para hacer lo siguiente:
+ Supervise la información de conectividad de red local del dispositivo principal de Greengrass. Esta información incluye los puntos de conexión de la red del dispositivo principal y el puerto en el que opera el agente de MQTT.
+ Informe la información de conectividad del dispositivo principal al servicio AWS IoT Greengrass en la nube.

El componente detector de IP sobrescribe los puntos de conexión que se configuran manualmente.

**importante**  
La AWS IoT política del dispositivo principal debe permitir el `greengrass:UpdateConnectivityInfo` permiso para usar el componente detector de IP. Para obtener más información, consulte [AWS IoT políticas para las operaciones del plano de datos](device-auth.md#iot-policies) y [Configure la política de AWS IoT cosas](connect-client-devices.md#configure-iot-policy-requirement).

Puede realizar uno de los siguientes procedimientos para implementar el componente detector de IP:
+ Utilice la página **Configurar la detección** en la consola. Para obtener más información, consulte [Configuración de la detección en la nube (consola)](connect-client-devices.md#configure-cloud-discovery-console).
+ Cree y revise las implementaciones para incluir el detector de IP. Puede usar la consola o la AWS API para administrar las implementaciones. AWS CLI Para obtener más información, consulte [Crear implementaciones](create-deployments.md).

### Implementación del componente detector de IP (consola)
<a name="deploy-ip-detector-console"></a>

1. En el menú de navegación de la [consola de AWS IoT Greengrass](https://console.aws.amazon.com/greengrass), elija **Componentes**.

1. En la página **Componentes**, elija la pestaña **Componentes públicos** y, luego, elija **aws.greengrass.clientdevices.IPDetector**.

1. En la página **aws.greengrass.clientdevices.IPDetector**, elija **Implementar**.

1. <a name="deploy-component-choose-deployment-step"></a>En **Agregar a la implementación**, elija una implementación existente para revisarla o cree una nueva y, a continuación, elija **Siguiente**.

1. <a name="deploy-component-choose-target-step"></a>Si opta por crear una nueva implementación, elija el dispositivo principal o el grupo de objetos de destino para la implementación. En la página **Especificar el destino**, en **Destino de la implementación**, elija un dispositivo principal o un grupo de objetos y, a continuación, elija **Siguiente**.

1. En la página **Seleccionar componentes**, compruebe que el componente **aws.greengrass.clientdevices.IPDetector** esté seleccionado y elija **Siguiente**.

1. En la página **Configurar componentes**, seleccione **aws.greengrass.clientdevices.IPDetector** y haga lo siguiente:

   1. Seleccione **Configurar componente**.

   1. En el cuadro **Configurar aws.greengrass.clientdevices.IPDetector**, en **Actualizar configuración**, en **Configuración para combinar**, puede introducir una actualización de configuración para configurar el componente detector de IP. Puede especificar una de las siguientes opciones de configuración:
      + `defaultPort`: <a name="ip-detector-component-configuration-default-port-definition"></a>(opcional) el puerto del agente MQTT para informar cuando este componente detecta direcciones IP. Debe especificar este parámetro si configura el agente MQTT para que utilice un puerto diferente al puerto predeterminado 8883. 
      + `includeIPv4LoopbackAddrs`— <a name="ip-detector-component-configuration-include-ipv4-loopback-addrs-definition"></a>(Opcional) Puede habilitar esta opción para detectar y reportar las direcciones de IPv4 bucle invertido. Estas son direcciones IP, por ejemplo, `localhost`, donde un dispositivo puede comunicarse consigo mismo. Utilice esta opción en entornos de prueba en los que el dispositivo principal y el dispositivo de cliente se ejecuten en el mismo sistema. 
      + `includeIPv4LinkLocalAddrs`— <a name="ip-detector-component-configuration-include-ipv4-link-local-addrs-definition"></a>(Opcional) Puede activar esta opción para detectar e informar sobre las direcciones locales de los IPv4 [enlaces](https://en.wikipedia.org/wiki/Link-local_address). Utilice esta opción si la red del dispositivo principal no tiene el Protocolo de configuración dinámica de host (DHCP) ni direcciones IP asignadas de forma estática. 
      + `includeIPv6LoopbackAddrs`— <a name="ip-detector-component-configuration-include-ipv6-loopback-addrs-definition"></a>(Opcional) Puede activar esta opción para detectar e informar sobre las direcciones de IPv6 bucle invertido. Estas son direcciones IP, por ejemplo, `localhost`, donde un dispositivo puede comunicarse consigo mismo. Utilice esta opción en entornos de prueba en los que el dispositivo principal y el dispositivo de cliente se ejecuten en el mismo sistema. Debe configurar `includeIPv4Addrs` en `false` y `includeIPv6Addrs` en `true` para utilizar esta opción. Debe tener el detector de IP versión 2.2.0 o posterior para usar esta opción.
      + `includeIPv6LinkLocalAddrs`— <a name="ip-detector-component-configuration-include-ipv6-link-local-addrs-definition"></a>(Opcional) Puede activar esta opción para detectar e informar sobre las direcciones locales de los IPv6 [enlaces](https://en.wikipedia.org/wiki/Link-local_address). Utilice esta opción si la red del dispositivo principal no tiene el Protocolo de configuración dinámica de host (DHCP) ni direcciones IP asignadas de forma estática. Debe configurar `includeIPv4Addrs` en `false` y `includeIPv6Addrs` en `true` para utilizar esta opción. Debe tener el detector de IP versión 2.2.0 o posterior para usar esta opción.
      + `includeIPv4Addrs`: <a name="ip-detector-component-configuration-include-ipv4-addrs-definition"></a>(opcional) el valor predeterminado está establecido en verdadero. Puede activar esta opción para publicar IPv4 las direcciones que se encuentran en el dispositivo principal. Debe tener el detector de IP versión 2.2.0 o posterior para usar esta opción.
      + `includeIPv6Addrs`— <a name="ip-detector-component-configuration-include-ipv6-addrs-definition"></a>(Opcional) Puede activar esta opción para publicar IPv6 las direcciones que se encuentran en el dispositivo principal. Configure `includeIPv4Addrs` en `false` para usar esta opción. Debe tener el detector de IP versión 2.2.0 o posterior para usar esta opción.

      La actualización de la configuración podría parecerse al siguiente ejemplo.

      ```
      {
        "defaultPort": "8883",
        "includeIPv4LoopbackAddrs": false,
        "includeIPv4LinkLocalAddrs": false
      }
      ```

   1. Elija **Confirmar** para cerrar el cuadro y, a continuación, elija **Siguiente**.

1. <a name="deploy-component-configure-advanced-settings-step"></a>En la página **Configurar ajustes avanzados**, mantenga los ajustes de configuración predeterminados y seleccione **Siguiente**.

1. <a name="deploy-component-review-and-deploy-step"></a>En la página **Revisar**, elija **Implementar**.

   La implementación puede tardar hasta un minuto para completarse.

### Implementación del componente detector de IP (AWS CLI)
<a name="deploy-ip-detector-cli"></a>

Para implementar el componente detector de IP, cree un documento de implementación que incluya `aws.greengrass.clientdevices.IPDetector` en el objeto `components` y especifique la actualización de configuración del componente. Siga las instrucciones en [Crear implementaciones](create-deployments.md) para crear una implementación nueva o revisar una implementación existente.

Puede especificar cualquiera de las siguientes opciones para configurar el componente detector de IP cuando cree el documento de implementación:
+ `defaultPort`: <a name="ip-detector-component-configuration-default-port-definition"></a>(opcional) el puerto del agente MQTT para informar cuando este componente detecta direcciones IP. Debe especificar este parámetro si configura el agente MQTT para que utilice un puerto diferente al puerto predeterminado 8883. 
+ `includeIPv4LoopbackAddrs`— <a name="ip-detector-component-configuration-include-ipv4-loopback-addrs-definition"></a>(Opcional) Puede activar esta opción para detectar e informar sobre las direcciones de IPv4 bucle invertido. Estas son direcciones IP, por ejemplo, `localhost`, donde un dispositivo puede comunicarse consigo mismo. Utilice esta opción en entornos de prueba en los que el dispositivo principal y el dispositivo de cliente se ejecuten en el mismo sistema. 
+ `includeIPv4LinkLocalAddrs`— <a name="ip-detector-component-configuration-include-ipv4-link-local-addrs-definition"></a>(Opcional) Puede activar esta opción para detectar e informar sobre las direcciones locales de los IPv4 [enlaces](https://en.wikipedia.org/wiki/Link-local_address). Utilice esta opción si la red del dispositivo principal no tiene el Protocolo de configuración dinámica de host (DHCP) ni direcciones IP asignadas de forma estática. 
+ `includeIPv6LoopbackAddrs`— <a name="ip-detector-component-configuration-include-ipv6-loopback-addrs-definition"></a>(Opcional) Puede activar esta opción para detectar e informar sobre las direcciones de IPv6 bucle invertido. Estas son direcciones IP, por ejemplo, `localhost`, donde un dispositivo puede comunicarse consigo mismo. Utilice esta opción en entornos de prueba en los que el dispositivo principal y el dispositivo de cliente se ejecuten en el mismo sistema. Debe configurar `includeIPv4Addrs` en `false` y `includeIPv6Addrs` en `true` para utilizar esta opción. Debe tener el detector de IP versión 2.2.0 o posterior para usar esta opción.
+ `includeIPv6LinkLocalAddrs`— <a name="ip-detector-component-configuration-include-ipv6-link-local-addrs-definition"></a>(Opcional) Puede activar esta opción para detectar e informar sobre las direcciones locales de los IPv6 [enlaces](https://en.wikipedia.org/wiki/Link-local_address). Utilice esta opción si la red del dispositivo principal no tiene el Protocolo de configuración dinámica de host (DHCP) ni direcciones IP asignadas de forma estática. Debe configurar `includeIPv4Addrs` en `false` y `includeIPv6Addrs` en `true` para utilizar esta opción. Debe tener el detector de IP versión 2.2.0 o posterior para usar esta opción.
+ `includeIPv4Addrs`: <a name="ip-detector-component-configuration-include-ipv4-addrs-definition"></a>(opcional) el valor predeterminado está establecido en verdadero. Puede activar esta opción para publicar IPv4 las direcciones que se encuentran en el dispositivo principal. Debe tener el detector de IP versión 2.2.0 o posterior para usar esta opción.
+ `includeIPv6Addrs`— <a name="ip-detector-component-configuration-include-ipv6-addrs-definition"></a>(Opcional) Puede activar esta opción para publicar IPv6 las direcciones que se encuentran en el dispositivo principal. Configure `includeIPv4Addrs` en `false` para usar esta opción. Debe tener el detector de IP versión 2.2.0 o posterior para usar esta opción.

El siguiente ejemplo de documento de implementación parcial especifica declarar el puerto 8883 como puerto agente de MQTT.

```
{
  ...,
  "components": {
    ...,
    "aws.greengrass.clientdevices.IPDetector": {
      "componentVersion": "2.1.1",
      "configurationUpdate": {
        "merge": "{\"defaultPort\":\"8883\",}"
      }
    }
  }
}
```

## Administración manual de los puntos de conexión
<a name="manually-manage-endpoints"></a>

Puede administrar manualmente los puntos de conexión del agente de MQTT para los dispositivos principales.

Cada punto de conexión del agente de MQTT tiene la siguiente información:

**Punto de conexión** (`HostAddress`)  
Una dirección IP o una dirección DNS donde los dispositivos de cliente pueden conectarse a un agente de MQTT en el dispositivo principal.

**Port** (`PortNumber`)  
El puerto en el que opera el agente de MQTT en el dispositivo principal.  
Puede configurar este puerto en el [componente agente de MQTT de Moquette](mqtt-broker-moquette-component.md), que utiliza de forma predeterminada el puerto 8883.

**Metadatos** (`Metadata`)  
Metadatos adicionales para proporcionarlos a los dispositivos de cliente que se conectan a este punto de conexión.

**Topics**
+ [Administración de los puntos de conexión (consola)](#manually-manage-endpoints-console)
+ [Administración de puntos de conexión (AWS CLI)](#manually-manage-endpoints-cli)
+ [Administración de puntos de conexión (API)](#manually-manage-endpoints-api)

### Administración de los puntos de conexión (consola)
<a name="manually-manage-endpoints-console"></a>

Puede usar la AWS IoT Greengrass consola para ver, actualizar y eliminar los puntos finales de un dispositivo principal.

**Cómo administrar los puntos de conexión de un dispositivo principal (consola)**

1. <a name="navigate-greengrass-console"></a>Vaya a la [consola de AWS IoT Greengrass](https://console.aws.amazon.com/greengrass).

1. Elija **Dispositivos principales**.

1. Elija el dispositivo principal que desee administrar.

1. En la página de detalles del dispositivo principal, elija la pestaña **Client devices (Dispositivos cliente)**.

1. En la sección de **puntos de conexión del agente de MQTT**, puede ver los puntos de conexión del agente de MQTT del dispositivo principal. Seleccione **Administrar puntos de conexión**.

1. En el cuadro **Administrar puntos de conexión**, agregue o elimine los puntos de conexión del agente de MQTT para el dispositivo principal.

1. Elija **Actualizar**.

### Administración de puntos de conexión (AWS CLI)
<a name="manually-manage-endpoints-cli"></a>

Puede usar AWS Command Line Interface (AWS CLI) para administrar los puntos finales de un dispositivo principal.

**nota**  
Como la compatibilidad con dispositivos cliente AWS IoT Greengrass V2 es retrocompatible AWS IoT Greengrass V1, puedes utilizar AWS IoT Greengrass V2 nuestras operaciones de AWS IoT Greengrass V1 API para gestionar los puntos finales principales de los dispositivos.

**Cómo obtener puntos de conexión para un dispositivo principal (AWS CLI)**
+ Ejecute cualquiera de los siguientes comandos:
  + [greengrassv2: get-connectivity-info](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/get-connectivity-info.html)
  + [hierba verde: get-connectivity-info](https://docs.aws.amazon.com/cli/latest/reference/greengrass/get-connectivity-info.html)

**Cómo actualizar los puntos de conexión de un dispositivo principal (AWS CLI)**
+ Ejecute cualquiera de los siguientes comandos:
  + [hierba verde v2: update-connectivity-info](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/update-connectivity-info.html)
  + [hierba verde: update-connectivity-info](https://docs.aws.amazon.com/cli/latest/reference/greengrass/update-connectivity-info.html)

### Administración de puntos de conexión (API)
<a name="manually-manage-endpoints-api"></a>

Puede usar la AWS API para administrar los puntos finales de un dispositivo principal.

**nota**  
Como la compatibilidad con dispositivos cliente AWS IoT Greengrass V2 es retrocompatible AWS IoT Greengrass V1, puedes utilizar AWS IoT Greengrass V2 nuestras operaciones de AWS IoT Greengrass V1 API para gestionar los puntos finales principales de los dispositivos.

**Para obtener puntos finales para un dispositivo principal (API)AWS**
+ Ejecute cualquiera de las siguientes operaciones:
  + [V2: GetConnectivityInfo](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_GetConnectivityInfo.html)
  + [V1: GetConnectivityInfo](https://docs.aws.amazon.com/greengrass/v1/apireference/getconnectivityinfo-get.html)

**Para actualizar los puntos finales de un dispositivo principal (AWS API)**
+ Ejecute cualquiera de las siguientes operaciones:
  + [V2: UpdateConnectivityInfo](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_UpdateConnectivityInfo.html)
  + [V1: UpdateConnectivityInfo](https://docs.aws.amazon.com/greengrass/v1/apireference/updateconnectivityinfo-put.html)

# Elección de un agente MQTT
<a name="choose-local-mqtt-broker"></a>

AWS IoT Greengrass ofrece opciones para que pueda elegir qué agente MQTT local desea ejecutar en sus dispositivos principales. Los dispositivos de cliente se conectan al agente MQTT que se ejecuta en un dispositivo principal, así que elija un agente MQTT que sea compatible con los dispositivos de cliente a los que desee conectarse.

**nota**  <a name="note-deploy-one-mqtt-broker"></a>
Se recomienda implementar solo un componente agente MQTT. Los componentes [puente de MQTT](mqtt-bridge-component.md) y [detector de IP](ip-detector-component.md) solo funcionan con un componente agente MQTT a la vez. Si implementa varios componentes agente de MQTT, debe configurarlos para que usen puertos diferentes.

Puede elegir entre los siguientes agentes MQTT:
+ **[Agente MQTT 3.1.1 (Moquette)](mqtt-broker-moquette-component.md)**: `aws.greengrass.clientdevices.mqtt.Moquette`

  Elija esta opción para un agente MQTT ligero que cumpla con el estándar MQTT 3.1.1. El agente MQTT AWS IoT Core y SDK para dispositivos con AWS IoT también son compatibles con el estándar MQTT 3.1.1, por lo que puede usar estas características para crear una aplicación que use MQTT 3.1.1 en sus dispositivos y en la Nube de AWS.
+ **[Agente MQTT 5 (EMQX)](mqtt-broker-emqx-component.md)**: `aws.greengrass.clientdevices.mqtt.EMQX`

  Elija esta opción para usar las características de MQTT 5 en la comunicación entre los dispositivos principales y los dispositivos de cliente. Este componente usa más recursos que el agente MQTT 3.1.1 de Moquette y, en los dispositivos principales de Linux, requiere Docker.

  MQTT 5 es compatible con versiones anteriores de MQTT 3.1.1, por lo que puede conectar dispositivos de cliente que usen MQTT 3.1.1 a este agente. Si usa el agente MQTT 3.1.1 de Moquette, puede sustituirlo por el agente MQTT 5 de EMQX y los dispositivos de cliente podrán seguir conectándose y funcionando como de costumbre.

  <a name="note-local-mqtt-broker-mqtt-5-features"></a>
+ **Implementación de un agente personalizado**

  Elija esta opción para crear un componente de agente local personalizado para comunicarse con los dispositivos de cliente. Puede crear un agente local personalizado que use un protocolo distinto de MQTT. AWS IoT Greengrass proporciona un SDK de componentes que puede usar para autenticar y autorizar los dispositivos de cliente. Para obtener más información, consulte [Úselo SDK para dispositivos con AWS IoT para comunicarse con el núcleo de Greengrass, otros componentes y AWS IoT CoreComuníquese con el núcleo de Greengrass, otros componentes y AWS IoT Core](interprocess-communication.md) y [Autenticación y autorización de los dispositivos de cliente](ipc-client-device-auth.md).

# Conexión de dispositivos cliente a un dispositivo AWS IoT Greengrass Core con un intermediario MQTT
<a name="connecting-to-mqtt"></a>

Cuando utiliza un intermediario MQTT en su dispositivo AWS IoT Greengrass Core, el dispositivo utiliza una *autoridad de certificación (CA) del dispositivo principal* exclusiva del dispositivo para emitir un certificado al agente a fin de establecer conexiones TLS mutuas con los clientes. 

AWS IoT Greengrass generará automáticamente una CA para el dispositivo principal, o puede proporcionar la suya propia. La CA del dispositivo principal está registrada AWS IoT Greengrass cuando se conecta el [Autenticación del dispositivo de cliente](client-device-auth-component.md) componente. La CA del dispositivo principal generada automáticamente es persistente, el dispositivo seguirá usando la misma CA mientras el componente de autenticación del dispositivo de cliente esté configurado.

Cuando el agente MQTT se inicia, solicita un certificado. El componente de autenticación del dispositivo de cliente emite un certificado X.509 mediante la CA del dispositivo principal. El certificado se rota cuando el agente se inicia, cuando el certificado caduca o cuando cambia la información de conectividad, como la dirección IP. Para obtener más información, consulte [Rotación de certificados en el agente MQTT local](device-auth.md#mqtt-certificate-expiration).

Para conectar un cliente al agente MQTT, necesita lo siguiente:
+ El dispositivo cliente debe tener la CA del dispositivo AWS IoT Greengrass principal. Puede obtener esta CA mediante la detección en la nube o proporcionándola manualmente. Para obtener más información, consulte [Uso de su propia autoridad de certificación](#use-your-own-CA).
+ El nombre de dominio completamente calificado (FQDN) o la dirección IP del dispositivo principal debe estar presente en el certificado del agente emitido por la CA del dispositivo principal. Para garantizar esto, use el componente [Detector de IP](ip-detector-component.md) o configure manualmente la dirección IP. Para obtener más información, consulte [Administración de puntos de conexión del dispositivo principal](manage-core-device-endpoints.md).
+ El componente de autenticación del dispositivo de cliente debe dar permiso al dispositivo de cliente para conectarse al dispositivo principal de Greengrass. Para obtener más información, consulte [Autenticación del dispositivo de cliente](client-device-auth-component.md).

## Uso de su propia autoridad de certificación
<a name="use-your-own-CA"></a>

Si los dispositivos de cliente no pueden acceder a la nube para detectar su dispositivo principal, puede proporcionar una *autoridad de certificación (CA) del dispositivo principal*. Su dispositivo principal de Greengrass usa la CA del dispositivo principal para emitir certificados para su agente de MQTT. Una vez que configure el dispositivo principal y suministre su CA al dispositivo de cliente, sus dispositivos de cliente pueden conectarse al punto de conexión y verificar el protocolo de enlace TLS mediante la CA del dispositivo principal (la CA proporcionada por usted o generada automáticamente).

Para configurar el componente [Autenticación del dispositivo de cliente](client-device-auth-component.md) para que use la CA del dispositivo principal, defina el parámetro de configuración `certificateAuthority` al implementar el componente. Debe proporcionar los siguientes detalles durante la configuración:
+ La ubicación del certificado de CA de un dispositivo principal.
+ La clave privada del certificado de CA del dispositivo principal.
+ (Opcional) La cadena de certificados al certificado raíz si la CA del dispositivo principal es una CA intermedia.

Si proporciona una CA del dispositivo principal, AWS IoT Greengrass registra la CA en la nube.

Puede almacenar sus certificados en un módulo de seguridad de hardware o en el sistema de archivos. En el siguiente ejemplo, se muestra una configuración `certificateAuthority` para una CA intermedia almacenada mediante HSM/TPM. Tenga en cuenta que la cadena de certificados solo se puede almacenar en el disco.

```
  "certificateAuthority": {
      "certificateUri": "pkcs11:object=CustomerIntermediateCA;type=cert",
      "privateKeyUri": "pkcs11:object=CustomerIntermediateCA;type=private"
      "certificateChainUri": "file:///home/ec2-user/creds/certificateChain.pem",
    }
```

En este ejemplo, el parámetro de configuración `certificateAuthority` configura el componente de autenticación del dispositivo de cliente para que use una CA intermedia del sistema de archivos:

```
  "certificateAuthority": {
      "certificateUri": "file:///home/ec2-user/creds/intermediateCA.pem",
      "privateKeyUri": "file:///home/ec2-user/creds/intermediateCA.privateKey.pem",
      "certificateChainUri": "file:///home/ec2-user/creds/certificateChain.pem",
    }
```

Para conectar los dispositivos a su dispositivo AWS IoT Greengrass principal, haga lo siguiente:

1. Cree una entidad de certificación (CA) intermedia para el dispositivo principal de Greengrass usando la CA raíz de su organización. Se recomienda usar una CA intermedia como práctica recomendada de seguridad.

1. Proporcione el certificado CA intermedio, la clave privada y la cadena de certificados a su CA raíz al dispositivo principal de Greengrass. Para obtener más información, consulte [Autenticación del dispositivo de cliente](client-device-auth-component.md). La CA intermedia se convierte en la CA del dispositivo principal del dispositivo principal de Greengrass, y el dispositivo registra la CA en ella. AWS IoT Greengrass

1. Registre el dispositivo cliente como una AWS IoT cosa. Para obtener más información, consulte [Crear un objeto](https://docs.aws.amazon.com/iot/latest/developerguide/create-iot-resources.html#create-aws-thing) en la *Guía para desarrolladores de AWS IoT Core *. Agregue la clave privada, la clave pública, el certificado del dispositivo y el certificado de CA raíz al dispositivo de cliente. La forma de agregar la información depende del dispositivo y el software.

Una vez que configure su dispositivo, podrá usar el certificado y la cadena de claves pública para conectarse al dispositivo principal de Greengrass. Su software es responsable de encontrar los puntos de conexión del dispositivo principal. Puede configurar el punto de conexión manualmente para el dispositivo principal. Para obtener más información, consulte [Administración manual de los puntos de conexión](manage-core-device-endpoints.md#manually-manage-endpoints).

# Prueba de las comunicaciones del dispositivo de cliente
<a name="test-client-device-communications"></a>

Los dispositivos cliente pueden SDK para dispositivos con AWS IoT utilizarla para detectar, conectarse y comunicarse con un dispositivo principal. Puede usar el cliente de descubrimiento de Greengrass SDK para dispositivos con AWS IoT para usar la [API de descubrimiento de Greengrass](greengrass-discover-api.md), que devuelve información sobre los dispositivos principales a los que se puede conectar un dispositivo cliente. La respuesta de la API incluye los puntos de conexión del agente MQTT para conectarse y los certificados que se utilizan para verificar la identidad de cada dispositivo principal. A continuación, el dispositivo de cliente puede probar cada punto de conexión hasta que se conecte correctamente a un dispositivo principal.

Los dispositivos de cliente solo pueden detectar los dispositivos principales a los que se asocien. Antes de probar las comunicaciones entre un dispositivo de cliente y un dispositivo principal, debe asociar el dispositivo de cliente al dispositivo principal. Para obtener más información, consulte [Asociación de los dispositivos de cliente](associate-client-devices.md).

La API de detección de Greengrass devuelve los puntos de conexión del agente MQTT del dispositivo principal que especifique. Puede usar el [componente detector de IP](ip-detector-component.md) para administrar estos puntos de conexión por usted, o puede administrarlos manualmente para cada dispositivo principal. Para obtener más información, consulte [Administración de puntos de conexión del dispositivo principal](manage-core-device-endpoints.md).

**nota**  
Para usar la API de detección de Greengrass, un dispositivo de cliente debe tener el permiso `greengrass:Discover`. Para obtener más información, consulte [AWS IoT Política mínima para los dispositivos cliente](device-auth.md#client-device-minimal-iot-policy).

 SDK para dispositivos con AWS IoT Está disponible en varios lenguajes de programación. Para obtener más información, consulte [AWS IoT Dispositivo SDKs](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sdks.html) en la *Guía para AWS IoT Core desarrolladores*.

**Topics**
+ [Prueba de comunicaciones (Python)](#test-client-device-communications-python)
+ [Prueba de las comunicaciones (C\$1\$1)](#test-client-device-communications-cpp)
+ [Pruebe las comunicaciones (JavaScript)](#test-client-device-communications-javascript)
+ [Prueba de comunicaciones (Java)](#test-client-device-communications-java)

## Prueba de comunicaciones (Python)
<a name="test-client-device-communications-python"></a>

En esta sección, utilizará un ejemplo de detección de Greengrass en [SDK para dispositivos con AWS IoT versión 2 para Python](https://github.com/aws/aws-iot-device-sdk-python-v2) para probar las comunicaciones entre un dispositivo de cliente y un dispositivo principal.

**importante**  
Para usar la SDK para dispositivos con AWS IoT versión 2 para Python, el dispositivo debe ejecutar Python 3.6 o una versión posterior.

**Para probar las comunicaciones (SDK para dispositivos con AWS IoT v2 para Python)**

1. <a name="download-iot-device-sdk-python-v2"></a>Descargue e instale la [SDK para dispositivos con AWS IoT versión 2 para Python](https://github.com/aws/aws-iot-device-sdk-python-v2) en el AWS IoT dispositivo para conectarlo como dispositivo cliente.

   En el dispositivo de cliente, haga lo siguiente:

   1. Clona el repositorio SDK para dispositivos con AWS IoT v2 para Python para descargarlo.

      ```
      git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
      ```

   1. Instale la SDK para dispositivos con AWS IoT versión 2 para Python.

      ```
      python3 -m pip install --user ./aws-iot-device-sdk-python-v2
      ```

1. <a name="cd-iot-device-sdk-python-v2"></a>Cambie a la carpeta de muestras de la SDK para dispositivos con AWS IoT versión 2 para Python.

   ```
   cd aws-iot-device-sdk-python-v2/samples/greengrass
   ```

1. <a name="test-client-device-communications-application-intro"></a>Ejecute la aplicación de ejemplo de detección de Greengrass. Esta aplicación espera argumentos que especifican el nombre del objeto del dispositivo de cliente, el tema y el mensaje de MQTT que se van a usar y los certificados que autentican y protegen la conexión. En el siguiente ejemplo, se envía el mensaje “Hello World” al tema `clients/MyClientDevice1/hello/world`.<a name="test-client-device-communications-application-command-replace"></a>
   + *MyClientDevice1*Sustitúyala por el nombre del dispositivo cliente.
   + *\$1/certs/AmazonRootCA1.pem*Sustitúyalo por la ruta al certificado de CA raíz de Amazon en el dispositivo cliente.
   + *\$1/certs/device.pem.crt*Sustitúyalo por la ruta al certificado del dispositivo del dispositivo cliente.
   + *\$1/certs/private.pem.key*Sustitúyalo por la ruta al archivo de clave privada del dispositivo cliente.
   + *us-east-1*Sustitúyala por la AWS región en la que funcionan el dispositivo cliente y el dispositivo principal.

   ```
   python3 basic_discovery.py \\
     --thing_name MyClientDevice1 \\
     --topic 'clients/MyClientDevice1/hello/world' \\
     --message 'Hello World!' \\
     --ca_file ~/certs/AmazonRootCA1.pem \\
     --cert ~/certs/device.pem.crt \\
     --key ~/certs/private.pem.key \\
     --region us-east-1 \\
     --verbosity Warn
   ```

   <a name="test-client-device-communications-application-output-intro"></a>La aplicación de ejemplo de detección envía el mensaje 10 veces y se desconecta. También se suscribe al mismo tema en el que publica los mensajes. Si el resultado indica que la aplicación recibió mensajes MQTT sobre el tema, el dispositivo de cliente puede comunicarse correctamente con el dispositivo principal.

   ```
   Performing greengrass discovery...
   awsiot.greengrass_discovery.DiscoverResponse(gg_groups=[awsiot.greengrass_discovery.GGGroup(gg_group_id='greengrassV2-coreDevice-MyGreengrassCore', cores=[awsiot.greengrass_discovery.GGCore(thing_arn='arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore', connectivity=[awsiot.greengrass_discovery.ConnectivityInfo(id='203.0.113.0', host_address='203.0.113.0', metadata='', port=8883)])], certificate_authorities=['-----BEGIN CERTIFICATE-----\
   MIICiT...EXAMPLE=\
   -----END CERTIFICATE-----\
   '])])
   Trying core arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore at host 203.0.113.0 port 8883
   Connected!
   Published topic clients/MyClientDevice1/hello/world: {"message": "Hello World!", "sequence": 0}
   
   Publish received on topic clients/MyClientDevice1/hello/world
   b'{"message": "Hello World!", "sequence": 0}'
   Published topic clients/MyClientDevice1/hello/world: {"message": "Hello World!", "sequence": 1}
   
   Publish received on topic clients/MyClientDevice1/hello/world
   b'{"message": "Hello World!", "sequence": 1}'
   
   ...
   
   Published topic clients/MyClientDevice1/hello/world: {"message": "Hello World!", "sequence": 9}
   
   Publish received on topic clients/MyClientDevice1/hello/world
   b'{"message": "Hello World!", "sequence": 9}'
   ```

   <a name="test-client-device-communications-application-troubleshooting"></a>Si el comando genera un error, consulte [Solución de problemas de detección de Greengrass](troubleshooting-client-devices.md#greengrass-discovery-issues).

   <a name="test-client-device-communications-application-view-core-logs"></a>También puede ver los registros de Greengrass en el dispositivo principal para comprobar si el dispositivo de cliente se conecta y envía mensajes correctamente. Para obtener más información, consulte [Supervisión de los registros de AWS IoT Greengrass](monitor-logs.md).

## Prueba de las comunicaciones (C\$1\$1)
<a name="test-client-device-communications-cpp"></a>

En esta sección, utilizará un ejemplo de detección de Greengrass en el [SDK para dispositivos con AWS IoT versión 2 para C\$1\$1](https://github.com/aws/aws-iot-device-sdk-cpp-v2) a fin de probar las comunicaciones entre un dispositivo de cliente y un dispositivo principal.

<a name="iot-device-sdk-cpp-v2-build-requirements-intro"></a>Para compilar la SDK para dispositivos con AWS IoT versión 2 para C\$1\$1, un dispositivo debe tener las siguientes herramientas:<a name="iot-device-sdk-cpp-v2-build-requirements"></a>
+ C\$1\$1 11 o posterior
+ CMake 3.1 o una versión posterior
+ Uno de los siguientes copiladores:
  + GCC 4.8 o posterior
  + Clang 3.9 o posterior
  + MSVC 2015 o posterior

**Para probar las comunicaciones (SDK para dispositivos con AWS IoT v2 para C\$1\$1)**

1. Descargue y cree la [SDK para dispositivos con AWS IoT versión 2 para C\$1\$1](https://github.com/aws/aws-iot-device-sdk-cpp-v2) en AWS IoT el dispositivo que desee conectar como dispositivo cliente.

   En el dispositivo de cliente, haga lo siguiente:

   1. Cree una carpeta para el espacio de trabajo SDK para dispositivos con AWS IoT de la versión 2 para C\$1\$1 y cámbiela a ella.

      ```
      cd
      mkdir iot-device-sdk-cpp
      cd iot-device-sdk-cpp
      ```

   1. Clona el SDK para dispositivos con AWS IoT repositorio de la versión 2 para C\$1\$1 para descargarlo. El indicador `--recursive` especifica la descarga de submódulos.

      ```
      git clone --recursive https://github.com/aws/aws-iot-device-sdk-cpp-v2.git
      ```

   1. Cree una carpeta para el resultado de la SDK para dispositivos con AWS IoT compilación de la versión 2 para C\$1\$1 y cámbiela a ella.

      ```
      mkdir aws-iot-device-sdk-cpp-v2-build
      cd aws-iot-device-sdk-cpp-v2-build
      ```

   1. Compila la SDK para dispositivos con AWS IoT v2 para C\$1\$1.

      ```
      cmake -DCMAKE_INSTALL_PREFIX="~/iot-device-sdk-cpp" -DCMAKE_BUILD_TYPE="Release" ../aws-iot-device-sdk-cpp-v2
      cmake --build . --target install
      ```

1. Cree la aplicación de ejemplo Greengrass Discovery en la SDK para dispositivos con AWS IoT versión 2 para C\$1\$1. Haga lo siguiente:

   1. Cambie a la carpeta de ejemplos de Greengrass Discovery en la SDK para dispositivos con AWS IoT versión 2 para C\$1\$1.

      ```
      cd ../aws-iot-device-sdk-cpp-v2/samples/greengrass/basic_discovery
      ```

   1. Cree una carpeta para el resultado de la compilación de ejemplo de detección de Greengrass y cambie a ella.

      ```
      mkdir build
      cd build
      ```

   1. Cree la aplicación de ejemplo de detección de Greengrass.

      ```
      cmake -DCMAKE_PREFIX_PATH="~/iot-device-sdk-cpp" -DCMAKE_BUILD_TYPE="Release" ..
      cmake --build . --config "Release"
      ```

1. <a name="test-client-device-communications-application-scanner-intro"></a>Ejecute la aplicación de ejemplo de detección de Greengrass. Esta aplicación espera argumentos que especifiquen el nombre del dispositivo de cliente, el tema de MQTT que se va a utilizar y los certificados que autentican y protegen la conexión. En el siguiente ejemplo, se suscribe al tema `clients/MyClientDevice1/hello/world` y se publica un mensaje sobre el mismo tema que se introduce en la línea de comandos.<a name="test-client-device-communications-application-command-replace"></a>
   + *MyClientDevice1*Sustitúyala por el nombre del dispositivo cliente.
   + *\$1/certs/AmazonRootCA1.pem*Sustitúyalo por la ruta al certificado de CA raíz de Amazon en el dispositivo cliente.
   + *\$1/certs/device.pem.crt*Sustitúyalo por la ruta al certificado del dispositivo del dispositivo cliente.
   + *\$1/certs/private.pem.key*Sustitúyalo por la ruta al archivo de clave privada del dispositivo cliente.
   + *us-east-1*Sustitúyala por la AWS región en la que funcionan el dispositivo cliente y el dispositivo principal.

   ```
   ./basic-discovery \
     --thing_name MyClientDevice1 \
     --topic 'clients/MyClientDevice1/hello/world' \
     --ca_file ~/certs/AmazonRootCA1.pem \
     --cert ~/certs/device.pem.crt \
     --key ~/certs/private.pem.key \
     --region us-east-1
   ```

   <a name="test-client-device-communications-application-scanner-output-intro"></a>La aplicación de ejemplo de detección se suscribe al tema y le pide que introduzca un mensaje para publicarlo. 

   ```
   Connecting to group greengrassV2-coreDevice-MyGreengrassCore with thing arn arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore, using endpoint 203.0.113.0:8883
   Connected to group greengrassV2-coreDevice-MyGreengrassCore, using connection to 203.0.113.0:8883
   Successfully subscribed to clients/MyClientDevice1/hello/world
   Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press enter. Enter 'exit' to exit this program.
   ```

   <a name="test-client-device-communications-application-troubleshooting"></a>Si el comando genera un error, consulte [Solución de problemas de detección de Greengrass](troubleshooting-client-devices.md#greengrass-discovery-issues).

1. <a name="test-client-device-communications-application-scanner-input"></a>Introduzca un mensaje, como **Hello World\$1**.

   ```
   Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press enter. Enter 'exit' to exit this program.
   Hello World!
   ```

   <a name="test-client-device-communications-application-scanner-input-output"></a>Si el resultado indica que la aplicación recibió el mensaje MQTT sobre el tema, el dispositivo de cliente puede comunicarse correctamente con el dispositivo principal.

   ```
   Operation on packetId 2 Succeeded
   Publish received on topic clients/MyClientDevice1/hello/world
   Message:
   Hello World!
   ```

   <a name="test-client-device-communications-application-view-core-logs"></a>También puede ver los registros de Greengrass en el dispositivo principal para comprobar si el dispositivo de cliente se conecta y envía mensajes correctamente. Para obtener más información, consulte [Supervisión de los registros de AWS IoT Greengrass](monitor-logs.md).

## Pruebe las comunicaciones (JavaScript)
<a name="test-client-device-communications-javascript"></a>

En esta sección, utilizará un ejemplo de descubrimiento de Greengrass en la [SDK para dispositivos con AWS IoT versión 2 JavaScript para](https://github.com/aws/aws-iot-device-sdk-js-v2) probar las comunicaciones entre un dispositivo cliente y un dispositivo principal. 

**importante**  
Para usar la SDK para dispositivos con AWS IoT versión 2 JavaScript, un dispositivo debe ejecutar Node v10.0 o una versión posterior.

**Para probar las comunicaciones (SDK para dispositivos con AWS IoT v2 para) JavaScript**

1. Descargue e instale la [SDK para dispositivos con AWS IoT versión 2 JavaScript para](https://github.com/aws/aws-iot-device-sdk-js-v2) el AWS IoT dispositivo que desee conectar como dispositivo cliente.

   En el dispositivo de cliente, haga lo siguiente:

   1. Clona la SDK para dispositivos con AWS IoT v2 para el JavaScript repositorio para descargarla.

      ```
      git clone https://github.com/aws/aws-iot-device-sdk-js-v2.git
      ```

   1. Instale la SDK para dispositivos con AWS IoT v2 para JavaScript.

      ```
      cd aws-iot-device-sdk-js-v2
      npm install
      ```

1. Cambie a la carpeta de ejemplos de Greengrass discovery en la SDK para dispositivos con AWS IoT versión 2 para. JavaScript

   ```
   cd samples/node/greengrass/basic_discovery
   ```

1. Instale la aplicación de ejemplo de detección de Greengrass.

   ```
   npm install
   ```

1. <a name="test-client-device-communications-application-intro"></a>Ejecute la aplicación de ejemplo de detección de Greengrass. Esta aplicación espera argumentos que especifican el nombre del objeto del dispositivo de cliente, el tema y el mensaje de MQTT que se van a usar y los certificados que autentican y protegen la conexión. En el siguiente ejemplo, se envía el mensaje “Hello World” al tema `clients/MyClientDevice1/hello/world`.<a name="test-client-device-communications-application-command-replace"></a>
   + *MyClientDevice1*Sustitúyalo por el nombre del dispositivo cliente.
   + *\$1/certs/AmazonRootCA1.pem*Sustitúyalo por la ruta al certificado de CA raíz de Amazon en el dispositivo cliente.
   + *\$1/certs/device.pem.crt*Sustitúyalo por la ruta al certificado del dispositivo del dispositivo cliente.
   + *\$1/certs/private.pem.key*Sustitúyalo por la ruta al archivo de clave privada del dispositivo cliente.
   + *us-east-1*Sustitúyala por la AWS región en la que funcionan el dispositivo cliente y el dispositivo principal.

   ```
   node dist/index.js \
     --thing_name MyClientDevice1 \
     --topic 'clients/MyClientDevice1/hello/world' \
     --message 'Hello World!' \
     --ca_file ~/certs/AmazonRootCA1.pem \
     --cert ~/certs/device.pem.crt \
     --key ~/certs/private.pem.key \
     --region us-east-1 \
     --verbose warn
   ```

   <a name="test-client-device-communications-application-output-intro"></a>La aplicación de ejemplo de detección envía el mensaje 10 veces y se desconecta. También se suscribe al mismo tema en el que publica los mensajes. Si el resultado indica que la aplicación recibió mensajes MQTT sobre el tema, el dispositivo de cliente puede comunicarse correctamente con el dispositivo principal.

   ```
   Discovery Response:
   {"gg_groups":[{"gg_group_id":"greengrassV2-coreDevice-MyGreengrassCore","cores":[{"thing_arn":"arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore","connectivity":[{"id":"203.0.113.0","host_address":"203.0.113.0","port":8883,"metadata":""}]}],"certificate_authorities":["-----BEGIN CERTIFICATE-----\nMIICiT...EXAMPLE=\n-----END CERTIFICATE-----\n"]}]}
   Trying endpoint={"id":"203.0.113.0","host_address":"203.0.113.0","port":8883,"metadata":""}
   [WARN] [2021-06-12T00:46:45Z] [00007f90c0e8d700] [socket] - id=0x7f90b8018710 fd=26: setsockopt() for NO_SIGNAL failed with errno 92. If you are having SIGPIPE signals thrown, you may want to install a signal trap in your application layer.
   Connected to endpoint={"id":"203.0.113.0","host_address":"203.0.113.0","port":8883,"metadata":""}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":1}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":2}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":3}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":4}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":5}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":6}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":7}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":8}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":9}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":10}
   Complete!
   ```

   <a name="test-client-device-communications-application-troubleshooting"></a>Si el comando genera un error, consulte [Solución de problemas de detección de Greengrass](troubleshooting-client-devices.md#greengrass-discovery-issues).

   <a name="test-client-device-communications-application-view-core-logs"></a>También puede ver los registros de Greengrass en el dispositivo principal para comprobar si el dispositivo de cliente se conecta y envía mensajes correctamente. Para obtener más información, consulte [Supervisión de los registros de AWS IoT Greengrass](monitor-logs.md).

## Prueba de comunicaciones (Java)
<a name="test-client-device-communications-java"></a>

En esta sección, utilizará un ejemplo de detección de Greengrass en el [SDK para dispositivos con AWS IoT versión 2 para Java](https://github.com/aws/aws-iot-device-sdk-java-v2) para probar las comunicaciones entre un dispositivo de cliente y un dispositivo principal.

**importante**  
Para compilar la SDK para dispositivos con AWS IoT versión 2 para Java, un dispositivo debe tener las siguientes herramientas:  
Java 8 o posterior, con `JAVA_HOME` apuntando a la carpeta de Java.
Apache Maven

**Para probar las comunicaciones (SDK para dispositivos con AWS IoT v2 para Java)**

1. Descargue y cree la [SDK para dispositivos con AWS IoT versión 2 para Java](https://github.com/aws/aws-iot-device-sdk-java-v2) en el AWS IoT dispositivo que desee conectar como dispositivo cliente.

   En el dispositivo de cliente, haga lo siguiente:

   1. Clona el SDK para dispositivos con AWS IoT repositorio de la versión 2 para Java para descargarlo.

      ```
      git clone https://github.com/aws/aws-iot-device-sdk-java-v2.git
      ```

   1. Cambie a la carpeta SDK para dispositivos con AWS IoT v2 para Java.

   1. Compila la SDK para dispositivos con AWS IoT v2 para Java.

      ```
      cd aws-iot-device-sdk-java-v2
      mvn versions:use-latest-versions -Dincludes="software.amazon.awssdk.crt*"
      mvn clean install
      ```

1. <a name="test-client-device-communications-application-scanner-intro"></a>Ejecute la aplicación de ejemplo de detección de Greengrass. Esta aplicación espera argumentos que especifiquen el nombre del dispositivo de cliente, el tema de MQTT que se va a utilizar y los certificados que autentican y protegen la conexión. En el siguiente ejemplo, se suscribe al tema `clients/MyClientDevice1/hello/world` y se publica un mensaje sobre el mismo tema que se introduce en la línea de comandos.<a name="test-client-device-communications-application-command-replace"></a>
   + Sustituya ambas instancias *MyClientDevice1* de por el nombre del dispositivo cliente.
   + *\$1HOME/certs/AmazonRootCA1.pem*Sustitúyalo por la ruta al certificado de CA raíz de Amazon en el dispositivo cliente.
   + *\$1HOME/certs/device.pem.crt*Sustitúyalo por la ruta al certificado del dispositivo del dispositivo cliente.
   + *\$1HOME/certs/private.pem.key*Sustitúyalo por la ruta al archivo de clave privada del dispositivo cliente.
   + *us-east-1*Sustitúyalo por el Región de AWS lugar donde funcionan el dispositivo cliente y el dispositivo principal.

   ```
   DISCOVERY_SAMPLE_ARGS="--thing_name MyClientDevice1 \
     --topic 'clients/MyClientDevice1/hello/world' \
     --ca_file $HOME/certs/AmazonRootCA1.pem \
     --cert $HOME/certs/device.pem.crt \
     --key $HOME/certs/private.pem.key \
     --region us-east-1"
   
   mvn exec:java -pl samples/Greengrass/Discovery \
     -Dexec.mainClass=greengrass.BasicDiscovery \
     -Dexec.args="$DISCOVERY_SAMPLE_ARGS"
   ```

   <a name="test-client-device-communications-application-scanner-output-intro"></a>La aplicación de ejemplo de detección se suscribe al tema y le pide que introduzca un mensaje para publicarlo. 

   ```
   Connecting to group ID greengrassV2-coreDevice-MyGreengrassCore, with thing arn arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore, using endpoint 203.0.113.0:8883
   Started a clean session
   Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press Enter. Type 'exit' or 'quit' to exit this program:
   ```

   <a name="test-client-device-communications-application-troubleshooting"></a>Si el comando genera un error, consulte [Solución de problemas de detección de Greengrass](troubleshooting-client-devices.md#greengrass-discovery-issues).

1. <a name="test-client-device-communications-application-scanner-input"></a>Introduzca un mensaje, como **Hello World\$1**.

   ```
   Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press Enter. Type 'exit' or 'quit' to exit this program:
   Hello World!
   ```

   <a name="test-client-device-communications-application-scanner-input-output"></a>Si el resultado indica que la aplicación recibió el mensaje MQTT sobre el tema, el dispositivo de cliente puede comunicarse correctamente con el dispositivo principal.

   ```
   Message received on topic clients/MyClientDevice1/hello/world: Hello World!
   ```

   <a name="test-client-device-communications-application-view-core-logs"></a>También puede ver los registros de Greengrass en el dispositivo principal para comprobar si el dispositivo de cliente se conecta y envía mensajes correctamente. Para obtener más información, consulte [Supervisión de los registros de AWS IoT Greengrass](monitor-logs.md).

# API de descubrimiento de Greengrass RESTful
<a name="greengrass-discover-api"></a>

AWS IoT Greengrass proporciona la operación de `Discover` API que los dispositivos cliente pueden usar para identificar los dispositivos principales de Greengrass a los que se pueden conectar. Los dispositivos cliente utilizan esta operación de plano de datos para recuperar la información necesaria para conectarse a los dispositivos principales de Greengrass, donde se asocian a la operación de la [BatchAssociateClientDeviceWithCoreDevice](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_BatchAssociateClientDeviceWithCoreDevice.html)API. Cuando un dispositivo cliente se conecta a Internet, puede conectarse al servicio AWS IoT Greengrass en la nube y usar la API de detección para encontrar:
+ La dirección IP y el puerto de cada dispositivo principal de Greengrass asociado.
+ El certificado de CA del dispositivo principal, que los dispositivos de cliente pueden utilizar para autenticar el dispositivo principal de Greengrass.

**nota**  
Los dispositivos cliente también pueden usar el cliente de detección SDK para dispositivos con AWS IoT para descubrir la información de conectividad de los dispositivos principales de Greengrass. El cliente de detección utiliza la API de detección. Para obtener más información, consulte los siguientes temas:  
[Prueba de las comunicaciones del dispositivo de cliente](test-client-device-communications.md)
[Greengrass Discovery RESTful API](https://docs.aws.amazon.com/greengrass/v1/developerguide/gg-discover-api.html) en la Guía para *AWS IoT Greengrass Version 1 desarrolladores*.

Para utilizar esta operación de API, envíe solicitudes HTTP a la API de detección en el punto de conexión del plano de datos de Greengrass. Este punto de conexión de la API tiene el siguiente formato.

```
https://greengrass-ats.iot.region.amazonaws.com:port/greengrass/discover/thing/thing-name
```

Para obtener una lista de los puntos finales Regiones de AWS y los puntos de conexión compatibles con la API de AWS IoT Greengrass descubrimiento, consulte los [AWS IoT Greengrass V2 puntos finales y las cuotas](https://docs.aws.amazon.com/general/latest/gr/greengrassv2.html) en. *Referencia general de AWS* Esta operación de la API solo está disponible en el punto de conexión del plano de datos de Greengrass. El punto de conexión del plano de control que se utiliza para administrar los componentes y las implementaciones es diferente del punto de conexión del plano de datos.

**nota**  
La API de descubrimiento es la misma para AWS IoT Greengrass V1 y. AWS IoT Greengrass V2 Si tiene dispositivos cliente que se conectan a un AWS IoT Greengrass V1 núcleo, puede conectarlos a los dispositivos AWS IoT Greengrass V2 principales sin cambiar el código de los dispositivos cliente. Para obtener más información, consulte [Greengrass Discovery RESTful API](https://docs.aws.amazon.com/greengrass/v1/developerguide/gg-discover-api.html) en la Guía para *AWS IoT Greengrass Version 1 desarrolladores*.

**Topics**
+ [Autenticación y autorización de detección](#greengrass-discover-auth)
+ [Solicitud](#greengrass-discover-request)
+ [Respuesta](#greengrass-discover-response)
+ [Prueba de la API de detección con cURL](#greengrass-discover-test-request)

## Autenticación y autorización de detección
<a name="greengrass-discover-auth"></a>

Para usar la API de detección para recuperar información de conectividad, un dispositivo de cliente debe utilizar la autenticación mutua TLS con un certificado de cliente X.509 para autenticarse. Para obtener más información, consulte [Certificados de cliente X.509](https://docs.aws.amazon.com/iot/latest/developerguide/x509-client-certs.html) en la *Guía para desarrolladores de AWS IoT Core *.

Un dispositivo de cliente también debe tener permiso para ejecutar la acción `greengrass:Discover`. El siguiente ejemplo AWS IoT de política permite AWS IoT que una cosa llamada `MyClientDevice1` funcione `Discover` por sí misma.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "greengrass:Discover",
      "Resource": [
        "arn:aws:iot:us-west-2:123456789012:thing/MyClientDevice1"
      ]
    }
  ]
}
```

------

**importante**  
<a name="thing-policy-variable-not-supported"></a>[Las variables de política de objetos](https://docs.aws.amazon.com/iot/latest/developerguide/thing-policy-variables.html) (`iot:Connection.Thing.*`) no son compatibles con las políticas de AWS IoT para dispositivos principales ni operaciones del plano de datos de Greengrass. En su lugar, puede utilizar un comodín que haga coincidir varios dispositivos con nombres similares. Por ejemplo, puede especificar `MyGreengrassDevice*` para que coincida con `MyGreengrassDevice1`, `MyGreengrassDevice2`, etc. 

Para obtener más información, consulte [Políticas de AWS IoT Core](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policies.html) en la *Guía para desarrolladores de AWS IoT Core *.

## Solicitud
<a name="greengrass-discover-request"></a>

La solicitud contiene los encabezados HTTP estándar y se envía al punto de conexión de detección de Greengrass, como se muestra en los ejemplos siguientes.

El número de puerto depende de si el dispositivo principal está configurado para enviar el tráfico HTTPS a través del puerto 8443 o el puerto 443. Para obtener más información, consulte [Realizar la conexión en el puerto 443 o a través de un proxy de red](configure-greengrass-core-v2.md#configure-alpn-network-proxy).

**nota**  
Estos ejemplos utilizan el punto de conexión de Amazon Trust Services (ATS), que se utiliza con los certificados de CA raíz de ATS recomendados. Los puntos de enlace deben coincidir con el tipo de certificado de CA raíz.

Puerto 8443  

```
HTTP GET https://greengrass-ats.iot.region.amazonaws.com:8443/greengrass/discover/thing/thing-name
```

Puerto 443  

```
HTTP GET https://greengrass-ats.iot.region.amazonaws.com:443/greengrass/discover/thing/thing-name
```
Los clientes que se conecten por el puerto 443 deben implementar la extensión TLS de [Negociación de Protocolo de Capa de Aplicación (ALPN)](https://tools.ietf.org/html/rfc7301) y pasar `x-amzn-http-ca` como el `ProtocolName` en el `ProtocolNameList`. Para obtener más información, consulte [Protocolos](https://docs.aws.amazon.com/iot/latest/developerguide/protocols.html) en la *Guía para desarrolladores de AWS IoT *.

## Respuesta
<a name="greengrass-discover-response"></a>

En caso de éxito, el encabezado de la respuesta incluye el código de estado HTTP 200 y el cuerpo de la respuesta contiene el documento de respuesta de la detección.

**nota**  
Como AWS IoT Greengrass V2 utiliza la misma API de descubrimiento que AWS IoT Greengrass V1, la respuesta organiza la información según AWS IoT Greengrass V1 conceptos, como los grupos de Greengrass. La respuesta contiene una lista de grupos de Greengrass. En AWS IoT Greengrass V2, cada dispositivo principal está en su propio grupo, donde el grupo contiene solo ese dispositivo principal y su información de conectividad.

### Ejemplo de documentos de respuesta de detección
<a name="greengrass-discover-response-examples"></a>

En el siguiente documento, se muestran la respuesta de un dispositivo de cliente que está asociado a un dispositivo principales de Greengrass. El dispositivo principal tiene un punto de conexión y un certificado de la CA.

```
{
  "GGGroups": [
    {
      "GGGroupId": "greengrassV2-coreDevice-core-device-01-thing-name",
      "Cores": [
        {
          "thingArn": "core-device-01-thing-arn",
          "Connectivity": [
            {
              "id": "core-device-01-connection-id",
              "hostAddress": "core-device-01-address",
              "portNumber": core-device-01-port,
              "metadata": "core-device-01-description"
            }
          ]
        }
      ],
      "CAs": [
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----"
      ]
    }
  ]
}
```

En el siguiente documento, se muestra la respuesta de un dispositivo de cliente que está asociado a dos dispositivos principales. Los dispositivos principales tienen varios puntos de conexión y varios certificados de la CA del grupo.

```
{
  "GGGroups": [
    {
      "GGGroupId": "greengrassV2-coreDevice-core-device-01-thing-name",
      "Cores": [
        {
          "thingArn": "core-device-01-thing-arn",
          "Connectivity": [
            {
              "id": "core-device-01-connection-id",
              "hostAddress": "core-device-01-address",
              "portNumber": core-device-01-port,
              "metadata": "core-device-01-connection-1-description"
            },
            {
              "id": "core-device-01-connection-id-2",
              "hostAddress": "core-device-01-address-2",
              "portNumber": core-device-01-port-2,
              "metadata": "core-device-01-connection-2-description"
            }
          ]
        }
      ],
      "CAs": [
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----",
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----",
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----"
      ]
    },
    {
      "GGGroupId": "greengrassV2-coreDevice-core-device-02-thing-name",
      "Cores": [
        {
          "thingArn":"core-device-02-thing-arn",
          "Connectivity" : [
            {
              "id": "core-device-02-connection-id",
              "hostAddress": "core-device-02-address",
              "portNumber": core-device-02-port,
              "metadata": "core-device-02-connection-1-description"
            }
          ]
        }
      ],
      "CAs": [
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----",
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----",
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----"
      ]
    }
  ]
}
```

## Prueba de la API de detección con cURL
<a name="greengrass-discover-test-request"></a>

Si instaló `cURL`, puede probar la API de detección. En el siguiente ejemplo, se especifican los certificados de un dispositivo de cliente para autenticar una solicitud en el punto de conexión de la API de detección de Greengrass.

```
curl -i \
  --cert 1a23bc4d56.cert.pem \
  --key 1a23bc4d56.private.key \
  https://greengrass-ats.iot.us-west-2.amazonaws.com:8443/greengrass/discover/thing/MyClientDevice1
```

**nota**  
El argumento `-i` especifica la salida de los encabezados de respuesta HTTP. Puede utilizar esta opción para ayudar a identificar los errores.

Si la solicitud tiene éxito, este comando genera una respuesta similar al siguiente ejemplo.

```
{
  "GGGroups": [
    {
      "GGGroupId": "greengrassV2-coreDevice-MyGreengrassCore",
      "Cores": [
        {
          "thingArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
          "Connectivity": [
            {
              "Id": "AUTOIP_192.168.1.4_1",
              "HostAddress": "192.168.1.5",
              "PortNumber": 8883,
              "Metadata": ""
            }
          ]
        }
      ],
      "CAs": [
        "-----BEGIN CERTIFICATE-----\ncert-contents\n-----END CERTIFICATE-----\n"
      ]
    }
  ]
}
```

Si el comando genera un error, consulte [Solución de problemas de detección de Greengrass](troubleshooting-client-devices.md#greengrass-discovery-issues).