AWS KMS 和 AWS Secrets Manager

Table of Contents

AWS 提供多种服务来管理敏感数据,其中 AWS Key Management Service (KMS)AWS Secrets Manager 是用于保护和管理密钥及凭据的核心服务。下面详细介绍这两者的功能、区别及其相关技术。


1. AWS KMS (Key Management Service)

AWS KMS 是一个托管的密钥管理服务,用于创建、存储和控制加密密钥,以保护 AWS 资源和应用程序中的数据。

1.1 AWS KMS 的主要功能

  • 密钥管理
    • 生成、存储、轮换和销毁加密密钥
    • 支持对称密钥非对称密钥(RSA、ECC)
    • 支持HMAC(哈希消息认证码)密钥
  • 数据加密
    • 直接使用 KMS 进行数据加密(Encrypt/Decrypt API
    • 使用 KMS 生成的数据密钥(Data Key)进行本地加密
  • 权限控制
    • 通过 AWS IAM 进行细粒度权限控制
    • 允许基于资源的访问策略(Resource Policies)
  • 密钥轮换
    • 可自动或手动轮换密钥,提升安全性
  • FIPS 140-2 认证
    • KMS 提供符合FIPS 140-2 Level 2 和 Level 3 标准的硬件安全模块(HSM)
  • 集成 AWS 生态
    • 适用于 S3、EBS、RDS、DynamoDB、Lambda 等多种 AWS 服务
  • 跨账户密钥共享
    • 支持在多个 AWS 账户间共享 KMS 密钥

1.2 AWS KMS 工作原理

  1. 用户创建 KMS 密钥(Customer Managed Key, CMK)
  2. AWS 服务或应用请求加密数据
  3. KMS 生成数据密钥(Data Key)
  4. 数据密钥用于加密实际数据(数据密钥本身可由 KMS 加密存储)
  5. 解密时,应用请求 KMS 解密数据密钥
  6. 数据密钥解密后用于解密原始数据

1.3 AWS KMS 相关技术

  • AWS CloudTrail 记录 KMS 操作(监控密钥的使用情况)
  • Envelope Encryption(信封加密):使用 KMS 生成数据密钥,加密数据后存储数据密钥的加密版本
  • KMS APIEncryptDecryptGenerateDataKeyReEncrypt
  • AWS CloudHSM:专用的硬件安全模块(HSM),提供更高级别的密钥管理

2. AWS Secrets Manager

AWS Secrets Manager 是专门用于存储、管理和轮换敏感凭据(如数据库凭据、API 密钥、OAuth 令牌等)的托管服务。

2.1 AWS Secrets Manager 的主要功能

  • 存储和管理凭据
    • 支持 数据库凭据(RDS、MySQL、PostgreSQL 等)
    • 支持 API 密钥
    • 支持 OAuth 令牌
    • 支持 SSH 密钥
  • 自动轮换凭据
    • 适用于 RDS、Redshift,可自动更新数据库凭据
    • 用户可编写 Lambda 函数来自定义轮换逻辑
  • 安全访问
    • 基于 AWS IAM 权限管理,确保安全访问
    • 自动加密存储(使用 AWS KMS 进行加密)
  • 集成 AWS 生态
    • 兼容 EC2、ECS、Lambda、RDS、DynamoDB
  • 多版本历史
    • 可以回滚到以前存储的凭据版本

2.2 AWS Secrets Manager 工作原理

  1. 存储凭据
    • 创建 Secret,并选择自动或手动轮换
    • AWS KMS 负责加密 Secret
  2. 应用程序访问凭据
    • 通过 AWS SDK 或 Secrets Manager API 访问 Secret
    • Secret 仅在有权限的 IAM 角色下可访问
  3. 自动轮换
    • 轮换发生时,Secrets Manager 调用 AWS Lambda 来更新 Secret
    • 新 Secret 通过 API 传递给应用程序

2.3 AWS Secrets Manager 相关技术

  • Secrets Manager API (GetSecretValueUpdateSecretRotateSecret)
  • AWS Lambda 轮换凭据
  • AWS KMS 进行加密
  • Secrets Manager 集成 AWS Systems Manager Parameter Store

3. AWS KMS vs AWS Secrets Manager: 区别

功能 AWS KMS AWS Secrets Manager
用途 加密/解密数据、管理密钥 存储和管理密码、API 密钥、凭据
数据类型 加密密钥、HMAC、数据密钥 用户名/密码、API 密钥、OAuth 令牌
权限管理 IAM 角色、KMS 资源策略 IAM 角色、Secrets Manager 资源策略
集成 AWS 服务 S3、EBS、RDS、DynamoDB、Lambda RDS、ECS、Lambda、应用程序
自动轮换 仅支持密钥轮换 支持数据库和自定义凭据轮换
API 调用 EncryptDecryptGenerateDataKey GetSecretValueRotateSecret
加密机制 使用 AWS KMS 进行加密 默认使用 AWS KMS 进行加密
访问方式 通过 AWS SDK 或 API 访问 通过 AWS SDK、CLI 或 API 获取 Secret

4. 适用场景

4.1 什么时候使用 AWS KMS

  • 需要加密静态数据(S3、RDS、DynamoDB、EBS 等)
  • 需要对数据进行签名或验证(HMAC、非对称加密)
  • 需要对数据进行加密/解密(如 TLS 证书管理)
  • 需要密钥管理(例如 API 密钥的加密存储)

4.2 什么时候使用 AWS Secrets Manager

  • 需要存储 API 密钥、数据库凭据
  • 需要应用程序动态获取和轮换凭据
  • 需要管理 OAuth 令牌
  • 需要自动轮换数据库密码

5. 总结

  • AWS KMS 主要用于管理加密密钥,提供数据加密、密钥管理、访问控制等功能,适用于存储加密、数据签名等场景。
  • AWS Secrets Manager 主要用于存储和管理应用程序的凭据,并支持自动轮换密码,适用于数据库凭据、API 密钥管理等。

两者可以结合使用,例如:

  • 用 AWS Secrets Manager 存储 API 密钥,但用 AWS KMS 加密该密钥
  • 用 AWS KMS 生成数据密钥,然后用该数据密钥加密 S3 中的数据

如果你的应用涉及存储敏感信息和密钥管理,AWS KMS 和 AWS Secrets Manager 是 AWS 生态系统中的关键安全工具。

Comments |0|

Legend *) Required fields are marked
**) You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Category: 似水流年