amazon-web-services - CloudFormation KMS 加密问题
问题描述
给定一个 CloudFormation 模板,该模板定义:
- KMS 密钥
- KMS 密钥别名
- 一个 S3 存储桶
如果出于某种原因我需要删除 CloudFormation 堆栈并重新部署,则删除会保留创建的 KMS 密钥和别名。(这是明智的,我不想丢失所有被加密的密钥)。
但这意味着当我重新部署堆栈时它会失败,因为具有该名称的别名已经存在。
我可以通过 CLI 删除别名并重新部署,这将为新的 KMS 密钥创建一个别名。
CloudFormation 堆栈是否可以使用初始部署中的现有 KMS 密钥?
另外:对于别名已更改的 S3 存储桶中的加密数据会发生什么,我不是 100% 清楚,AWS 是否知道自动查找之前使用它加密的 KMS 密钥或是否进行了重新加密?
解决方案
我建议你有一个 Stack 只创建 KMS 并将其值导出到输出:
Resources:
KmsKey:
Type: AWS::KMS::Key
Properties:
...
Outputs:
S3KmsKeyId:
Description: The KMS Key used
Value: !Ref KmsKey
Export:
Name: S3KmsKeyId
然后,您可以拥有第二个 Stack,它仅创建 S3 存储桶,您可以在其中引用 Exported Value:
Resources:
S3Bucket:
Type: AWS::S3::Bucket
Properties:
...
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
KMSMasterKeyID: !ImportValue S3KmsKeyId
SSEAlgorithm: aws:kms
推荐阅读
- c# - DataGrid 在页面上时不显示新项目
- javascript - lazyFetching 在 fullcalendar 插件中不起作用
- ssl - 如何在 heroku 上为应用创建动态子域:(例如 d1.example.com)
- python - FireFox 配置文件复制失败
- java - 进行移动自动化测试时如何处理不同的相机ID?
- ruby - 类中的命名空间方法
- bash - 如何批量创建符号链接
- php - 数据表:我得到 recordsTotal: 1 和 recordsFiltered 0
- javascript - 在加载时切换 Vue3 主题/CSS 文件并单击
- html - 如何显示和隐藏反应 .tsx 文件?