

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 untuk PHP Versi 3
<a name="secretsmanager-examples-manage-secret"></a>

AWS Secrets Manager menyimpan dan mengelola rahasia bersama seperti kata sandi, kunci API, dan kredenal basis data. Dengan layanan Secrets Manager, pengembang dapat mengganti kredensi hard-code dalam kode yang diterapkan dengan panggilan tertanam ke Secrets Manager.

Secrets Manager secara native mendukung rotasi kredenal terjadwal otomatis untuk database Amazon Relational Database Service (Amazon RDS), meningkatkan keamanan aplikasi. Secrets Manager juga dapat dengan mulus memutar rahasia untuk database lain dan layanan pihak ketiga yang digunakan AWS Lambda untuk mengimplementasikan detail khusus layanan.

Contoh berikut menunjukkan cara:
+ Buat rahasia menggunakan [CreateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#createsecret).
+ Ambil rahasia menggunakan [GetSecretValue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#getsecretvalue).
+ Daftar semua rahasia yang disimpan oleh Secrets Manager menggunakan [ListSecrets](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#listsecrets).
+ Dapatkan detail tentang penggunaan rahasia tertentu [DescribeSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#describesecret).
+ Perbarui rahasia tertentu menggunakan [PutSecretValue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#putsecretvalue).
+ Siapkan rotasi rahasia menggunakan [RotateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#rotatesecret).
+ Tandai rahasia untuk penghapusan menggunakan. [DeleteSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#deletesecret)

Semua kode contoh untuk AWS SDK untuk PHP tersedia [di sini GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Kredensial
<a name="examplecredentials"></a>

Sebelum menjalankan kode contoh, konfigurasikan AWS kredensil Anda, seperti yang dijelaskan dalam. [Mengautentikasi dengan AWS menggunakan AWS SDK untuk PHP Versi 3](credentials.md) Kemudian impor AWS SDK untuk PHP, seperti yang dijelaskan dalam[Menginstal AWS SDK untuk PHP Versi 3](getting-started_installation.md).

## Buat rahasia di Secrets Manager
<a name="create-a-secret-in-asm"></a>

Untuk membuat rahasia di Secrets Manager, gunakan [CreateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#createsecret)operasi.

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

## Mengambil rahasia dari Secrets Manager
<a name="retrieve-a-secret-from-asm"></a>

Untuk mengambil nilai rahasia yang disimpan di Secrets Manager, gunakan [GetSecretValue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#getsecretvalue)operasi.

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

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

Gunakan `json_decode($secret, true)` untuk mengakses 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 Secrets Manager
<a name="list-secrets-stored-in-asm"></a>

Dapatkan daftar semua rahasia yang disimpan oleh Secrets Manager menggunakan [ListSecrets](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#listsecrets)operasi.

 **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";
}
```

## Ambil detail tentang rahasia
<a name="retrieve-details-about-a-secret"></a>

Rahasia yang disimpan berisi metadata tentang aturan rotasi, saat terakhir diakses atau diubah, tag yang dibuat pengguna, dan Nama Sumber Daya Amazon (ARN). Untuk mendapatkan detail rahasia tertentu yang disimpan di Secrets Manager, gunakan [DescribeSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#describesecret)operasi.

 **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
<a name="update-the-secret-value"></a>

Untuk menyimpan nilai rahasia terenkripsi baru di Secrets Manager, gunakan operasi. [PutSecretValue](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#putsecretvalue)

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 Secrets Manager
<a name="rotate-the-value-to-an-existing-secret-in-asm"></a>

Untuk memutar nilai rahasia yang ada yang disimpan di Secrets Manager, gunakan fungsi rotasi Lambda dan operasi. [RotateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#rotatesecret)

Sebelum Anda mulai, buat fungsi Lambda untuk memutar rahasia Anda. [Katalog Contoh AWS Kode](https://docs.aws.amazon.com/code-samples/latest/catalog/code-catalog-lambda_functions-secretsmanager.html) saat ini berisi beberapa contoh kode Lambda untuk memutar kredensil database Amazon RDS.

**catatan**  
Untuk informasi selengkapnya tentang memutar rahasia, lihat [Memutar AWS Secrets Manager Rahasia Anda](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html) di AWS Secrets Manager Panduan 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 [RotateSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#rotatesecret)operasi.

 **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";
}
```

## Hapus rahasia dari Secrets Manager
<a name="delete-a-secret-from-asm"></a>

Untuk menghapus rahasia tertentu dari Secrets Manager, gunakan [DeleteSecret](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-secretsmanager-2017-10-17.html#deletesecret)operasi. 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
<a name="related-information"></a>

 AWS SDK untuk PHP Contoh menggunakan operasi REST berikut dari Referensi AWS Secrets Manager API:
+  [CreateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_CreateSecret.html) 
+  [GetSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html) 
+  [ListSecrets](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_ListSecrets.html) 
+  [DescribeSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_DescribeSecret.html) 
+  [PutSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_PutSecretValue.html) 
+  [RotateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_RotateSecret.html) 
+  [DeleteSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_DeleteSecret.html) 

Untuk informasi selengkapnya tentang penggunaan AWS Secrets Manager, lihat [Panduan AWS Secrets Manager Pengguna](https://docs.aws.amazon.com/secretsmanager/latest/userguide/).