云上转型数据存储安全--S3存储桶加密

上转型的安全疑虑

因为是技术平台公司,所以需要很快的平台技术迭代,但是由于传统的技术阻碍,近些年创新的速度明显减慢,因此上云被认为是规避IT技术瓶颈和发展界限最方便快捷的方式。

了解三种云

云分为三种:公有云,私有云和混合云。公有云是能够以低廉的价格,提供有吸引力的服务给最终用户,创造新的业务价值,还能够整合上游的服务(如增值业务,广告)提供者和下游最终用户,打造新的价值链和生态系统。它使客户能够访问和共享基本的计算机基础设施,其中包括硬件、存储和带宽等资源。私有云是为一个客户单独使用而构建的,能提供对数据、安全性和服务质量的最有效控制。该公司拥有基础设施,并可以控制在此基础设施上部署应用程序的方式。私有云可部署在企业数据中心的防火墙内,也可以将它们部署在一个安全的主机托管场所。混合云是公有云和私有云两种服务方式的结合。由于安全和控制原因,并非所有的企业信息都能放置在公有云上,这样大部分已经应用云计算的企业将会使用混合云模式。很多将选择同时使用公有云和私有云,有一些也会同时建立公众云。因为公有云只会向用户使用的资源收费,所以集中云将会变成处理需求高峰的一个非常便宜的方式。

三种方式各有利弊,公有云的优点是方便,但是方便的同时就不会很安全、稳定,安全的技术大多来源于平台的安全技术平台;私有云优点是灵活,缺点是成本太高,需要自己在本地搭建一套安全平台,不仅需要庞大的服务集群,还需要灵活的安全技术体系,来满足云上安全以及云上业务的安全;混合云,就是两个的融合,方便的同时,对技术的投入也会很大,需要两套方案不断切换,对于中小公司依然负担较重。

不难看出,当前中小型公司基本的选择都是公有云,将自己的产品或服务构建在第三方的云平台(阿里云,腾讯云,AWS等)上,自己只需要关注自己的业务发展,不需要关注技术的实现,但是云上业务的安全无法避免,需要企业自身去把控。因此,公有云相对于传统数据中心,安全风险的增加并不明显;安全风险主要来源于新的互联网业务模式;黑客的攻击手法千变万化,只靠单纯防御无法解决问题;未来的企业级安全系统,人工智能与云计算是不可或缺的基础。

既然使用公有云,安全问题难免要考虑,本文结合RSA2018安全大会中的相关课题,给出Amazon S3桶存储加密的安全思路。

数据存储安全

静态加密--S3存储桶加密

上云之前,数据和流程强制静态加密:系统构建流程,加固的设备镜像,RAID和服务器上的加密。

上云之后,数据存储时默认不加密,处理过程也很难加密。

那么问题来了。怎么保证S3服务器上数据被加密?

解决方案:

S3对象有是三个服务器加密选项:

    SSE-S3:使用由S3管理的秘钥

    SSE-KMS:使用由AWS KMS管理的秘钥

    SSE-C:使用自己管理的秘钥

在使用以上方式进行服务端加密时,AWS在将对象保存在其数据中心之前对其进行加密,在下载对象时对其进行解密。

可以通过安装存储桶加密配置,强制存储桶中的所有对象都必须以加密形式保存,如果有对象未加密被提交给S3,且配置要求是加密,则该对象会自动使用存储通指定的加密选项来加密(相当于我定义一个组的加密方式,所有存储在组内的对象默认都会被加密)。加密后的S3文件的Overview如下所有有两个属性:

 
Server-side encryption
AWS-KMS
KMS key ID
arn:aws:kms:us-east-1:123456789012:key/e4ce859b-786b-4b8e-8b73-4968adb6e4ed

没加密的话Server-side encryption是None,也没有对应的key ID属性。当设置了加密之后,哪怕你将文件设置为public,打开对应API查看文件链接,也是下载不了对应文件的,必须提供正确的请求头信息才能下载该文件(请求头中会包含正确的token)。

S3存储桶上不加密的场景

 加密桶方案

解释:

CloudTrail:是一项支持对AWS 账户进行监管、合规性检查、操作审核和风险审核的服务。

CloudWatch:可以监控系统中的各种行为,例如某个EC2实例的启动或关闭,并检测到自动伸缩事件的发生。

Lambda Function:是一项计算服务,可使用户无需预配置或管理服务即可运行代码。为了使用 AWS 的 Lambda 进行计算,你需要把处理方法写成一个函数。如果你用 python 就 def 一个,如果你用 node.js 就 function 一个。当到达了计算启动的条件,AWS 会自动调用这个函数。

配置:

{
   "source": ["aws.s3"],
   "detail-type": [ "AWS API Call via CloudTrail" ],
   "detail": {
         "eventSource": [ "s3.amazonaws.com" ],
         "eventName": [
             "CreateBucket",
             "PutBucketAcl",
             "PutBucketPolicy",
             "PutBucketEncryption",
             "DeleteBucketEncryption"
          ]
     }
}

关键源代码调用:

s3 = boto3.client('s3')
sns = boto3.client('sns')
def lambda_handler(event, context):
    bucket_name = event['detail']['requestParameters']['bucketName']
    bucket_creator = event['detail']['userIdentity']['principalId']
    bucket_user = bucket_creator.split(":",1)
    try:
        currEncrypt = s3.get_bucket_encryption (Bucket=bucket_name)
    except ClientError as e:
        toEncrypt = s3.put_bucket_encryption (Bucket=bucket_name,
                ServerSideEncryptionConfiguration = {
                    'Rules':[ {'ApplyServerSideEncryptionByDefault':{ 'SSEAlgorithm': 'AES256' }}]
                })
        response = sns.publish(
              TopicArn= 'arn:aws:sns:us-east-1: …000012345678:unEncryptedS3BucketCreated',
              Message= 'Encryption Removed by '+ bucket_user[1] )
    else:
        return currEncrypt

要了解其加密流程,我们首先要分两种情况来看其区别,

不启用Bucket默认加密去加密服务端数据

首先,创建一个存储test-encryption-bucket,如果某个bucket中允许混杂存储加密和非加密的数据,或者单个桶中的文件选取不同的加密策略实现存储,这时就不能给该桶加上默认的存储策略,这时就需要在上传文件时,指定该文件的加密方式

  1. $ aws s3 cp test.txt s3://test-encryption-bucket --sse aws:kms # 指定使用SSE-KWS方式加密文件

对于未启用默认加密的桶,我们可以设定Bucket的deny policy来限制只有指定了服务端加密,且采用特定的SSE-KMS的对象才能接受存储,否无拒绝该操作。

启用Bucket的默认加密

那么默认启用该选项后,则会有default encryption选项,选择事先创建好的key,就可以存取文件。一点启用默认加密,新上传的文件必须加密,无法绕过秘钥。

注意:桶中原有的数据是不会被加密的,但是新上传的文件会加密,因此对原数据的加密存储就需要先进行一个cp操作。

 

安全风险

PS:随着越来越多的企业选择转移数据到云端,可能会出现很多配置错误导致意外的数据泄露,如果存储桶因意外或故意原因让其他人都可以访问,如果这些文件的权限都被设置为公开(存储桶需要配置才能使其公开访问,默认是私有且不可公开访问),则存储桶中的所有数据都可能被泄露。即使数据不是机密数据,也可被不法分子利用于进一步攻击。

如何缓解以下风险?

    ① 企业可以使用访问控制列表来限制可访问Amazon S3存储桶的IP地址范围(白名单);

    ② 企业可通过规范用户ID或者预定义用户组,控制每个用户或组的西路度权限级别(权限细分);

    ③ S3存储桶都只存在唯一访问的URL,所以可通过简单扫描来确定是否被公开访问(扫描URL);

    ④ AWS还提供加密静态数据的选项-服务器端加密选项,可作为简单的第二层防御。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值