我有一个使用cloudformation创建的S3存储桶。
RenditionsBucket:
Type: AWS::S3::Bucket
Properties:
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: aws:kms
KMSMasterKeyID: !Ref BucketEncryptionKey
CorsConfiguration:
CorsRules:
- AllowedHeaders:
- "*"
AllowedMethods:
- GET
- HEAD
- POST
- PUT
- DELETE
AllowedOrigins:
- "*"
我将其默认加密设置为ServerSideEncryptionByDefault
。 SSE算法为aws:kms
。
我还生成了如下密钥
BucketEncryptionKey:
Type: AWS::KMS::Key
Properties:
Enabled: true
KeyPolicy:
Version: 2012-10-17
Statement:
- Effect: Allow
Action: kms:*
Principal:
AWS: !Sub arn:aws:iam::${AWS::AccountId}:root
Resource: "*"
现在,这将加密服务器上静止的文档。但是,如果我的BucketEncryptionKey
密钥丢失了怎么办?是否有可能会丢失此密钥或处于无法解密数据的状态?
答案 0 :(得分:2)
AWS::KMS::Key
是一个客户主密钥,从技术上讲,没有任何阻止您删除密钥的方法,这大概是一种“丢失”方法。因此,此警告:
在AWS Key Management Service(AWS KMS)中删除客户主密钥(CMK)具有破坏性,并且有潜在危险。它删除密钥材料和与CMK相关的所有元数据,并且是不可逆的。删除CMK之后,您将无法再解密在该CMK下加密的数据,这意味着数据将变得不可恢复。
https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys.html
从理论上讲,严重的故障,缺陷,破坏或灾难性事件会影响密钥管理服务(KMS),也可能导致密钥丢失,但是与帐户所有者的人为错误相比,这些丢失的可能性较小。从本质上来说,对静态数据进行加密是有风险的业务-加密的数据故意在没有密钥的情况下无法使用。
S3实际上并不直接使用主密钥加密存储的数据。相反,它使用单独的加密密钥,并且使用主密钥对密钥进行加密...但是没有主密钥,这些数据密钥也无法解密。 S3不会将密钥以明文形式存储,甚至不会将密钥的明文版本在内存中保留的时间超过对飞行中的objecta进行加密或解密所必需的时间。
S3 [...]使用后尽快将其从内存中删除。
https://docs.aws.amazon.com/kms/latest/developerguide/services-s3.html
答案 1 :(得分:2)
S3中的对象已通过您的AWS KMS客户主密钥(CMK)加密, 因此CMK 必须才能用于解密每个对象。
因此,如果删除CMK,则数据不可恢复。
如果您要删除,这实际上是一个很大的好处。 分布式系统中的大量数据。 删除(有时甚至只是找到)很多东西很难。 验证您删除了所有这些内容并且它们是不可恢复的,就更加困难了。 删除一件事(在这种情况下为CMK)要容易得多, 并将导致无法恢复使用该密钥加密的所有数据。
加密数据的这一特征是无法直接删除CMK的原因之一。 您可以至少在未来7天安排删除CMK [1](默认为30天)。 安排删除时,将禁用CMK, 但直到删除日期才会被删除。
如果您意识到在计划删除和删除日期之间需要CMK, 您可以取消删除。
同样,如果您通过CloudFormation创建了CMK, 然后,当CloudFormation“删除” CMK资源时, 它实际上所做的是安排CMK删除。 默认情况下,排定为未来30天, 但是如果您设置“ PendingWindowInDays”值[2], 您可以选择7到30天之间的自定义时间段。
有关此的更多信息,请参阅CMK删除文档[3]。
[1] https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html
[3] https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys.html