🔒
PHP から GCP を利用する際の認証設定
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
認証に関する全体の優先順位
- クラス初期化時のオプション
- サーバーの環境変数 (≈ putenv)
- サーバー内の特定の場所に設置
Discussion