星期日, 7月 26, 2020

使用 GCP 服務帳戶金鑰跨專案存取 Cloud Storage 小記

使用 GCP 服務帳戶金鑰跨專案存取 Cloud Storage 小記


不同的雲端平臺, 對帳號或是專案有不同的機制來進行區隔, 一般來說可能是爲了專案的區別或是財務的需求來進行區隔, 以下是個人的想法

  • Azure

    • 使用不同的目錄或是資源群組來進行區隔

  • AWS

    • 使用不同的 AWS ID 來進行區隔

  • GCP

    • 使用不同的專案或是帳單來進行區隔


GCP 在針對不同專案的開發或是執行上, 建立不同的專案會是一個很好的區隔機制, 但是有的時候, 不同的專案可能要存取到共同的資源.


今天要來測試的就是使用服務帳戶金鑰來進行跨專案存取 Cloud Storage 


實驗方式

  • 專案 A

    • 建立 Service Account, 產生金鑰, 設定相關權限 

    • 建立 Cloud Storage 

  • 專案 B

    • 建立 Compute Engine, 並掛載 Project A 的 Service Account, 測試是否可以跨專案寫入


情境



登入 GCP console


==== 在 Project A ====


先建立服務帳戶與金鑰

點選 IAM 與管理 -- > 服務帳戶



點選 建立服務帳戶

輸入 服務帳戶名稱

點選 建立



這邊測試的關係先給予 Storage 管理員 的角色, 實際上的權限, 按照專案的需求來調整

點選 繼續




點選 完成



接下來建立金鑰


點選剛剛建立的服務帳戶動作

點選 建立金鑰


選取金鑰類型

這邊選取 JSON

點選 建立


這個時候會出現儲存金鑰的視窗

將金鑰進行儲存



完成 JSON 金鑰的建立


接下來建立 Cloud Storage


點選 Storage -- > 點選 瀏覽器



點選 建立值區


輸入 名稱 / 選取資料的儲存位置 / 級別 / 存取權

點選 建立


  • 這邊要注意的是, 預設儲存位置是 Multi-region, 如果是實驗目的, 可以選取 Region(單一地區)比較省錢


好的, 目前在 Project A 已經有 Service Account with JSON Key 以及 Cloud Storage Bucket

接下來進行 Project B 的實驗


==== 在 Project B ====


切換到 Project B


首先來建立 Compute Engine

點選 Compute Engine -- > 點選 VM 執行個體



點選 建立



輸入 VM 名稱

選取機器類型

點選 建立



  • 這邊可以觀察到建立 VM 的時候是 Project B 的 default service account


點選剛剛建立的 VM 連接的 SSH 進行連接



在終端機畫面

先觀察帳戶資訊, 目前是預設帳戶



嘗試連接到 Project A 的 Cloud Storage

使用 gsutil  ls  gs://PROJECT_A_BUCKET 



  • AccessDeniedException - 因為沒有 storage.objects.list 權限


將剛剛 Project A 的 Service Account JSON KEY 上傳到 Project B 的 VM

儲存為 project-a.json


啟用 Service account

使用 gcloud auth activate-service-account  --key-file  xxxxx.json



  • Key file 請換成剛剛上傳的 JSON KEY


再次觀察資訊



這個時候會觀察到 Active account 已經調換了


再次進行測試

這個時候就會發現, 可以存取 Project A 的 Cloud Storage Bucket 了




這樣也算是又前進一小步

~ enjoy it



Reference:

沒有留言: