【问题标题】:Change credential report format of aws account to dictionary将 aws 帐户的凭证报告格式更改为字典
【发布时间】:2021-07-09 13:09:33
【问题描述】:

我想要使用 boto3.Did 为我的 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,arn:aws:iam::407203256002:root,2021-03-23T04:31:49+00:00,not_supported,2021-04-14T12:01:30+00:00, not_supported,not_supported,false,true,2021-03-31T05:36:58+00:00,2021-04-14T12:42:00+00:00,us-east-1,iam,false,N/A, N/A,N/A,N/A,假,N/A,假,N/A\nuser-01,arn:aws:iam::407203256002:user/user-01,2021-03-31T12:17 :53+00:00,false,N/A,N/A,N/A,false,true,2021-03-31T12:17:55+00:00,N/A,N/A,N/A ,false,N/A,N/A,N/A,N/A,false,N/A,false,N/A\nuser-02,arn:aws:iam::407203256002:user/user-02, 2021-03-31T12:17:11+00:00,真实,否_信息,2021-03-31T12:17:14+00:00,2021-06-29T12:17:14+00:00,false,false,N/A,N/A,N/A,N/A,假,不适用,不适用,不适用,不适用,假,不适用,假,不适用\nuser_03,arn:aws:iam::407203256002:user/user_03,2021-04-07T12 :00:50+00:00,false,N/A,N/A,N/A,false,true,2021-04-07T12:00:52+00:00,N/A,N/A,N /A,false,N/A,N/A,N/A,N/A,false,N/A,false,N/A', 'ReportFormat': 'text/csv', 'GeneratedTime': 日期时间。 datetime(2021, 4, 14, 12, 48, 22, tzinfo=tzutc()), 'ResponseMetadata': {'RequestId': '5a82a64b-9e15-456f-a5db-95c6ae3918b1', 'HTTPStatusCode': 200, 'HTTPHeaders ':{'x-amzn-requestid':'5a82a64b-9e15-456f-a5db-95c6ae3918b1','content-type':'text/xml','content-length':'2129','vary':' accept-encoding', 'date': 'Wed, 14 Apr 2021 12:50:39 GMT'}, 'RetryAttempts': 0}}

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

【问题讨论】:

    标签: python amazon-web-services boto3 amazon-iam


    【解决方案1】:

    iam.get_credential_report() 的结果实际上已经是(嵌套的)dict,但感兴趣的部分 'Content' 通常是 CSV 格式(如 bytes,而不是 str)。亲眼看看:

    >>> list(creds.keys())
    ['Content', 'ReportFormat', 'GeneratedTime', 'ResponseMetadata']
    

    可以观察到内容是CSV格式的:

    >>> creds['ReportFormat']
    'text/csv'
    

    最后,您可以使用pandasio 将其转换为漂亮且可用的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.
    )
    

    【讨论】:

      【解决方案2】:

      是的。您可以使用 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'....
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-23
        相关资源
        最近更新 更多