在 Google Cloud 上開一個 GASLab 新 Project
搜尋 Secret Manager API 並啟用
啟用後進入密鑰管理員內建立密鑰
建立密鑰資訊
IAM 與管理 (身分與存取權限) 因為剛好就是該 GCP 專案擁有者,預設就有存取權限,假如有分享其他帳號存取,要在這邊進行授予專案存取權限
使用雲服務,當然就免不了會有費用支出,請參考 Secret Manager 定價
在 Google Apps Script 設定 oauth 授權範圍
Google Apps Script 會使用 oauth 去連接 GCP Secret Manager,要先設定 oauth 授權範圍。
Google Apps Script Project settings => 啟用 [在編輯器中顯示「appsscript.json」資訊清單檔案]
appsscript.json 完整資訊,oauthScopes 為手動加入
確定專案 ID,在 GCP 上專案資訊業上就可以找到,[專案編號] 或 [專案 ID] 都可以
存取流程大方向如下:組 API 網址 → 取得 OAuth Token → 發出 Request 取回 payload → 解析及解碼 payload → 回傳 Toekn
官方文章 - SecretPayload 提到 data 是 base64-encoded 字串,所以上述流程才會有 decode 動作
{
"timeZone": "Asia/Taipei",
"dependencies": {},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"oauthScopes": [
"https://www.googleapis.com/auth/script.external_request",
"https://www.googleapis.com/auth/cloud-platform"]
}
上述授權相關內容,可以參考官方文章 - Authorization Scopes 的 Set explicit scopes 章節
Google Apps Script 存取
存取流程大方向如下:組 API 網址 → 取得 OAuth Token → 發出 Request 取回 payload → 解析及解碼 payload → 回傳 Toekn
function getLineBotToken() {
let projectID = '請自行查詢 Project ID';
let secretName = 'LineBot_ChannelAccessToken';
let versionNumber = 'latest'; // 也可以填版號如 '1'、'2'
let endpoint = `https://secretmanager.googleapis.com/v1/projects/${projectID}/secrets/${secretName}/versions/${versionNumber}:access`;
// 取得 Apps Script 的 OAuth Token,身份驗證使用
let token = ScriptApp.getOAuthToken();
// API 呼叫
let response = UrlFetchApp.fetch(endpoint,
{
headers: {
Authorization: 'Bearer ' + token,
Accept: 'application/json',
}
});
// payload.data 欄位是 base64 byte[]
let data = JSON.parse(response.getContentText())['payload']['data'];
// 將 base64 byte[] 解碼為 UTF-8 byte[]
let decoded = Utilities.base64Decode(data);
// 把 UTF-8 byte[] 轉回字串
return Utilities.newBlob(decoded).getDataAsString();
}
實際執行










沒有留言:
張貼留言