AWS – S3安全
Server Side Encryption with Amazon S3-Managed Keys (SSE-S3)
- 服务器端加密
- AWS 管理和拥有的key,用户无法获取这个key
- 加密方式是AES-256
- 上传文件如何需要加密的话,需要再header上添加“x-amz-server-side-encryption”:”AES256″
- 新的bucket和新的文件默认这个加密方式

Server Side Encryption with KMS Keys stored in AWS KMS (SSE-KMS)
- AWS管理key,把key存在AWS KMS当中
- 优点是用户可以访问自己key,所以可以使用CloudTrail达到audit的作用。当任何人使用这个key的话都会被log记录在CloudTrail当中,以便加以追踪
- 使用默认aws/s3的kms key就不用付费而且加上使用SSE-KMS是免费的,如果使用自己创建的kms key就必须付费了
- 服务器端加密
- 上传文件如何需要加密的话,可以在header上指定想用的kms key,需要再header上添加“x-amz-server-side-encryption”:”aws:kms”
- 不只是存储会进行加密,就连读取需要进行解密,所以除了需要拥有文件的读取权限,也需要kms key的访问权限

- KMS有使用上限,每次加密或解密都需要使用KMS API
- 不同的region每秒情况上限5500 / 10000 / 30000次
- KMS上限不够用的话可以到Sevice Quotas Console请求提高上限

Server Side Encryption with Dual-Layer in AWS KMS (DSSE-KMS)
- 参考文档:https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/UsingDSSEncryption.html
- 使用kms双层加密
- 相交单层的SSE-KMS双层加密的就必须付费了,单层KMS加密并且使用AWS默认的aws/s3 kms key的话,那么单层加密就是免费的
- 符合compliance CNSSP 15 和 DAR CP 5.0
https://www.amazonaws.cn/new/2023/amazon-s3-announces-dual-layer-server-side-encryption-for-workloads-subject-to-cnssp-15-and-dar-cp-5-compliance/?nc1=h_ls
S3 Bucket Keys for SSE-KMS
- 参考文档:https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/bucket-key.html
- 只是支持SSE-KMS 不支持DSSE-KMS
- 每次加密时都需要从KMS当中获取key,我们可以开启Bucket Key以便KMS Key可以短暂保存在bucket key当中,也可以减少kms的请求以减少kms的使用开销

Server Side Encryption with Customer-Provided Keys (SSE-C)
- 服务器端加密
- 用户自己管理和保存key(key是保存在AWS之外的)
- key并不会存在AWS当中,每次使用之后AWS就会销毁
- 每次上传文件的时候都需要在header传送自己的key
- 传输协议必须使用HTTPS
- 如果需要读取文件的话,用户也是需要在http header当中添加自己的key,那么aws才能够帮你解密

Client-Side Encryption
- 客户端加密
- 可以使用Amazon S3 Client-Side Encryption Library进行加密
- 文件在发送到 Amazon S3 之前必须在本地自行加密数据
- 当从S3下载文件之后,用户需要在本地解密文件
- 传输协议必须使用HTTPS

强迫传输使用HTTPS
- 可以在S3的Bucket Policy当中,添加强制性使用https传输数据

S3 默认加密 VS Bucket Policy
- SSE-S3是默认开启的加密
- 如果需要强制加密的话,可以在Bucket Policy内加上
- Bucket Policy会优先于默认加密
强制上传的文件都需要开启SSE-KMS

强制上传的文件都需要开启SSE-C

S3 – CORS
- 开启了CORS才能够让第三方访问S3当中的资源
- 开始方式 Bucket > Permission > CORS , 然后使用以下的JSON

[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"PUT",
"POST",
"DELETE"
],
"AllowedOrigins": [
"http://www.example.com"
],
"ExposeHeaders": [
"x-amz-server-side-encryption",
"x-amz-request-id",
"x-amz-id-2"
],
"MaxAgeSeconds": 3000
}
]
S3 – MFA Delete
- 需要打开versioning才能开启MFA
- 当永久性删除一个文件的version,或是关闭versioning的时候就需要MFA
- 只有root account才能开启或关闭MFA Delete
- 开始方式: Bucket > Properties > Bucket Versioning
- 目前无法在console开启,只能用CLI打开
aws s3api put-bucket-versioning --bucket DOC-EXAMPLE-BUCKET1 --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "YOUR_MFA_ARN 123456"
S3 – Access Log
- 任何的请求,从任何的户口,或是被授权或是被拒绝,都会被记录下来
- 这个日志可以使用分析工具来进行分析,比如Amazon Athena
- 开启方式 Bucket > Properties > Server access logging , 然后选择存储log的目标bucket
- 当对于目标bucket开启了access log之后,目标bucket的access policy就会自动更改
- 记录日志和目标日志必须在同一个region内

- [注意] 记录日志的bucket和target bucket不能存放在同一个bucket内,否则就会有死循环,会造成产生无限的费用

S3 – Pre-signed URLs
- 对于文件的url增加前面,即使是 private bucket但是凭着这个url也能够访问
- 设置方法,文件 > Object actions > share with a presigned URL 然后就是决定url的有效期限

S3 – Glacier Vault Lock
- 采用WORM模型 ( Write Once Read Many )
- 开启了锁,任何人就无法更改或删除
- 符合compliance需要

S3 – Object Lock
- 采用WORM模型 ( Write Once Read Many )
- 开启前必须打开versioning
- 这个特性主要目的是确保object在设定的时间内永远不会被删除或者覆盖。其主要的应用场景就是数据保护场景,例如法规遵从
- 在开启 Object Lock如何设置rentation的话就是说,在特定的天数之内无法更动问题直到过期之后才能
- Rentation – Compliance : 任何人都无法更改或删除文件包括root账号,rentation期限无法更改或缩短,这个模式比较极端以达到compliance合规
- Rentation – Governance : 这个是治理模式所以比较没那么严格,权限的人有权更改rentation期限和删除文件
- 开启方式 : Bucket > Properties > Object Lock
S3 – Object Lock legal hold (合法持有人锁定)
- 使用这个功能的话,bucket必须事前开启了 Object Lock
- 对于特定的文件开启,永久保护期限,不会被更改或删除
- 只有特定 IAM 权限的 AWS 账户才可以打开或关闭Legal Hold
S3 – Access Point
- 根据不同的人群创建各自的Access Point
- 每个Access Point就好像Bucket Access Policy这样,也能够创建自己的Access Point Policy
- 创建了Access Point就能获取该Access Point生成的DNS Name
- Access Point 可以规定Internet外网访问,或只规定于内网VPC访问
S3 – Access Point ( VPC Origin )
- 内网使用VPC Origin 访问的话,必须在VPC当中创建S3 Gateway Endpoint
- S3 Gateway Endpoint可以在EndPoint Policy当中设置允许访问哪个Bucket或Access Point
- 按照以下图片的架构,需要设置3种policy,所以安全系数相当高的

S3 – Object Lambda
- 动态处理和转换: 您可以根据请求的上下文和需求,动态地修改 S3 对象的内容。这可能包括内容的加密、解密、压缩、解压缩、图像大小调整、文本转换等等。
- 实时数据脱敏: 对于敏感数据,您可以使用 S3 Object Lambda 在对象检索时进行实时脱敏,以确保数据在传输和处理过程中的安全性。
- 内容过滤和选择性响应: 根据客户端请求,您可以在 S3 对象中进行内容过滤,只返回客户端需要的部分内容,从而减少数据传输量和提高效率。
- 动态内容生成: 您可以使用 S3 Object Lambda 生成动态内容,例如基于客户端请求生成图表、报表或其他动态内容,并将其作为 S3 对象的一部分返回。

Facebook评论