

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Gestion des secrets à l'aide de l'API Secrets Manager et de la AWS SDK pour PHP version 3
<a name="secretsmanager-examples-manage-secret"></a>

AWS Secrets Manager stocke et gère les secrets partagés tels que les mots de passe, les clés d'API et les informations d'identification de base de données. Avec le service Secrets Manager, les développeurs peuvent remplacer les informations d'identification codées en dur dans le code déployé par un appel intégré à Secrets Manager.

Secrets Manager prend en charge de manière native la rotation planifiée automatique des informations d'identification pour les bases de données Amazon Relational Database Service (Amazon RDS), renforçant ainsi la sécurité des applications. Secrets Manager peut également effectuer une rotation fluide des secrets pour d'autres bases de données et services tiers AWS Lambda afin d'implémenter des détails spécifiques aux services.

Les exemples suivants montrent comment :
+ Créez un secret à l'aide de [CreateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#createsecret).
+ Récupérez un secret en utilisant [GetSecretValue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#getsecretvalue).
+ Répertoriez tous les secrets stockés par Secrets Manager à l'aide de [ListSecrets](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#listsecrets).
+ Obtenez des informations sur un secret spécifié à l'aide de [DescribeSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#describesecret).
+ Mettez à jour un secret spécifié à l'aide de [PutSecretValue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#putsecretvalue).
+ Configurez une rotation secrète à l'aide de [RotateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#rotatesecret).
+ Marquez un secret pour la suppression à l'aide de [DeleteSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#deletesecret).

Tous les exemples de code pour le AWS SDK pour PHP sont [disponibles ici GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Informations d’identification
<a name="examplecredentials"></a>

Avant d'exécuter l'exemple de code, configurez vos AWS informations d'identification, comme décrit dans[Authentification à l' AWS aide de AWS SDK pour PHP la version 3](credentials.md). Importez ensuite le AWS SDK pour PHP, comme décrit dans[Installation de la AWS SDK pour PHP version 3](getting-started_installation.md).

## Création d'un secret dans Secrets Manager
<a name="create-a-secret-in-asm"></a>

Pour créer un secret dans Secrets Manager, utilisez l'[CreateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#createsecret)opération.

Dans cet exemple, un nom d'utilisateur et un mot de passe sont stockés sous forme de chaîne JSON.

 **Importations** 

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

 **Exemple de code** 

```
$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";
}
```

## Récupérez un secret depuis Secrets Manager
<a name="retrieve-a-secret-from-asm"></a>

Pour récupérer la valeur d'un secret stocké dans Secrets Manager, utilisez l'[GetSecretValue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#getsecretvalue)opération.

Dans l'exemple suivant, `secret` il s'agit d'une chaîne contenant la valeur stockée. Si la valeur pour `username` est `<<USERNAME>>` et la valeur pour `password` est`<<PASSWORD>>`, le résultat de `secret` est :

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

`json_decode($secret, true)`Utilisez-le pour accéder aux valeurs du tableau.

 **Importations** 

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

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

 **Exemple de code** 

```
$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;
```

## Répertorier les secrets stockés dans Secrets Manager
<a name="list-secrets-stored-in-asm"></a>

Obtenez une liste de tous les secrets stockés par Secrets Manager à l'aide de cette [ListSecrets](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#listsecrets)opération.

 **Importations** 

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

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

 **Exemple de code** 

```
$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";
}
```

## Récupérer les détails d'un secret
<a name="retrieve-details-about-a-secret"></a>

Les secrets stockés contiennent des métadonnées relatives aux règles de rotation, aux derniers accès ou aux dernières modifications dont ils on fait l'objet, aux balises créées par les utilisateurs, sans oublier l'Amazon Resource Name (ARN). Pour obtenir les détails d'un secret spécifié stocké dans Secrets Manager, utilisez l'[DescribeSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#describesecret)opération.

 **Importations** 

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

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

 **Exemple de code** 

```
$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";
}
```

## Mettre à jour la valeur d'un secret
<a name="update-the-secret-value"></a>

Pour stocker une nouvelle valeur secrète chiffrée dans Secrets Manager, utilisez l'[PutSecretValue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#putsecretvalue)opération.

Cette opération crée une nouvelle version du secret. Si une version du secret existe déjà, ajoutez le paramètre `VersionStages` avec la valeur dans `AWSCURRENT` pour que la nouvelle valeur soit utilisée lors de la récupération de la valeur.

 **Importations** 

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

 **Exemple de code** 

```
$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";
}
```

## Faites pivoter la valeur vers un secret existant dans Secrets Manager
<a name="rotate-the-value-to-an-existing-secret-in-asm"></a>

Pour faire pivoter la valeur d'un secret existant stocké dans Secrets Manager, utilisez une fonction de rotation Lambda et l'[RotateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#rotatesecret)opération.

Avant de commencer, créez une fonction Lambda pour faire pivoter votre secret. Le [catalogue d'exemples de AWS code](https://docs.aws.amazon.com/code-samples/latest/catalog/code-catalog-lambda_functions-secretsmanager.html) contient actuellement plusieurs exemples de code Lambda pour la rotation des informations d'identification des bases de données Amazon RDS.

**Note**  
Pour plus d'informations sur la rotation des secrets, voir [Rotation de vos AWS Secrets Manager secrets](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html) dans le guide de AWS Secrets Manager l'utilisateur.

Après avoir configuré votre fonction Lambda, configurez une nouvelle rotation secrète.

 **Importations** 

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

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

 **Exemple de code** 

```
$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";
}
```

Lorsqu'une rotation est configurée, vous pouvez implémenter une rotation à l'aide de cette [RotateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#rotatesecret)opération.

 **Importations** 

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

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

 **Exemple de code** 

```
$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";
}
```

## Supprimer un secret dans Secrets Manager
<a name="delete-a-secret-from-asm"></a>

Pour supprimer un secret spécifié de Secrets Manager, utilisez l'[DeleteSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#deletesecret)opération. Pour éviter de supprimer accidentellement un secret, un DeletionDate tampon est automatiquement ajouté au secret pour indiquer le délai de restauration pendant lequel vous pouvez annuler la suppression. Si aucune durée n'est spécifiée pour la fenêtre de récupération, la durée par défaut est de 30 jours.

 **Importations** 

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

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

 **Exemple de code** 

```
$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";
}
```

## Informations connexes
<a name="related-information"></a>

Les AWS SDK pour PHP exemples utilisent les opérations REST suivantes issues de la référence AWS Secrets Manager d'API :
+  [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) 

Pour plus d'informations sur l'utilisation AWS Secrets Manager, consultez le [guide de AWS Secrets Manager l'utilisateur](https://docs.aws.amazon.com/secretsmanager/latest/userguide/).