小编Dav*_*les的帖子

如何使用 boto3 从名称中带有句点 (.) 的存储桶访问密钥?

语境

我正在尝试为安全报告获取所有存储桶的加密状态。但是,由于加密是基于密钥级别的,我想遍历所有密钥并获得一般加密状态。例如,“是”是所有密钥都被加密,“否”如果没有被加密,“部分”是一些被加密。
我必须使用 boto3,因为 boto 存在一个已知问题,其中每个密钥的加密状态始终返回 None。看这里。

问题

我正在尝试使用 boto3 迭代每个存储桶中的所有键。以下代码运行良好,直到它遇到名称包含句点的存储桶,例如“my.test.bucket”。

from boto3.session import Session

session = Session(aws_access_key_id=<ACCESS_KEY>,
                  aws_secret_access_key=<SECRET_KEY>,
                  aws_session_token=<TOKEN>)
s3_resource = session.resource('s3')

for bucket in s3_resource.buckets.all():
    for obj in bucket.objects.all():
        key = s3_resource.Object(bucket.name, obj.key)
        # Do some stuff with the key...
Run Code Online (Sandbox Code Playgroud)

当它遇到名称中带有句点的存储桶时,它会在bucket.objects.all()调用时抛出此异常,告诉我将所有请求发送到特定端点。该端点可以在抛出的异常对象中找到。

for obj in bucket.objects.all():
File "/usr/local/lib/python2.7/site-packages/boto3/resources/collection.py", line 82, in __iter__
for page in self.pages():
File "/usr/local/lib/python2.7/site-packages/boto3/resources/collection.py", line 165, in pages
for page in pages:
File "/usr/lib/python2.7/dist-packages/botocore/paginate.py", line 85, in __iter__
response = self._make_request(current_kwargs)
File …
Run Code Online (Sandbox Code Playgroud)

python amazon-s3 amazon-web-services boto3

5
推荐指数
2
解决办法
1321
查看次数

标签 统计

amazon-s3 ×1

amazon-web-services ×1

boto3 ×1

python ×1