Hanatare's PaPa

Make life a little richer.

Virtual Space of Hanatare's PaPa

人生をほんの少しだけ充実させる

【Workflow】n8n × Googleサービスの認証方法

n8nを使ってGoogle スプレッドシートを操作するワークフローを作成した際に、Googleへの認証方法について戸惑ったので、そのことを今回は記事にまとめたいと思います。

記事のポイント
  • n8nとGoogleサービスにおける認証の設定方法
  • n8nとGoogleサービスにおける認証方法のメリット・デメリット
  • n8nとGoogleサービスにおける認証方法の選択基準

n8nとは?

この記事から読み始めた方のために、簡単にn8nをご紹介します。 n8nは、拡張可能なワークフロー自動化ツールです。ソースコードが公開されており、セルフホストが可能で、独自のカスタム関数、ロジック、アプリを追加できます。n8nのノードベースのアプローチは非常に汎用性が高く、あらゆるものを接続できます。例えば、Gmail、Google Sheets、Google カレンダーなどの Google サービスや、Notion、Generative AIなどとの連携によってタスクの自動化が可能なツールです。

なぜ認証が必要なのか?

n8nで Google スプレッドシートを操作しようとすると、まず認証情報の設定が必要になります。具体的には、以下の画面です。

これは n8n が Google スプレッドシートにアクセスし、データを読み書きするために、Google 側から「この n8n インスタンスはあなたの Google アカウントにアクセスすることを許可されている」という明確な「承認」を得る行為です。データ保護の観点から、誰が、どのように、どのデータにアクセスしているかを管理することは常識となっています。認証がなければ、n8n は許可なく勝手に Google スプレッドシートにアクセスできてしまい、セキュリティ上の大きな問題となるため、認証は必須です。

この記事で言いたいこと

セルフホステッド環境の n8n で Google スプレッドシートを安全に操作するための主要な2つの認証方法、「OAuth 2.0」と「サービスアカウント」について解説します。それぞれの認証方法の違いや、実用上のメリット・デメリット、どのような状況でどちらを選ぶべきかをお伝えします。

n8nのGoogleサービスへの認証方法

n8n で Google Sheets ノードを含む Google サービスノードを利用する際、主に「OAuth 2.0」と「サービスアカウント」という二つの認証方法が提供されています。これらはそれぞれ異なる目的と特性を持っています。

OAuth2.0

OAuth 2.0 は、n8n のようなアプリケーションがユーザーの Google アカウントの代理として Google リソースにアクセスするための標準的な認可フレームワークです。ユーザーがログイン情報を直接 n8n に渡すことなく、Google が発行するアクセストークンを使ってアクセスを許可します。これは、家の鍵を渡さずに一時的な入館証を発行するような仕組みです。OAuth 2.0 により、アプリはユーザーの保護されたリソースに限定的にアクセスでき、ユーザーはログイン情報を提供せずに済みます。

メリット

OAuth 2.0 を使う際のメリットは以下の通りです。

  • セキュリティが高い
  • ユーザーにとってわかりやすい認証フロー
  • 権限の細かな制御が可能

OAuthを使う場合、ユーザは自身のアカウントを使い、普段Googleにログインするような形で認証を行うことができます。また、その際、n8nにGoogleの認証情報(ユーザ情報やパスワード)を渡すわけではないので、情報漏洩の観点からもリスクが低減されます。また、OAuthスコープと呼ばれる、認可時の権限を定義し、その定義に応じてユーザの操作を決定付ける事が可能となります。

デメリット

OAuth 2.0 を使う際のデメリットは以下の通りです。

  • 未検証アプリではリフレッシュトークンの有効期限が7日と短い
  • セルフホステッドでは公開ドメインかトンネルサービスが必要

特に注意が必要なのは、未検証アプリの場合、アクセストークンを自動的に再取得するための「リフレッシュトークン」が7日で期限切れになる点です 。これは、Google Cloud Consoleで作成されたOAuthアプリケーションが「テストモード」のままであり、Googleによる公式な「検証」を受けていないことが原因です。この未検証状態が続くことで、リフレッシュトークンの寿命が短く制限され、結果として7日ごとに手動で再認証を行う必要が生じてしまうため、処理自体を自動化しても、再認証の必要性によって認証エラーとなり手動での対処が必要となります。 OAuthの認証には、n8nを立てる環境に対して公開ドメインを取得する、もしくは、トンネルサービスが必要となります。これはOAuthの仕組み上の制約ですが、OAuthは認証を行うと、トークンと呼ばれる認可コードを返します。その際、リクエストURIにコードを返すわけですが、これは外部からアクセスできるURIでないと、返すことができません。そのため、localhostのようなローカルアドレスは使えず、セルフホステッドn8nがOAuthを利用するには、公開ドメインまたは一時的なトンネルサービス(例: ngrok)が必要になります。

推奨される用途

業務ユーザー向けや小規模な個人利用など、ユーザーアカウントに紐づくアクセスを行う場合に適しています。

OAuth2.0とn8nの設定方法

OAuth 2.0 の設定は、Google Cloud Console と n8n の両方で行います。

前提条件

  • Googleアカウントを所有していること。
  • セルフホステッド n8n インスタンスが外部からアクセス可能なドメインを持っていること
  • ドメインがない場合はテスト用に ngrok などのトンネルサービスの使用も可能(本番環境には非推奨)

Google Cloud Console プロジェクトの作成

プロジェクトとは、Google Cloud上でAPIやサービスを管理するための「入れ物」のようなものです。このプロジェクト内で、n8nがGoogleサービスにアクセスするための設定を行います。

・  Google Cloud Console (console.cloud.google.com) にアクセスします。

・  画面上部のプロジェクト選択ドロップダウンメニューから「新しいプロジェクト」を選択します。

・  プロジェクト名(例: n8n-sheets-project)を入力し、必要であれば組織を選択して「作成」をクリックします

必要なAPIの有効化(今回はGoogle SpreadSheetsを例にします。)

n8nがGoogleスプレッドシートを操作するためには、Googleに対してそのAPI(プログラムからGoogleスプレッドシートを操作するための窓口)の利用許可を明示的に与える必要があります。

・  作成したプロジェクトが選択されていることを確認します。

・  左側のナビゲーションメニューから「APIとサービス」>「ライブラリ」へ移動します 。  

・  検索バーで「Google Sheets API」と入力し、検索結果から「Google Sheets API」を選択します。

・  「有効にする」ボタンをクリックして、このAPIをプロジェクトで利用できるようにします 。

・  有効にすると以下の画面に遷移します。

・  同様に「Google Drive API」も有効にします。

OAuth 同意画面の設定

・  左側のナビゲーションメニューから「APIとサービス」>「OAuth同意画面」へ移動します 。

・  「開始(Get started)」を選択し、設定を開始します。

・  アプリ情報に必要な情報を入力し、次へを押下します。

アプリ名: n8nのインスタンス名など、ユーザーが認証時に表示される分かりやすい名前を入力します

ユーザーサポートメール: あなた自身のメールアドレスを入力します 。

・  対象情報で内部/外部のいずれかを選択し、次へを押下します。

通常は「外部」を選択します。(これにより、Googleアカウントを持つすべてのユーザーがアプリを利用できるようになります。あなたのGoogleアカウントも含まれます。)Google Workspace組織内のユーザーのみに限定する場合は「内部」を選択します 。

・  連絡先情報で連絡先を入力し、次へを押下します。

・  終了情報でポリシー同意にチェックをいれて、作成を押下します。

承認済ドメインの設定

OAuthフローが完了した後にGoogleが認証情報をn8nに安全にリダイレクトするために不可欠な設定です。

・  左側のメニューから「ブランディング」を押下し、承認済ドメインの「+ドメインの追加を押下します」を押下し、ドメインを追加します。残念ながら、私の環境はlocalhostのため以下のようにエラーになりますが、公開ドメインであれば、設定できるはずです。

対象の設定

アプリが未検証(公開ステータスがテスト中)の状態でも、あなたがテストユーザーとしてアクセスを許可できるように設定をします。

・  左側のメニューから「対象」を押下し、テストユーザーの 「+ Add users」を押下します。

・  Googleアカウントのメールアドレスを追加し、保存します。

OAuth クライアントIDの作成

ここで最後に生成される「クライアントID」と「クライアントシークレット」が、n8nとGoogleを安全に紐づけるための「鍵」となります。これらは外部に漏洩しないよう注意してください。また、発行したシークレット情報はJSONダウンロードをし、厳重に保管するようにしてください。

・  左側のメニューから「クライアント」を押下し、OAuth2.0 クライアントID画面に遷移します。

・  上部の「クライアントを作成」を押下し、OAuth2.0のクライアントを作成します。

・  アプリケーションの種類: 「ウェブアプリケーション」を選択します 。

・  名前: 任意の分かりやすい名前を入力します

・  承認済みのリダイレクトURI:n8nの「認証情報」セクションで認証方法として「OAuth2」を選択すると、「OAuth Redirect URL」というURLが表示されます。このURLをコピーし、 Google Cloud Consoleの「承認済みのリダイレクトURI」フィールドにペーストします。

・  作成ボタンを押下すると、以下のようにOAuthクライアントIDが発行されます。

n8nでの認証情報設定

ここからは、n8nの画面に戻って、Googleにアクセスするための設定を行い、認証プロセスが完了させます。

・  Google Cloud Consoleで表示された「OAuth クライアントが作成されました」というダイアログから、「クライアントID」と「クライアントシークレット」をコピーします 。もしくは、JSON内に記載されている「クライアントID」と「クライアントシークレット」の内容をコピーします。

・ n8nの「認証情報」セクションに戻り、新しいGoogle認証情報の追加画面で、コピーしたクライアントIDとクライアントシークレットをそれぞれのフィールドにペーストします  

・ 「Sign in with Google」ボタンをクリックします 。

・ Googleの認証画面にリダイレクトされ、あなたのGoogleアカウントでログインし、n8nへのアクセスを許可するよう求められます。

・ 認証が完了すると、n8nの画面に戻り、認証情報が保存されます。今回私の場合は、n8nをlocalhostで動かしているため、以下の画面のようにlocalhostでの接続拒否がされます。

注意点

今回、私の環境下では、公開ドメインを持たないため、OAuth2.0のトークン受取ができず、失敗しましたが、本来はこの手順で設定ができるはずです。ただし、設定ができても、注意点はあります。未検証の状態では、前述の通りリフレッシュトークンが7日で期限切れになるため、定期的な再認証が必要になることを忘れないでください 。長期的な無人運用でこれを避けたい場合は、Googleのアプリ検証プロセスを完了する必要があります

サービスアカウント

サービスアカウントは、n8nのようなアプリケーションや、サーバー上のワークロードが、人間を介さずにGoogleサービスにアクセスするために設計された特別な種類のGoogleアカウントです。通常のユーザーアカウントとは異なり、特定の個人に紐づくものではなく、独自のメールアドレスによって識別されます 。これらのアカウントは、GoogleのIAM (Identity and Access Management) サービスによって管理され、特定のGoogleリソースへのアクセス権限を付与することができます。例えるなら、特定のタスクを自動で実行するために、Googleが発行した「ロボット用のIDカード」のようなものです。サービスアカウントは、そのメールアドレスによって識別され 、プリンシパル(サービスアカウント)とそのサービスアカウントに関連付けられたプロジェクトを識別します 。

メリット

サービスアカウントを使う際のメリットは以下です。

  • トークンの有効期限を意識せずに済む
  • ユーザーアカウントに依存しない

OAuthのように7日問題のようにリフレッシュトークンの期限切れを心配する必要がありません。一度設定すれば、キーファイルが有効な限り永続的に動作します 。また、ユーザアカウントに紐づかないため、企業における人の退職やアカウントの変更に影響されることがありません。

デメリット

サービスアカウントを使う際のデメリットは以下です。

  • JSON キーファイルの管理にセキュリティリスクがある
  • Workspace ドメイン外なので個別共有が必要
  • 設定がやや複雑

特に注意が必要なのは、キー管理です。サービスアカウントキー(JSONファイル)は、そのアカウントの秘密鍵を含んでおり、適切に管理されないと重大なセキュリティリスクとなります 。Googleの公式ドキュメントは、サービスアカウントキーがセキュリティリスクであり、可能な限りより安全な代替手段を選択すべきであると繰り返し警告しています 。これは、キーファイルが漏洩した場合、そのキーを持つ誰でもサービスアカウントが持つすべての権限でGoogleリソースに不正アクセスできてしまうためです。このリスクを最小限に抑えるためには、キーファイルの保管場所の厳選、不要になったキーの速やかな削除、そして定期的なキーのローテーションといった厳重な管理が不可欠です。

また、サービスアカウントはGoogle Workspaceドメインの一部ではないため、Google Workspaceドメイン全体に共有されたドキュメントやイベントには自動的にアクセスできません 。したがって、操作したいGoogleスプレッドシートに対して、1つずつサービスアカウントのメールアドレスを明示的に共有設定で追加し、アクセス権限を付与する必要があります。

更に、OAuthと比較すると、Google CloudのIAMロールの理解やキーファイルの取り扱いなど、初期設定が運用がやや複雑になります。

推奨される用途

セキュリティリスクを十分に理解し、キーファイルの厳重な管理を徹底できることを前提に、バッチ処理などの自動化などバックグラウンド処理や長期の自動化、プライベートネットワーク内での運用に最適です。

サービスアカウントとn8nの設定方法

サービスアカウントの設定は、Google Cloud Consoleとn8nの2箇所で行います。

前提条件

  • Googleアカウントを所有していること。

Google Cloud Console プロジェクトの作成

プロジェクトとは、Google Cloud上でAPIやサービスを管理するための「入れ物」のようなものです。このプロジェクト内で、n8nがGoogleサービスにアクセスするための設定を行います。

・  Google Cloud Console (console.cloud.google.com) にアクセスします。

・  画面上部のプロジェクト選択ドロップダウンメニューから「新しいプロジェクト」を選択します。

・  プロジェクト名(例: n8n-sheets-project)を入力し、必要であれば組織を選択して「作成」をクリックします

必要なAPIの有効化(今回はGoogle SpreadSheetsを例にします。)

n8nがGoogleスプレッドシートを操作するためには、Googleに対してそのAPI(プログラムからGoogleスプレッドシートを操作するための窓口)の利用許可を明示的に与える必要があります。

・  作成したプロジェクトが選択されていることを確認します。

・  左側のナビゲーションメニューから「APIとサービス」>「ライブラリ」へ移動します 。  

・  検索バーで「Google Sheets API」と入力し、検索結果から「Google Sheets API」を選択します。

・  「有効にする」ボタンをクリックして、このAPIをプロジェクトで利用できるようにします 。

有効にすると以下の画面に遷移します。

サービスアカウントの作成:

・  Google Cloud Consoleの左側のナビゲーションメニューから「IAMと管理」>「サービスアカウント」へ移動します。

・ 画面上部の「サービスアカウントを作成」ボタンをクリックします。

・ サービスアカウント名: 任意の分かりやすい名前を入力します(例: n8n-sheets-automation)。

・ サービスアカウントID: 自動生成されますが、必要であれば変更可能です。

・ サービスアカウントの説明: このアカウントの用途を記述します(例: 「n8nからGoogleスプレッドシートを操作するためのアカウント」)。

・ 入力後、「作成して続行」をクリックします。

・ 権限付与:作成したサービスアカウントに適切なIAMロールを付与します。セキュリティのベストプラクティスとして「最小権限の原則」に従い、必要最小限の権限のみを付与するようにしてください。ただし、今回はテスト用なので、編集者という比較的強い権限を与えていますので、ご留意ください。

・ 権限付与後、「続行」をクリックします。

・ アクセス権を持つプリンシパルは入力を省略します。完了ボタンを押下して、サービスアカウントを生成します。

キーの生成とダウンロード

この手順で作成するJSONファイルが、n8nがサービスアカウントとして認証するための「秘密の鍵」です。このファイルが漏洩すると、不正なアクセスを許してしまうため、パスワードと同様に大切に扱ってください。

・ 作成したサービスアカウントの一覧から、先ほど作成したサービスアカウントのメールアドレスをクリックして詳細画面を開きます。

・ 上部のタブから「鍵」へ移動し、「キーを追加」>「新しい鍵を作成」を選択します。

・ キーのタイプ: 「JSON」を選択し、「作成」をクリックします。

・ JSON形式のキーファイルが自動的にダウンロードされます。このファイルにはサービスアカウントの秘密鍵が含まれているため、外部に漏洩しないよう、厳重に保管することを強く推奨します 。ダウンロード後、安全な場所に移動させてください。このキーファイルは、サービスアカウントに付与されたすべての権限を直接実行できる強力な認証情報であり、その漏洩は重大なセキュリティ侵害につながります。公開されているコードリポジトリにアップロードしたり、不特定多数のユーザーと共有したりすることは絶対に避けてください。

Google SpreadSheetシートへのアクセス権付与

サービスアカウントは、Google Workspaceドメインに属さない独立したエンティティであるため 、たとえGoogle Cloudプロジェクト内でIAMの権限を付与したとしても、個々のGoogle SpreadSheetには自動的にアクセスできません。そのため、アクセスさせたい、Google SpreadSheet毎に共有設定を行う必要があります。

・ n8nで操作したいGoogleスプレッドシートがある、GoogleDriveの場所に移動します。

・ スプレッドシートの右上にある「共有」ボタンをクリックします。

・ ダウンロードしたJSONファイル内に記載されているサービスアカウントのメールアドレス(例: n8n-sheets-automation@your-project-id.iam.gserviceaccount.com)を共有相手として追加します。

・ サービスアカウントに付与する権限(例: 「編集者」)を選択し、「送信」をクリックします。

n8nでの認証情報設定

ここからは、n8nの画面に戻って、Googleにアクセスするための設定を行い、認証プロセスが完了させます。

・ n8nの「認証情報」セクションに戻り、「Service Account」を選択します。

・ ダウンロードしたJSONファイルを開き、Service Account Email 、Private Keyに該当する、client_email、private_keyをコピー&ペーストします。

・ 画面右上のSaveを教えて保存します。

・ 以上で設定は完了です。

OAuth とサービスアカウントの比較と使い分け

どちらの認証方法を選ぶべきかは、あなたのn8nの利用目的や運用環境によって異なります。以下の比較表と推奨される用途を参考に、最適な方法を選択してください。

比較表

特徴 / Feature OAuth 2.0 サービスアカウント (Service Account)
認証主体 人間(Googleアカウントを持つユーザー) アプリケーション / プログラム(非人間)
認証方法 Googleのログイン画面での同意(インタラクティブ) JSONキーファイル(秘密鍵)による認証
トークン有効期限 テストモードでは7日で期限切れの可能性あり 原則として永続的(キーが有効な限り)
セキュリティ上の注意点 アプリの検証(長期利用の場合) キーファイルの厳重な管理(漏洩リスク)
Google Workspaceとの連携 ユーザーアカウントに紐づくため、共有設定に依存 Google Workspaceドメイン外のため、個別の共有が必要
推奨される用途 個人利用、小規模な自動化、ユーザーデータへのアクセス、n8nの推奨 バックグラウンド処理、長期間の自動化、サーバーサイドアプリケーション
n8nの推奨 推奨 特定の用途でのみ検討

OAuth 2.0を選ぶべき場合:

  • 初めてn8nとGoogleサービスを連携する方: n8nが推奨しており、設定が比較的シンプルです 。  
  • 個人利用や小規模なプロジェクトで、7日ごとの再認証が許容できる場合: Googleのアプリ検証プロセスは複雑なため、テストモードのままで運用する選択肢です 。
  • ユーザーのGoogleアカウントに紐づくデータにアクセスする必要がある場合: 例えば、あなた自身のGoogleドライブ内のスプレッドシートを操作したい場合などです。

サービスアカウントを選ぶべき場合

  • 長期間、人間が介入せずに自動化を継続したい場合: 特に、24時間365日稼働するワークフローや、定期的なバックグラウンド処理が必要な場合に最適です。OAuthの7日問題に悩まされたくない場合に有力な選択肢となります 。   
  • セキュリティリスクを理解し、キーファイルを厳重に管理できる場合: サービスアカウントキーの管理は、その利便性と引き換えに大きな責任が伴います 。  
  • 特定のGoogleスプレッドシートやGoogle Cloudリソースに、アプリケーション専用のアクセス権を与えたい場合: サービスアカウントは、特定のタスクを実行するための「ロボット」のような存在です。
  • キーファイルの厳重な管理は必要ですが、n8nをローカル環境のプライベートネットワーク内で運用し、外部からのアクセスを避けたい場合は、サービスアカウントの利用が強く推奨されます。接続性の問題は発生しません。   

OAuth 2.0 の場合: OAuth認証では、Googleが認証後にn8nインスタンスに「認証が完了しました」という情報(アクセストークンなど)を返すために、事前に登録された「リダイレクトURI」にアクセスする必要があります 。もしn8nが外部からアクセスできないプライベートネットワーク内に構築されている場合、GoogleはそのリダイレクトURIに到達できません。このため、一時的にngrokのようなトンネルサービスを使って外部からアクセスできるようにするか、n8nインスタンスに公開ドメインを設定する必要があります。これは、完全に閉じたプライベートネットワークでの運用には適さない場合があります。  

サービスアカウントの場合: サービスアカウント認証は、ダウンロードしたJSONキーファイルを使ってn8nインスタンスが直接Googleに認証を行うため、Googleがn8nインスタンスにアクセスする必要がありません 。つまり、Googleからの「コールバック」が不要なため、n8nがプライベートネットワーク内にあっても問題なく機能します。  

まとめ

今回の記事は、だいぶ長くなってしまいました。n8nでワークフローを構築する際に、自動化の目的と運用環境に合わせて最適な認証方法を選択することが、n8nワークフローを安定して稼働させる鍵となります。これは、Googleのサービスだけに限らず、他のサービスと連携をする際にも注意することです。今回の記事が少しでも、n8nを使う方、Googleサービスを使いたい方の助けになっていると幸いです。