

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.

# Geheime Werte abrufen
<a name="ipc-secret-manager"></a>

Verwenden Sie den Secret Manager IPC-Dienst, um geheime Werte aus Geheimnissen auf dem Kerngerät abzurufen. Sie verwenden die [Secret Manager-Komponente](secret-manager-component.md), um verschlüsselte Geheimnisse auf Kerngeräten bereitzustellen. Anschließend können Sie eine IPC-Operation verwenden, um das Geheimnis zu entschlüsseln und seinen Wert in Ihren benutzerdefinierten Komponenten zu verwenden.

**Topics**
+ [Minimale SDK-Versionen](#ipc-secret-manager-sdk-versions)
+ [Autorisierung](#ipc-secret-manager-authorization)
+ [GetSecretValue](#ipc-operation-getsecretvalue)
+ [Beispiele](#ipc-secret-manager-examples)

## Minimale SDK-Versionen
<a name="ipc-secret-manager-sdk-versions"></a>

In der folgenden Tabelle sind die Mindestversionen von aufgeführt AWS IoT Device SDK , die Sie verwenden müssen, um geheime Werte aus Geheimnissen auf dem Kerngerät abzurufen.


| SDK | Mindestversion | 
| --- | --- | 
|  [AWS IoT Device SDK für Java v2](https://github.com/aws/aws-iot-device-sdk-java-v2)  |  v1.2.10  | 
|  [AWS IoT Device SDK für Python v2](https://github.com/aws/aws-iot-device-sdk-python-v2)  |  v1.5.3  | 
|  [AWS IoT Device SDK für C\$1\$1 v2](https://github.com/aws/aws-iot-device-sdk-cpp-v2)  |  v1.17.0  | 
|  [AWS IoT Device SDK für v2 JavaScript ](https://github.com/aws/aws-iot-device-sdk-js-v2)  |  v1.12.0  | 

## Autorisierung
<a name="ipc-secret-manager-authorization"></a>

Um den Secret Manager in einer benutzerdefinierten Komponente zu verwenden, müssen Sie Autorisierungsrichtlinien definieren, die es Ihrer Komponente ermöglichen, den Wert von Geheimnissen abzurufen, die Sie auf dem Kerngerät speichern. Informationen zur Definition von Autorisierungsrichtlinien finden Sie unter[Autorisieren Sie Komponenten zur Ausführung von IPC-Vorgängen](interprocess-communication.md#ipc-authorization-policies).

Autorisierungsrichtlinien für Secret Manager haben die folgenden Eigenschaften.

**IPC-Dienst-ID:** `aws.greengrass.SecretManager`


| Operation | Description | Ressourcen | 
| --- | --- | --- | 
|  `aws.greengrass#GetSecretValue` oder `*`  |  Ermöglicht einer Komponente, den Wert von Geheimnissen abzurufen, die auf dem Kerngerät verschlüsselt sind.  |  Ein geheimer ARN für Secrets Manager oder `*` um den Zugriff auf alle Geheimnisse zu ermöglichen.  | 

### Beispiele für Autorisierungsrichtlinien
<a name="ipc-secret-manager-authorization-policy-examples"></a>

Anhand des folgenden Beispiels für Autorisierungsrichtlinien können Sie Autorisierungsrichtlinien für Ihre Komponenten konfigurieren.

**Example Beispiel für eine Autorisierungsrichtlinie**  
Das folgende Beispiel für eine Autorisierungsrichtlinie ermöglicht es einer Komponente, den Wert eines beliebigen Geheimnisses auf dem Kerngerät abzurufen.  
Wir empfehlen, in einer Produktionsumgebung den Geltungsbereich der Autorisierungsrichtlinie zu reduzieren, sodass die Komponente nur die Geheimnisse abruft, die sie verwendet. Sie können den `*` Platzhalter ARNs bei der Bereitstellung der Komponente in eine geheime Liste ändern.

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

## GetSecretValue
<a name="ipc-operation-getsecretvalue"></a>

Ruft den Wert eines Geheimnisses ab, das Sie auf dem Kerngerät speichern.

Dieser Vorgang ähnelt dem Secrets Manager Manager-Vorgang, mit dem Sie den Wert eines Secrets in der abrufen können AWS Cloud. Weitere Informationen finden Sie unter [GetSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html) in der *AWS Secrets Manager -API-Referenz*.

### Anforderung
<a name="ipc-operation-getsecretvalue-request"></a>

Die Anfrage dieses Vorgangs hat die folgenden Parameter:

`refresh`(Python:`refresh`)  
(optional): Ob das angeforderte Geheimnis mit seinem neuesten Wert vom AWS Secrets Manager Dienst synchronisiert werden soll.  
Wenn dieser Wert auf true gesetzt ist, fordert Secret Manager den AWS Secrets Manager Dienst nach dem neuesten Wert des angegebenen geheimen Labels an und gibt diesen Wert als Antwort zurück. Andernfalls wird der geheime Wert zurückgegeben, der lokal gespeichert wurde.  
 Dieser Parameter funktioniert nicht in Verbindung mit dem `versionId` Parameter in der Anfrage. Dieser Parameter funktioniert, wenn er in Verbindung mit Nucleus 2.13.0 und höher verwendet wird.

`secretId`(Python:`secret_id`)  
Der Name des Geheimnisses, das abgerufen werden soll. Sie können entweder den Amazon-Ressourcennamen (ARN) oder den benutzerfreundlichen Namen des Geheimnisses angeben.

`versionId`(Python:`version_id`)  
(Optional) Die ID der Version, die abgerufen werden soll.  
Sie können entweder `versionId` oder `versionStage` angeben.  
Wenn Sie `versionId` oder nicht angeben`versionStage`, verwendet dieser Vorgang standardmäßig die Version mit der `AWSCURRENT` Bezeichnung.

`versionStage`(Python:`version_stage`)  
(Optional) Das Staging-Label der abzurufenden Version.  
Sie können entweder `versionId` oder `versionStage` angeben.  
Wenn Sie `versionId` oder nicht angeben`versionStage`, verwendet dieser Vorgang standardmäßig die Version mit dem `AWSCURRENT` Label.

### Antwort
<a name="ipc-operation-getsecretvalue-response"></a>

Die Antwort dieses Vorgangs enthält die folgenden Informationen:

`secretId`(Python:`secret_id`)  
Die ID des Geheimnisses.

`versionId`(Python:`version_id`)  
Die ID dieser Version des Geheimnisses.

`versionStage`(Python:`version_stage`)  
Die Liste der Staging-Labels, die dieser Version des Secrets beigefügt sind.

`secretValue`(Python:`secret_value`)  
Der Wert dieser Version des Geheimnisses. Dieses Objekt,`SecretValue`, enthält die folgenden Informationen.    
`secretString`(Python:`secret_string`)  
Der entschlüsselte Teil der geschützten geheimen Information, die Sie Secrets Manager als Zeichenfolge zur Verfügung gestellt haben.  
`secretBinary`(Python:`secret_binary`)  
(Optional) Der entschlüsselte Teil der geschützten geheimen Information, die Sie Secrets Manager als Binärdaten in Form eines Byte-Arrays zur Verfügung gestellt haben. Diese Eigenschaft enthält die Binärdaten als Base64-kodierte Zeichenfolge.  
Diese Eigenschaft wird nicht verwendet, wenn Sie das Geheimnis in der Secrets Manager-Konsole erstellt haben.

### Beispiele
<a name="ipc-operation-getsecretvalue-examples"></a>

Die folgenden Beispiele zeigen, wie dieser Vorgang in benutzerdefiniertem Komponentencode aufgerufen wird.

------
#### [ Java (IPC client V1) ]

**Example Beispiel: Holen Sie sich einen geheimen Wert**  
In diesem Beispiel wird eine `IPCUtils` Klasse verwendet, um eine Verbindung zum AWS IoT Greengrass Core-IPC-Dienst herzustellen. Weitere Informationen finden Sie unter [Connect zum AWS IoT Greengrass Core IPC-Dienst her](interprocess-communication.md#ipc-service-connect).

```
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) ]

**Example Beispiel: Holen Sie sich einen geheimen Wert**  
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 ]

**Example Beispiel: Holen Sie sich einen geheimen Wert**  

```
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
<a name="ipc-secret-manager-examples"></a>

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

### Beispiel: Geheimnis drucken (Python, IPC-Client V1)
<a name="ipc-secret-manager-example-print-secret-python"></a>

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

**Wichtig**  
Diese Beispielkomponente gibt den Wert eines Geheimnisses aus. Verwenden Sie sie daher nur mit Geheimnissen, die Testdaten speichern. Verwenden Sie diese Komponente nicht, um den Wert eines Geheimnisses zu drucken, in dem wichtige Informationen gespeichert sind.

**Topics**
+ [Rezept](#ipc-secret-manager-example-print-secret-python-recipe)
+ [-Artefakte](#ipc-secret-manager-example-print-secret-python-artifacts)
+ [Usage](#ipc-secret-manager-example-print-secret-python-usage)

#### Rezept
<a name="ipc-secret-manager-example-print-secret-python-recipe"></a>

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

**Anmerkung**  <a name="ipc-secret-manager-authorization-policy-resource-wildcard"></a>
Wir empfehlen, in einer Produktionsumgebung den Geltungsbereich der Autorisierungsrichtlinie zu reduzieren, sodass die Komponente nur die Geheimnisse abruft, die sie verwendet. Sie können den `*` Platzhalter ARNs bei der Bereitstellung der Komponente in eine geheime Liste ändern.

------
#### [ 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
<a name="ipc-secret-manager-example-print-secret-python-artifacts"></a>

Die folgende Python-Beispielanwendung zeigt, wie der Secret Manager IPC-Dienst verwendet wird, um den Wert eines Secrets auf dem Kerngerä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)
```

#### Usage
<a name="ipc-secret-manager-example-print-secret-python-usage"></a>

Sie können diese Beispielkomponente zusammen mit der [Secret Manager-Komponente](secret-manager-component.md) verwenden, um den Wert eines Secrets auf Ihrem Kerngerät bereitzustellen und auszudrucken.

**Um ein Testgeheimnis zu erstellen, bereitzustellen und auszudrucken**

1. Erstellen Sie ein Secrets Manager Manager-Geheimnis 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, um ihn in den folgenden Schritten zu verwenden.

   Weitere Informationen finden Sie im *AWS Secrets Manager Benutzerhandbuch* unter [Creating a Secret](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html).

1. Stellen Sie die [Secret Manager-Komponente](secret-manager-component.md) (`aws.greengrass.SecretManager`) mit dem folgenden Update zur Zusammenführung der Konfiguration bereit. Geben Sie den ARN des Geheimnisses an, das Sie zuvor erstellt haben.

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

   Weitere Informationen finden Sie unter [AWS IoT Greengrass Komponenten auf Geräten bereitstellen](manage-deployments.md) oder im [Greengrass CLI-Bereitstellungsbefehl](gg-cli-deployment.md).

1. Erstellen und implementieren Sie die Beispielkomponente in diesem Abschnitt mit dem folgenden Update zur Zusammenführung der Konfiguration. Geben Sie den ARN des Geheimnisses 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 [AWS IoT Greengrass Komponenten erstellen](create-components.md).

1. Sehen Sie sich die AWS IoT Greengrass Core-Softwareprotokolle an, um zu überprüfen, ob die Bereitstellungen erfolgreich waren, und sehen Sie sich das `com.example.PrintSecret` Komponentenprotokoll an, um den geheimen Wert gedruckt zu sehen. Weitere Informationen finden Sie unter [AWS IoT Greengrass Protokolle überwachen](monitor-logs.md).