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 工作原理
- 用户创建 KMS 密钥(Customer Managed Key, CMK)
- AWS 服务或应用请求加密数据
- KMS 生成数据密钥(Data Key)
- 数据密钥用于加密实际数据(数据密钥本身可由 KMS 加密存储)
- 解密时,应用请求 KMS 解密数据密钥
- 数据密钥解密后用于解密原始数据
1.3 AWS KMS 相关技术
- AWS CloudTrail 记录 KMS 操作(监控密钥的使用情况)
- Envelope Encryption(信封加密):使用 KMS 生成数据密钥,加密数据后存储数据密钥的加密版本
- KMS API:
Encrypt
、Decrypt
、GenerateDataKey
、ReEncrypt
- 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 工作原理
- 存储凭据
- 创建 Secret,并选择自动或手动轮换
- AWS KMS 负责加密 Secret
- 应用程序访问凭据
- 通过 AWS SDK 或 Secrets Manager API 访问 Secret
- Secret 仅在有权限的 IAM 角色下可访问
- 自动轮换
- 轮换发生时,Secrets Manager 调用 AWS Lambda 来更新 Secret
- 新 Secret 通过 API 传递给应用程序
2.3 AWS Secrets Manager 相关技术
- Secrets Manager API (
GetSecretValue
、UpdateSecret
、RotateSecret
) - 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 调用 | Encrypt 、Decrypt 、GenerateDataKey |
GetSecretValue 、RotateSecret |
加密机制 | 使用 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|
Category: 似水流年