【问题标题】:Using boto (AWS Python), how do I get a list of IAM users?使用 boto (AWS Python),我如何获取 IAM 用户列表?
【发布时间】:2014-03-18 20:35:52
【问题描述】:

新手问题。我希望能够执行以下操作:

import boto
from boto.iam.connection import IAMConnection
cfn = IAMConnection()
cfn.get_all_users()
for user in userList:
    print user.user_id

连接工作正常,但最后一行返回错误“'unicode' object has no attribute 'user_id'”。

我做了一个type(userList),它报告类型为 ,这似乎 (?) 没有记录在案。使用普通的 JSON 解析似乎也不起作用。

another source 看来,意图是这样的操作的结果应该是“python 化的”。

无论如何,我对 boto 还是很陌生,所以我认为有一些简单的方法可以做到这一点,我只是没有偶然发现。

谢谢!

【问题讨论】:

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


    【解决方案1】:

    对于一些较旧的 AWS 服务,boto 从服务中获取 XML 响应并将它们转换为漂亮的 Python 对象。对于其他人,它接收 XML 响应并将其直接转译为原生 Python 数据结构。 boto.iam 模块属于后一种形式。所以,get_all_users() 返回的实际数据是这样的:

    {u'list_users_response':
      {u'response_metadata': {u'request_id': u'8d694cbd-93ec-11e3-8276-993b3edf6dba'},   
       u'list_users_result': {u'users': 
         [{u'path': u'/', u'create_date': u'2014-01-21T17:19:45Z', u'user_id': 
           u'<userid>', u'arn': u'<arn>', u'user_name': u'foo'},
          {...next user...}
         ]
      }
    }
    

    所以,您想要的所有数据都在那里,只是有点难以找到。返回的boto.jsonresponse.Element 对象确实给了你一点帮助。你实际上可以这样做:

    data = cfn.get_all_users()
    for user in data.user:
        print(user['user_name'])
    

    但在大多数情况下,您只需要在返回的数据中挖掘即可找到您要查找的内容。

    【讨论】:

    • 太棒了,谢谢!这最终对我有用:` data = cfn.get_all_users() for user in data.list_users_result.users: print(user.user_name)`
    • 我现在放弃尝试在 cmets 中格式化代码,arg。可以说我需要遍历data.list_usres_result.users,它就像一个魅力。
    • boto3 带来的好处之一是所有服务之上的统一对象层,这样您就不必在低级数据结构中乱七八糟了。
    • 不错!敬请期待。
    猜你喜欢
    • 2017-08-14
    • 1970-01-01
    • 2018-02-18
    • 2016-03-11
    • 2023-01-21
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多