如果丢失了用于S3加密的AWS密钥,该怎么办?

时间:2019-09-12 16:30:48

标签: amazon-web-services amazon-s3 aws-kms

我有一个使用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密钥丢失了怎么办?是否有可能会丢失此密钥或处于无法解密数据的状态?

2 个答案:

答案 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

[2] https://docs.aws.amazon.com/en_pv/AWSCloudFormation/latest/UserGuide/aws-resource-kms-key.html#aws-resource-kms-key-properties

[3] https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys.html