1125 字
6 分钟
使用 AWS CLI 创建和管理 KMS 密钥
使用 AWS CLI 创建和管理 KMS 密钥
AWS Key Management Service (KMS) 提供了安全管理加密密钥的服务,可用于保护您的数据。本文将详细介绍如何使用 AWS CLI 创建和管理 KMS 密钥。
前提条件
- 已安装并配置 AWS CLI
- 拥有适当的 IAM 权限来创建和管理 KMS 密钥
1. 创建 KMS 密钥
创建 KMS 密钥需要提供描述信息和区域:
aws kms create-key \ --description "My production encryption key" \ --region us-west-2执行后会返回详细的密钥元数据:
{ "KeyMetadata": { "AWSAccountId": "123456789012", "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Arn": "arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab", "CreationDate": "2023-04-01T12:00:00.000000+00:00", "Enabled": true, "Description": "My production encryption key", "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "Enabled", "Origin": "AWS_KMS", "KeyManager": "CUSTOMER", "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] }}2. 为密钥创建别名
别名使密钥更易于识别和管理。使用上一步返回的 KeyId 创建别名:
aws kms create-alias \ --alias-name alias/my-production-key \ --target-key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --region us-west-23. 一步完成创建和别名设置
您可以使用以下脚本在一个操作中完成密钥创建和别名设置:
#!/bin/bash
# 创建密钥并获取 KeyIdKEY_ID=$(aws kms create-key \ --description "My production encryption key" \ --region us-west-2 \ --query 'KeyMetadata.KeyId' \ --output text)
# 为密钥创建别名aws kms create-alias \ --alias-name alias/my-production-key \ --target-key-id $KEY_ID \ --region us-west-2
echo "✅ 已创建 KMS 密钥,ID: $KEY_ID,别名: alias/my-production-key"4. 验证创建结果
创建完成后,您可以验证密钥和别名是否正确创建:
# 通过别名查询密钥详情aws kms describe-key \ --key-id alias/my-production-key \ --region us-west-2
# 列出所有别名aws kms list-aliases \ --region us-west-2
# 筛选特定密钥的别名aws kms list-aliases \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --region us-west-25. 密钥轮换和管理
启用自动密钥轮换
aws kms enable-key-rotation \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --region us-west-2检查密钥轮换状态
aws kms get-key-rotation-status \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --region us-west-2更新密钥描述
aws kms update-key-description \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --description "Updated production encryption key" \ --region us-west-2重要说明
-
别名规则:
- 别名名称必须以
alias/前缀开头 - 别名在一个 AWS 账户和区域内必须唯一
- 一个密钥可以关联多个别名
- 创建别名成功时不会返回任何输出
- 别名名称必须以
-
密钥类型:
- 默认创建的是对称加密密钥
- 若需要非对称密钥,可添加
--key-spec参数
-
密钥策略:
- 默认策略允许根账户完全控制密钥
- 可通过
--policy参数自定义策略
最佳实践
命名和组织
- 使用描述性别名:为密钥创建清晰、有意义的别名,如
alias/app-name-environment-purpose - 环境隔离:为不同环境(开发、测试、生产)使用不同的密钥,并在别名中明确标识
- 标签管理:使用标签对密钥进行分类和管理,便于成本分配和权限控制
# 为密钥添加标签aws kms tag-resource \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --tags TagKey=Environment,TagValue=Production \ --region us-west-2安全控制
- 最小权限原则:仅授予应用程序所需的最小权限
- 启用密钥轮换:对所有生产环境的密钥启用自动轮换
- 监控和审计:使用 CloudTrail 和 CloudWatch 监控密钥使用情况
# 创建具有特定权限的密钥策略aws kms create-key \ --description "Restricted production key" \ --policy file://key-policy.json \ --region us-west-2成本优化
- 合理使用别名:使用别名引用密钥可减少代码修改
- 删除未使用的密钥:定期审查并计划删除未使用的密钥
- 监控 API 调用:KMS 按 API 调用次数计费,优化应用程序减少不必要的调用
# 计划删除不再需要的密钥(默认等待期为30天)aws kms schedule-key-deletion \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --pending-window-in-days 7 \ --region us-west-2灾难恢复
- 跨区域备份:考虑在多个区域创建密钥,以支持跨区域灾难恢复
- 密钥材料备份:对于导入的密钥材料,确保安全备份
- 文档化流程:记录密钥管理流程,包括创建、轮换和删除程序
常见问题排查
- 权限错误:检查 IAM 策略和密钥策略是否正确配置
- 别名冲突:确保别名在账户和区域内唯一
- API 限流:大量操作时可能遇到 API 限流,实施指数退避重试策略
总结
通过 AWS CLI 管理 KMS 密钥提供了灵活且强大的方式来保护您的数据。遵循本文的最佳实践,可以确保您的密钥管理既安全又高效。随着应用规模的增长,考虑使用 AWS CloudFormation 或 Terraform 等基础设施即代码工具来管理密钥,以提高一致性和可重复性。
使用 AWS CLI 创建和管理 KMS 密钥
https://blog.debugmy.com/posts/awscli-kms/