,

在 n8n 自動化使用 Google 服務詳解 | 從申請 Google Service Account 到 n8n Credential 設定

n8n 串接 Google 服務時,用 service account 更穩定,雖然繁雜,讓我們一起完成!

OAuth2 會常被踢掉,使用給機器專用的 Service Account 就沒有這個麻煩,但你要學新觀念
OAuth2 會常被踢掉,使用給機器專用的 Service Account 就沒有這個麻煩,但你要學新觀念(圖:Gemini)

網站服務用「帳密」認證,n8n 代替你整合各種服務,但它不會輸入帳密,要把網站的「API Key」(API金鑰),存在 n8n 的「證書」(Credential)中,就可以代表你整合各種服務了。但非常有用的 Google services 認證方式卻很繁雜,導致每次上課總有學員卡關,本文詳解取得 Service Account 的細節。

你可以把本文做為小抄,忘了再回來查!我會持續更新,保持在最新狀態。

Google 多種認證方式解析

Google 提供了「GCP,Google Cloud Console」,剛進去會覺得是天書,久了以後,還是天書~~,沒關係,不求什麼都懂,我們先懂認證方式即可,這段搞定,Google 服務本身還是比較易懂的。

Google 有 3 種認證方式:

  1. API 金鑰(API Key):這是最容易使用的,跟大部分服務類似,就是一長串文字貼進去就好了!可惜 Google 只有少部分服務提供,例如 Google Gemini。
  2. 開放授權協定 2.0(OAuth2):這是好幾家科技公司合作制定的「授權標準協定」,包括 Google 和 Facebook 等,目的是讓人可以用大廠的帳號登入其他網站。例如「使用Google 認證登入 Line」就省下每個網站登錄的麻煩。但如果你發現你的工作流突然沒工作,很大機率是 OAuth2 被 Google 踢掉了。雖然 Google 說在少數狀況下才會把你登出,但 n8n 社群回報常莫名其妙被踢掉,就要再次手動認證,造成不少麻煩。
  3. 服務帳戶(Service Account):顧名思義,這個帳戶(Account)不是提供人類使用,而是提供「服務」(Service)使用的,就是「機器對機器」認證,它難在要預先設好機器使用的權限,因為一台機器不應該像你一樣可以 100% 控制所有功能(至少別讓它幫你付錢!)。

😁 第一次看到這個名稱是不是以為用這個帳戶就可獲得 Google 特別的服務?它說人話我都配合,但它技術太高有說人話障礙,第一次使用 Google Cloud 時,發票上除了帳單金額都看不懂!

因為 n8n 是機器上的一個服務,所以我們應該使用 Service Account,讓服務有自己的帳號。

  • 授權對象:針對「應用程式或服務」,而非個人使用者。
  • 流程:為 n8n 建立一個專屬的「服務身分」。這個身分擁有自己的金鑰(通常是 JSON 格式),n8n 透過金鑰直接向 Google 驗證身分,並取得存取權。
  • 優點:金鑰不會過期,且不受個人帳號密碼變更或停用的影響。一旦設定完成,它就能穩定地運作,非常適合後台自動化。

重點就在「不會過期」,我們睡覺時,n8n 仍然在默默地工作,如果你有多個工作流在不同時間觸發,過期了就要一一重新登入,真要命!更麻煩是你搞不清楚是誰出的問題,被老闆罵!

開始申請 Service Account

分幾個步驟,從 Google Cloud Platform (GCP) 設定、n8n 的 Credential 設定,到授予權限,開始吧!

第一步:Google Cloud Platform (GCP) 設定

這是最關鍵的一步,因為大部分的設定都在這裡完成。

1. 建立一個新的 GCP 專案(Project)

新增專案或選擇現有專案開啓 Service Account
新增專案或選擇現有專案開啓 Service Account
  • 前往 Google Cloud Console
  • 點擊頂部的專案選擇器,選擇 New Project
  • 輸入一個有意義的專案名稱,例如 n8n-integrations,然後建立。

2. 啟用必要的 API

  • 在 GCP 控制台左側選單,找到 APIs & Services > Library
  • 根據你需要使用的 n8n 節點,搜尋並啟用對應的 API。例如:
    • Google Sheets:搜尋 Google Sheets API
    • Google Drive:搜尋 Google Drive API
    • Google Docs:搜尋 Google Docs API
  • 點擊 API 名稱,然後點選 Enable

每次打開 GCP 很麻煩,建議一次把常用服務的 API 都開好,例如:雲端硬碟 Drive、試算表 Sheets、文件 Docs、簡報 Slides、郵件 Gmail、通訊錄 People、任務清單 Tasks、行事曆 Calendar,在 n8n 使用時還要再分別建立 Credentials,但你短期不用再回到恐怖的 GCP 了。

3. 建立服務帳號(Service Account)

  • 在 GCP 左側選單,找到 IAM & Admin > Service Accounts
  • 點選 + Create Service Account
  • 輸入服務帳號名稱,例如 n8n-service-account,然後點選 Create and Continue
  • 這是 Service Account 最抽象的「權限」設定,和 OAuth2 個人權限不同,這是為 Service Account 設定的專屬權限。Grant this service account access to project 頁面,選擇一個角色(Role)。
    • 官方建議:為了安全起見,給予最少但足夠的權限。例如,如果你只用 Google Sheets,可以搜尋並選擇 Google Sheets EditorGoogle Sheets Reader。如果你不確定,可以先選擇 Editor,之後再根據需求調整。
    • 實際上,如果只有你一個人用的話,我都給最高權限,一面後來卡住找不出原因,原來是權限不夠啊!當然如果在多人用的環境,還是保守一點好。
  • 點選 Continue,然後在 Grant users access to this service account 頁面留空(因為你不需要其他人存取這個服務帳號),點選 Done

4. 產生服務帳號金鑰(JSON Key)

  • 回到 Service Accounts 頁面,點選你剛才建立的服務帳號名稱。
  • 切換到 Keys 標籤頁。
  • 點選 Add Key > Create new key
  • 選擇 JSON 格式,然後點選 Create
  • 你的瀏覽器會自動下載一個 JSON 檔案,這個檔案就是你的服務帳號金鑰。請務必妥善保管,不要外洩!

第二步:n8n Credentials 設定

這裡以 Google Sheets(試算表)為例,因為你在用 n8n 時常常會用到,你可以把它當資料庫用,存取資料。雖然前面在 GCP 已經把想用的服務都開啓了,但 n8n 中還說要重新對所有服務設立分別的 credentials。

1. 建立新的 Google Sheets Credential

  • 在 n8n 編輯器中,點選左下角的 Credentials(更簡單的是在工作流中拖進來一個 Google Sheets 節點,新增一個 Credentials,就不會搞錯)。
  • 點選 New Credential,搜尋並選擇 Google Sheets
  • Authentication 欄位,選擇 Service Account
  • Region:不用管,只有部分服務因為不是全世界提供所以要填寫由哪個地區提供。
  • Service Account Email:從 GCP 的 Service Account Details 裡面複製,這是一個形式很像 Email 但其實是假的 Email,因為 Google 的很多服務使用 Email 來授權,例如你要分享某個試算表給別人時就要輸入 Email。

2. 貼上 JSON 金鑰內容

  • 用文字編輯器開啟你剛才下載的 JSON 金鑰檔案。
  • 複製檔案中的所有內容,然後貼到 n8n 的 JSON Web Key 欄位中。
  • n8n 會自動從 JSON 內容中解析出 Client Email 和其他資訊。

3 設定 HTTP Request:

  • Set up for use in HTTP Request node:開啓,你就可以用 n8n 內建的 http request 節點來呼叫所有 Google 服務提供的 API(理解為什麼1)。
  • Scope(s):開啓上面選項就跳出這格,暫時不填沒關係,但使用 http request 時會出錯。如果你開啓的是我前面建議使用的 API,按照下面的貼,讓 n8n 全權使用,填上面的;只讓讀不讓改,填下面的(理解為什麼2)。
# 給你的 Service Account 全部權限
https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/spreadsheets,https://www.googleapis.com/auth/documents,https://www.googleapis.com/auth/presentations,https://mail.google.com/,https://www.googleapis.com/auth/contacts,https://www.googleapis.com/auth/tasks,https://www.googleapis.com/auth/calendar
Bash
# 只給你的 Service Account 讀的權限,不讓修改、寫入
https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/spreadsheets,https://www.googleapis.com/auth/documents,https://www.googleapis.com/auth/presentations,https://mail.google.com/,https://www.googleapis.com/auth/contacts,https://www.googleapis.com/auth/tasks,https://www.googleapis.com/auth/calendar
Bash

3. 儲存 Credential

  • 給這個 Credential 一個有意義的名稱,例如 Google Sheets Service Account
  • 點選 Save
  • 完成了。

第三步:授予服務帳號文件存取權限

這一步是許多人容易忽略的關鍵步驟,也是 Service Account 和 OAuth2 最大的不同點。OAuth2 憑證已經代表你的個人身分,所以你個人能存取的檔案,n8n 就能存取。但 Service Account 是一個獨立的身分,你必須手動分享檔案給它。

1. 複製服務帳號的電子郵件地址

  • 回到 GCP 控制台的 Service Accounts 頁面。
  • 你會看到你建立的服務帳號,例如 [email protected]
  • 複製這個完整的電子郵件地址。

2. 分享檔案給服務帳號

  • 打開你要讓 n8n 存取的 Google Sheets、Google Docs 或 Google Drive 資料夾。
  • 點選右上角的 Share
  • 在分享彈窗中,將你剛才複製的服務帳號電子郵件地址貼上,並設定其權限(例如 Editor)。
  • 點選 Send

完成以上三個步驟後,你的 n8n 流程就可以使用這個 Service Account Credential,穩定地存取被授權的 Google 服務與文件了。

Service Account 觀念不同但比較方便

n8n 告訴你大部分狀況下用 OAuth2 就足夠了,它的觀念比較像人類使用,同時 Google 也會告訴你 OAuth2 很穩定,只有在很少情況下被踢掉。但實務上,三不五時就會沒來由地被 Google 踢掉,而 n8n 出錯也不會回報,然後你也不知道你的服務沒有運作,假如這個服務是要去收集出現一次就消失的數據,或是每天觸發固定的動作,例如備份檔案,當這服務沒啓動,後果很慘。

所以我傾向不聽 n8n 和 Google 的,使用 Service Account 吧!而它難在 Google 的設定複雜、機器對機器的觀念不同:

  • 新增或開啓專案:大部分的網路服務沒有大到要開啓專案,進去就能取得認證了,就有點費解,是因為 Google 的服務太多了,它要求你用專案來管理。
  • 開啓 API 服務:多數的服務只有少少幾個 API,直接勾選就好,但 Google 的服務太多了,需要搜尋引擎找出來一一開啓。
  • 每個服務有一個 Service Account:你可以想象服務是個機器人,你可能有很多台機器人,所以每個要獨立的帳號。
  • 超長的服務金鑰:一般的 API Key 只有幾十個字,它的服務金鑰是超長的上百字。
  • 分地區:因為 Google 提供的是全世界的服務,雖然多數服務不限制。
  • 產生怪怪的 Email:因為 Google 各服務內部用 Email 分享權限。

你會發現,Google 這一套複雜是因為它把別人的服務放大了幾百倍,所以需要這麼高等級的管理,而複雜的 Google 混合複雜的 n8n,結果就是複雜到一塌糊塗。

不過按照這個流程完工,你就可以好好享受 n8n 帶給你的方便了。


註解

  1. Google 提供很多 API,可粗略把 API 當作一個「功能」,n8n 幫你整合常用功能,如果你要用它沒整合的功能,可以用「http request 節點」,就是讓 n8n 上網使用。如果沒勾,你的 service account 就只能使用已經提供的那些功能。 ↩︎
  2. 如果勾選了 Set up for use in HTTP Request node,要告訴它哪些服務的 API 准許使用,如果你勾選的超過我給你的範例,你可以問 AI 要怎麼填寫。 ↩︎

讓我們保持聯繫

推送 Push:有個資疑慮的您,按下網址列左方「鎖頭」開啟「通知」會收到通知

電子報 Subscribe:在上方框或側邊欄框中訂閱電子報,我會看到信箱,但不會發垃圾郵件。

合作 Cooperation:行銷、課程合作 請到 About 中填寫表單,留言、臉書專頁聯繫也可以

臉書專頁:疑問或聊天,請留言,或到臉書專頁「Simpro 學習控」關注及留言

訂閱電子報

約雙週更新,絕無垃圾郵件|記得到信箱查看驗證信

最有人氣

探索更多來自 六叔觀察站 | Uncle6 Observer 的內容

立即訂閱即可持續閱讀,還能取得所有封存文章。

Continue reading