获得存储桶大小所需的S3权限?

时间:2019-10-02 15:49:46

标签: amazon-web-services amazon-s3

我正在使用boto3来获取S3中所有对象的大小,并授予了以下权限:

JScrollPane pane= new JScrollPane();
pane.setViewportView(textArea);

但是boto不断抛出此错误:

s3:ListAllMyBuckets
s3:ListObjects
s3:GetObject

我在文档中或通过查看boto的源代码都找不到任何详细信息...没有人知道仅仅为了获得S3存储桶中所有对象的大小所需的最低权限吗?

1 个答案:

答案 0 :(得分:1)

我创建了以下lambda,它可以打印每个对象的大小并汇总存储桶的总大小。

我使用here中的convert_size函数。 归功于@James Sapam。

代码段:

import boto3
import math

def convert_size(size_bytes):
   if size_bytes == 0:
       return "0B"
   size_name = ("B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB")
   i = int(math.floor(math.log(size_bytes, 1024)))
   p = math.pow(1024, i)
   s = round(size_bytes / p, 2)
   return "%s %s" % (s, size_name[i])

bucket_name = 'BUCKET_NAME'
s3 = boto3.resource('s3')
bucket = s3.Bucket(bucket_name)

def lambda_handler(event, context):
    all_objects = bucket.objects.all()
    total_size = 0
    for obj in all_objects:
        if obj.key.split('/')[-1]:
            file_name = obj.key
            file_size = convert_size(obj.size)
            total_size += obj.size
            print("File Name: %s File Size: %s" % (file_name,file_size) ) 
    print("%s bucket size : %s" % (bucket_name,convert_size(total_size)) )

政策摘要JSON:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::${BUCKET_NAME}"
        }
    ]
}

输出:

enter image description here

如果尝试上述解决方案后仍然发现问题,请查看此thread