本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AWS Secrets Manager 最佳实践
Secrets Manager 提供了在您开发和实施自己的安全策略时需要考虑的大量安全功能。以下最佳实操是一般准则,并不代表完整的安全解决方案。这些最佳实操可能不适合您的环境或不满足您的环境要求,请将其视为有用的考虑因素而不是惯例。
请考虑下面存储和管理密钥的最佳实践:
将凭证和其他敏感信息存储在 AWS Secrets Manager 中
Secrets Manager 可帮助您改善安全状况和合规性,并降低未经授权访问您的敏感信息的风险。Secrets Manager 使用您拥有并存储在 AWS Key Management Service(AWS KMS)中的加密密钥对静态密钥进行加密。当您检索密钥时,Secrets Manager 会解密密钥并通过 TLS 将其安全地传输到您的本地环境。有关更多信息,请参阅 创建 AWS Secrets Manager 密钥。
查找代码中不受保护的密钥
CodeGuru Reviewer 与 Secrets Manager 集成,可使用密钥检测器查找代码中不受保护的密钥。密钥检测器会搜索硬编码密码、数据库连接字符串、用户名等。有关更多信息,请参阅 使用 Amazon CodeGuru Reviewer 查找代码中不受保护的密钥。
Amazon Q 可以扫描您的代码库以查找安全漏洞和代码质量问题,从而改善整个开发周期内应用程序的状况。有关更多信息,请参阅《Amazon Q 开发者版用户指南》中的 Scanning your code with Amazon Q。
为您的密钥选择一个加密密钥
在大多数情况下,我们建议使用 aws/secretsmanager
AWS 托管密钥来对密钥进行加密。使用它不产生任何费用。
为了能够从其他账户访问密钥或将密钥政策应用于加密密钥,请使用客户自主管理型密钥对密钥进行加密。
-
在密钥政策中,将值
secretsmanager.<region>.amazonaws.com
分配给 kms:ViaService 条件键。这会将密钥的使用限制为仅限来自 Secrets Manager 的请求。 -
为了进一步将密钥的使用限制为仅来自 Secrets Manager 且具有正确上下文的请求,请通过创建以下项将 Secrets Manager 加密上下文中的键或值用作使用 KMS 密钥的条件:
有关更多信息,请参阅 AWS Secrets Manager 中的密钥加密和解密。
使用缓存来检索密钥
为了最有效地使用您的密钥,我们建议您使用以下受支持的 Secrets Manager 缓存组件之一来缓存您的密钥并仅在需要时更新它们:
在 Amazon Elastic Kubernetes Service 中使用 AWS Secrets Manager 密钥
使用 AWS Secrets Manager 代理 标准化 AWS Lambda、Amazon Elastic Container Service、Amazon Elastic Kubernetes Service 和 Amazon Elastic Compute Cloud 等环境中 Secrets Manager 密钥的使用。
轮换您的 密钥
如果您很长一段时间未更改密钥,密钥泄露的可能性就会增大。使用 Secrets Manager,您可以设置每四小时自动轮换一次。Secrets Manager 提供了两种轮换策略:单用户 和 交替用户。有关更多信息,请参阅 轮换 AWS Secrets Manager 密钥。
降低使用 CLI 的风险
使用 AWS CLI 调用 AWS 操作时,您将在命令 Shell 中输入这些命令。大多数命令 shell 都提供了可能会泄露您的密钥的功能,例如日志记录和查看上次输入的命令的功能。在使用 AWS CLI 输入敏感信息之前,请务必 降低使用 AWS CLI 存储 AWS Secrets Manager 密钥的风险。
限制对密钥的访问
在控制对您的密钥的访问的 IAM 策略语句中,使用最低权限访问原则。您可以使用 IAM 角色和策略、资源策略和基于属性的访问权限控制(ABAC)。有关更多信息,请参阅 AWS Secrets Manager 的身份验证和访问控制。
阻止对密钥的广泛访问
在允许操作 PutResourcePolicy
的身份策略中,我们建议您使用 BlockPublicPolicy: true
。这种情况意味着只有在策略不允许广泛访问的情况下,用户才能将资源策略附加到密钥。
Secrets Manager 使用 Zelkova 自动推理来分析资源策略,以确定是否存在宽泛访问权限问题。有关 Zelkova的更多信息,请参见 AWS 安全博客上的 AWS 如何使用自动化推理帮助您实现大规模的安保状况
以下示例显示了如何使用 BlockPublicPolicy
。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "secretsmanager:PutResourcePolicy", "Resource": "
SecretId
", "Condition": { "Bool": { "secretsmanager:BlockPublicPolicy": "true" } } } }
谨慎使用策略中的 IP 地址条件
在允许或拒绝访问 Secrets Manager 的策略语句中指定 IP 地址条件运算符或 aws:SourceIp
条件键时,请务必小心。例如,如果您将一个策略附加到密钥,从而限制从公司网络 IP 地址范围中访问该密钥的 AWS 操作,则以 IAM 用户身份从公司网络中调用的请求可以正常工作。但是,如果允许其他服务代表您访问密钥,例如,当您用 Lambda 函数启用轮换时,该函数将从 AWS 内部地址空间调用 Secrets Manager 操作。受该策略影响并使用 IP 地址筛选器的请求将会失败。
此外,当请求来自 Amazon VPC 终端节点时,aws:sourceIP
条件键也不起作用。要限制对特定 VPC 终端节点的请求,请使用 使用 VPC 端点条件限制请求。
使用 VPC 端点条件限制请求
要允许或拒绝对来自特定 VPC 或 VPC 终端节点的请求的访问,请使用 aws:SourceVpc
来限制对来自指定 VPC 的请求的访问,或 aws:SourceVpce
来限制对来自指定 VPC 终端节点的请求的访问。请参阅 示例:权限和 VPC。
-
aws:SourceVpc
将访问限制为来自指定 VPC 的请求。 -
aws:SourceVpce
将访问限制为来自指定 VPC 终端节点的请求。
如果在允许或拒绝访问 Secrets Manager 密钥的资源策略语句中使用这些条件键,可能会无意中拒绝访问代表您使用 Secrets Manager 访问密钥的服务。只有一部分 AWS 服务可以使用 VPC 内的终端节点运行。如果将密钥的请求限制为 VPC 或 VPC 终端节点,则从未针对该服务配置的服务中调用 Secrets Manager 可能会失败。
请参阅 使用 AWS Secrets Manager VPC 终端节点。
复制密钥
Secrets Manager 可以自动将您的密钥复制到多个 AWS 区域,以满足您的恢复能力或灾难恢复要求。有关更多信息,请参阅 跨区域复制 AWS Secrets Manager 密钥。
监控密钥
Secrets Manager 使您能够通过与 AWS 日志、监控和通知服务集成来审计和监控密钥。有关更多信息,请参阅:
在私有网络上运行基础设施
我们建议您在无法从私有网络访问的专用网络上运行尽可能多的基础设施。您可以通过创建接口 VPC 终端节点在 VPC 与 Secrets Manager 之间建立私有连接。有关更多信息,请参阅 使用 AWS Secrets Manager VPC 终端节点。