You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将旧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函数,逻辑如下:
    1. 接收新用户池的登录请求参数
    2. 调用旧Cognito API验证用户密码正确性
    3. 获取旧用户的属性、验证状态等信息
    4. 将用户信息写入新用户池
  • 在新用户池的「触发器」配置中,将「用户迁移」触发器关联该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_preference API实现。

内容的提问来源于stack exchange,提问作者shivam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 04:15:27