当前位置: 首页 > 知识库问答 >
问题:

将aws帐户的凭证报告格式更改为字典

谢璞
2023-03-14

我希望使用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

有没有办法把它改成字典格式?

共有2个答案

尉迟雅昶
2023-03-14

对您可以使用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'....
郎恺
2023-03-14

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帐户。