本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
列出作为管理员的 IAM 用户
以下示例使用 get_account_authorization_details 方法来获取当前账户的用户列表。
选择 Copy
将代码保存在本地。
创建文件 get_admins.rb。
添加必需的 IAM Gem 和 os Gem,并通过后者来使用捆绑证书(如果在 Microsoft Windows 上运行)。
注意
适用于 Ruby 的 Amazon SDK 版本 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
- while more_users
-
- details = client.get_account_authorization_details(
-
filter: [‘User’], marker: details.marker
)
users = 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
end
请参阅 GitHub 上的完整示例