SEC02-BP03 安全地儲存和使用機密 - 安全支柱

SEC02-BP03 安全地儲存和使用機密

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

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

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

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

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

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

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

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

常見的反模式:

  • 沒有輪換憑證。

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

  • 未加密儲存靜態憑證。

建立此最佳實務的優勢:

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

  • 透過 API 限制憑證的存取 (將其視為憑證自動販賣機)。

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

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

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

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

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

實作指引

以往,憑證用於向資料庫進行驗證,而第三方 API、字符和其他機密可能內嵌在原始程式碼或環境檔案中。AWS 提供數種機制以安全儲存這些憑證,自動輪換並稽核它們的使用情況。

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

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

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

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

憑證類型 描述 建議策略
IAM 存取金鑰 用於在工作負載內擔任 IAM 角色的 AWS IAM 存取和私有金鑰 取代:改用指派給運算執行個體的 IAM 角色 (例如 Amazon EC2AWS Lambda)。為了與需要存取您的 AWS 帳戶 中的資源的第三方進行互通,請詢問他們是否支援 AWS 跨帳戶存取權。對於行動應用程式,請考慮透過 Amazon Cognito 身分集區 (聯合身分) 使用臨時憑證。對於 AWS 外部執行的工作負載,請考慮 IAM Roles AnywhereAWS Systems Manager 混合啟用。關於容器,請參閱 Amazon ECS 任務 IAM 角色Amazon EKS 節點 IAM 角色
SSH 金鑰 用於手動或做為自動化程序的一部分登入 Linux EC2 執行個體的 Secure Shell 私有金鑰 取代:使用 AWS Systems ManagerEC2 Instance Connect 透過 IAM 角色提供對 EC2 執行個體的程式設計和手動存取。
應用程式和資料庫憑證 密碼 – 純文字字串 輪換:將憑證儲存在 AWS Secrets Manager 中並建立自動輪換 (如果可能)。
Amazon RDS 和 Aurora Admin 資料庫憑證 密碼 – 純文字字串 取代:使用 Secrets Manager 與 Amazon RDS 的整合Amazon Aurora。此外,某些 RDS 資料庫類型可以在某些使用案例中使用 IAM 角色而非密碼 (如需詳細資訊,請參閱 IAM 資料庫身分驗證)。
OAuth 字符 私密字符 – 純文字字串 輪換:將字符儲存在 AWS Secrets Manager 中並設定自動輪換。
API 字符和金鑰 私密字符 – 純文字字串 輪換:儲存 AWS Secrets Manager 中,並在可能的情況下建立自動輪換。

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

在很多情況下,工作負載需要儲存機密才能與其他服務和資源相互操作。AWS Secrets Manager 是專為安全管理這些憑證所打造的,可儲存、使用和輪換 API 字符、密碼和其他憑證。

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

擷取機密時,您可以使用 Secrets Manager 用戶端快取元件進行快取以供未來使用。擷取快取的秘密比從 Secrets Manager 中擷取要快。此外,由於呼叫 Secrets Manager API 會產生費用,因此使用快取可以降低成本。如需您可以擷取機密的所有方法,請參閱取得機密

注意

某些語言可能會要求您針對用戶端快取實作自己的記憶體內加密。

實作步驟

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

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

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

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

    2. 對於內嵌在原始程式碼中的 AWS 機密金鑰,請將其取代為與必要資源關聯的 IAM 角色。如果您部分的工作負載位於 AWS 之外,但需要 IAM 憑證來存取 AWS 資源,請考慮 IAM Roles AnywhereAWS Systems Manager 混合啟用

  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 角色,並且只將擔任該角色的存取權提供給一小組可操作的使用者子集。

資源

相關的最佳實務:

相關文件:

相關影片:

相關研討會: