【GCP】7 PERMISSION_DENIED: Missing or insufficient permissions


CloudFunctions for Firebaseでローカルエミュレーターではfirestore へデータの登録ができるが、deployしてクラウドから実行すると下記のエラーが出ていた。

7 PERMISSION_DENIED: Missing or insufficient permissions

ここを参考にFirebase Admin SDKのserviceAccountKeyを設定する
https://firebase.google.com/docs/admin/setup?hl=ja

Firebaseコンソール → (左上の)設定 → サービスアカウント
から、

新しい秘密鍵の生成
xxx.json
を任意の場所へ配置する。

var admin = require("firebase-admin");
var serviceAccount = require("path/to/serviceAccountKey.json");
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://[APPの名前].firebaseio.com"
});

これでdeploy後にクラウド側から関数実行をしてもエラーが出ず、正常にデータの登録ができた。

ちなみにこの時のfirestoreのルールはこれ。
(セキュリティ的にはもっと色々設定していかないといけないと思っている)

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}