在 AEM 实例之间迁移用户、组和 ACL

本文提供了在AEM中将具有ACL权限的用户和组从一台服务器迁移到另一台服务器或从一个AEM实例迁移到另一台服务器的不同方法。

描述 description

环境

Adobe Experience Manager

问题

如何在AEM中将具有ACL权限的用户和组从一台服务器迁移到另一台服务器或从一个AEM实例迁移到另一台服务器。

分辨率 resolution

第 1 步:找到管理员和匿名用户

  1. 前往 CRXDE Lite 应用程序 /crx/de/index.jsp 并以管理员用户身份登录(在源系统上)。

  2. 转到 工具 => 查询.

  3. 在底部 查询 框中,输入此查询以查找管理员用户: /jcr:root/home/users//element(*,rep:User)[ @rep:principalName="admin"].

  4. 单击 执行 并将结果中管理员用户节点的路径复制到文本文件中。

  5. 对匿名用户的查询重复步骤3: /jcr:root/home/users//element(*,rep:User)[ @rep:principalName="anonymous"].

  6. 单击 执行 并将结果中的匿名用户节点的路径复制到一个文本文件中(所以现在您有两个路径,一个用于“管理员”,一个用于“匿名”)。

    例如:

    /home/users/Q/QY5FIMXeQIbGpwZtQ3Dv – 源系统上的管理员用户
    /home/users/K/Kj1406Qo9IDODc_nk5Ib – 源系统上的匿名用户

步骤2A:迁移用户和组(使用Crx2Oak) 或Oak-upgrade)

用户和组可以使用 crx2oak 或者 oak-upgrade 工具在 AEM 示例之间迁移。

  1. 下载与您正在使用的Oak版本匹配的crx2oak或oak-upgrade jar:

    1. Oak-upgrade:https://repo1.maven.org/maven2/org/apache/jackrabbit/oak-upgrade
    2. Crx2Oak:Maven 存储库
  2. 将jar文件上载到AEM服务器。

  3. 停止AEM(源和目标实例)。

  4. 在下面的命令中替换 jar 文件的名称。

  5. 替换 /home/users/Q/QY5FIMXeQIbGpwZtQ3Dv/home/users/K/Kj1406Qo9IDODc_nk5Ib 在 --exclude-paths 带有来自您的源系统的管理员和匿名用户的路径的以下命令的部分参数。

  6. 在线修改路径以匹配您的实例(添加 segment-old: 在路径之前(如果需要),请参阅 此处):

    /opt/aem-source/crx-quickstart/repository /opt/aem-destination/crx-quickstart/repository

  7. 然后在服务器的shell上运行命令:

    code language-none
    java -Xms2g -Xmx2g -jar oak-upgrade-1.8.12.jar \
    --include-paths=/home \
    --merge-paths=/home \
    --exclude-paths=/home/users/Q/QY5FIMXeQIbGpwZtQ3Dv,/home/users/K/Kj1406Qo9IDODc_nk5Ib,/home/groups/a/administrators,/home/groups/a/analytics-administrators,/home/groups/c/community-moderators,/home/groups/c/content-authors,/home/groups/c/contributor,/home/groups/community/community-groupadmin,/home/groups/community/community-sitecontentmanager,/home/groups/community/community-sitemembers,/home/groups/d/dam-users,/home/groups/default/order-administrators,/home/groups/e/everyone,/home/groups/f/forms-users,/home/groups/forms/fd-administrators,/home/groups/forms/forms-users,/home/groups/geometrixx,/home/groups/media,/home/groups/o/operators,/home/groups/projects,/home/groups/t/tag-administrators,/home/groups/t/target-activity-authors,/home/groups/u/user-administrators,/home/groups/w/workflow-editors,/home/groups/w/workflow-users,/home/users/a/admin,/home/users/a/anonymous,/home/users/mac,/home/users/media,/home/users/projects,/home/users/system,/home/rep:policy,/home/users/rep:policy,/home/groups/rep:policy \
    segment-old:/opt/aem-source/crx-quickstart/repository /opt/aem-destination/crx-quickstart/repository > upgradeusers.log &
    
  8. 完成后,请转到步骤 3 迁移 ACL。  如果您无法使用Crx2Oak进行迁移,请按照下面的包迁移步骤进行操作。

步骤 2B:迁移用户和组(使用包)

如果用户不是通过LDAP/SAML身份验证或Crx2Oak自动导入的(上述步骤2A),则您可以打包用户和组。

在这种情况下,您将在旧系统上创建两个单独的包(不包括管理员和匿名的开箱即用用户)。

执行以下步骤:

  1. 从步骤1的结果中复制匿名用户节点和管理员用户节点的路径(第1步:找到管理员和匿名用户)。

    例如:

    /home/users/Q/QY5FIMXeQIbGpwZtQ3Dv — 您正在创建包的系统上的管理员用户,或者

    /home/users/K/Kj1406Qo9IDODc_nk5Ib — 要创建包的系统上的匿名用户

  2. 转到 包管理器,  http://host:port/crx/packmgr/index.jsp,并以管理员身份登录。

  3. 创建包 用户.

  4. 将过滤器添加到的包配置 /home/users 有了这些“排除”规则(在 /home/usersfilter):

    1. 不包括/home/users/。*/.tokens
    2. 不包括/home/users/Q/QY5FIMXeQIbGpwZtQ3Dv
    3. 不包括/home/users/K/Kj1406Qo9IDODc_nk5Ib
    4. 排除/home/users/a/admin
    5. 排除/home/users/a/anonymous
    6. 排除/home/users/system
    7. 排除/home/users/geometrixx
    8. 排除/home/users/media
    9. 排除/home/users/projects
    10. 排除/home/users/mac
  5. 构建包。

  6. 下载包。

  7. 在您的计算机上解压压缩包 zip 文件:jar -xvf users.zip META-INF/vault/filter.xml

  8. 在文本编辑器中打开 META-INF/vault/filter.xml 文件。

  9. 添加模式= 合并<filter ...> 标记,例如:

    code language-none
    <?xml version="1.0" encoding="UTF-8"?>
    <workspaceFilter version="1.0">
    <filter root="/home/users" mode="merge">
    <exclude pattern="/home/users/.*/.tokens"/>
    <exclude pattern="/home/users/Q/QY5FIMXeQIbGpwZtQ3Dv"/>
    <exclude pattern="/home/users/K/Kj1406Qo9IDODc_nk5Ib"/>
    <exclude pattern="/home/users/a/admin"/>
    <exclude pattern="/home/users/a/anonymous"/>
    <exclude pattern="/home/users/system"/>
    <exclude pattern="/home/users/geometrixx"/>
    <exclude pattern="/home/users/media"/>
    <exclude pattern="/home/users/projects"/>
    <exclude pattern="/home/users/mac"/>
    </filter>
    </workspaceFilter>
    
  10. 重新压缩修改后的包内容,使其包含更改。

    jar -uvf users.zip META-INF/vault/filter.xml

  11. 创建  包含筛选规则的包 /home/groups.

  12. 对组包重复步骤 11 – 14。

  13. (仅限升级)如果执行迁移到较新的 AEM 版本,则安装​ 旧版本的 ​新本地 AEM 实例(没有示例内容),然后安装用户包,然后安装组包。然后,在该实例上执行就地升级到新版本。 这会将用户转换为新的 Oak 呈现。 就地升级后,再次重新打包用户以将它们移植到您的预期升级实例。 对用户组执行相同的操作。

  14. 在新系统上安装用户包。

  15. 在新系统上安装组包。

  16. 如果您要从旧版AEM迁移到6.3,请转到 /useradmin UI并将用户复制接收者添加到 管理员 组。

步骤 3. 迁移 ACL

如果您可以将工具 (ACS Commons) 安装到 AEM,请按照以下步骤操作:

  1. 下载并安装 ACS Commons。

  2. 按照此处提供的步骤创建 ACL 包。

  3. 转到  http://aem-host:port/crx/packmgr/index.jsp  并以管理员身份登录。

  4. 单击 ACL 包。

  5. 点击编辑。

  6. 选择高级选项卡(请参见下面的屏幕快照)。

  7. 在AC处理下拉菜单中,选择 合并 以避免移除目标系统上的现有ACL。

    在不同版本的 AEM 之间迁移 ACL 时,这一点尤其重要(因为它可以避免移除现成的 ACL)。

如果您是   能够将工具(ACS Commons)安装到AEM,然后按照以下步骤操作。
请注意,运行这些命令的机器必须是Mac OS、Linux或Windows(使用Cygwin),并且安装了curl、python和Java SDK。

  1. 转到  http://src-aem-host:port/crx/packmgr/index.jsp  并以管理员身份登录。

  2. 创建名为的软件包 ACL迁移.

  3. 单击 编辑 按钮。

  4. 选择 高级 选项卡和设置 AC处理模式合并.

  5. 进行保存。

  6. 构建包并下载它。

  7. 在文件系统上,对包运行此命令以提取 META-INF/vault/filter.xml 文件:

    jar -xvf ACL-migration-1.0.zip META-INF/vault/filter.xml

  8. 在同一目录中,运行此命令以下载ACL路径的json文件 /content 从源实例(设置用户名、密码和正确的主机):

    curl -u admin:admin 'http://aemhost/crx/de/query.jsp?' -G --data-urlencode '_dc=1507011481908&_charset_=utf-8&type=xpath&stmt=/jcr:root/content//element(*,rep:ACL)&showResults=true' > data.json

  9. 创建文件 generate-package-filter.py 并在其中粘贴Python代码:\

    code language-none
    import json
    from pprint import pprint
    
    with open ('data.json') as data_file:
        data = json.load(data_file)
    
    print("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
    print("<workspaceFilter version=\"1.0\">")
    form item in data[ "results"] :
        print("<filter root=\"{path}\" />" . format(path=item[  "path"] ))
    print("</workspaceFilter>")
    
  10. 从相同的文件夹运行python脚本,其中 data.json 创建并将输出保存到 META-INF/vault/filter.xml (替换现有内容 filter.xml):

    python generate-packge-filter.py > META-INF/vault/filter.xml

  11. 使用此命令更新 filter.xml 在zip文件中:

    jar -uvf ACL-migration-1.0.zip META-INF/vault/filter.xml

  12. 将zip文件上传到源实例包管理器:  http://src-aem-host:port/crx/packmgr/index.jsp

  13. 单击 构建 或者 重建 构建包。

  14. 从源 AEM 服务器下载包。

  15. 将包上载到目标AEM服务器的包管理器:  http://dst-aem-host:port/crx/packmgr/index.jsp

  16. 单击 安装 可安装包。

  17. 对更改路径 curl 命令的任何其他路径重复步骤 8 – 16。例如,这将使ACL /etc 而不是 /content

curl -u admin:admin 'http://aemhost/crx/de/query.jsp?' -G --data-urlencode '_dc=1507011481908&_charset_=utf-8&type=xpath&stmt=/jcr:root/etc//element(*,rep:ACL)&showResults=true' > data.json

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f