解決 GCP storage 取得資料發生 blocked by CORS policy

透過 GCP Storage 儲存檔案,在前端呈現時出現了 CORS 問題

錯誤訊息: Access to fetch at url from origin url has been blocked by CORS policy: NO ‘Access-Control-Allow-Origin’ header is present on the requested resource. …

原因是在於,GCP Storage 為了預防惡意取用而預設不開啟。

這裡紀錄如何透過 Gsutil 開啟 GCP storage 跨域請求

首先,登入 GCP 開啟 Cloud shell

檢查 storage 是否有設定 cors

首先,先在 storage 查看 storage 的 gsutil 連結

透過以下指令取得 cors 設定狀況

gsutil cors get gs://example

如果未設定,會得到以下訊息

gs://example/ has no CORS configuration.

建立設定檔

vim cors-json-file.json

貼上以下內容:

[
    {
      "origin": ["*"],
      "responseHeader": ["Content-Type"],
      "method": ["GET", "HEAD", "DELETE"],
      "maxAgeSeconds": 3600
    }
]

如果要限制請求網址來源,可以在 origin 將 * 改成網址

套用設定

gsutil cors set cors-json-file.json gs://example

套用完成後,再次檢查 cors 設定

gsutil cors get gs://example

//取得以下回應表示設定完成
[{"maxAgeSeconds": 3600, "method": ["GET", "HEAD", "DELETE"], "origin": ["*"], "responseHeader": ["Content-Type"]}]

其他變更 cors 方式,可以參考官方說明 https://cloud.google.com/storage/docs/configuring-cors?hl=zh-tw