本指南介绍了使用 Secret Manager 时的一些最佳做法。该指南并未列出所有建议,我们建议您先查看平台概览,从整体上了解 Google Cloud 环境和 Secret Manager 概览,然后再阅读本指南。
访问权限控制
对 Secret Manager API 的访问受 IAM 保护。向 Secret 授予权限时,请遵循最小权限原则。
- 只有安全的超级用户账号拥有组织所有权。
- 按照确定 Google Cloud 着陆区的资源层次结构中所述,将应用和环境(预演/生产环境)细分为单独的项目。这有助于通过项目级 IAM 绑定来隔离环境,并确保配额独立地强制执行。
- 选择具有最低限度的必要权限的精选角色,或者根据需要创建自定义角色。
- 如果许多服务的密文位于单个项目中,请使用密文级 IAM 绑定或 IAM 条件来限制对必要的密文子集的访问权限。
- IAM Recommender 可以进一步协助识别特权过高的 IAM 绑定。
需要凭据才能向 Secret Manager API 进行身份验证。所有客户端库都使用类似的策略来查找称为“应用默认凭据”的凭据。
- 在本地开发时,请使用
gcloud auth application-default login
。这将创建一个包含客户端库自动选取凭据的文件。 - 在 Compute Engine 和其他 Google Cloud 计算平台(如 Cloud Functions)上,客户端库通过实例元数据服务器获取凭据。
- 在 GKE 上,Workload Identity 也通过元数据服务提供凭据。
- 在 Amazon Web Services 或 Microsoft Azure 等其他平台上,请考虑设置工作负载身份联合,使用现有身份机制向 Google Cloud API 进行身份验证。
所有这些方法都优先于导出服务账号凭据,因为它们不需要在 Secret Manager API 之外安全地存储和访问其他密文。
编码实践
通过文件系统或通过环境变量将 Secret 传递给应用很常见,但由于以下原因,应尽可能避免:
- 在可以通过文件系统访问密文时,目录遍历攻击等应用漏洞的严重级别可能更高,因为攻击者可能会获得读取密文材料的权限。
- 在通过环境变量使用密文时,配置错误(例如启用调试端点或包含记录进程环境详细信息的依赖项)可能会泄露密文。
- 在将密文材料同步到其他数据存储区(如 Kubernetes Secret)时,请考虑该数据存储区的访问权限控制,例如:
- 数据存储区是否会扩展密文的访问权限?
- 可以审核对密钥的访问吗?
- 数据存储区是否符合静态数据加密和区域化要求?
我们建议直接使用 Secret Manager API(使用提供的某个客户端库,或者按照 REST 或 GRPC 文档进行操作)。
但是,对于某些产品集成(例如无服务器集成),您可以通过文件系统或通过环境变量传递 Secret。如需了解详情,请参阅将 Secret Manager 与其他产品搭配使用。
管理
创建密文时选择自动复制政策,除非您的工作负载有特定位置要求(可使用 constraints/gcp.resourceLocations
限制条件强制执行)。
按版本号引用密钥,而不是使用最新别名。使用现有的发布流程部署对版本号的更新。通常,这意味着使用会在启动时读取的特定 Secret 版本配置您的应用。虽然使用最新的别名可能很方便,但如果新版本的 Secret 存在问题,您的工作负载可能会无法使用 Secret 版本。通过固定版本号,您可以使用现有的发布流程验证和回滚配置。
请先停用 Secret 版本,然后再销毁它们或删除 Secret。这有助于防止服务中断,方法是将 Secret 置于看起来与销毁相同但可逆转的状态。也就是说,您可以停用并等待一周,以确保在永久删除数据之前没有遗留的依赖项。
除非您确定应以不可逆转的方式删除生产密文,否则请勿对生产密文设置expiration。过期功能最适合自动清理临时环境。请考虑使用基于时间的 IAM 条件来替代过期的密文。
定期轮替您的密钥以执行以下操作:
- 限制密文泄露时的影响。
- 确保不再需要访问密文的个人无法继续使用之前访问的密文。
- 持续执行轮替流程以降低发生中断的可能性。
使用 Cloud Asset Inventory 监控您的组织中的密文,以便执行以下操作:
- 帮助识别您的组织中的密文。
- 识别是否不符合组织要求,例如轮替、加密配置和位置。
启用数据访问日志以获取和分析 AccessSecretVersion
请求信息。在文件夹或组织级层启用此功能可强制执行日志记录,而无需对每个 Secret 或项目进行配置。
除了 IAM 控制之外,您还可以通过为您的组织设置 VPC Service Controls 边界来限制对具有基于网络的控制的 Secret Manager API 的访问权限。
您可以使用 constraints/iam.allowedPolicyMemberDomains
组织政策来限制可添加到密文的 IAM 政策中的身份。
估算您的 Secret 用量峰值(考虑因并发应用部署或服务自动扩缩而导致的请求数量“激增”),并确保项目具有足够的配额来处理此类事件。如果需要更多配额,请申请增加。