Interagieren mit -AWSServices - AWS IoT Greengrass

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Interagieren mit -AWSServices

Greengrass-Core-Geräte verwenden X.509-Zertifikate, um AWS IoT Core mithilfe von TLS-Protokollen für die gegenseitige Authentifizierung eine Verbindung zu herzustellen. Mit diesen Zertifikaten können Geräte AWS IoT ohne AWS Anmeldeinformationen mit interagieren, die in der Regel eine Zugriffsschlüssel-ID und einen geheimen Zugriffsschlüssel umfassen. Andere -AWSServices benötigen AWS Anmeldeinformationen anstelle von X.509-Zertifikaten, um API-Operationen an Service-Endpunkten aufzurufen. AWS IoT Core verfügt über einen Anbieter von Anmeldeinformationen, der es Geräten ermöglicht, ihr X.509-Zertifikat zur Authentifizierung von AWS Anforderungen zu verwenden. Der AWS IoT Anmeldeinformationsanbieter authentifiziert Geräte mit einem X.509-Zertifikat und gibt AWS Anmeldeinformationen in Form eines temporären Sicherheitstokens mit eingeschränkten Berechtigungen aus. Geräte können dieses Token verwenden, um jede AWS Anforderung zu signieren und zu authentifizieren. Dadurch entfällt die Notwendigkeit, AWS Anmeldeinformationen auf Greengrass-Core-Geräten zu speichern. Weitere Informationen finden Sie unter Autorisieren von direkten Aufrufen an -AWSServices im AWS IoT Core -Entwicklerhandbuch.

Um Anmeldeinformationen von abzurufenAWS IoT, verwenden Greengrass-Core-Geräte einen -AWS IoTRollenalias, der auf eine IAM-Rolle verweist. Diese IAM-Rolle wird als Token-Exchange-Rolle bezeichnet. Sie erstellen den Rollenalias und die Token-Exchange-Rolle, wenn Sie die AWS IoT Greengrass Core-Software installieren. Um den Rollenalias anzugeben, den ein Core-Gerät verwendet, konfigurieren Sie den iotRoleAlias Parameter von Grüngraskern.

Der AWS IoT Anmeldeinformationsanbieter übernimmt die Token-Exchange-Rolle in Ihrem Namen, um -AWSAnmeldeinformationen für -Core-Geräte bereitzustellen. Sie können dieser Rolle entsprechende IAM-Richtlinien anfügen, um Ihren -Core-Geräten den Zugriff auf Ihre -AWSRessourcen zu ermöglichen, z. B. Komponentenartefakte in S3-Buckets. Weitere Informationen zum Konfigurieren der Token-Exchange-Rolle finden Sie unter Autorisieren Sie Kerngeräte für die Interaktion mit Diensten AWS.

Greengrass-Core-Geräte speichern AWS Anmeldeinformationen im Speicher, und die Anmeldeinformationen laufen standardmäßig nach einer Stunde ab. Wenn die AWS IoT Greengrass Core-Software neu gestartet wird, muss sie die Anmeldeinformationen erneut abrufen. Sie können die -UpdateRoleAliasOperation verwenden, um die Gültigkeitsdauer der Anmeldeinformationen zu konfigurieren.

AWS IoT Greengrass bietet eine öffentliche Komponente, die Token-Exchange-Servicekomponente, die Sie als Abhängigkeit in Ihrer benutzerdefinierten Komponente definieren können, um mit -AWSServices zu interagieren. Der Token-Exchange-Service stellt Ihrer Komponente eine Umgebungsvariable zur Verfügung, AWS_CONTAINER_CREDENTIALS_FULL_URI, die den URI für einen lokalen Server definiert, der AWS Anmeldeinformationen bereitstellt. Wenn Sie einen AWS SDK-Client erstellen, sucht der Client nach dieser Umgebungsvariablen und stellt eine Verbindung zum lokalen Server her, um AWS Anmeldeinformationen abzurufen, und verwendet sie zum Signieren von API-Anforderungen. Auf diese Weise können Sie AWS -SDKs und andere Tools verwenden, um -AWSServices in Ihren Komponenten aufzurufen. Weitere Informationen finden Sie unter Token-Exchange-Service.

Wichtig

Unterstützung für den Erhalt von AWS Anmeldeinformationen auf diese Weise wurde den AWS -SDKs am 13. Juli 2016 hinzugefügt. Ihre Komponente muss eine AWS SDK-Version verwenden, die an oder nach diesem Datum erstellt wurde. Weitere Informationen finden Sie unter Verwenden eines unterstützten AWS SDK im Amazon Elastic Container Service-Entwicklerhandbuch.

Um AWS Anmeldeinformationen in Ihrer benutzerdefinierten Komponente zu erhalten, definieren Sie aws.greengrass.TokenExchangeService als Abhängigkeit im Komponentenrezept. Das folgende Beispielrezept definiert eine Komponente, die boto3 installiert und ein Python-Skript ausführt, das AWS Anmeldeinformationen aus dem Token-Exchange-Service verwendet, um Amazon S3-Buckets aufzulisten.

Anmerkung

Um diese Beispielkomponente auszuführen, muss Ihr Gerät über die -s3:ListAllMyBucketsBerechtigung verfügen. Weitere Informationen finden Sie unter Autorisieren Sie Kerngeräte für die Interaktion mit Diensten 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

Diese Beispielkomponente führt das folgende Python-Skript aus, list_s3_buckets.py das Amazon S3-Buckets auflistet.

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)