我希望使用boto3为我的aws帐户提供凭据报告。操作如下:
iam = boto3.client('iam',aws_access_key_id=access_key_id,aws_secret_access_key=secret_key,region_name=region)
creds=iam.get_credential_report()
print(creds)
它以以下格式提供输出:
{'内容': b'user、arn、user_creation_time、password_enabled、password_last_used、password_last_changed、password_next_rotation、mfa_active、access_key_1_active、access_key_1_last_rotated、access_key_1_last_used_date、access_key_1_last_used_region、access_key_1_last_used_service、access_key_2_active、access_key_2_last_rotated、access_key_2_last_used_date、access_key_2_last_used_region、access_key_2_last_used_service、cert_1_active、cert_1_last_rotated、cert_2_active、cert_2_last_rotated\n
有没有办法把它改成字典格式?
对您可以使用python csv模块将其转换为dict,但需要先稍微清洗一下凭证报告:
import csv
iam = boto3.client('iam',aws_access_key_id=access_key_id,aws_secret_access_key=secret_key,region_name=region)
creds = iam.get_credential_report()
# First go from bytes to a list of strings
content = creds["Content"].decode("utf-8")
content_lines = content.split("\n")
# Initiate the reader, convert that to a list and turn that into a dict
creds_reader = csv.DictReader(content_lines, delimiter=",")
creds_dict = dict(enumerate(list(creds_reader)))
print(creds_dict)
结果将类似于此:
{0: {'user': '<root_account>', 'arn': 'arn:aws:iam::12456789088:root'....
{1: {'user': 'admin', 'arn': 'arn:aws:iam::12456789088:root'....
iam.get\u credential\u report()
的结果实际上已经是一个(嵌套的)dict
,但是感兴趣的内容通常是CSV格式的(作为字节,而不是
str
)。要亲自观看:
>>> list(creds.keys())
['Content', 'ReportFormat', 'GeneratedTime', 'ResponseMetadata']
你可以观察到内容是CSV格式的:
>>> creds['ReportFormat']
'text/csv'
最后,您可以使用
熊猫
和io
将其转换为一个漂亮且可用的DataFrame:
import io
import pandas as pd
df = pd.read_csv(io.BytesIO(creds['Content']))
或者,如果您已经知道哪些列是日期,并且希望进行一些日期/时间分析:
df = pd.read_csv(
io.BytesIO(creds['Content']),
parse_dates=['user_creation_time', 'password_last_used'] # etc.
)
在本期续篇中 主代码: 然后我需要得到一个最接近给定日期的值列表: 然后弄一张这样的桌子: 但如何才能得到这种格式的结果: 我在此上下文中使用pivot的所有尝试都没有成功。 更新 根据@Gordon Linoff和@xxx的建议,尝试重做使用Dinamic SQL的代码,现在开始: ‘op为(选择op.id_object,op.id_param,name,op.cdate,op.value,RO
问题内容: 如何将2.5E7更改为2,500,000.00? 问题答案: 尝试: 看这里 如果您尝试解析2.5E7,则可以执行此操作
我正在使用Serenity与J在一起。我想知道如何将当前报告的serenity的默认徽标替换为自定义公司徽标。更改默认徽标需要做什么?
我的PDF框有格式问题。我的目标是以表格格式将PDF打印为报告。内容格式类似于 我检索我的数据库结果集并有一个Java对象列表。我提取所需的信息并将它们格式化为如下字符串列表。我循环遍历对象,构造一个字符串并添加到arrayList。我的想法是创建一个长度/样式完全相同的字符串列表,以在pdf中强制执行格式。 代码参考 输出: 我打印出这个列表多次屏幕:)和通过System.out或记录器的格式是
我在AWS云服务中设置了一个项目。在那里我使用了EC2实例、AMI、弹性IP、互联网门路、NACL、路由表、安全组、自定义VPC、私有和公共子网、弹性负载平衡、自动伸缩、启动配置、KMS-key、Lambda、RDS Aurora实例、S3桶、简单电子邮件服务、简单队列服务、简单通知服务、云观察日志。现在我的客户要求将所有服务从现有的AWS帐户迁移到新的AWS帐户。