如何将旧AWS账户中600个AWS Cognito用户迁移至新账户?
AWS Cognito跨账户迁移用户方案
完全可以实现跨AWS账户迁移Cognito用户,针对你600个用户的规模,推荐以下几种可行方案:
方案一:批量导出+导入(简单高效,适合小批量)
- 导出旧账户用户数据
登录旧账户的Cognito控制台,进入目标用户池的「用户和组」页面,点击「导出用户」,选择CSV格式导出。导出文件会包含用户名、邮箱、手机号、属性验证状态等核心信息(注意:默认不会导出密码哈希值)。
也可通过CLI命令导出:aws cognito-idp list-users --user-pool-id <旧用户池ID> --region <区域> --output csv > users.csv - 整理导入数据
核对新用户池的属性配置(必填属性、自定义属性),确保导出的CSV列与新池属性匹配,保留验证状态列,避免用户迁移后需要重新验证。 - 导入到新账户用户池
登录新账户的Cognito控制台,进入目标用户池的「用户和组」页面,点击「导入用户」,上传整理好的CSV文件,配置导入规则(如是否覆盖重复用户、错误处理方式)。
注意:如果需要保留用户原密码,这种方法不适用,导入后用户需重置密码,可结合批量发送临时密码通知的方式处理。
方案二:用户迁移Lambda(保留原密码,自动迁移)
如果希望用户无需重置密码,可通过Lambda触发器实现登录时自动迁移:
- 在旧账户创建IAM角色,授予新账户Lambda访问旧Cognito的
adminGetUser、adminInitiateAuth等权限。 - 在新账户编写Lambda函数,逻辑如下:
- 接收新用户池的登录请求参数
- 调用旧Cognito API验证用户密码正确性
- 获取旧用户的属性、验证状态等信息
- 将用户信息写入新用户池
- 在新用户池的「触发器」配置中,将「用户迁移」触发器关联该Lambda函数。
用户首次在新池登录时,会自动完成迁移,全程无感知。
方案三:自定义脚本迁移(灵活可控)
用AWS SDK编写脚本实现全量迁移,以Python的boto3为例:
- 配置双账户的AWS凭证(可通过配置文件或环境变量区分旧、新账户)
- 遍历旧用户池所有用户:
import boto3 old_cognito = boto3.client('cognito-idp', region_name='<区域>', profile_name='旧账户配置') new_cognito = boto3.client('cognito-idp', region_name='<区域>', profile_name='新账户配置') def get_all_users(user_pool_id): users = [] paginator = old_cognito.get_paginator('list_users') for page in paginator.paginate(UserPoolId=user_pool_id): users.extend(page['Users']) return users old_users = get_all_users('<旧用户池ID>') - 批量创建用户到新池:
若需保留密码,需确保新旧用户池的密码哈希算法一致,并从旧池获取密码哈希值和盐,通过for user in old_users: attributes = [{'Name': attr['Name'], 'Value': attr['Value']} for attr in user['Attributes']] # 保留验证状态 user_status = user['UserStatus'] new_cognito.admin_create_user( UserPoolId='<新用户池ID>', Username=user['Username'], UserAttributes=attributes, MessageAction='SUPPRESS' # 避免自动发送验证邮件/短信 ) # 根据旧用户状态设置新用户验证状态(如确认用户) if user_status == 'CONFIRMED': new_cognito.admin_confirm_sign_up( UserPoolId='<新用户池ID>', Username=user['Username'] )admin_create_user的Password参数传入哈希值(需符合Cognito的哈希规则)。
注意事项
- 迁移前务必确保新旧用户池的属性配置完全匹配,避免导入/创建用户失败。
- 优先测试少量用户的迁移流程,验证属性、验证状态、登录功能正常后再批量操作。
- 若用户池开启了MFA,迁移时需同步MFA设备信息,可通过
admin_set_user_mfa_preferenceAPI实现。
内容的提问来源于stack exchange,提问作者shivam
相关产品推荐
相关产品推荐

