Autorizar llamadas directas a los AWS servicios mediante el proveedor de AWS IoT Core credenciales - AWS IoT Core

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.

Autorizar llamadas directas a los AWS servicios mediante el proveedor de AWS IoT Core credenciales

Los dispositivos pueden usar certificados X.509 para conectarse AWS IoT Core mediante protocolos de autenticación TLS mutua. Otros AWS servicios no admiten la autenticación basada en certificados, pero se pueden llamar a ellos con AWS credenciales en formato AWS Signature Version 4. El algoritmo Signature de la versión 4 normalmente requiere que la persona que llama tenga un identificador de clave de acceso y una clave de acceso secreta. AWS IoT Core tiene un proveedor de credenciales que le permite utilizar el certificado X.509 integrado como identidad única del dispositivo para AWS autenticar las solicitudes. Así se elimina la necesidad de almacenar un ID de clave de acceso y una clave de acceso secreta en el dispositivo.

El proveedor de credenciales autentica a un intermediario mediante un certificado X.509 y emite un token de seguridad temporal con privilegios limitados. El token se puede usar para firmar y autenticar cualquier solicitud. AWS Esta forma de autenticar sus AWS solicitudes requiere que cree y configure un rol AWS Identity and Access Management (IAM) y que adjunte IAM las políticas adecuadas al rol para que el proveedor de credenciales pueda asumir el rol en su nombre. Para obtener más información sobre AWS IoT Core yIAM, consulteAdministración de identidades y accesos para AWS IoT.

AWS IoT requiere que los dispositivos envíen la extensión de indicación del nombre del servidor (SNI) al protocolo Transport Layer Security (TLS) y proporcionen la dirección completa del punto final en el host_name campo. El campo host_name debe contener el punto de conexión al que está llamando y debe ser:

  • El endpointAddress devuelto por aws iot describe-endpoint --endpoint-type iot:CredentialProvider.

Las conexiones que intenten realizar los dispositivos sin el valor de host_name correcto fallarán.

En el siguiente diagrama se ilustra el flujo de trabajo del proveedor de credenciales.

AWS IoT Core flujo de trabajo del proveedor de credenciales.
  1. El AWS IoT Core dispositivo HTTPS solicita un token de seguridad al proveedor de credenciales. La solicitud incluye el certificado X.509 del dispositivo para autenticación.

  2. El proveedor de credenciales reenvía la solicitud al módulo de AWS IoT Core autenticación y autorización para validar el certificado y comprobar que el dispositivo tiene permiso para solicitar el token de seguridad.

  3. Si el certificado es válido y tiene permiso para solicitar un token de seguridad, el módulo de AWS IoT Core autenticación y autorización se devuelve correctamente. De lo contrario, envía una excepción al dispositivo.

  4. Tras validar correctamente el certificado, el proveedor de credenciales invoca el AWS Security Token Service (AWS STS) para que asuma la IAM función que usted creó para él.

  5. AWS STS devuelve un token de seguridad temporal con privilegios limitados al proveedor de credenciales.

  6. El proveedor de credenciales devuelve el token de seguridad al dispositivo.

  7. El dispositivo usa el token de seguridad para firmar una AWS solicitud con la versión 4 de AWS Signature.

  8. El servicio solicitado lo invoca IAM para validar la firma y autorizar la solicitud con arreglo a las políticas de acceso asociadas a la IAM función que creó para el proveedor de credenciales.

  9. Si IAM valida la firma correctamente y autoriza la solicitud, la solicitud se realiza correctamente. De lo contrario, IAM envía una excepción.

En la siguiente sección se describe cómo utilizar un certificado para obtener un token de seguridad. Se ha escrito suponiendo que ya ha registrado un dispositivo y creado y activado su propio certificado para el mismo.

Cómo utilizar un certificado para obtener un token de seguridad

  1. Configure la IAM función que el proveedor de credenciales asume en nombre de su dispositivo. Asocie la siguiente política de confianza al rol.

    { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": {"Service": "credentials.iot.amazonaws.com"}, "Action": "sts:AssumeRole" } }

    Para cada AWS servicio al que desee llamar, adjunte una política de acceso al rol. El proveedor de credenciales admite las siguientes variables de políticas:

    • credentials-iot:ThingName

    • credentials-iot:ThingTypeName

    • credentials-iot:AwsCertificateId

    Cuando el dispositivo proporciona el nombre de objeto en su solicitud a un servicio de AWS , el proveedor de credenciales agrega credentials-iot:ThingName y credentials-iot:ThingTypeName como variables de contexto para el token de seguridad. El proveedor de credenciales proporciona credentials-iot:AwsCertificateId como una variable de contexto incluso si el dispositivo no proporciona el nombre de la cosa en la solicitud. Se pasa el nombre de la cosa como valor del encabezado de la x-amzn-iot-thingname HTTP solicitud.

    Estas tres variables solo funcionan para IAM las políticas, no para AWS IoT Core las políticas.

  2. Asegúrese de que el usuario que realiza el siguiente paso (la creación de un alias de rol) tiene permiso para transferir a AWS IoT Core el rol que se acaba de crear. La siguiente política otorga ambos iam:GetRole iam:PassRole permisos a un AWS usuario. El permiso iam:GetRole permite al usuario obtener información acerca del rol que acaba de crear. El iam:PassRole permiso permite al usuario transferir la función a otro AWS servicio.

    { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "arn:aws:iam::your Cuenta de AWS id:role/your role name" } }
  3. Cree un alias de AWS IoT Core rol. El dispositivo que va a realizar llamadas directas a AWS los servicios debe saber qué función ARN utilizar al conectarse AWS IoT Core. Codificar el rol no ARN es una buena solución porque requiere que actualices el dispositivo cada vez que ARN cambie el rol. Una mejor solución es utilizar el CreateRoleAlias API para crear un alias de rol que apunte al rolARN. Si el rol ARN cambia, solo tiene que actualizar el alias del rol. No es necesario realizar ningún cambio en el dispositivo. Esto API requiere los siguientes parámetros:

    roleAlias

    Obligatorio. Una cadena arbitraria que identifica el alias del rol. Sirve como clave principal en el modelo de datos del alias de rol. Contiene 1-128 caracteres y debe incluir únicamente caracteres alfanuméricos y los símbolos =, @ y -. Se permiten los caracteres alfabéticos en mayúsculas y minúsculas.

    roleArn

    Obligatorio. El ARN del rol al que hace referencia el alias del rol.

    credentialDurationSeconds

    Opcional. El tiempo (en segundos) que la credencial es válida. El valor mínimo es de 900 segundos (15 minutos). El valor máximo es de 43 200 segundos (12 horas). El valor predeterminado es de 3600 segundos (1 hora).

    importante

    El proveedor de AWS IoT Core credenciales puede emitir una credencial con una duración máxima de 43.200 segundos (12 horas). Hacer que la credencial sea válida durante un máximo de 12 horas puede ayudar a reducir el número de llamadas al proveedor de credenciales al almacenar la credencial en caché durante más tiempo.

    El credentialDurationSeconds valor debe ser inferior o igual a la duración máxima de sesión del rol al que hace referencia el IAM alias del rol. Para obtener más información, consulte Modificación de la duración máxima de la sesión de un rol (AWS API) en la Guía del usuario de AWS Identity and Access Management.

    Para obtener más información al respectoAPI, consulte CreateRoleAlias.

  4. Asocie una política al certificado de dispositivo. La política asociada al certificado del dispositivo debe conceder permiso al dispositivo para asumir el rol. Para ello, puede conceder permiso para la acción iot:AssumeRoleWithCertificate al alias de rol, como en el ejemplo siguiente.

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"iot:AssumeRoleWithCertificate", "Resource":"arn:aws:iot:your region:your_aws_account_id:rolealias/your role alias" } ] }
  5. Haga una HTTPS solicitud al proveedor de credenciales para obtener un token de seguridad. Proporcione la información siguiente:

    • Certificado: dado que se trata de una HTTP solicitud mediante autenticación TLS mutua, debe proporcionar el certificado y la clave privada a su cliente al realizar la solicitud. Utilice el mismo certificado y la misma clave privada con los que registró el certificado AWS IoT Core.

      Para asegurarse de que el dispositivo se está comunicando con AWS IoT Core (y no con un servicio que se hace pasar por él), consulte Autenticación de servidor, siga los enlaces para descargar los certificados de CA correspondientes y, a continuación, cópielos en su dispositivo.

    • RoleAlias: el nombre del alias de rol que creó para el proveedor de credenciales.

    • ThingName: El nombre de la cosa que creaste cuando la registraste AWS IoT Core . Se pasa como el valor del x-amzn-iot-thingname HTTP encabezado. Este valor solo es obligatorio si se utilizan los atributos de las cosas como variables de política en AWS IoT Core nuestras IAM políticas.

      nota

      El ThingNameque proporcione x-amzn-iot-thingname debe coincidir con el nombre del recurso AWS IoT Thing asignado a un certificado. Si no coincide, se devuelve un error 403.

    Ejecute el siguiente comando AWS CLI para obtener el punto final del proveedor de credenciales para su Cuenta de AWS. Para obtener más información al respectoAPI, consulte DescribeEndpoint. Para ver los puntos finales FIPS habilitados, consulte. AWS IoT Core- puntos de enlace del proveedor de credenciales

    aws iot describe-endpoint --endpoint-type iot:CredentialProvider

    El siguiente JSON objeto es un ejemplo del resultado del describe-endpoint comando. Contiene el endpointAddress que utiliza para solicitar un token de seguridad.

    { "endpointAddress": "your_aws_account_specific_prefix.credentials.iot.your region.amazonaws.com" }

    Utilice el punto final para HTTPS solicitar al proveedor de credenciales que devuelva un token de seguridad. El siguiente comando de ejemplo usacurl, pero usted puede usar, cualquier HTTP cliente.

    curl --cert your certificate --key your device certificate key pair -H "x-amzn-iot-thingname: your thing name" --cacert AmazonRootCA1.pem https://your endpoint /role-aliases/your role alias/credentials

    Este comando devuelve un objeto de token de seguridad objeto que contiene un accessKeyId, una secretAccessKey, un sessionToken y un vencimiento. El siguiente JSON objeto es un ejemplo del resultado del curl comando.

    {"credentials":{"accessKeyId":"access key","secretAccessKey":"secret access key","sessionToken":"session token","expiration":"2018-01-18T09:18:06Z"}}

    A continuación, puede utilizar los sessionToken valores accessKeyIdsecretAccessKey, y para firmar las solicitudes de AWS servicios. Para ver una end-to-end demostración, consulte Cómo eliminar la necesidad de AWS credenciales codificadas en los dispositivos mediante el uso de la entrada del blog sobre el proveedor de AWS IoT credenciales en el blog de AWS seguridad.