Interagisci con AWS i servizi - AWS IoT Greengrass

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Interagisci con AWS i servizi

I dispositivi core Greengrass utilizzano certificati X.509 a cui connettersi AWS IoT Core utilizzando i protocolli di autenticazione reciproca TLS. Questi certificati consentono ai dispositivi di interagire AWS IoT senza AWS credenziali, che in genere comprendono un ID della chiave di accesso e una chiave di accesso segreta. Altri AWS servizi richiedono AWS credenziali anziché certificati X.509 per richiamare le operazioni API sugli endpoint del servizio. AWS IoT Coredispone di un provider di credenziali che consente ai dispositivi di utilizzare il certificato X.509 per autenticare le richieste. AWS Il provider di AWS IoT credenziali autentica i dispositivi utilizzando un certificato X.509 e rilascia AWS credenziali sotto forma di token di sicurezza temporaneo con privilegi limitati. I dispositivi possono utilizzare questo token per firmare e autenticare qualsiasi richiesta. AWS Ciò elimina la necessità di memorizzare AWS le credenziali sui dispositivi core Greengrass. Per ulteriori informazioni, consulta Autorizzazione delle chiamate dirette ai AWS servizi nella Guida per gli AWS IoT Core sviluppatori.

Per recuperare le credenziali da AWS IoT Greengrass, i dispositivi principali utilizzano un alias di ruolo che punta a un AWS IoT ruolo IAM. Questo ruolo IAM è chiamato ruolo di scambio di token. L'alias del ruolo e il ruolo di scambio di token vengono creati quando si installa il software AWS IoT Greengrass Core. Per specificare l'alias di ruolo utilizzato da un dispositivo principale, configura il iotRoleAlias parametro di. Nucleo Greengrass

Il fornitore di AWS IoT credenziali assume il ruolo di scambio di token per conto dell'utente per fornire AWS le credenziali ai dispositivi principali. Puoi associare policy IAM appropriate a questo ruolo per consentire ai tuoi dispositivi principali di accedere alle tue AWS risorse, ad esempio componenti, artefatti nei bucket S3. Per ulteriori informazioni su come configurare il ruolo di scambio di token, consulta. Autorizza i dispositivi principali a interagire con i servizi AWS

I dispositivi core Greengrass archiviano AWS le credenziali in memoria e le credenziali scadono dopo un'ora per impostazione predefinita. Se il software AWS IoT Greengrass Core si riavvia, deve recuperare nuovamente le credenziali. È possibile utilizzare l'UpdateRoleAliasoperazione per configurare la durata della validità delle credenziali.

AWS IoT Greengrassfornisce un componente pubblico, il componente del servizio di scambio di token, che è possibile definire come dipendenza nel componente personalizzato dall'interazione con AWS i servizi. Il servizio di scambio di token fornisce al componente una variabile di ambiente che definisce l'URI di un server locale che fornisce AWS le credenziali. AWS_CONTAINER_CREDENTIALS_FULL_URI Quando crei un client AWS SDK, il client verifica la presenza di questa variabile di ambiente e si connette al server locale per recuperare AWS le credenziali e le utilizza per firmare le richieste API. Ciò consente di utilizzare AWS SDK e altri strumenti per chiamare i AWS servizi nei componenti. Per ulteriori informazioni, consulta Servizio di scambio di token.

Importante

Il supporto per l'acquisizione di AWS credenziali in questo modo è stato aggiunto agli AWS SDK il 13 luglio 2016. Il componente deve utilizzare una versione AWS SDK creata a partire da tale data. Per ulteriori informazioni, consulta Using a support AWS SDK nella Amazon Elastic Container Service Developer Guide.

Per acquisire AWS credenziali nel componente personalizzato, definiscilo aws.greengrass.TokenExchangeService come dipendenza nella ricetta del componente. La seguente ricetta di esempio definisce un componente che installa boto3 ed esegue uno script Python che utilizza AWS le credenziali del servizio di scambio di token per elencare i bucket Amazon S3.

Nota

Per eseguire questo componente di esempio, il dispositivo deve disporre dell'autorizzazione. s3:ListAllMyBuckets Per ulteriori informazioni, consulta Autorizza i dispositivi principali a interagire con i servizi AWS.

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

Questo componente di esempio esegue il seguente script Python, list_s3_buckets.py che elenca i bucket 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)