目标:限制节点可以使用的主题。
教程级别:高级
时间:20 分钟
内容
背景
修改
permissions.xml
签署策略文件
启动节点
使用模板
背景
在继续之前,请确保您已完成设置安全教程。
权限非常灵活,可以用来控制 ROS 图中的许多行为。
在本教程中,我们演示了一项仅允许在默认 chatter
主题上发布消息的策略。这将防止,例如,在启动侦听器时重新映射主题或将相同的安全飞地用于其他目的。
为了执行此政策,我们需要更新 permissions.xml
文件并在启动节点之前重新签署它。这可以通过手动修改权限文件或使用 XML 模板来完成。
修改 permissions.xml
首先备份您的权限文件,然后打开 permissions.xml
进行编辑:
cd ~/sros2_demo/demo_keystore/enclaves/talker_listener/talker
mv permissions.p7s permissions.p7s~
mv permissions.xml permissions.xml~
vi permissions.xml
我们将修改 <allow_rule>
以适应 <publish>
和 <subscribe>
。此 XML 文件中的主题使用 DDS 命名格式,而不是 ROS 名称。有关在 ROS 和 DDS 之间映射主题名称的详细信息,请参阅主题和服务名称设计文档。
将以下 XML 内容粘贴到 permission.xml
,保存文件并退出文本编辑器。这显示了 chatter
和 rosout
ROS 主题分别重命名为 DDS rt/chatter
和 rt/rosout
主题。
<dds xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.omg.org/spec/DDS-SECURITY/20170901/omg_shared_ca_permissions.xsd">
<!-- 定义 DDS 安全配置文件,并指定 XML schema 的位置 -->
<permissions>
<!-- 权限定义的开始 -->
<grant name="/talker_listener/talker">
<!-- 定义一个权限授予,命名为 "/talker_listener/talker" -->
<subject_name>CN=/talker_listener/talker</subject_name>
<!-- 指定主体名称,即被授予权限的实体,CN 是通用名称 -->
<validity>
<not_before>2021-06-01T16:57:53</not_before>
<!-- 权限开始生效的时间 -->
<not_after>2031-05-31T16:57:53</not_after>
<!-- 权限失效的时间 -->
</validity>
<!-- 定义权限的有效期 -->
<allow_rule>
<!-- 允许规则的开始 -->
<domains>
<id>0</id>
<!-- 定义域 ID 为 0 -->
</domains>
<publish>
<!-- 定义发布权限 -->
<topics>
<topic>rt/chatter</topic>
<!--