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)

S3 Bucket Keys for SSE-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 对象的一部分返回。

Loading

Facebook评论