【发布时间】:2020-02-07 13:42:06
【问题描述】:
def main():
with open('S3.csv', 'w') as csvfile:
writer = csv.writer(csvfile)
writer.writerow([
'Account Name',
'Region',
'Bucket Name',
'Policy'
])
with open('role.json') as ec2_file:
ec2_data = json.load(ec2_file)
region_list = ['eu-west-1']
for region in region_list:
for index in range(len(ec2_data['Items'])):
Account_Number = ec2_data['Items'][index]['Aws_Account_Number']
Account_Name = ec2_data['Items'][index]['Acc_Name']
ARN = ec2_data['Items'][index]['ARN']
b = get_assume_arn_to_keys(Account_Number,Account_Name,ARN)
ds_client = boto3.client('s3',region_name=region,aws_access_key_id=``,aws_secret_access_key=``,aws_session_token=``)
s3 = boto3.resource('s3')
for bucket in s3.buckets.all():
writer.writerow([
Account_Name,
region,
bucket.name,
ds_client.get_bucket_lifecycle(Bucket=bucket.name)
main()
我想在 .csv 中列出 s3 存储桶及其生命周期策略。我可以列出所有存储桶。
但是,列出生命周期策略给我带来了问题。我无法列出所有存储桶。可能,它只是给了我第一个桶的策略。
如果我提供存储桶名称,我可以获得生命周期策略。 单个存储桶“k”策略在所有存储桶中列出。
ds_client.get_bucket_lifecycle(Bucket='k')
但是,如果我想获得所有存储桶,我尝试了这个
ds_client.get_bucket_lifecycle(Bucket=bucket.name)
编辑::: 新尝试列出日志记录、区域和版本控制。
import boto3
s3_client = boto3.client('s3')
bucket_list = ds_client.list_buckets()
for bucket in bucket_list['Buckets']:
try:
lifecycle = ds_client.get_bucket_lifecycle(Bucket=bucket['Name'])
rules = lifecycle['Rules']
except:
rules = 'No Policy'
versioning = ds_client.get_bucket_versioning(Bucket=bucket['Name'])
logging = ds_client.get_bucket_logging(Bucket=bucket['Name'])
print(bucket['Name'], rules, versioning, logging)
但无法得到它。 好心劝告。 谢谢
【问题讨论】:
-
“但是,列出生命周期策略给了我错误。”您能否提及您遇到的错误?
-
@ArunNalla 但是,列出生命周期策略给我带来了问题。我无法列出所有存储桶。可能,它只是给了我第一个存储桶的策略。
-
对不起,我认为我没有正确理解这个问题。运行此程序时是否遇到任何异常/错误,或者输出文件中的所有生命周期策略都相同的问题?
-
@ArunNalla 如果我直接给出存储桶名称,它会正确地为我提供生命周期策略。如果我给出(Bucket=bucket.name),它不会列出所有存储桶的存储桶策略(仅列出第一个存储桶)。没有具体错误。
-
看来,如果bucket没有Lifecycle配置,调用
get_bucket_lifecycle()或get_bucket_lifecycle_configuration()会导致Error。您确定有问题的存储桶附加了生命周期吗?
标签: python amazon-web-services amazon-s3