Verwaltung von Geheimnissen mithilfe der Secrets Manager-API und der AWS SDK for PHP Version 3 - AWS SDK for PHP

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwaltung von Geheimnissen mithilfe der Secrets Manager-API und der AWS SDK for PHP Version 3

AWS Secrets Manager speichert und verwaltet gemeinsame Geheimnisse wie Passwörter, API-Schlüssel und Datenbankanmeldeinformationen. Mit dem Secrets Manager-Dienst können Entwickler fest codierte Anmeldeinformationen im bereitgestellten Code durch einen eingebetteten Aufruf an Secrets Manager ersetzen.

Secrets Manager unterstützt nativ die automatische geplante Rotation von Anmeldeinformationen für Amazon Relational Database Service (Amazon RDS) -Datenbanken und erhöht so die Anwendungssicherheit. Secrets Manager kann Secrets auch nahtlos für andere Datenbanken und Dienste von Drittanbietern rotieren, AWS Lambda um dienstspezifische Details zu implementieren.

In den nachstehenden Beispielen wird Folgendes veranschaulicht:

Der gesamte Beispielcode für AWS SDK for PHP ist hier verfügbar GitHub.

Anmeldeinformationen

Bevor Sie den Beispielcode ausführen, konfigurieren Sie Ihre AWS Anmeldeinformationen, wie unter beschriebenAnmeldeinformationen. Importieren Sie dann dieAWS SDK for PHP, wie unter beschriebenGrundlegende Verwendung.

Erstellen Sie ein Geheimnis in Secrets Manager

Verwenden Sie die CreateSecretOperation, um in Secrets Manager ein Geheimnis zu erstellen.

In diesem Beispiel werden ein Benutzername und ein Passwort als JSON-Zeichenfolge gespeichert.

Importe

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

Beispiel-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"; }

Rufe ein Geheimnis von Secrets Manager ab

Verwenden Sie die GetSecretValueOperation, um den Wert eines in Secrets Manager gespeicherten Geheimnisses abzurufen.

Im folgenden Beispiel secret handelt es sich um eine Zeichenfolge, die den gespeicherten Wert enthält. Wenn der Wert für username ist <<USERNAME>> und der Wert für password ist<<PASSWORD>>, ist die Ausgabe vonsecret:

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

Wird verwendetjson_decode($secret, true), um auf die Array-Werte zuzugreifen.

Importe

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

Beispiel-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;

Listet die im Secrets Manager gespeicherten Geheimnisse auf

Rufen Sie mithilfe der ListSecretsOperation eine Liste aller Geheimnisse ab, die vom Secrets Manager gespeichert wurden.

Importe

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

Beispiel-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"; }

Details zu einem Geheimnis abrufen

Gespeicherte Geheimnisse enthalten Metadaten zu Rotationsregeln, den Zeitpunkt des letzten Zugriffs bzw. der letzten Änderung, vom Benutzer erstellte Tags und den Amazon-Ressourcennamen (ARN). Verwenden Sie den DescribeSecretVorgang, um die Details eines bestimmten Geheimnisses abzurufen, das in Secrets Manager gespeichert ist.

Importe

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

Beispiel-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"; }

Aktualisiere den geheimen Wert

Verwenden Sie den PutSecretValueVorgang, um einen neuen verschlüsselten geheimen Wert in Secrets Manager zu speichern.

Auf diese Art wird eine neue Version des Geheimnisses erstellt. Wenn bereits eine Version des Geheimnisses vorhanden ist, fügen Sie den Parameter VersionStages mit dem Wert in AWSCURRENT hinzu, um sicherzustellen, dass der neue Wert verwendet wird, wenn der Wert abgerufen wird.

Importe

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

Beispiel-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"; }

Drehe den Wert in Secrets Manager auf ein vorhandenes Geheimnis um

Um den Wert eines vorhandenen, in Secrets Manager gespeicherten Geheimnisses zu rotieren, verwenden Sie eine Lambda-Rotationsfunktion und die RotateSecretOperation.

Bevor Sie beginnen, erstellen Sie eine Lambda-Funktion, um Ihr Geheimnis zu rotieren. Der AWSCodebeispielkatalog enthält derzeit mehrere Lambda-Codebeispiele für rotierende Amazon RDS-Datenbankanmeldeinformationen.

Anmerkung

Weitere Informationen zu rotierenden Geheimnissen findest du im AWS Secrets Manager Benutzerhandbuch unter Rotating Your AWS Secrets Manager Secrets.

Nachdem Sie Ihre Lambda-Funktion eingerichtet haben, konfigurieren Sie eine neue geheime Rotation.

Importe

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

Beispiel-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"; }

Wenn eine Rotation konfiguriert ist, können Sie eine Rotation mithilfe der RotateSecretOperation implementieren.

Importe

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

Beispiel-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"; }

Löschen Sie ein Geheimnis aus Secrets Manager

Verwenden Sie den DeleteSecretVorgang, um ein bestimmtes Geheimnis aus Secrets Manager zu entfernen. Um zu verhindern, dass ein Secret versehentlich gelöscht wird, wird dem Geheimnis automatisch ein DeletionDate Stempel hinzugefügt, der ein Wiederherstellungsfenster angibt, in dem Sie den Löschvorgang rückgängig machen können. Wird kein Wiederherstellungszeitraum angegeben, so beträgt er standardmäßig 30 Tage.

Importe

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

Beispiel-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"; }

In den AWS SDK for PHP Beispielen werden die folgenden REST-Operationen aus der AWS Secrets Manager API-Referenz verwendet:

Weitere Informationen zu AWS Secrets Manager finden Sie im AWS Secrets Manager User Guide.