SEC02-BP03 安全地儲存和使用機密
工作負載需要能夠自動向資料庫、資源和第三方資源證明其身分。這需使用私密存取憑證來完成,例如 API 存取金鑰、密碼和 OAuth 字符。使用專用服務來儲存、管理和輪換這些憑證有助於降低這些憑證遭到入侵的可能性。
預期成果:實作安全管理應用程式憑證的機制,以達成下列目標:
-
識別工作負載需要何種機密。
-
盡可能以短期憑證取代長期憑證,來減少所需的長期憑證數目。
-
建立安全的存放區並自動輪換其餘的長期憑證。
-
稽核對存在於工作負載中的機密的存取。
-
持續監控以確認原始程式碼在開發過程中沒有內嵌機密。
-
降低憑證遭意外洩露的可能性。
常見的反模式:
-
沒有輪換憑證。
-
將長期憑證存放在原始程式碼或設定檔中。
-
未加密儲存靜態憑證。
建立此最佳實務的優勢:
-
已加密儲存靜態和傳輸中的機密。
-
透過 API 限制憑證的存取 (將其視為憑證自動販賣機)。
-
稽核並記錄對憑證的存取 (包括讀寫)。
-
區隔顧慮:由不同的元件執行憑證輪換,而該元件可與其餘的架構分離。
-
自動將機密隨需散發到軟體元件並集中進行輪換。
-
可以精細的方式控制對憑證的存取。
未建立此最佳實務時的風險暴露等級:高
實作指引
以往,憑證用於向資料庫進行驗證,而第三方 API、字符和其他機密可能內嵌在原始程式碼或環境檔案中。AWS 提供數種機制以安全儲存這些憑證,自動輪換並稽核它們的使用情況。
著手機密管理的最佳方法是遵循移除、取代和輪換的指引。最安全的憑證是您不用儲存、管理或處理的憑證。有些憑證對於工作負載的運作不再是必要的,故能夠安全移除。
對於工作負載適當運作仍舊是必要的憑證,可能有機會以暫時或短期憑證取代長期憑證。例如,與其對 AWS 私密存取金鑰進行硬式編碼,考慮使用 IAM 角色以臨時憑證取代長期憑證。
部分長期存留的機密可能無法移除或取代。您可以將這些機密儲存在 AWS Secrets Manager 之類的服務中,進行集中儲存、管理和定期輪換。
對工作負載的原始程式碼和設定檔的稽核,可能顯現多種類型的憑證。下表概述處理常見憑證類型的策略:
憑證類型 | 描述 | 建議策略 |
---|---|---|
IAM 存取金鑰 | 用於在工作負載內擔任 IAM 角色的 AWS IAM 存取和私有金鑰 | 取代:改用指派給運算執行個體的 IAM 角色 (例如 Amazon EC2 或 AWS Lambda)。為了與需要存取您的 AWS 帳戶 中的資源的第三方進行互通,請詢問他們是否支援 AWS 跨帳戶存取權。對於行動應用程式,請考慮透過 Amazon Cognito 身分集區 (聯合身分) 使用臨時憑證。對於 AWS 外部執行的工作負載,請考慮 IAM Roles Anywhere 或 AWS Systems Manager 混合啟用。關於容器,請參閱 Amazon ECS 任務 IAM 角色或 Amazon EKS 節點 IAM 角色。 |
SSH 金鑰 | 用於手動或做為自動化程序的一部分登入 Linux EC2 執行個體的 Secure Shell 私有金鑰 | 取代:使用 AWS Systems Manager |
應用程式和資料庫憑證 | 密碼 – 純文字字串 | 輪換:將憑證儲存在 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 會產生費用,因此使用快取可以降低成本。如需您可以擷取機密的所有方法,請參閱取得機密。
注意
某些語言可能會要求您針對用戶端快取實作自己的記憶體內加密。
實作步驟
-
使用 Amazon CodeGuru
等自動工具識別包含硬式編碼憑證的程式碼路徑。 -
使用 Amazon CodeGuru 掃描您的程式碼儲存庫。檢閱完成後,在 CodeGuru 中篩選 Type=Secrets 以尋找有問題的程式碼行。
-
-
識別可移除或取代的憑證。
-
識別不再需要的憑證並標示以進行移除。
-
對於內嵌在原始程式碼中的 AWS 機密金鑰,請將其取代為與必要資源關聯的 IAM 角色。如果您部分的工作負載位於 AWS 之外,但需要 IAM 憑證來存取 AWS 資源,請考慮 IAM Roles Anywhere
或 AWS Systems Manager 混合啟用。
-
-
對於其他第三方長期存留且需要使用輪換策略的機密,將 Secrets Manager 整合至程式碼中以在執行時期擷取第三方機密。
-
CodeGuru 主控台可以使用已探索的憑證自動在 Secrets Manager 中建立機密
。 -
將 Secrets Manager 的機密擷取整合至您的應用程式程式碼中。
-
無伺服器 Lambda 函數可以使用與語言無關的 Lambda 延伸。
-
對於 EC2 執行個體或容器,AWS 提供範例用戶端程式碼,可以數種熱門的程式設計語言從 Secrets Manager 擷取機密。
-
-
-
定期審查您的程式碼庫並重新掃描,以確認程式碼中未加入新的機密。
-
考慮使用 git-secrets
之類的工具以防將新機密認可到您的原始程式碼儲存庫。
-
-
監控 Secrets Manager 活動以尋找非預期使用、不當私密存取或嘗試刪除機密的跡象。
-
減少對憑證的人員接觸。將讀寫和修改憑證的存取權限於專門用於此用途的 IAM 角色,並且只將擔任該角色的存取權提供給一小組可操作的使用者子集。
資源
相關的最佳實務:
相關文件:
相關影片:
相關研討會: