Mengelola rahasia menggunakan Secrets Manager API dan AWS SDK for PHP Versi 3 - AWS SDK for PHP

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengelola rahasia menggunakan Secrets Manager API dan AWS SDK for PHP Versi 3

AWS Secrets Managermenyimpan dan mengelola rahasia bersama seperti kata sandi, kunci API, dan kredensi basis data. Dengan layanan Manajer Rahasia, pengembang dapat mengganti kredensi kode keras dalam kode yang disebarkan dengan panggilan tertanam ke Manajer Rahasia.

Secrets Manager secara native mendukung rotasi kredensi terjadwal otomatis untuk database Amazon Relational Database Service (Amazon RDS), meningkatkan keamanan aplikasi. Rahasia Manajer juga dapat mulus memutar rahasia untuk database lain dan layanan pihak ketiga menggunakan untuk mengimplementasikan rincian AWS Lambda layanan-spesifik.

Contoh berikut menunjukkan bagaimana:

Semua kode contoh untuk AWS SDK for PHP tersedia di sini GitHub.

Kredensial

Sebelum menjalankan kode contoh, konfigurasikan AWS kredensil Anda, seperti yang dijelaskan di. Kredensial Kemudian imporAWS SDK for PHP, seperti yang dijelaskan dalamPenggunaan dasar.

Buat rahasia di Manajer Rahasia

Untuk membuat rahasia di Secrets Manager, gunakan CreateSecretoperasi.

Dalam contoh ini, nama pengguna dan kata sandi disimpan sebagai string JSON.

Impor

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

Kode Sampel

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

Ambil rahasia dari Manajer Rahasia

Untuk mengambil nilai rahasia yang disimpan di Manajer Rahasia, gunakan GetSecretValueoperasi.

Pada contoh berikut, secret adalah string yang berisi nilai yang disimpan. Jika nilai untuk username adalah <<USERNAME>> dan nilai untuk password adalah<<PASSWORD>>, output dari secret adalah:

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

Gunakan json_decode($secret, true) untuk mengakses nilai-nilai array.

Impor

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

Kode Sampel

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

Daftar rahasia yang disimpan di Manajer Rahasia

Dapatkan daftar semua rahasia yang disimpan oleh Manajer Rahasia menggunakan ListSecretsoperasi.

Impor

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

Kode Sampel

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

Mengambil detail tentang rahasia

Rahasia yang disimpan berisi metadata tentang aturan rotasi, saat terakhir diakses atau diubah, tag yang dibuat pengguna, dan Amazon Resource Name (ARN). Untuk mendapatkan rincian rahasia tertentu yang disimpan di Secrets Manager, gunakan DescribeSecretoperasi.

Impor

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

Kode Sampel

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

Perbarui nilai rahasia

Untuk menyimpan nilai rahasia terenkripsi baru di Secrets Manager, gunakan PutSecretValueoperasi.

Ini menciptakan versi baru dari rahasia. Jika versi rahasia sudah ada, tambahkan VersionStages parameter dengan nilai AWSCURRENT untuk memastikan bahwa nilai baru digunakan saat mengambil nilai.

Impor

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

Kode Sampel

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

Putar nilai ke rahasia yang ada di Manajer Rahasia

Untuk memutar nilai rahasia yang ada yang disimpan di Secrets Manager, gunakan fungsi rotasi Lambda dan operasinya. RotateSecret

Sebelum Anda mulai, buat fungsi Lambda untuk memutar rahasia Anda. Katalog Contoh AWS Kode saat ini berisi beberapa contoh kode Lambda untuk memutar kredensi database Amazon RDS.

catatan

Untuk informasi selengkapnya tentang memutar rahasia, lihat Memutar AWS Secrets Manager Rahasia Anda di Panduan AWS Secrets Manager Pengguna.

Setelah Anda mengatur fungsi Lambda Anda, konfigurasikan rotasi rahasia baru.

Impor

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

Kode Sampel

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

Ketika rotasi dikonfigurasi, Anda dapat menerapkan rotasi menggunakan RotateSecretoperasi.

Impor

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

Kode Sampel

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

Menghapus rahasia dari Manajer Rahasia

Untuk menghapus rahasia tertentu dari Secrets Manager, gunakan DeleteSecretoperasi. Untuk mencegah penghapusan rahasia secara tidak sengaja, DeletionDate stempel secara otomatis ditambahkan ke rahasia yang menentukan jendela waktu pemulihan di mana Anda dapat membalikkan penghapusan. Jika waktu tidak ditentukan untuk jendela pemulihan, jumlah waktu default adalah 30 hari.

Impor

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

Kode Sampel

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

AWS SDK for PHPContoh menggunakan operasi REST berikut dari Referensi AWS Secrets Manager API:

Untuk informasi selengkapnya tentang penggunaanAWS Secrets Manager, lihat Panduan AWS Secrets Manager Pengguna.