Gestion des secrets à l'aide de l'API Secrets Manager et de la AWS SDK for PHP version 3 - AWS SDK for PHP

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 for PHP version 3

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 bases de données. Grâce au 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 automatique planifiée 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 transférer facilement les secrets vers d'autres bases de données et services tiers afin de AWS Lambda mettre en œuvre des détails spécifiques au service.

Les exemples suivants montrent comment :

Tous les exemples de code pour le AWS SDK for PHP sont disponibles ici sur GitHub.

Informations d'identification

Avant d'exécuter l'exemple de code, configurez vos AWS informations d'identification, comme décrit dansInformations d'identification. Importez ensuite leAWS SDK for PHP, comme décrit dansUtilisation de base.

Création d'un secret dans Secrets Manager

Pour créer un secret dans Secrets Manager, utilisez l'CreateSecretopé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érer un secret depuis le gestionnaire de secrets

Pour récupérer la valeur d'un secret stocké dans Secrets Manager, utilisez l'GetSecretValueopération.

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

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

json_decode($secret, true)À utiliser 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 le gestionnaire de secrets

Obtenez la liste de tous les secrets stockés par Secrets Manager à l'aide de l'ListSecretsopé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

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'DescribeSecretopé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 secrète

Pour stocker une nouvelle valeur secrète cryptée dans Secrets Manager, utilisez l'PutSecretValueopé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"; }

Faire pivoter la valeur vers un secret existant dans Secrets Manager

Pour faire pivoter la valeur d'un secret existant stocké dans Secrets Manager, utilisez une fonction de rotation Lambda et l'RotateSecretopération.

Avant de commencer, créez une fonction Lambda pour faire pivoter votre secret. Le catalogue d'exemples de AWS code contient actuellement plusieurs exemples de code Lambda pour la rotation des informations d'identification de base de données Amazon RDS.

Note

Pour plus d'informations sur la rotation des secrets, consultez la section Rotation de vos AWS Secrets Manager secrets 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 l'RotateSecretopé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 du Gestionnaire de secrets

Pour supprimer un secret spécifié du Gestionnaire de secrets, utilisez l'DeleteSecretopération. Pour empêcher la suppression accidentelle d'un secret, un DeletionDate tampon est automatiquement ajouté au secret pour indiquer un 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"; }

Les AWS SDK for PHP exemples utilisent les opérations REST suivantes issues de la référence AWS Secrets Manager d'API :

Pour plus d'informations sur l'utilisation de AWS Secrets Manager, consultez le Guide de l'utilisateur AWS Secrets Manager.