TL; DR
1 2 3 4 5 6 7 | $ . your-venv/bin/activate $ pip install -U boto $ sudo cat > /etc/boto.cfg <<'^Z' [s3] use-sigv4 = True host = s3.ap-northeast-1.amazonaws.com ^Z |
介绍
很快,AWS S3签名版本2将于2019年6月24日弃用,影响当前使用签名版本2访问S3的系统。
[添加]来自AWS的公告,时间表和目标已更改,因此仅对于2020/6/24之后新创建的存储桶才需要签名版本4。仍建议使用签名版本4进行访问。
我从前任继承的系统也使用了旧的Boto2库(Python 2.7),并且未更新,因此,我当然使用的是签名版本2。
我不知道如何重新部署该系统(或者,有证据表明,该系统在部署后已在服务器上被篡改),因此我希望在仍能正常工作的情况下支持签名的版本4。
由于某种原因,即使我用Google搜索,使Boto2与签名版本4兼容的信息也不会显示太多,所以我在这里写下了。
Boto2和Boto3
本文介绍的方法适用于Boto2。请注意,这不适用于Boto3。
确保您使用的是签名版本2
为确保该系统实际使用签名版本2," [对于使用Amazon S3的每个人都可以安心到达2019/06/24]使用CloudTrail和Athena如何检查那里的S3签名版本| " DevelopersIO"用于使用签名版本2检测S3访问。
您可以通过查询以上文章结尾的Athena下载CSV。您可以使用此CSV(巨大)作为data.csv轻松标识实例,如下所示。
1 2 | $ tail -n +2 data.csv | sort -t, -k1r,1 | sort -sut, -k6,6 -k5,5 > data.uniq.csv $ tail -n +2 data.csv | sort -t, -k1r,1 | sort -st, -k6,6 -k5,5 > data.sorted.csv |
data.uniq.csv仅提取相同访问权限的最新访问(S3存储桶名称,实例的IP地址)。 data.sorted.csv按时间顺序排序相同。 data.uniq.csv很小且易于阅读。如果要查看更多详细信息,请参阅data.sorted.csv(例如,如果您除了存储桶名称之外还想查看密钥)。
通过这种方法,可以确定使用签名版本2确实访问了要修改的系统实例的IP,并且用户代理为
了解如何解决
"从签名版本2迁移到签名版本4"中描述了如何修复每种类型的AWS开发工具包。根据此:
<表格>
tr>
header>
<身体>
tr>
tbody>
table>
嗯,"需要更改代码"是一个问题...
此外,如果您查看"在请求身份验证中指定签名版本":
boto在默认配置文件中指定以下内容。
1 | [s3] use-sigv4 = True |
有
。似乎更改代码仅需要更改配置文件,但是此boto默认配置文件在哪里?而且,这种奇怪的格式是
1 2 | [s3] use-sigv4 = True |
是
吗?
Boto2配置文件
Boto2配置文件在" Boto Config — boto v2.49.0"中进行了描述。看来您可以在/etc/boto.cfg或?/ .boto中编写它。
另外,格式为ini格式,并且似乎在
矫正工作
现在我们已经掌握了所有材料,让我们对其进行修复。这次要修复的系统正在cron上运行,因此请先将其停止。它可以使用virtualenv正常工作(很好...),因此请在virtualenv中升级boto。
1 2 3 4 5 6 7 8 9 | $ cp -a your-venv your-venv-backup # ← 非常時ロールバック用 $ . your-venv/bin/activate $ pip install -U boto $ pip show boto --- Name: boto Version: 2.49.0 Location: /home/user/your-venv/lib/python2.7/site-packages Requires: |
Boto2对旧系统友好,因为它没有依赖性,可以在不涉及其他软件包的情况下进行升级。
接下来,更改Boto2配置文件。这次似乎没有现有的配置文件,因此我将创建一个新的配置文件。
1 2 3 4 | $ sudo cat > /etc/boto.cfg <<'^Z' [s3] use-sigv4 = True ^Z |
好吧,当我运行测试时...我根本无法访问S3! !! !! ...我有麻烦了。
进一步修复
我无法轻易找到原因,但是我发现了这些东西:python-使用boto来签名V4的AWS S3存储桶-堆栈溢出
本文指出,API终结点必须是
首先查看东京区域中的S3 API端点:根据Amazon Web Services的AWS区域和端点-
1 2 3 4 5 | $ sudo cat > /etc/boto.cfg <<'^Z' [s3] use-sigv4 = True host = s3.ap-northeast-1.amazonaws.com ^Z |
测试运行...工作正常。恢复cron并退出。
此