Interagieren Sie mit AWS Diensten - 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 Sie mit AWS Diensten

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

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

Der Anbieter AWS IoT für Anmeldeinformationen übernimmt in Ihrem Namen die Rolle des Tokenaustauschs, um AWS Anmeldeinformationen für Kerngeräte bereitzustellen. Sie können dieser Rolle entsprechende IAM Richtlinien zuordnen, um Ihren Kerngeräten den Zugriff auf Ihre AWS Ressourcen zu ermöglichen, z. B. auf Komponentenartefakte in S3-Buckets. Weitere Informationen zur Konfiguration der Token-Austauschrolle finden Sie unterAutorisieren 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 den UpdateRoleAliasVorgang verwenden, um die Gültigkeitsdauer der Anmeldeinformationen zu konfigurieren.

AWS IoT Greengrass stellt eine öffentliche Komponente bereit, die Token-Exchange-Dienstkomponente, die Sie als Abhängigkeit in Ihrer benutzerdefinierten Komponente definieren können, um mit AWS Diensten zu interagieren. Der Token-Exchange-Dienst stellt Ihrer Komponente eine Umgebungsvariable zur VerfügungAWS_CONTAINER_CREDENTIALS_FULL_URI, die den URI Zugriff auf 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 Anfragen. Auf diese Weise können Sie andere Tools verwenden AWS SDKs, um AWS Dienste in Ihren Komponenten aufzurufen. Weitere Informationen finden Sie unter Token-Exchange-Service.

Wichtig

Die Support für den Erwerb von AWS Anmeldeinformationen auf diese Weise wurde 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 Using a supported AWS SDK im Amazon Elastic Container Service Developer Guide.

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

Anmerkung

Um diese Beispielkomponente ausführen zu können, muss Ihr Gerät über die entsprechende Berechtigung verfügen. s3:ListAllMyBuckets 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 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)