Interactúa con AWS los servicios - AWS IoT Greengrass

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.

Interactúa con AWS los servicios

Los dispositivos principales de Greengrass utilizan certificados X.509 para conectarse AWS IoT Core mediante protocolos de autenticación mutua TLS. Estos certificados permiten que los dispositivos interactúen AWS IoT sin AWS credenciales, que normalmente incluyen un identificador de clave de acceso y una clave de acceso secreta. Otros AWS servicios requieren AWS credenciales en lugar de certificados X.509 para realizar llamadas a las operaciones de la API en los puntos finales del servicio. AWS IoT Coretiene un proveedor de credenciales que permite a los dispositivos utilizar su certificado X.509 para autenticar las solicitudes. AWS El proveedor de AWS IoT credenciales autentica los dispositivos mediante un certificado X.509 y emite AWS las credenciales en forma de token de seguridad temporal con privilegios limitados. Los dispositivos pueden usar este token para firmar y autenticar cualquier solicitud. AWS Esto elimina la necesidad de almacenar AWS las credenciales en los dispositivos principales de Greengrass. Para obtener más información, consulte Autorizar llamadas directas a AWS los servicios en la Guía para AWS IoT Coredesarrolladores.

Para obtener las credenciales de GreengrassAWS IoT, los dispositivos principales utilizan AWS IoT un alias de rol que apunta a un rol de IAM. Esta función de IAM se denomina función de intercambio de fichas. El alias del rol y el rol de intercambio de tokens se crean al instalar el software AWS IoT Greengrass Core. Para especificar el alias de rol que utiliza un dispositivo principal, configure el iotRoleAlias parámetro delNúcleo de Greengrass.

El proveedor de AWS IoT credenciales asume la función de intercambio de fichas en su nombre para proporcionar AWS credenciales a los dispositivos principales. Puede adjuntar las políticas de IAM adecuadas a esta función para permitir que sus dispositivos principales accedan a sus AWS recursos, como los componentes y artefactos de los depósitos de S3. Para obtener más información sobre cómo configurar la función de intercambio de tokens, consulte. Autorizar a los dispositivos principales a interactuar con AWS los servicios

Los dispositivos principales de Greengrass almacenan AWS las credenciales en la memoria y, de forma predeterminada, las credenciales caducan después de una hora. Si el software AWS IoT Greengrass Core se reinicia, debe volver a buscar las credenciales. Puede utilizar la UpdateRoleAliasoperación para configurar el tiempo de validez de las credenciales.

AWS IoT Greengrassproporciona un componente público, el componente del servicio de intercambio de fichas, que puede definir como una dependencia en su componente personalizado para interactuar con AWS los servicios. El servicio de intercambio de tokens proporciona al componente una variable de entorno que define el URI de un servidor local que proporciona AWS las credenciales. AWS_CONTAINER_CREDENTIALS_FULL_URI Al crear un cliente de AWS SDK, el cliente comprueba esta variable de entorno y se conecta al servidor local para recuperar AWS las credenciales y las utiliza para firmar las solicitudes de API. Esto le permite usar AWS los SDK y otras herramientas para llamar a AWS los servicios de sus componentes. Para obtener más información, consulte Servicio de intercambio de fichas.

importante

El 13 de julio de 2016 se agregó a los AWS SDK el soporte para adquirir AWS credenciales de esta manera. Su componente debe usar una versión AWS del SDK que se haya creado en esa fecha o después. Para obtener más información, consulte Uso de un AWS SDK compatible en la Guía para desarrolladores de Amazon Elastic Container Service.

Para adquirir AWS credenciales en su componente personalizado, defínalas aws.greengrass.TokenExchangeService como una dependencia en la receta del componente. La siguiente receta de ejemplo define un componente que instala boto3 y ejecuta un script de Python que usa AWS las credenciales del servicio de intercambio de tokens para enumerar los buckets de Amazon S3.

nota

Para ejecutar este componente de ejemplo, el dispositivo debe tener el permiso. s3:ListAllMyBuckets Para obtener más información, consulte Autorizar a los dispositivos principales a interactuar con AWS los servicios.

JSON
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.ListS3Buckets", "ComponentVersion": "1.0.0", "ComponentDescription": "A component that uses the token exchange service to list S3 buckets.", "ComponentPublisher": "Amazon", "ComponentDependencies": { "aws.greengrass.TokenExchangeService": { "VersionRequirement": "^2.0.0", "DependencyType": "HARD" } }, "Manifests": [ { "Platform": { "os": "linux" }, "Lifecycle": { "install": "pip3 install --user boto3", "run": "python3 -u {artifacts:path}/list_s3_buckets.py" } }, { "Platform": { "os": "windows" }, "Lifecycle": { "install": "pip3 install --user boto3", "run": "py -3 -u {artifacts:path}/list_s3_buckets.py" } } ] }
YAML
--- RecipeFormatVersion: '2020-01-25' ComponentName: com.example.ListS3Buckets ComponentVersion: '1.0.0' ComponentDescription: A component that uses the token exchange service to list S3 buckets. ComponentPublisher: Amazon ComponentDependencies: aws.greengrass.TokenExchangeService: VersionRequirement: '^2.0.0' DependencyType: HARD Manifests: - Platform: os: linux Lifecycle: install: pip3 install --user boto3 run: |- python3 -u {artifacts:path}/list_s3_buckets.py - Platform: os: windows Lifecycle: install: pip3 install --user boto3 run: |- py -3 -u {artifacts:path}/list_s3_buckets.py

Este componente de ejemplo ejecuta el siguiente script de Python, list_s3_buckets.py que muestra una lista de los buckets de Amazon S3.

import boto3 import os try: print("Creating boto3 S3 client...") s3 = boto3.client('s3') print("Successfully created boto3 S3 client") except Exception as e: print("Failed to create boto3 s3 client. Error: " + str(e)) exit(1) try: print("Listing S3 buckets...") response = s3.list_buckets() for bucket in response['Buckets']: print(f'\t{bucket["Name"]}') print("Successfully listed S3 buckets") except Exception as e: print("Failed to list S3 buckets. Error: " + str(e)) exit(1)