Cloud run上のn8nからFirestoreへの接続

n8n

はじめに

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ルールをバイパス(=適用されない)

以上

関連記事

カテゴリー

アーカイブ

Lang »