我的客户使用较早版本的 TLS。我想在他们访问我的 Amazon Simple Storage Service(Amazon S3)桶中的内容时,强制使用最新版本的 TLS。
简述
对传输中数据使用现代加密协议是最佳实践。若要使用 TLS 1.2 或更高版本连接 Amazon S3,请更新桶的安全政策。
**注意:**客户必须使用 TLS 1.2 或更高版本才能访问存储在您的 S3 桶中的内容。
有关弃用 AWS 的 TLS 版本的详细信息,请参阅 TLS 1.2 to become the minimum TLS protocol level for all AWS API endpoints。
解决方法
使用附加到桶的基于资源的策略,强制对与 S3 桶的所有连接使用 TLS 1.2 或更高版本。
若要附加需要 TLS 1.2 或更高版本的桶策略,请完成下列步骤:
-
打开 Amazon S3 控制台。
-
从列表中选择桶。
-
选择权限选项卡。
-
在“桶策略”下,选择编辑。
-
添加策略以拒绝对您要阻止的加密协议的访问。例如,使用以下策略来拒绝使用低于 1.2 的 TLS 版本的所有 HTTPS 请求:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "EnforceTLSv12orHigher",
"Principal": {
"AWS": "*"
},
"Action": [
"s3:*"
],
"Effect": "Deny",
"Resource": [
"arn:aws:s3:::DOC_EXAMPLE_BUCKET/*",
"arn:aws:s3:::DOC_EXAMPLE_BUCKET"
],
"Condition": {
"NumericLessThan": {
"s3:TlsVersion": 1.2
}
}
}
]
}
该策略强制使用 HTTPS 来提高传输中数据的安全性。
如果您的工作负载需要通往 Amazon S3 的 HTTP 流量,请使用以下策略。此策略允许使用 HTTP 流量并阻止来自 TLS 1.2 较早版本的 HTTPS 流量:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "UpdateTLSv12",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::DOC_EXAMPLE_BUCKET/*",
"Condition": {
"Bool": {
"aws:SecureTransport": "true"
},
"NumericLessThan": {
"s3:TlsVersion": "1.2"
}
}
}
]
}
确认您在 S3 中使用的是现代加密协议
若要测试您的新策略,请使用以下示例 curl 命令发出使用特定传统协议的 HTTPS 请求:
curl https://${BUCKET\_NAME}.s3.us-east-1.amazonaws.com/image.png -v --tlsv1.0 --tls-max 1.0
示例 curl 命令返回 Access Denied,因为 Amazon S3 检测到您的请求未使用 TLS 1.2 或更高版本。
注意: 在默认情况下,curl 会发送匿名请求。如果您的桶是私有的,则无论使用何种 TLS 版本,您都会收到 403 Access Denied 错误。使用 curl 进行测试时,生成 Amazon S3 预签名 URL 以授予访问您的私有对象的权限。
最佳实践是使用 AWS CloudTrail Lake 来识别与 AWS 服务端点相连的早期版本 TLS 连接。您可以配置 CloudTrail Lake 事件数据存储来捕获管理事件或者数据事件。