🔒

PHP から GCP を利用する際の認証設定

2022/08/28に公開

PHP から GCP を利用するときの credentials の設定について調べてみると「サーバーの環境変数に設定しましょう」という記事が見つかる。
必ずしもサーバーの環境変数を設定できる環境とは限らないので、今回は別の方法も調べてみた。

基本的には githubの公式 や、 AUTHENTICATION.mdに書いてある。

putenv を利用する

サーバーを直接操作できないなら PHP から操作すればいいじゃない、でお馴染み putenv さんの登場。
動作としてはサーバーの環境変数を設定したのと同じになる。
絶対パスで設定する。

putenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json');

クラス初期化時のオプションに入れる

基本的には keyFilePath という名前で、絶対パスを入れる。
しかし、一部のクラスでは crecentials という名前になっているので、認証がうまくいかなければ、こちらを試してみると良い。

なお、どちらのケースにおいても json の中身を配列として直接ハードコードして指定することは可能だ。
しかし ソースコードが流出した時に大変なことになる ので、絶対やらない こと。

keyFile のケース

use Google\Cloud\Storage\StorageClient;

// ファイルパスを指定
$client = new StorageClient([
  'keyFilePath' => '/path/to/credentials.json',
]);

// 配列で指定
$client = new StorageClient([
  'keyFile' => json_decode(file_get_contents('/path/to/credentials.json'), true),
]);

credentials のケース

use Google\Cloud\Vision\V1\ImageAnnotatorClient;

// ファイルパスを指定
$client = new ImageAnnotatorClient([
  'credentials' => '/path/to/credentials.json',
]);

// 配列で指定
$client = new ImageAnnotatorClient([
  'credentials' => json_decode(file_get_contents('/path/to/credentials.json'), true),
]);

サーバー内の特定の場所に設置する

認証周りのソースコードを読み解いてみると、以下の場所に設置しても良いようだ。

  • windows: %APPDATA%/gcloud/application_default_credentials.json
  • others: $HOME/.config/gcloud/application_default_credentials.json

認証に関する全体の優先順位

  1. クラス初期化時のオプション
  2. サーバーの環境変数 (≈ putenv)
  3. サーバー内の特定の場所に設置

Discussion