Secret manager, 用來存取機密的資訊
像是api key, db password,..
以專案來說 我們會把這些內容設定在環境變數(env), 並且在.gitignore排除這些env檔
而上雲後需要用到secrect value的服務則指向secret manager的key, 通常也有version綁定latest
而這邊就會出現一個狀況
既然機密資料不會進git, 那在gcp那端的secrect value是怎麼給予的
這邊先給一個設定secrect 的tf範例
# 1. 建立 Secret 外殼
resource "google_secret_manager_secret" "db_password" {
secret_id = "bank-ai-db-password"
replication {
auto {}
}
}
# 2. 授權給 Cloud Run 的 Service Account 讓他有權限「讀取」
resource "google_secret_manager_secret_iam_member" "run_accessor" {
secret_id = google_secret_manager_secret.db_password.id
role = "roles/secretmanager.secretAccessor"
member = "serviceAccount:${google_service_account.bff_sa.email}"
}
如此設定SA有讀取secret的權限, 接著就來到怎麼給予secret value
A. 透過gcp console介面
當terraform apply後 就會在secret manager出現一個密鑰的容器
就可以手動對這個key 新增版本給予值

B 透過CLI 來操作
echo -n "你的超祕密Token" | gcloud secrets versions add bank-ai-db-password --data-file=-
或是綁定在CICD中 把secret值存取到像是repo的vault, 然後在CICD的步驟中 使用上面的gcloud指令賦予值
另外secret manager也是會有微小的費用 可參照doc
原本我們會用db存取向量化後的資料, 然後讀取db時就需要用到db_password,
不過使用cx studio agent後我們不走自建RAG的搜索知識庫, 也就沒有存取的需求
今天也就沒有要實作的內容, 反而是把之前部分在RAG的規劃comment起來 減少資源