Secrets Manager API およびAWSSDK for PHP バージョン 3 - AWSSDK for PHP

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Secrets Manager API およびAWSSDK for PHP バージョン 3

AWS Secrets Manager は、パスワード、API キー、データベース認証情報などの共有されたシークレットを保存し、管理します。Secrets Manager サービスを使用すると、開発者は、デプロイされたコードのハードコードされた認証情報を、Secrets Manager への埋め込みの呼び出しで置き換えることができます。

Secrets Manager は、Amazon Relational Database Service (Amazon RDS) データベースの認証情報のスケジュールされた自動更新をネイティブにサポートして、アプリケーションのセキュリティを高めます。Secrets Manager は、を使用して、他のデータベースとサードパーティーのサービスのシークレットをシームレスに更新することもできます。AWS Lambdaを使用して、サービス固有の詳細を実装します。

以下の例では、次の方法を示しています。

  • CreateSecret を使用してシークレットを作成します。

  • GetSecretValue を使用してシークレットを取得します。

  • ListSecrets を使用して、Secrets Manager によって保存されたすべてのシークレットをリストします。

  • DescribeSecret を使用して、指定されたシークレットの詳細を取得します。

  • PutSecretValue を使用して、指定されたシークレットを更新します。

  • RotateSecret を使用してシークレットの更新を設定します。

  • DeleteSecret を使用して、シークレットを削除対象としてマークします。

すべてのサンプルコードAWSSDK for PHP バージョン 3 が利用可能なGitHub で

Credentials

サンプルコードを実行する前に、AWSの認証情報 (「」を参照)の認証情報AWSSDK for PHP バージョン 3。次に、インポートするAWSSDK for PHP(の基本的な使用パターンAWSSDK for PHP バージョン 3

シークレットマネージャーでのシークレットの作成

シークレットマネージャーでシークレットを作成するには、CreateSecretオペレーション.

この例では、ユーザー名とパスワードは JSON 文字列として保存されます。

インポート

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

サンプルコード

$client = new SecretsManagerClient([ 'profile' => 'default', 'version' => '2017-10-17', 'region' => 'us-west-2' ]); $secretName = '<<{{MySecretName}}>>'; $secret = '{"username":"<<USERNAME>>","password":"<<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"; }

シークレットマネージャーからのシークレットの取得

シークレットマネージャーに保存されているシークレットの値を取得するには、使用してGetSecretValueオペレーション.

この例では、シークレットは保存された値を含む文字列です。前に作成したシークレットで呼び出した場合、このサンプルは [{\"username\":\"<<USERNAME>>\",\"password\":\"<<PASSWORD>>\"}] を出力します。json.loads を使用して、インデックスが付けられた値にアクセスします。

インポート

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

サンプルコード

$client = new SecretsManagerClient([ 'profile' => 'default', 'version' => '2017-10-17', 'region' => '<<{{MyRegionName}}>>', ]); $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']); } // Your code goes here;

シークレットマネージャーに保存されているシークレットのリスト表示

を使用して、Secrets Manager によって保存されているすべてのシークレットのリストを取得します。ListSecretsオペレーション.

インポート

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

サンプルコード

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

シークレットに関する詳細情報の取得

保存されたシークレットには、更新ルールに関するメタデータ、最終アクセス時間または変更時間、ユーザーが作成したタグ、および Amazon リソースネーム (ARN) が含まれています。シークレットSecrets Manager に保存されている指定されたシークレットの詳細を取得するには、DescribeSecretオペレーション.

インポート

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

サンプルコード

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

シークレット値の更新

Secrets Manager で新しい暗号化されたシークレットの値を保存するには、PutSecretValueオペレーション.

これにより、シークレットの新しいバージョンが作成されます。シークレットのバージョンが既に存在する場合、VersionStages パラメータと AWSCURRENT の値を追加し、この値を取得するときに新しい値が使用されるようにします。

インポート

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

サンプルコード

$client = new SecretsManagerClient([ 'profile' => 'default', 'version' => '2017-10-17', 'region' => 'us-west-2' ]); $secretName = '<<{{MySecretName}}>>'; $secret = '{"username":"<<USERNAME>>","password":"<<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"; }

シークレットSecrets Manager で既存のシークレットの値を更新する

Secrets Manager に保存されている既存のシークレットの値を更新するには、Lambda ローテーション関数を使用し、RotateSecretオペレーション.

開始する前に、シークレットを更新する Lambda 関数を作成します。-AWSコードサンプルカタログ現在、Amazon RDS データベースの認証情報を更新する Lambda コード例をいくつか含んでいます。

注記

シークレットの更新の詳細については、」ローテーションAWS Secrets ManagerSecrets()AWS Secrets Managerユーザーガイド。

Lambda 関数を設定したら、新しいシークレット更新を設定します。

インポート

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

サンプルコード

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

更新が設定されている場合、RotateSecret オペレーションを使用して更新を実装できます。

インポート

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

サンプルコード

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

シークレットマネージャーからのシークレットの削除

指定されたシークレットをSecrets Manager から削除するには、DeleteSecretオペレーション. シークレットが誤って削除されないようにするため、削除を元に戻すことが可能な復旧期間を指定できる DeletionDate スタンプが、自動的にシークレットに追加されます。復旧期間を指定しない場合のデフォルトの期間は、30 日です。

インポート

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

サンプルコード

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

-AWSSDK for PHP の例では、から次の REST オペレーションを使用します。AWS Secrets ManagerAPI リファレンス:

AWS Secrets Manager の使用の詳細については、AWS Secrets Manager ユーザーガイドを参照してください。