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:
-
Buat rahasia menggunakan CreateSecret.
-
Mengambil rahasia menggunakan GetSecretValue.
-
Daftar semua rahasia yang disimpan oleh Secrets Manager menggunakan ListSecrets.
-
Dapatkan rincian tentang rahasia tertentu menggunakan DescribeSecret.
-
Memperbarui rahasia tertentu menggunakan PutSecretValue.
-
Mengatur rotasi rahasia menggunakan RotateSecret.
-
Tandai rahasia untuk penghapusan menggunakan DeleteSecret.
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"; }
Informasi terkait
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.