Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Administración de secretos mediante la API Secrets Manager y la versión 3 de AWS SDK for PHP
AWS Secrets Manager almacena y administra secretos compartidos como, por ejemplo, contraseñas, claves de API y credenciales de bases de datos. Con el servicio Secrets Manager, los desarrolladores pueden sustituir credenciales con codificación rígida en el código implementado por una llamada integrada a Secrets Manager.
Secrets Manager admite de forma nativa la rotación automática y programada de credenciales para bases de datos de Amazon Relational Database Service (Amazon RDS), lo que aumenta la seguridad de las aplicaciones. Secrets Manager también puede rotar sin problemas los secretos de otras bases de datos y servicios de terceros mediante AWS Lambda para implementar detalles específicos del servicio.
Los siguientes ejemplos muestran cómo:
-
Crear un secreto con CreateSecret.
-
Recuperar un secreto con GetSecretValue.
-
Obtener una lista de todos los secretos almacenados por Secrets Manager con ListSecrets.
-
Obtener información detallada acerca de un secreto determinado con DescribeSecret.
-
Actualizar un secreto determinado con PutSecretValue.
-
Configurar una rotación de secretos con RotateSecret.
-
Marcar un secreto para eliminarlo con DeleteSecret.
Todo el código de ejemplo de AWS SDK for PHP está disponible aquí en GitHub
Credentials
Antes de ejecutar el código de ejemplo, configure sus credenciales de AWS, como se indica en Credenciales. A continuación, importe AWS SDK for PHP, como se indica en Uso básico.
Crear un secreto en Secrets Manager
Para crear un secreto en Secrets Manager, utilice la operación CreateSecret.
En este ejemplo, un nombre de usuario y una contraseña se almacenan en una cadena JSON.
Importaciones
require 'vendor/autoload.php'; use Aws\SecretsManager\SecretsManagerClient; use Aws\Exception\AwsException;
Código de muestra
$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"; }
Recuperar un secreto de Secrets Manager
Para recuperar el valor de un secreto almacenado en Secrets Manager, utilice la operación GetSecretValue.
En este ejemplo, secret
es una cadena que contiene el valor almacenado. Si el valor de username
es <<USERNAME>>
y el valor de password
es <<PASSWORD>>
, la salida de secret
es:
{"username":"<<USERNAME>>","password":"<<PASSWORD>>"}
Utilice json_decode($secret, true)
para acceder a los valores de la matriz.
Importaciones
require 'vendor/autoload.php'; use Aws\SecretsManager\SecretsManagerClient; use Aws\Exception\AwsException;
Código de muestra
$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;
Mostrar los secretos almacenados en Secrets Manager
Puede obtener una lista de todos los secretos almacenados en Secrets Manager mediante la operación ListSecrets.
Importaciones
require 'vendor/autoload.php'; use Aws\SecretsManager\SecretsManagerClient; use Aws\Exception\AwsException;
Código de muestra
$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"; }
Recuperar los detalles de un secreto
Los secretos almacenados contienen metadatos sobre las reglas de rotación, la fecha en que se modificaron o se tuvo acceso a ellos por última vez, las etiquetas creadas por el usuario y el nombre de recurso de Amazon (ARN). Para obtener los detalles de un secreto determinado almacenado en Secrets Manager, utilice la operación DescribeSecret.
Importaciones
require 'vendor/autoload.php'; use Aws\SecretsManager\SecretsManagerClient; use Aws\Exception\AwsException;
Código de muestra
$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"; }
Actualización del valor del secreto
Para almacenar el valor de un secreto nuevo cifrado en Secrets Manager, utilice la operación PutSecretValue.
De esta forma, se crea una versión nueva del secreto. Si ya existe una versión del secreto, añada el parámetro VersionStages
con el valor existente en AWSCURRENT
para asegurarse de que se utiliza el valor nuevo al recuperar el valor.
Importaciones
require 'vendor/autoload.php'; use Aws\SecretsManager\SecretsManagerClient; use Aws\Exception\AwsException;
Código de muestra
$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"; }
Rotar el valor de un secreto existente en Secrets Manager
Para rotar el valor de un secreto existente almacenado en Secrets Manager, utilice una función de rotación de Lambda y la operación RotateSecret.
Antes de comenzar, cree una función de Lambda para rotar el secreto. El catálogo de ejemplos de código de AWS contiene varios ejemplos de código de Lambda para la rotación de credenciales de base de datos de Amazon RDS.
nota
Para obtener más información acerca de la rotación de secretos, consulte Rotación de sus secretos de AWS Secrets Manager en la Guía del usuario de AWS Secrets Manager.
Después de configurar la función de Lambda, configure una rotación de secretos nueva.
Importaciones
require 'vendor/autoload.php'; use Aws\SecretsManager\SecretsManagerClient; use Aws\Exception\AwsException;
Código de muestra
$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"; }
Cuando configure una rotación, puede implementar una rotación utilizando la operación RotateSecret.
Importaciones
require 'vendor/autoload.php'; use Aws\SecretsManager\SecretsManagerClient; use Aws\Exception\AwsException;
Código de muestra
$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"; }
Eliminar un secreto de Secrets Manager
Para eliminar un secreto determinado de Secrets Manager, utilice la operación DeleteSecret. Para evitar la eliminación accidental de un secreto, se añade automáticamente una marca DeletionDate al secreto que especifica un intervalo de tiempo de recuperación en el que puede deshacer la eliminación. Si no se especifica la fecha para el intervalo de recuperación, el periodo de tiempo predeterminado es de 30 días.
Importaciones
require 'vendor/autoload.php'; use Aws\SecretsManager\SecretsManagerClient; use Aws\Exception\AwsException;
Código de muestra
$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"; }
Información relacionada
Los ejemplos de AWS SDK for PHP utilizan las siguientes operaciones REST de la Referecia de la API de AWS Secrets Manager:
Para obtener más información acerca de cómo usar AWS Secrets Manager, consulte la Guía del usuario de AWS Secrets Manager.