如何通过API列出AWS组织各账号的所有关联用户?
实现AWS账号下所有用户的批量查询
完全可以实现和控制台一致的效果,只是无法通过单一API直接完成,需要结合两个SSO Admin API组合操作,具体步骤如下:
第一步:获取目标账号关联的所有权限集
使用SSOAdmin.Client.list_permission_sets_provisioned_to_account接口,传入目标账号ID,即可拿到该账号下所有已部署的权限集列表。示例Python调用:import boto3 sso_admin = boto3.client('sso-admin') def get_account_permission_sets(account_id): response = sso_admin.list_permission_sets_provisioned_to_account( InstanceArn='你的SSO实例ARN', AccountId=account_id ) return response['PermissionSets']第二步:遍历权限集查询账号分配记录
对每个权限集,调用SSOAdmin.Client.list_account_assignments接口,传入账号ID和权限集ARN,获取该权限集对应的用户/组分配数据。第三步:去重整理用户列表
同一个用户可能被分配到多个权限集,需要对返回的用户信息去重,最终得到账号下的所有SSO用户。如果需要用户详情,可结合identitystore.describe_user接口获取。示例逻辑:def get_account_users(account_id): permission_sets = get_account_permission_sets(account_id) user_ids = set() for ps in permission_sets: paginator = sso_admin.get_paginator('list_account_assignments') for page in paginator.paginate( InstanceArn='你的SSO实例ARN', AccountId=account_id, PermissionSetArn=ps ): for assignment in page['AccountAssignments']: if assignment['PrincipalType'] == 'USER': user_ids.add(assignment['PrincipalId']) # 获取用户详情 identity_store = boto3.client('identitystore') user_details = [] for uid in user_ids: user = identity_store.describe_user( IdentityStoreId='你的身份存储ID', UserId=uid ) user_details.append(user) return user_details
补充说明:
- 需确保执行操作的IAM身份拥有
ssso-admin:ListPermissionSetsProvisionedToAccount、sso-admin:ListAccountAssignments以及identitystore:DescribeUser(如需用户详情)的权限。 - 若账号下存在IAM Identity Center(原SSO)之外创建的IAM用户,需单独调用
IAM.Client.list_users接口查询这类用户。
内容的提问来源于stack exchange,提问作者Bruno Souza
相关产品推荐
相关产品推荐

