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