

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à.

# Recupera valori segreti
<a name="ipc-secret-manager"></a>

Utilizza il servizio IPC di gestione dei segreti per recuperare i valori segreti dai segreti sul dispositivo principale. Utilizzi il [componente secret manager](secret-manager-component.md) per distribuire segreti crittografati sui dispositivi principali. Quindi, puoi utilizzare un'operazione IPC per decrittografare il segreto e utilizzarne il valore nei componenti personalizzati.

**Topics**
+ [Versioni SDK minime](#ipc-secret-manager-sdk-versions)
+ [Autorizzazione](#ipc-secret-manager-authorization)
+ [GetSecretValue](#ipc-operation-getsecretvalue)
+ [Esempi](#ipc-secret-manager-examples)

## Versioni SDK minime
<a name="ipc-secret-manager-sdk-versions"></a>

La tabella seguente elenca le versioni minime di da utilizzare per recuperare i valori segreti dai segreti sul dispositivo principale. SDK per dispositivi AWS IoT 


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

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

Per utilizzare il gestore segreto in un componente personalizzato, è necessario definire politiche di autorizzazione che consentano al componente di ottenere il valore dei segreti archiviati sul dispositivo principale. Per informazioni sulla definizione delle politiche di autorizzazione, vedere[Autorizza i componenti a eseguire operazioni IPC](interprocess-communication.md#ipc-authorization-policies).

Le politiche di autorizzazione per il gestore segreto hanno le seguenti proprietà.

**Identificatore del servizio IPC:** `aws.greengrass.SecretManager`


| Operation | Description | Resources | 
| --- | --- | --- | 
|  `aws.greengrass#GetSecretValue` o `*`  |  Consente a un componente di ottenere il valore dei segreti crittografati sul dispositivo principale.  |  Un ARN segreto di Secrets Manager o `*` per consentire l'accesso a tutti i segreti.  | 

### Esempi di politiche di autorizzazione
<a name="ipc-secret-manager-authorization-policy-examples"></a>

È possibile fare riferimento al seguente esempio di politica di autorizzazione per configurare le politiche di autorizzazione per i componenti.

**Example Esempio di politica di autorizzazione**  
Il seguente esempio di politica di autorizzazione consente a un componente di ottenere il valore di qualsiasi segreto sul dispositivo principale.  
In un ambiente di produzione, si consiglia di ridurre l'ambito della politica di autorizzazione, in modo che il componente recuperi solo i segreti che utilizza. È possibile modificare il carattere `*` jolly in un elenco di segreti ARNs quando si distribuisce il componente.

```
{
  "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>

Ottiene il valore di un segreto archiviato nel dispositivo principale.

Questa operazione è simile all'operazione Secrets Manager che è possibile utilizzare per ottenere il valore di un segreto in Cloud AWS. Per ulteriori informazioni, consulta [GetSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html) nella *documentazione di riferimento dell’API Gestione dei segreti AWS *.

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

La richiesta di questa operazione ha i seguenti parametri:

`refresh`(Python:) `refresh`  
(opzionale): se sincronizzare il segreto richiesto con l'ultimo valore Gestione dei segreti AWS fornito dal servizio.  
Se impostato su true, il gestore segreto richiederà al Gestione dei segreti AWS servizio l'ultimo valore dell'etichetta segreta specificata e restituirà quel valore come risposta. In caso contrario, verrà restituito il valore segreto archiviato localmente.  
 Questo parametro non funzionerà insieme al `versionId` parametro nella richiesta. Questo parametro funziona se usato insieme a Nucleus 2.13.0 e versioni successive.

`secretId`(Python:) `secret_id`  
Il nome del segreto da ottenere. Puoi specificare l'Amazon Resource Name (ARN) o il nome descrittivo del segreto.

`versionId`(Python:) `version_id`  
(Facoltativo) L'ID della versione da ottenere.  
È possibile specificare `versionId` o `versionStage`.  
Se non specifichi `versionId` o`versionStage`, per impostazione predefinita per questa operazione viene utilizzata la versione con l'`AWSCURRENT`etichetta.

`versionStage`(Python:) `version_stage`  
(Facoltativo) L'etichetta temporanea della versione da scaricare.  
È possibile specificare `versionId` o `versionStage`.  
Se non specifichi `versionId` o`versionStage`, per impostazione predefinita per questa operazione viene utilizzata la versione con l'etichetta. `AWSCURRENT`

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

La risposta di questa operazione contiene le seguenti informazioni:

`secretId`(Python:) `secret_id`  
L'ID del segreto.

`versionId`(Python:) `version_id`  
L'ID di questa versione del segreto.

`versionStage`(Python:) `version_stage`  
L'elenco delle etichette di staging allegate a questa versione del segreto.

`secretValue`(Python:) `secret_value`  
Il valore di questa versione del segreto. Questo oggetto contiene `SecretValue` le seguenti informazioni.    
`secretString`(Python:) `secret_string`  
La parte decrittografata delle informazioni segrete protette che hai fornito a Secrets Manager come stringa.  
`secretBinary`(Python:) `secret_binary`  
(Facoltativo) La parte decrittografata delle informazioni segrete protette fornite a Secrets Manager come dati binari sotto forma di matrice di byte. Questa proprietà contiene i dati binari sotto forma di stringa con codifica Base64.  
Questa proprietà non viene utilizzata se hai creato il segreto nella console Secrets Manager.

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

Gli esempi seguenti mostrano come chiamare questa operazione nel codice componente personalizzato.

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

**Example Esempio: ottieni un valore segreto**  
Questo esempio utilizza una `IPCUtils` classe per creare una connessione al servizio AWS IoT Greengrass Core IPC. Per ulteriori informazioni, consulta [Connect al servizio AWS IoT Greengrass Core IPC](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 Esempio: ottieni un valore segreto**  
Questo esempio presuppone che si stia utilizzando la versione 1.5.4 o successiva di for SDK per dispositivi AWS IoT Python v2. 

```
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 Esempio: ottieni un valore segreto**  

```
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();
```

------

## Esempi
<a name="ipc-secret-manager-examples"></a>

Utilizza i seguenti esempi per imparare a utilizzare il servizio IPC di gestione segreta nei tuoi componenti.

### Esempio: segreto di stampa (Python, client IPC V1)
<a name="ipc-secret-manager-example-print-secret-python"></a>

Questo componente di esempio stampa il valore di un segreto che viene distribuito sul dispositivo principale.

**Importante**  
Questo componente di esempio stampa il valore di un segreto, quindi usalo solo con i segreti che memorizzano i dati di test. Non utilizzate questo componente per stampare il valore di un segreto che memorizza informazioni importanti.

**Topics**
+ [Recipe](#ipc-secret-manager-example-print-secret-python-recipe)
+ [Artifacts](#ipc-secret-manager-example-print-secret-python-artifacts)
+ [Utilizzo](#ipc-secret-manager-example-print-secret-python-usage)

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

La seguente ricetta di esempio definisce un parametro di configurazione ARN segreto e consente al componente di ottenere il valore di qualsiasi segreto sul dispositivo principale.

**Nota**  <a name="ipc-secret-manager-authorization-policy-resource-wildcard"></a>
In un ambiente di produzione, si consiglia di ridurre l'ambito della politica di autorizzazione, in modo che il componente recuperi solo i segreti che utilizza. È possibile modificare il carattere `*` jolly in un elenco di segreti ARNs quando si distribuisce il componente.

------
#### [ JSON ]

```
{
  "RecipeFormatVersion": "2020-01-25",
  "ComponentName": "com.example.PrintSecret",
  "ComponentVersion": "1.0.0",
  "ComponentDescription": "Prints the value of an Gestione dei segreti AWS 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}"
```

------

#### Artifacts
<a name="ipc-secret-manager-example-print-secret-python-artifacts"></a>

L'esempio seguente di applicazione Python dimostra come utilizzare il servizio IPC del gestore segreto per ottenere il valore di un segreto sul dispositivo principale.

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

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

È possibile utilizzare questo componente di esempio con il [componente secret manager](secret-manager-component.md) per distribuire e stampare il valore di un segreto sul dispositivo principale.

**Per creare, distribuire e stampare un segreto di test**

1. Crea un segreto di Secrets Manager con i dati di test.

------
#### [ 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"}'
   ```

------

   Salva l'ARN del segreto da utilizzare nei passaggi seguenti.

   Per ulteriori informazioni, consulta [Creazione di un segreto](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html) nella *Guida per l'Gestione dei segreti AWS utente*.

1. Implementate il [componente secret manager](secret-manager-component.md) (`aws.greengrass.SecretManager`) con il seguente aggiornamento di fusione della configurazione. Specificate l'ARN del segreto che avete creato in precedenza.

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

   Per ulteriori informazioni, consulta [Implementazione AWS IoT Greengrass dei componenti sui dispositivi](manage-deployments.md) o il comando di distribuzione della [CLI di Greengrass](gg-cli-deployment.md).

1. Crea e distribuisci il componente di esempio in questa sezione con il seguente aggiornamento di configurazione merge. Specificate l'ARN del segreto che avete creato in precedenza.

   ```
   {
     "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"
           ]
         }
       }
     }
   }
   ```

   Per ulteriori informazioni, consulta [Crea AWS IoT Greengrass componenti](create-components.md)

1. Visualizza i log del software AWS IoT Greengrass Core per verificare che le distribuzioni abbiano esito positivo e visualizza il registro dei `com.example.PrintSecret` componenti per vedere il valore segreto stampato. Per ulteriori informazioni, consulta [Monitora AWS IoT Greengrass i registri](monitor-logs.md).