iT邦幫忙

0

使用C# 讀取 AWS S3 資訊, Access key 該儲存在哪裡呢

  • 分享至 

  • xImage

我是參考此篇教學文
https://codewithmukesh.com/blog/working-with-aws-s3-using-aspnet-core/

提到原本C#專案儲存金鑰等資訊都是儲存在appsettings.json,在專案執行時在從appsettings.json 提取key,但AWS提供更安全的方式是存在本地端。目前理解這種作法就是把金鑰另外儲存在其他檔案,這樣為何會比較安全,是因為有加密過?

還有若是以這樣的形式儲存,在部屬時不也是連同檔案都要一起放在server嗎?

但如果選擇以 AWS Elastic Beanstalk 方式部屬,這種方式還可行嗎?

主要是目前開發經驗都是把key儲存在appsettings.json,想請教這兩種方式的差異。
還有是否有儲存 Access key 在appsettings.json的範例

powerc iT邦新手 1 級 ‧ 2023-10-20 15:07:03 檢舉
環境變數是一種,或是如果你的部署環境都是在AWS下,比如AWS的EC2+S3,那可以直接用IAM設定role之類的做管理,這樣連access key都不用,利用IAM驗證即可。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
sponge1220
iT邦新手 4 級 ‧ 2023-10-22 20:12:18
最佳解答

儲存外部變數的方法

你提到的是 .NET 設定外部變數時存放檔案的地方,

  • appsettings.json
  • Environment Variables

appsettings.json

明文儲存的設定檔,在編譯後發行的部署檔仍然會有 appsettings.json 的存在,一般會用來儲存資料庫連接字串或是相關的服務金鑰。

這裡的風險有兩點:

  1. 有可能將正式環境的 appsettings.json 一起存放於 git 的管理,而其是明文儲存因此有可能造成機敏金曜的外流。
  2. 部署到機器後,appsettings.json 依然是明文儲存若該機器被錯誤的設置有可能造成機敏金鑰的外流。

Environment Variables

又稱環境變數,一般不論在 EC2、Azure App Service... 都可以設置,他儲存於機器本身因此不會存於 git,而一般開發者也不會有正式環境的訪問權限,因此相較放於 appsettings.json 的確更為安全。

外部變數該放哪裡,如何放?

開發時依然可以使用 appsettings.json,正式環境時可以使用 Environment Variables 覆蓋 appsettings.json 上的設定,在 .NET 的設計上你可以用同名的 Environment Variables 覆蓋掉 appsettings.json,Environment Variables 的優先度更高。

Environment Variables 的命名規則是雙下滑線 _ 來連接,如 AWS__Region

舉例:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "AWS": {
    "Profile": "s3-dotnet-demo",
    "Region": "ap-south-1"
  }
}

你可以在 Environment Variables 設定

AWS__Region=ap-south-2

這樣在啟動時,讀取到的區域就會是 ap-south-2 而不是 ap-south-1,appsettings.json 內的變數可作為開發方便使用,程式碼都不需要更改就可以讀取寫在 Environment Variables 的變數。

結論

單看 .NET 變數來看,使用 appsetting.json 依然是個好方案,可以方便進行開發與測試而在正式環境時再設定環境變數就可。

至於 AWS 也有提供的資源間的認證方式,可以在不在程式內設定任何金鑰就容許連接,這偏向 AWS 的驗證方式而與 .NET 本身無關,這裡可以參考 AWS 不同資源間的 IAM 設定,這裡就簡單帶過而已。

感謝你的說明!!

很高興能釐清你的疑問

我要發表回答

立即登入回答