多AWS账号下S3存储桶内容批量列举脚本需求(Boto3/AWS Wrangler)
多AWS账号S3存储桶内容列举脚本方案
前置准备
先确保本地AWS配置文件(~/.aws/credentials 或 ~/.aws/config)已配置好多个账号的profile,格式示例:
# ~/.aws/credentials [account1] aws_access_key_id = YOUR_KEY1 aws_secret_access_key = YOUR_SECRET1 [account2] aws_access_key_id = YOUR_KEY2 aws_secret_access_key = YOUR_SECRET2
方案一:使用Boto3实现
Boto3是AWS官方SDK,适合需要自定义逻辑的场景,以下脚本支持遍历多账号、多桶,自动处理分页获取全量对象:
import boto3 from botocore.exceptions import ClientError # 定义要操作的AWS账号profile列表和目标S3桶列表 TARGET_PROFILES = ["account1", "account2"] TARGET_BUCKETS = ["bucket-name-1", "bucket-name-2"] def list_s3_bucket_objects(profile, bucket_name): # 基于指定profile创建会话 session = boto3.Session(profile_name=profile) s3_client = session.client("s3") try: # 分页获取桶内所有对象 paginator = s3_client.get_paginator("list_objects_v2") response_iterator = paginator.paginate(Bucket=bucket_name) objects = [] for response in response_iterator: if "Contents" in response: objects.extend(response["Contents"]) print(f"=== 账号[{profile}] - 桶[{bucket_name}] 内容列表 ===") for obj in objects: print(f"对象键: {obj['Key']}, 大小: {obj['Size']}字节, 最后修改: {obj['LastModified']}") print("\n") return objects except ClientError as e: print(f"账号[{profile}] - 桶[{bucket_name}] 操作失败: {e.response['Error']['Message']}") return [] # 遍历所有账号和桶 for profile in TARGET_PROFILES: for bucket in TARGET_BUCKETS: list_s3_bucket_objects(profile, bucket)
方案二:使用AWS Wrangler实现
AWS Wrangler是基于Boto3的封装库,代码更简洁,适合快速开发:
import awswrangler as wr import boto3 # 定义要操作的AWS账号profile列表和目标S3桶列表 TARGET_PROFILES = ["account1", "account2"] TARGET_BUCKETS = ["bucket-name-1", "bucket-name-2"] def list_s3_bucket_objects_wrangler(profile, bucket_name): try: # 直接获取桶内所有对象,自动处理分页 objects = wr.s3.list_objects(f"s3://{bucket_name}/", boto3_session=boto3.Session(profile_name=profile)) print(f"=== 账号[{profile}] - 桶[{bucket_name}] 内容列表 ===") for obj in objects: print(f"对象路径: {obj}") print("\n") return objects except Exception as e: print(f"账号[{profile}] - 桶[{bucket_name}] 操作失败: {str(e)}") return [] # 遍历所有账号和桶 for profile in TARGET_PROFILES: for bucket in TARGET_BUCKETS: list_s3_bucket_objects_wrangler(profile, bucket)
注意事项
- 权限:确保每个profile对应的IAM用户拥有
s3:ListBucket权限,否则会返回权限错误。 - 结果保存:如果需要将结果持久化,可以把对象列表写入CSV文件,比如用
pandas.DataFrame(objects).to_csv(f"{profile}_{bucket}_objects.csv")(需提前安装pandas)。 - 错误处理:脚本中已加入基础错误捕获,可根据需求扩展(比如跳过不存在的桶、添加重试机制等)。
内容的提问来源于stack exchange,提问作者hasnain hakim
相关产品推荐
相关产品推荐

