

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

# Gestione dei segreti utilizzando l'API Secrets Manager e la AWS SDK per PHP versione 3
<a name="secretsmanager-examples-manage-secret"></a>

Gestione dei segreti AWS archivia e gestisce segreti condivisi come password, chiavi API e credenziali del database. Con il servizio Secrets Manager, gli sviluppatori possono sostituire le credenziali codificate nel codice distribuito con una chiamata incorporata a Secrets Manager.

Secrets Manager supporta nativamente la rotazione automatica pianificata delle credenziali per i database Amazon Relational Database Service (Amazon RDS), aumentando la sicurezza delle applicazioni. Secrets Manager può anche ruotare senza problemi i segreti per altri database e servizi di terze parti utilizzandoli per AWS Lambda implementare dettagli specifici del servizio.

Gli esempi seguenti mostrano come:
+ Crea un segreto usando. [CreateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#createsecret)
+ Recupera un segreto usando [GetSecretValue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#getsecretvalue).
+ Elenca tutti i segreti archiviati da Secrets Manager utilizzando [ListSecrets](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#listsecrets).
+ Ottieni dettagli su un segreto specificato utilizzando [DescribeSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#describesecret).
+ Aggiorna un segreto specificato utilizzando [PutSecretValue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#putsecretvalue).
+ Imposta una rotazione segreta usando [RotateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#rotatesecret).
+ Contrassegna un segreto per l'eliminazione utilizzando [DeleteSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#deletesecret).

Tutto il codice di esempio per il AWS SDK per PHP è [disponibile qui GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Credenziali
<a name="examplecredentials"></a>

Prima di eseguire il codice di esempio, configurate AWS le vostre credenziali, come descritto in[Autenticazione con l' AWS utilizzo AWS SDK per PHP della versione 3](credentials.md). Quindi importate il file AWS SDK per PHP, come descritto in[Installazione della AWS SDK per PHP versione 3](getting-started_installation.md).

## Crea un segreto in Secrets Manager
<a name="create-a-secret-in-asm"></a>

Per creare un segreto in Secrets Manager, usa l'[CreateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#createsecret)operazione.

In questo esempio, un nome utente e una password vengono memorizzati come una stringa JSON.

 **Importazioni** 

```
require 'vendor/autoload.php';
use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **Codice di esempio** 

```
$client = new SecretsManagerClient([
    'profile' => 'default',
    'version' => '2017-10-17',
    'region' => 'us-west-2'
]);
$secretName = 'MySecretName';
$secret = json_encode([
    "username" => getenv("SMDEMO_USERNAME"),
    "password" => getenv("SMDEMO_PASSWORD"),
]);
$description = '<<Description>>';
try {
    $result = $client->createSecret([
        'Description' => $description,
        'Name' => $secretName,
        'SecretString' => $secret,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## Recupera un segreto da Secrets Manager
<a name="retrieve-a-secret-from-asm"></a>

Per recuperare il valore di un segreto archiviato in Secrets Manager, utilizzare l'[GetSecretValue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#getsecretvalue)operazione.

Nell'esempio seguente, `secret` è una stringa che contiene il valore memorizzato. Se il valore per `username` è `<<USERNAME>>` e il valore per `password` è`<<PASSWORD>>`, l'output di `secret` è:

```
{"username":"<<USERNAME>>","password":"<<PASSWORD>>"}
```

Utilizzare `json_decode($secret, true)` per accedere ai valori dell'array.

 **Importazioni** 

```
require 'vendor/autoload.php';

use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **Codice di esempio** 

```
$client = new SecretsManagerClient([
    'profile' => 'default',
    'version' => '2017-10-17',
    'region' => 'us-east-1',
]);

$secretName = 'MySecretName';

try {
    $result = $client->getSecretValue([
        'SecretId' => $secretName,
    ]);
} catch (AwsException $e) {
    $error = $e->getAwsErrorCode();
    if ($error == 'DecryptionFailureException') {
        // Secrets Manager can't decrypt the protected secret text using the provided AWS KMS key.
        // Handle the exception here, and/or rethrow as needed.
        throw $e;
    }
    if ($error == 'InternalServiceErrorException') {
        // An error occurred on the server side.
        // Handle the exception here, and/or rethrow as needed.
        throw $e;
    }
    if ($error == 'InvalidParameterException') {
        // You provided an invalid value for a parameter.
        // Handle the exception here, and/or rethrow as needed.
        throw $e;
    }
    if ($error == 'InvalidRequestException') {
        // You provided a parameter value that is not valid for the current state of the resource.
        // Handle the exception here, and/or rethrow as needed.
        throw $e;
    }
    if ($error == 'ResourceNotFoundException') {
        // We can't find the resource that you asked for.
        // Handle the exception here, and/or rethrow as needed.
        throw $e;
    }
}
// Decrypts secret using the associated KMS CMK.
// Depending on whether the secret is a string or binary, one of these fields will be populated.
if (isset($result['SecretString'])) {
    $secret = $result['SecretString'];
} else {
    $secret = base64_decode($result['SecretBinary']);
}
print $secret;
$secretArray = json_decode($secret, true);
$username = $secretArray['username'];
$password = $secretArray['password'];

// Your code goes here;
```

## Elenca i segreti archiviati in Secrets Manager
<a name="list-secrets-stored-in-asm"></a>

Ottieni un elenco di tutti i segreti archiviati da Secrets Manager utilizzando l'[ListSecrets](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#listsecrets)operazione.

 **Importazioni** 

```
require 'vendor/autoload.php';

use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **Codice di esempio** 

```
$client = new SecretsManagerClient([
    'profile' => 'default',
    'version' => '2017-10-17',
    'region' => 'us-west-2'
]);

try {
    $result = $client->listSecrets([
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## Recupera i dettagli di un segreto
<a name="retrieve-details-about-a-secret"></a>

I segreti archiviati contengono metadati sulle regole di rotazione, la data dell'ultimo accesso o modifica, i tag creati dall'utente e l'Amazon Resource Name (ARN). Per ottenere i dettagli di un segreto specificato archiviato in Secrets Manager, utilizzare l'[DescribeSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#describesecret)operazione.

 **Importazioni** 

```
require 'vendor/autoload.php';

use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **Codice di esempio** 

```
$client = new SecretsManagerClient([
    'profile' => 'default',
    'version' => '2017-10-17',
    'region' => 'us-west-2'
]);

$secretName = 'MySecretName';

try {
    $result = $client->describeSecret([
        'SecretId' => $secretName,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## Come aggiornare il valore del segreto
<a name="update-the-secret-value"></a>

Per memorizzare un nuovo valore segreto crittografato in Secrets Manager, utilizzare l'[PutSecretValue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#putsecretvalue)operazione.

Viene creata una nuova versione del segreto. Se una versione del segreto esiste già, aggiungi il parametro `VersionStages` con il valore in `AWSCURRENT` per garantire che il nuovo valore viene utilizzato quando viene recuperato.

 **Importazioni** 

```
require 'vendor/autoload.php';
use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **Codice di esempio** 

```
$client = new SecretsManagerClient([
    'profile' => 'default',
    'version' => '2017-10-17',
    'region' => 'us-west-2'
]);
$secretName = 'MySecretName';
$secret = json_encode([
    "username" => getenv("SMDEMO_USERNAME"),
    "password" => getenv("SMDEMO_PASSWORD"),
]);
try {
    $result = $client->putSecretValue([
        'SecretId' => $secretName,
        'SecretString' => $secret,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## Ruota il valore in un segreto esistente in Secrets Manager
<a name="rotate-the-value-to-an-existing-secret-in-asm"></a>

Per ruotare il valore di un segreto esistente archiviato in Secrets Manager, utilizzate una funzione di rotazione Lambda e [RotateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#rotatesecret)l'operazione.

Prima di iniziare, crea una funzione Lambda per ruotare il tuo segreto. Il [AWS Code Sample Catalog](https://docs.aws.amazon.com/code-samples/latest/catalog/code-catalog-lambda_functions-secretsmanager.html) contiene attualmente diversi esempi di codice Lambda per la rotazione delle credenziali del database Amazon RDS.

**Nota**  
Per ulteriori informazioni sulla rotazione dei segreti, consulta [Rotating Your Secrets nella Guida per l'utente Gestione dei segreti AWS](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html). Gestione dei segreti AWS 

Dopo aver impostato la funzione Lambda, configura una nuova rotazione segreta.

 **Importazioni** 

```
require 'vendor/autoload.php';

use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **Codice di esempio** 

```
$client = new SecretsManagerClient([
    'profile' => 'default',
    'version' => '2017-10-17',
    'region' => 'us-west-2'
]);

$secretName = 'MySecretName';
$lambda_ARN = 'arn:aws:lambda:us-west-2:123456789012:function:MyTestDatabaseRotationLambda';
$rules = ['AutomaticallyAfterDays' => 30];

try {
    $result = $client->rotateSecret([
        'RotationLambdaARN' => $lambda_ARN,
        'RotationRules' => $rules,
        'SecretId' => $secretName,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

Quando è configurata una rotazione, è possibile implementare una rotazione utilizzando l'[RotateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#rotatesecret)operazione.

 **Importazioni** 

```
require 'vendor/autoload.php';

use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **Codice di esempio** 

```
$client = new SecretsManagerClient([
    'profile' => 'default',
    'version' => '2017-10-17',
    'region' => 'us-west-2'
]);

$secretName = 'MySecretName';

try {
    $result = $client->rotateSecret([
        'SecretId' => $secretName,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## Eliminare un segreto da Secrets Manager
<a name="delete-a-secret-from-asm"></a>

Per rimuovere un segreto specificato da Secrets Manager, utilizzare l'[DeleteSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#deletesecret)operazione. Per evitare l'eliminazione accidentale di un segreto, al segreto viene aggiunto automaticamente un DeletionDate timbro che specifica una finestra di tempo di ripristino in cui è possibile annullare l'eliminazione. Se non si specifica l'ora per la finestra di ripristino, il periodo di tempo predefinito è di 30 giorni.

 **Importazioni** 

```
require 'vendor/autoload.php';

use Aws\SecretsManager\SecretsManagerClient;
use Aws\Exception\AwsException;
```

 **Codice di esempio** 

```
$client = new SecretsManagerClient([
    'profile' => 'default',
    'version' => '2017-10-17',
    'region' => 'us-west-2'
]);

$secretName = 'MySecretName';

try {
    $result = $client->deleteSecret([
        'SecretId' => $secretName,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

## Informazioni correlate
<a name="related-information"></a>

Gli AWS SDK per PHP esempi utilizzano le seguenti operazioni REST dell'API Reference: Gestione dei segreti AWS 
+  [CreateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_CreateSecret.html) 
+  [GetSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html) 
+  [ListSecrets](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_ListSecrets.html) 
+  [DescribeSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_DescribeSecret.html) 
+  [PutSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_PutSecretValue.html) 
+  [RotateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_RotateSecret.html) 
+  [DeleteSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_DeleteSecret.html) 

Per ulteriori informazioni sull'utilizzo Gestione dei segreti AWS, consulta la [Guida Gestione dei segreti AWS per l'utente](https://docs.aws.amazon.com/secretsmanager/latest/userguide/).