Abrufen von Secret-Werten - 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.

Abrufen von Secret-Werten

Verwenden Sie den Secret Manager IPC-Service, um Secret-Werte aus Secrets auf dem Core-Gerät abzurufen. Sie verwenden die Secret-Manager-Komponente, um verschlüsselte Secrets auf -Core-Geräten bereitzustellen. Anschließend können Sie eine IPC-Operation verwenden, um das Secret zu entschlüsseln und seinen Wert in Ihren benutzerdefinierten Komponenten zu verwenden.

SDK-Mindestversionen

In der folgenden Tabelle sind die Mindestversionen von aufgeführtAWS IoT Device SDK, die Sie verwenden müssen, um Secret-Werte von Secrets auf dem Core-Gerät abzurufen.

Autorisierung

Um Secret Manager in einer benutzerdefinierten Komponente zu verwenden, müssen Sie Autorisierungsrichtlinien definieren, die es Ihrer Komponente ermöglichen, den Wert von Secrets abzurufen, die Sie auf dem Core-Gerät speichern. Informationen zum Definieren von Autorisierungsrichtlinien finden Sie unter Autorisieren Sie Komponenten zur Ausführung von IPC-Vorgängen.

Autorisierungsrichtlinien für Secret Manager haben die folgenden Eigenschaften.

IPC-Service-ID: aws.greengrass.SecretManager

Operation Beschreibung Ressourcen

aws.greengrass#GetSecretValue oder *

Ermöglicht einer Komponente, den Wert von Secrets abzurufen, die auf dem Core-Gerät verschlüsselt sind.

Ein Secrets-Manager-Geheimnis-ARN oder , * um den Zugriff auf alle Geheimnisse zu ermöglichen.

Beispiele für Autorisierungsrichtlinien

Sie können auf das folgende Beispiel für eine Autorisierungsrichtlinie verweisen, um Ihnen bei der Konfiguration von Autorisierungsrichtlinien für Ihre Komponenten zu helfen.

Beispiel für eine Autorisierungsrichtlinie

Die folgende Beispielautorisierungsrichtlinie erlaubt es einer Komponente, den Wert eines beliebigen Secrets auf dem Core-Gerät abzurufen.

Anmerkung

Wir empfehlen, dass Sie in einer Produktionsumgebung den Umfang der Autorisierungsrichtlinie reduzieren, sodass die Komponente nur die Secrets abruft, die sie verwendet. Sie können den * Platzhalter in eine Liste geheimer ARNs ändern, wenn Sie die Komponente bereitstellen.

{ "accessControl": { "aws.greengrass.SecretManager": { "com.example.MySecretComponent:secrets:1": { "policyDescription": "Allows access to a secret.", "operations": [ "aws.greengrass#GetSecretValue" ], "resources": [ "*" ] } } } }

GetSecretValue

Ruft den Wert eines Secrets ab, das Sie auf dem Core-Gerät speichern.

Dieser Vorgang ähnelt dem Secrets-Manager-Vorgang, mit dem Sie den Wert eines Secrets im abrufen könnenAWS Cloud. Weitere Informationen finden Sie unter GetSecretValue in der AWS Secrets Manager-API-Referenz.

Anforderung

Die Anforderung dieser Operation hat die folgenden Parameter:

secretId (Python: secret_id)

Der Name des abzurufenden Secrets. Sie können entweder den Amazon-Ressourcennamen (ARN) oder den Anzeigenamen des Secrets angeben.

versionId (Python: version_id)

(Optional) Die ID der abzurufenden Version.

Sie können entweder versionId oder versionStage angeben.

Wenn Sie oder nicht angebenversionIdversionStage, wird dieser Vorgang standardmäßig auf die Version mit der AWSCURRENT Bezeichnung gesetzt.

versionStage (Python: version_stage)

(Optional) Die Staging-Bezeichnung der abzurufenden Version.

Sie können entweder versionId oder versionStage angeben.

Wenn Sie oder nicht angebenversionIdversionStage, wird dieser Vorgang standardmäßig auf die Version mit der AWSCURRENT Bezeichnung gesetzt.

Antwort

Die Antwort dieser Operation enthält die folgenden Informationen:

secretId (Python: secret_id)

Die ID des Secrets.

versionId (Python: version_id)

Die ID dieser Version des Secrets.

versionStage (Python: version_stage)

Die Liste der Staging-Bezeichnungen, die an diese Version des Secrets angehängt sind.

secretValue (Python: secret_value)

Der Wert dieser Version des Secrets. Dieses Objekt, SecretValue, enthält die folgenden Informationen.

secretString (Python: secret_string)

Der entschlüsselte Teil der geschützten geheimen Informationen, den Sie Secrets Manager als Zeichenfolge zur Verfügung gestellt haben.

secretBinary (Python: secret_binary)

(Optional) Der entschlüsselte Teil der geschützten Secret-Informationen, den Sie Secrets Manager als Binärdaten in Form eines Byte-Arrays bereitgestellt haben. Diese Eigenschaft enthält die Binärdaten als base64-kodierte Zeichenfolge.

Diese Eigenschaft wird nicht verwendet, wenn Sie das Secret in der Secrets-Manager-Konsole erstellt haben.

Beispiele

Die folgenden Beispiele veranschaulichen, wie Sie diese Operation im benutzerdefinierten Komponentencode aufrufen.

Java (IPC client V1)
Beispiel: Abrufen eines Secret-Werts
Anmerkung

In diesem Beispiel wird eine -IPCUtilsKlasse verwendet, um eine Verbindung zum AWS IoT Greengrass Core IPC-Service herzustellen. Weitere Informationen finden Sie unter Connect zum AWS IoT Greengrass Core IPC-Dienst her.

package com.aws.greengrass.docs.samples.ipc; import com.aws.greengrass.docs.samples.ipc.util.IPCUtils; import software.amazon.awssdk.aws.greengrass.GetSecretValueResponseHandler; import software.amazon.awssdk.aws.greengrass.GreengrassCoreIPCClient; import software.amazon.awssdk.aws.greengrass.model.GetSecretValueRequest; import software.amazon.awssdk.aws.greengrass.model.GetSecretValueResponse; import software.amazon.awssdk.aws.greengrass.model.UnauthorizedError; import software.amazon.awssdk.eventstreamrpc.EventStreamRPCConnection; import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; public class GetSecretValue { public static final int TIMEOUT_SECONDS = 10; public static void main(String[] args) { String secretArn = args[0]; String versionStage = args[1]; try (EventStreamRPCConnection eventStreamRPCConnection = IPCUtils.getEventStreamRpcConnection()) { GreengrassCoreIPCClient ipcClient = new GreengrassCoreIPCClient(eventStreamRPCConnection); GetSecretValueResponseHandler responseHandler = GetSecretValue.getSecretValue(ipcClient, secretArn, versionStage); CompletableFuture<GetSecretValueResponse> futureResponse = responseHandler.getResponse(); try { GetSecretValueResponse response = futureResponse.get(TIMEOUT_SECONDS, TimeUnit.SECONDS); response.getSecretValue().postFromJson(); String secretString = response.getSecretValue().getSecretString(); System.out.println("Successfully retrieved secret value: " + secretString); } catch (TimeoutException e) { System.err.println("Timeout occurred while retrieving secret: " + secretArn); } catch (ExecutionException e) { if (e.getCause() instanceof UnauthorizedError) { System.err.println("Unauthorized error while retrieving secret: " + secretArn); } else { throw e; } } } catch (InterruptedException e) { System.out.println("IPC interrupted."); } catch (ExecutionException e) { System.err.println("Exception occurred when using IPC."); e.printStackTrace(); System.exit(1); } } public static GetSecretValueResponseHandler getSecretValue(GreengrassCoreIPCClient greengrassCoreIPCClient, String secretArn, String versionStage) { GetSecretValueRequest getSecretValueRequest = new GetSecretValueRequest(); getSecretValueRequest.setSecretId(secretArn); getSecretValueRequest.setVersionStage(versionStage); return greengrassCoreIPCClient.getSecretValue(getSecretValueRequest, Optional.empty()); } }
Python (IPC client V1)
Beispiel: Abrufen eines Secret-Werts
Anmerkung

In diesem Beispiel wird davon ausgegangen, dass Sie Version 1.5.4 oder höher von AWS IoT Device SDK für Python v2 verwenden.

import json import awsiot.greengrasscoreipc from awsiot.greengrasscoreipc.model import ( GetSecretValueRequest, GetSecretValueResponse, UnauthorizedError ) secret_id = 'arn:aws:secretsmanager:us-west-2:123456789012:secret:MyGreengrassSecret-abcdef' TIMEOUT = 10 ipc_client = awsiot.greengrasscoreipc.connect() request = GetSecretValueRequest() request.secret_id = secret_id request.version_stage = 'AWSCURRENT' operation = ipc_client.new_get_secret_value() operation.activate(request) future_response = operation.get_response() response = future_response.result(TIMEOUT) secret_json = json.loads(response.secret_value.secret_string) # Handle secret value.
JavaScript
Beispiel: Abrufen eines Secret-Werts
import { GetSecretValueRequest, } from 'aws-iot-device-sdk-v2/dist/greengrasscoreipc/model'; import * as greengrasscoreipc from "aws-iot-device-sdk-v2/dist/greengrasscoreipc"; class GetSecretValue { private readonly secretId : string; private readonly versionStage : string; private ipcClient : greengrasscoreipc.Client constructor() { this.secretId = "<define_your_own_secretId>" this.versionStage = "<define_your_own_versionStage>" this.getSecretValue().then(r => console.log("Started workflow")); } private async getSecretValue() { try { this.ipcClient = await getIpcClient(); const getSecretValueRequest : GetSecretValueRequest = { secretId: this.secretId, versionStage: this.versionStage, }; const result = await this.ipcClient.getSecretValue(getSecretValueRequest); const secretString = result.secretValue.secretString; console.log("Successfully retrieved secret value: " + secretString) } catch (e) { // parse the error depending on your use cases throw e } } } export async function getIpcClient(){ try { const ipcClient = greengrasscoreipc.createClient(); await ipcClient.connect() .catch(error => { // parse the error depending on your use cases throw error; }); return ipcClient } catch (err) { // parse the error depending on your use cases throw err } } const getSecretValue = new GetSecretValue();

Beispiele

Verwenden Sie die folgenden Beispiele, um zu erfahren, wie Sie den Secret Manager IPC-Service in Ihren Komponenten verwenden.

Diese Beispielkomponente gibt den Wert eines Secrets aus, das Sie auf dem Core-Gerät bereitstellen.

Wichtig

Diese Beispielkomponente gibt den Wert eines Secrets aus. Verwenden Sie es daher nur mit Secrets, die Testdaten speichern. Verwenden Sie diese Komponente nicht, um den Wert eines Secrets zu drucken, das wichtige Informationen speichert.

Rezept

Das folgende Beispielrezept definiert einen geheimen ARN-Konfigurationsparameter und ermöglicht es der Komponente, den Wert eines Secrets auf dem Core-Gerät abzurufen.

Anmerkung

Wir empfehlen, dass Sie in einer Produktionsumgebung den Umfang der Autorisierungsrichtlinie reduzieren, sodass die Komponente nur die Secrets abruft, die sie verwendet. Sie können den * Platzhalter in eine Liste geheimer ARNs ändern, wenn Sie die Komponente bereitstellen.

JSON
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.PrintSecret", "ComponentVersion": "1.0.0", "ComponentDescription": "Prints the value of an AWS Secrets Manager secret.", "ComponentPublisher": "Amazon", "ComponentDependencies": { "aws.greengrass.SecretManager": { "VersionRequirement": "^2.0.0", "DependencyType": "HARD" } }, "ComponentConfiguration": { "DefaultConfiguration": { "SecretArn": "", "accessControl": { "aws.greengrass.SecretManager": { "com.example.PrintSecret:secrets:1": { "policyDescription": "Allows access to a secret.", "operations": [ "aws.greengrass#GetSecretValue" ], "resources": [ "*" ] } } } } }, "Manifests": [ { "Platform": { "os": "linux" }, "Lifecycle": { "install": "python3 -m pip install --user awsiotsdk", "run": "python3 -u {artifacts:path}/print_secret.py \"{configuration:/SecretArn}\"" } }, { "Platform": { "os": "windows" }, "Lifecycle": { "install": "py -3 -m pip install --user awsiotsdk", "run": "py -3 -u {artifacts:path}/print_secret.py \"{configuration:/SecretArn}\"" } } ] }
YAML
--- RecipeFormatVersion: '2020-01-25' ComponentName: com.example.PrintSecret ComponentVersion: 1.0.0 ComponentDescription: Prints the value of a Secrets Manager secret. ComponentPublisher: Amazon ComponentDependencies: aws.greengrass.SecretManager: VersionRequirement: "^2.0.0" DependencyType: HARD ComponentConfiguration: DefaultConfiguration: SecretArn: '' accessControl: aws.greengrass.SecretManager: com.example.PrintSecret:secrets:1: policyDescription: Allows access to a secret. operations: - aws.greengrass#GetSecretValue resources: - "*" Manifests: - Platform: os: linux Lifecycle: install: python3 -m pip install --user awsiotsdk run: python3 -u {artifacts:path}/print_secret.py "{configuration:/SecretArn}" - Platform: os: windows Lifecycle: install: py -3 -m pip install --user awsiotsdk run: py -3 -u {artifacts:path}/print_secret.py "{configuration:/SecretArn}"

-Artefakte

Die folgende Python-Beispielanwendung zeigt, wie der Secret Manager IPC-Service verwendet wird, um den Wert eines Secrets auf dem Core-Gerät abzurufen.

import concurrent.futures import json import sys import traceback import awsiot.greengrasscoreipc from awsiot.greengrasscoreipc.model import ( GetSecretValueRequest, GetSecretValueResponse, UnauthorizedError ) TIMEOUT = 10 if len(sys.argv) == 1: print('Provide SecretArn in the component configuration.', file=sys.stdout) exit(1) secret_id = sys.argv[1] try: ipc_client = awsiot.greengrasscoreipc.connect() request = GetSecretValueRequest() request.secret_id = secret_id operation = ipc_client.new_get_secret_value() operation.activate(request) future_response = operation.get_response() try: response = future_response.result(TIMEOUT) secret_json = json.loads(response.secret_value.secret_string) print('Successfully got secret: ' + secret_id) print('Secret value: ' + str(secret_json)) except concurrent.futures.TimeoutError: print('Timeout occurred while getting secret: ' + secret_id, file=sys.stderr) except UnauthorizedError as e: print('Unauthorized error while getting secret: ' + secret_id, file=sys.stderr) raise e except Exception as e: print('Exception while getting secret: ' + secret_id, file=sys.stderr) raise e except Exception: print('Exception occurred when using IPC.', file=sys.stderr) traceback.print_exc() exit(1)

Verwendung

Sie können diese Beispielkomponente mit der Secret-Manager-Komponente verwenden, um den Wert eines Secrets auf Ihrem Core-Gerät bereitzustellen und zu drucken.

So erstellen, stellen Sie ein Test-Secret bereit und drucken es
  1. Erstellen Sie ein Secrets-Manager-Secret mit Testdaten.

    Linux or Unix
    aws secretsmanager create-secret \ --name MyTestGreengrassSecret \ --secret-string '{"my-secret-key": "my-secret-value"}'
    Windows Command Prompt (CMD)
    aws secretsmanager create-secret ^ --name MyTestGreengrassSecret ^ --secret-string '{"my-secret-key": "my-secret-value"}'
    PowerShell
    aws secretsmanager create-secret ` --name MyTestGreengrassSecret ` --secret-string '{"my-secret-key": "my-secret-value"}'

    Speichern Sie den ARN des Secrets, das Sie in den folgenden Schritten verwenden möchten.

    Weitere Informationen finden Sie unter Erstellen eines Secrets im AWS Secrets Manager -Benutzerhandbuch.

  2. Stellen Sie die Secret-Manager-Komponente (aws.greengrass.SecretManager) mit der folgenden Konfigurationszusammenführungsaktualisierung bereit. Geben Sie den ARN des Secrets an, das Sie zuvor erstellt haben.

    { "cloudSecrets": [ { "arn": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestGreengrassSecret-abcdef" } ] }

    Weitere Informationen finden Sie unter Bereitstellen von AWS IoT Greengrass Komponenten auf Geräten oder im Greengrass-CLI-Bereitstellungsbefehl .

  3. Erstellen Sie die Beispielkomponente in diesem Abschnitt und stellen Sie sie mit der folgenden Aktualisierung der Konfigurationszusammenführung bereit. Geben Sie den ARN des Secrets an, das Sie zuvor erstellt haben.

    { "SecretArn": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestGreengrassSecret", "accessControl": { "aws.greengrass.SecretManager": { "com.example.PrintSecret:secrets:1": { "policyDescription": "Allows access to a secret.", "operations": [ "aws.greengrass#GetSecretValue" ], "resources": [ "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestGreengrassSecret-abcdef" ] } } } }

    Weitere Informationen finden Sie unter Erstellen von AWS IoT Greengrass Komponenten.

  4. Zeigen Sie die AWS IoT Greengrass -Core-Softwareprotokolle an, um zu überprüfen, ob die Bereitstellungen erfolgreich sind, und zeigen Sie das com.example.PrintSecret Komponentenprotokoll an, um den Secret-Wert zu sehen. Weitere Informationen finden Sie unter Überwachen von AWS IoT Greengrass Protokollen.