所以我認為最簡單的解決方案是我的問題是將 AWS 用于所有事情,但我想了解什么是可能的:
我了解 IAM 角色可以與 AWS 服務(例如 EC2 或 Lambda)相關聯,以便在該服務中運行的應用程式/函式可以檢索憑證以簽署對其他 AWS 服務的 API 請求。我有一個以前在 Heroku 上運行并使用 Amazon S3 的應用程式。目前,我為此應用程式設定了一個 IAM 用戶,該用戶使用與 IAM 用戶帳戶關聯的訪問密鑰簽署對 AWS API 的請求。我認為最佳實踐是對應用程式源代碼 AWS API 呼叫使用 IAM 角色而不是用戶,但是是否可以為托管在 AWS 之外的應用程式進行設定,或者我是否需要將應用程式遷移到 AWS EC2為了使用 IAM 角色?
uj5u.com熱心網友回復:
應用程式的托管位置無關緊要,但要承擔 IAM 角色,您將需要 IAM 憑證(雞和蛋)。通常,您會為您的應用程式設計一種安全的方式來檢索這些基本憑據。這是在 AWS 之外運行計算的一個缺點(因為它不能自動承擔 IAM 角色)。
一種選擇是創建一個 IAM 用戶,其唯一權限是能夠承擔給定的 IAM 角色。將這些 IAM 用戶憑證安全地提供給您在 AWS 之外的應用程式,并讓應用程式承擔 IAM 角色,理想情況下,ExternalId您的應用程式本身也安全地存盤和安全檢索。此外,您可以管理對 IAM 角色的訪問,例如定義哪些委托人可以承擔該角色,以及在哪些條件下。
uj5u.com熱心網友回復:
來自Heroku 檔案:
由于您的 S3 憑證的敏感性,您永遠不應將它們提交給版本控制。相反,將它們設定為將使用它們的 Heroku 應用程式的配置變數的值。
使用
heroku config:set來設定兩個鍵
heroku config:set AWS_ACCESS_KEY_ID=xxx AWS_SECRET_ACCESS_KEY=yyy
Adding config vars and restarting app... done, v21
AWS_ACCESS_KEY_ID => xxx
AWS_SECRET_ACCESS_KEY => yyy
以上符合 AWS 自己管理 AWS 訪問密鑰的最佳實踐,特別是不要直接在代碼中嵌入訪問密鑰。
您不能使用 IAM 角色,因為它是由 AWS 在 AWS 之外自動選取的,而無需專門指定憑證。
您的下一個最佳選擇是環境變數(如上所述),為具有授予他們需要從 S3 讀取的檔案所需的最低權限的角色的用戶指定訪問密鑰 ID 和秘密訪問密鑰,例如特定的存盤桶名稱、特定的檔案、如果可能的話,甚至是特定的 IP 地址,等等。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/327449.html
