GCP Secret Managerを使ってみた
IT技術
GCPのSecret Managerを使用する機会があり、Googleが提供しているgoogle-cloud-php-secret-managerを使ったのでまとめていきます。
google-cloud-php-secret-managerはphpのコードでSecret Managerを使えるようになるライブラリです。
そもそもSecret Managerとは
GCPが提供するSecret ManagerとはAPI キー、パスワード、証明書、その他の機密データを保存し必要に応じて保存した値を使用できるサービスです。
保存できる最大サイズは64 KiBとなっており基本的には文字列しか保存できません。機密な画像やPDFなどのファイルをセキュアに保存したい場合はCloud Strageを使用しますがそれについてはまた別途紹介したいと思います。
そしてそれをphpのコードでAPIを叩けるよう提供されているものがgoogle-cloud-php-secret-managerとなります。これを使用すると値の保存、取得などがAPIで行えるようになります。今回私はGCPに保存した値をAPIで取得する実装を行ったのでその方法を紹介したいと思います。(保存は自動化等する必要なかったのでコンソールから手動で保存しました。)
実装方法
ではまず初めにgoogle-cloud-php-secret-managerをインストールしていきましょう。
以下のコマンドを叩くだけです。
1$ composer require google/cloud-secret-manager
これでインストールは完了したので、実際にコードを書いていきます。
1 use Google\Cloud\SecretManager\V1\AccessSecretVersionRequest;
2 use Google\Cloud\SecretManager\V1\Client\SecretManagerServiceClient;
3
4 public function getBundleParameters($projectId, $versionId, $secretId): string
5 {
6 $secreteManagerClient = new SecretManagerServiceClient();
7
8 $name = $secreteManagerClient->secretVersionName($projectId, $secretId, $versionId);
9
10 $request = AccessSecretVersionRequest::build($name);
11
12 $response = $secreteManagerClient->accessSecretVersion($request);
13
14 return $response->getPayload()->getData();
15 }
上記のコードはSecret Managerにアクセスして、そのシークレットの値を文字列として返すメソッドを作成しています。
引数にはGCPのプロジェクトID、シークレットID、バージョンID(値を一つしか入れていなければ通常は '1' になります)を取ります。
プロジェクトIDは使用するGCPのプロジェクトID、シークレットIDはSecret Managerに保存したシークレットの名前、バージョンIDは保存したシークレットバージョンの番号が入ります(番号ですが文字列型なので注意)。
GCPの公式ドキュメントに書いてあるものとほぼ変わらないコードだし、中身も至ってシンプルですが、これでシークレットの値を取得できます。
Secret Managerに限らずGCPのAPIはシンプルなものが多いで、非常に使いやすくて便利です。
まとめ
今回はphpでSecret Managerにアクセスしてシークレットの値を取得する方法についてまとめました。
GCPが提供するAPIはシンプルなものが多いので比較的コードは簡単になります。
ですので皆さんも外部APIだからと毛嫌いいせずどんどん使ってもらえるといいと思います。
ライトコードでは、エンジニアを積極採用中!
ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。
採用情報へ