在 AEM 实例之间迁移用户、组和 ACL
本文提供了在AEM中将具有ACL权限的用户和组从一台服务器迁移到另一台服务器或从一个AEM实例迁移到另一台服务器的不同方法。
描述 description
环境
Adobe Experience Manager (AEM)
问题/症状
在AEM中将具有ACL权限的用户和组从一台服务器迁移到另一台服务器或从一个AEM实例迁移到另一台服务器。
分辨率 resolution
第 1 步:找到管理员和匿名用户
-
前往CRXDE Lite应用
/crx/de/index.jsp
并以 管理员用户 的身份登录(在源系统上)。 -
转到 工具
=>
查询。 -
在底部的 查询 框中,输入此查询以查找管理员用户:
/jcr:root/home/users//element(*,rep:User)[ @rep:principalName="admin"]
。 -
单击 执行,并将结果中管理员用户节点的路径复制到文本文件中。
-
对匿名用户的查询重复步骤3:
/jcr:root/home/users//element(*,rep:User)[ @rep:principalName="anonymous"]
。 -
单击 执行,并将结果中匿名用户节点的路径复制到一个文本文件中(因此现在您有两个路径,一个用于“管理员”,一个用于“匿名”)。
例如:/home/users/Q/QY5FIMXeQIbGpwZtQ3Dv
– 源系统上的管理员用户/home/users/K/Kj1406Qo9IDODc_nk5Ib
– 源系统上的匿名用户
步骤2A:迁移用户和组(使用Crx2Oak或Oak-upgrade)
用户和组可以使用 crx2oak 或者 oak-upgrade 工具在 AEM 示例之间迁移。
-
下载与您正在使用的Oak版本匹配的crx2oak或oak-upgrade jar:
- Oak-upgrade:https://repo1.maven.org/maven2/org/apache/jackrabbit/oak-upgrade
- Crx2Oak:Maven 存储库
-
将jar文件上载到AEM服务器。
-
停止AEM(源和目标实例)。
-
在下面的命令中替换 jar 文件的名称。
-
将以下命令的
--exclude-paths
部分参数中的/home/users/Q/QY5FIMXeQIbGpwZtQ3Dv
,/home/users/K/Kj1406Qo9IDODc_nk5Ib
替换为来自您的源系统的管理员和匿名用户的路径。 -
在线修改路径以匹配您的实例(如果需要,在路径前添加
segment-old:
,请参见此处):/opt/aem-source/crx-quickstart/repository /opt/aem-destination/crx-quickstart/repository
-
然后在服务器的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 &
-
完成后,请转到步骤 3 迁移 ACL。 如果您无法使用Crx2Oak进行迁移,请按照下面的包迁移步骤进行操作。
步骤 2B:迁移用户和组(使用包)
如果用户不是通过LDAP/SAML身份验证或Crx2Oak自动导入的(上述步骤2A),则您可以打包用户和组。
在这种情况下,您将在旧系统上创建两个单独的包(不包括管理员和匿名的开箱即用用户)。
执行以下步骤:
-
从上面步骤1 (步骤1:查找管理员和匿名用户)的结果中复制匿名和管理员用户节点的路径。
例如:
/home/users/Q/QY5FIMXeQIbGpwZtQ3Dv
— 您正在创建包的系统上的管理员用户,或者/home/users/K/Kj1406Qo9IDODc_nk5Ib
— 您正在创建包的系统上的匿名用户 -
前往 包管理器
http://host:port/crx/packmgr/index.jsp
,并以 管理员 的身份登录。 -
创建包 用户。
-
使用这些排除规则(在
/home/users
筛选器上)将筛选器添加到/home/users
的包配置中:- 不包括/home/users/。*/.tokens
- 不包括/home/users/Q/QY5FIMXeQIbGpwZtQ3Dv
- 不包括/home/users/K/Kj1406Qo9IDODc_nk5Ib
- 排除/home/users/a/admin
- 排除/home/users/a/anonymous
- 排除/home/users/system
- 排除/home/users/geometrixx
- 排除/home/users/media
- 排除/home/users/projects
- 排除/home/users/mac
-
构建包。
-
下载包。
-
在您的计算机上解压压缩包 zip 文件:
jar -xvf users.zip META-INF/vault/filter.xml
-
在文本编辑器中打开
META-INF/vault/filter.xml
文件。 -
将模式= merge 添加到
<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>
-
重新压缩修改后的包内容,使其包含更改。
jar -uvf users.zip META-INF/vault/filter.xml
-
创建包含筛选规则
/home/groups
的 组 包。 -
对组包重复步骤1-10。
-
(仅限升级)如果执行到较新AEM版本的迁移,则安装旧版本的新本地AEM实例 (带
nosamplecontent
),然后安装用户包,然后安装组包。 然后,在该实例上执行就地升级到新版本。 这会将用户转换为新的 Oak 呈现。 就地升级后,再次重新打包用户以将它们移植到您的预期升级实例。 对用户组执行相同的操作。. 在新系统上安装用户包。. 在新系统上安装组包。. 如果您要从旧AEM版本迁移到6.3,请转到
/useradmin
UI并将用户复制接收者添加到 管理员 组。
****步骤 3. 迁移 ACL**请注意,运行这些命令的机器必须是Mac OS、Linux或Windows(使用Cygwin),并且安装了curl、python和Java SDK。1) 前往http://src-aem-host:port/crx/packmgr/index.jsp,
并以 管理员 的身份登录。
-
创建名为 ACL-migration 的包。
-
单击 编辑 按钮。
-
选择 高级 选项卡,并将 AC处理模式 设置为 合并。
-
进行保存。
-
构建包并下载它。
-
在文件系统上,对包运行此命令以提取
META-INF/vault/filter.xml
文件:jar -xvf ACL-migration-1.0.zip META-INF/vault/filter.xml
-
在同一目录中,运行此命令从源实例下载
/content
下ACL路径的json文件(设置用户名、密码和正确的主机):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
-
创建文件
generate-package-filter.py
并在其中粘贴Python代码:\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>")
-
从创建
data.json
的同一文件夹中运行python脚本,并将输出保存到META-INF/vault/filter.xml
(替换filter.xml
的现有内容):python generate-packge-filter.py > META-INF/vault/filter.xml
-
使用此命令在 zip 文件中更新
filter.xml
:jar -uvf ACL-migration-1.0.zip META-INF/vault/filter.xml
-
将zip文件上载到源实例包管理器:
http://src-aem-host:port/crx/packmgr/index.jsp
-
单击 构建 或者 重建 构建包。
-
从源 AEM 服务器下载包。
-
将包上载到目标AEM服务器的包管理器:
http://dst-aem-host:port/crx/packmgr/index.jsp
-
单击 安装 可安装包。
-
对更改路径 curl 命令的任何其他路径重复步骤 8 – 16。例如,这将使位于
/etc
下的ACL 代替/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
**