列出作为管理员的 IAM 用户 - 适用于 Ruby 的 AWS 开发工具包
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

列出作为管理员的 IAM 用户

以下示例使用 get_account_authorization_details 方法来获取当前账户的用户列表。

选择 Copy 将代码保存在本地。

创建文件 get_admins.rb

添加必需的 IAM Gem 和 os Gem,并通过后者来使用捆绑证书(如果在 Microsoft Windows 上运行)。

注意

AWS SDK for Ruby版本 2 没有特定于服务的 Gem。

require 'aws-sdk-iam' # v2: require 'aws-sdk' require 'os' if OS.windows? Aws.use_bundled_cert! end

创建一种方法来确定用户是否具有包含管理员权限的策略。

def user_has_admin_policy(user, admin_access) policies = user.user_policy_list policies.each do |p| if p.policy_name == admin_access return true end end false end

创建一种方法来确定用户是否具有包含管理员权限的附加策略。

def user_has_attached_policy(user, admin_access) attached_policies = user.attached_managed_policies attached_policies.each do |p| if p.policy_name == admin_access return true end end false end

创建一种方法来确定用户属于的组是否具有包含管理员权限的策略。

创建一种方法来确定用户属于的组是否具有包含管理员权限的附加策略。

def group_has_admin_policy(client, group, admin_access) resp = client.list_group_policies( group_name: group.group_name ) resp.policy_names.each do |name| if name == admin_access return true end end false end

创建一种方法来确定用户属于的组是否具有管理员权限。

def user_has_admin_from_group(client, user, admin_access) resp = client.list_groups_for_user( user_name: user.user_name ) resp.groups.each do |group| has_admin_policy = group_has_admin_policy(client, group, admin_access) if has_admin_policy return true end has_attached_policy = group_has_attached_policy(client, group, admin_access) if has_attached_policy return true end end false end

创建一种方法来确定用户是否具有管理员权限。

def is_user_admin(client, user, admin_access) has_admin_policy = user_has_admin_policy(user, admin_access) if has_admin_policy return true end has_attached_admin_policy = user_has_attached_policy(user, admin_access) if has_attached_admin_policy return true end has_admin_from_group = user_has_admin_from_group(client, user, admin_access) if has_admin_from_group return true end false end

创建一种方法来循环访问用户列表并返回其中有多少个用户具有管理员权限。

<code>

主例程从此处开始。创建 IAM 客户端和变量来存储用户数、具有管理员权限的用户数以及标识提供管理员权限的策略的字符串。

def get_admin_count(client, users, admin_access) num_admins = 0 users.each do |user| is_admin = is_user_admin(client, user, admin_access) if is_admin puts user.user_name num_admins += 1 end end num_admins end

调用 get_account_authorization_details 以从 user_detail_list 获取账户详细信息和获取账户用户。 跟踪我们获取了多少用户,调用 get_admin_count 以获取具有管理员权限的用户数,并跟踪这些用户的数量。

details = client.get_account_authorization_details( filter: ['User'] ) users = details.user_detail_list num_users += users.count more_admins = get_admin_count(client, users, access_admin) num_admins += more_admins

如果第一个对 get_account_authorization_details 的调用没有获取所有详细信息,则再次调用它并重复确定多少用户具有管理员权限的过程。

<code>

最后,显示多少用户具有管理员权限。

more_users = details.is_truncated

而 more_users
details = client.get_account_authorization_details(

筛选条件:[“User”], 标记: details.marker

)

用户 = details.user_detail_list

num_users += users.count more_admins = get_admin_count(client, users, access_admin) num_admins += more_admins

more_users = details.is_truncated

结束

请参阅 上的完整示例GitHub。