SEC02-BP03 安全地存放和使用秘密 - AWS 建構良好的架構

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

SEC02-BP03 安全地存放和使用秘密

工作負載需要能夠自動向資料庫、資源和第三方資源證明其身分。這是使用秘密存取憑證來完成的,例如API存取金鑰、密碼和OAuth權杖。使用專用服務來儲存、管理和輪換這些憑證有助於降低這些憑證遭到入侵的可能性。

預期成果:實作安全管理應用程式憑證的機制,以達成下列目標:

  • 識別工作負載需要何種機密。

  • 盡可能以短期憑證取代長期憑證,來減少所需的長期憑證數目。

  • 建立安全的存放區並自動輪換其餘的長期憑證。

  • 稽核對存在於工作負載中的機密的存取。

  • 持續監控以確認原始程式碼在開發過程中沒有內嵌機密。

  • 降低憑證遭意外洩露的可能性。

常見的反模式:

  • 沒有輪換憑證。

  • 將長期憑證存放在原始程式碼或設定檔中。

  • 未加密儲存靜態憑證。

建立此最佳實務的優勢:

  • 已加密儲存靜態和傳輸中的機密。

  • 透過 封鎖對憑證的存取 API(將其視為憑證販賣機 )。

  • 稽核並記錄對憑證的存取 (包括讀寫)。

  • 區隔顧慮:由不同的元件執行憑證輪換,而該元件可與其餘的架構分離。

  • 自動將機密隨需散發到軟體元件並集中進行輪換。

  • 可以精細的方式控制對憑證的存取。

未建立此最佳實務時的風險暴露等級:高

實作指引

過去,用於驗證資料庫、第三方 、APIs權杖和其他秘密的憑證可能內嵌在原始程式碼或環境檔案中。 AWS 提供數種機制,以安全地存放這些憑證、自動輪換憑證,以及稽核其使用量。

著手機密管理的最佳方法是遵循移除、取代和輪換的指引。最安全的憑證是您不用儲存、管理或處理的憑證。有些憑證對於工作負載的運作不再是必要的,故能夠安全移除。

對於工作負載適當運作仍舊是必要的憑證,可能有機會以暫時或短期憑證取代長期憑證。例如,考慮使用IAM角色將長期憑證取代為臨時憑證,而不是硬式編碼 AWS 秘密存取金鑰。

部分長期存留的機密可能無法移除或取代。您可以將這些機密儲存在 AWS Secrets Manager 之類的服務中,進行集中儲存、管理和定期輪換。

對工作負載的原始程式碼和設定檔的稽核,可能顯現多種類型的憑證。下表概述處理常見憑證類型的策略:

憑證類型 描述 建議策略
IAM 存取金鑰 AWS IAM 用於在工作負載中擔任IAM角色的存取和秘密金鑰 取代:改為使用指派給運算執行個體 (例如 Amazon EC2AWS LambdaIAM的角色。如需與需要存取您 中資源的第三方互操作性 AWS 帳戶,請詢問他們是否支援AWS 跨帳戶存取 。對於行動應用程式,請考慮透過 Amazon Cognito 身分集區 (聯合身分) 使用暫時憑證。對於在 之外執行的工作負載 AWS,請考慮 IAM Roles AnywhereAWS Systems Manager Hybrid Activations。
SSH 金鑰 用於手動或作為自動化程序一部分登入 Linux EC2執行個體的安全 Shell 私有金鑰 取代:使用 AWS Systems ManagerEC2 Instance Connect 提供使用IAM角色對EC2執行個體的程式設計和人工存取。
應用程式和資料庫憑證 密碼 – 純文字字串 輪換:將憑證儲存在 AWS Secrets Manager 中並建立自動輪換 (如果可能)。
Amazon RDS和 Aurora Admin 資料庫憑證 密碼 – 純文字字串 取代:使用 Secrets Manager 與 Amazon 或 Amazon Aurora 的整合RDShttps://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/rds-secrets-manager.html此外,某些RDS資料庫類型可以在某些使用案例中使用IAM角色而非密碼 (如需更多詳細資訊,請參閱IAM資料庫身分驗證 )。
OAuth 權杖 私密字符 – 純文字字串 輪換:將字符儲存在 AWS Secrets Manager 中並設定自動輪換。
API 權杖和金鑰 私密字符 – 純文字字串 輪換:儲存 AWS Secrets Manager 中,並在可能的情況下建立自動輪換。

常見的反模式是在原始程式碼、組態檔案或行動應用程式內內嵌IAM存取金鑰。當需要IAM存取金鑰才能與服務通訊時 AWS ,請使用暫時 (短期) 安全憑證 。這些短期憑證可以透過執行個體IAM的角色EC2、Lambda 函數的執行角色、行動使用者存取的 Cognito IAM角色,以及 IoT 裝置的 IoT Core 政策提供。 IoT 與第三方互動時,偏好將存取權委派給具有帳戶資源必要存取權IAM的角色,而不是設定IAM使用者,並將該使用者的秘密存取金鑰傳送給第三方。

在許多情況下,工作負載需要儲存與其他 服務和資源互操作所需的秘密。 AWS Secrets Manager 旨在安全地管理這些憑證,以及權API杖、密碼和其他憑證的儲存、使用和輪換。

AWS Secrets Manager 提供五種金鑰功能,以確保敏感憑證的安全儲存和處理:靜態加密傳輸中的加密全面稽核精細存取控制可擴展憑證輪換。來自 AWS 合作夥伴的其他機密管理服務,或本機開發並提供類似功能和保證的解決方案也可接受。

實作步驟

  1. 使用 Amazon CodeGuru等自動化工具識別包含硬式編碼憑證的程式碼路徑。

    1. 使用 Amazon CodeGuru 掃描程式碼儲存庫。檢閱完成後,在 Type=Secrets 中篩選 CodeGuru 以尋找有問題的程式碼行。

  2. 識別可移除或取代的憑證。

    1. 識別不再需要的憑證並標示以進行移除。

    2. 對於內嵌在原始程式碼中的 AWS 秘密金鑰,請將它們取代為與必要資源相關聯的IAM角色。如果部分工作負載在外部,AWS 但需要IAM憑證才能存取 AWS 資源,請考慮 IAM Roles AnywhereAWS Systems Manager Hybrid Activations。

  3. 對於其他第三方長期存留且需要使用輪換策略的機密,將 Secrets Manager 整合至程式碼中以在執行時期擷取第三方機密。

    1. CodeGuru 主控台可以使用探索的憑證,在 Secrets Manager 中自動建立秘密

    2. 將 Secrets Manager 的機密擷取整合至您的應用程式程式碼中。

      1. 無伺服器 Lambda 函數可以使用與語言無關的 Lambda 延伸

      2. 對於EC2執行個體或容器, AWS 提供範例用戶端程式碼,用於以多種熱門程式設計語言從 Secrets Manager 擷取秘密

  4. 定期審查您的程式碼庫並重新掃描,以確認程式碼中未加入新的機密。

    1. 考慮使用 git-secrets 之類的工具以防將新機密認可到您的原始程式碼儲存庫。

  5. 監控 Secrets Manager 活動以尋找非預期使用、不當私密存取或嘗試刪除機密的跡象。

  6. 減少對憑證的人員接觸。將讀取、寫入和修改憑證的存取權限制為專門用於此目的IAM的角色,並且只提供存取以擔任操作使用者的一小部分的角色。

資源

相關的最佳實務:

相關文件:

相關影片:

相關研討會: