はじめに
n8nのワークフロー上に、Firestoreノードを配置し、クロールした商品情報を整形して、Firestoreへ格納するという機能の一部を紹介したいと思います。
Firestoreデータベースの作成
- Standard edition (1MBまでのドキュメント)
- データベースID: xxxxx
- (default)のままにすると、この括弧つきの名前がそのままつかわれる
- ロケーション: asia-northeast1
- モード:本番環境モード
- セキュリティの確認のためにはこちらである必要あり
- ルール
- 以下がデフォルトのルールで、すべてのドキュメントへのアクセスを禁止している
- {database}はすべてのデータベースにマッチする
- {document=**}はすべてのドキュメントにマッチする
- 例えば、if falseを取ったら、すべてのドキュメントにアクセスできる
- 注意:サービスアカウントは、このルールをバイパスする
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}IAMによるn8n->Firestoreアクセス制御
サービスアカウントの作成
gcloud iam service-accounts create n8n-firestore \
--display-name="n8n Firestore Service Account"Firestore 書き込み権限を付与
export PROJECT_ID=Your gcp project id
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:n8n-firestore@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/datastore.user"サービスアカウントキー(JSON)を作成
gcloud iam service-accounts keys create firestore-key.json \
--iam-account=n8n-firestore@$PROJECT_ID.iam.gserviceaccount.comワークフローにFirestoreノードを配置
Create a documentノードを配置
書き込みを確認する

Create new credentialを入力
OAuth2かService Accountを選択できる、今回は、Service Accountを使用する
- Region
- Service Account email
- Service Account Private Key
その他のパラメータを設定
- Resource: Document
- Operation: Create
- Project Name or ID
- Database: firestore-manager-ai
- Collection: testcol
- Document ID: なし
- Columns / Attribute: productId
Execute stepボタンをクリックし、Firestoreコンソールを確認する

Firestoreの2種類のアクセス
今回はn8nからFirestoreへのアクセスなので、サーバーアクセスを利用しました。Firebaseが管理するユーザーを使って、アクセスする方法とは別のものです。
| 種類 | 誰がアクセスする? | 認証方法 | アクセス制御の仕組み |
|---|---|---|---|
| ① クライアントアクセス (Web / iOS / Androidなど) | 人間(ユーザー) | Firebase Auth(Google, Email, Apple, etc) | Firestore Security Rules |
| ② サーバーアクセス (Cloud Run / n8n / Cloud Functions) | システム(サービスアカウント) | Google IAM | ルールをバイパス(=適用されない) |
以上