14.9. 使用 libvirt secret 保护 iSCSI 存储池

可以使用 virsh 配置用户名和密码参数,来保护 iSCSI 存储池的安全。您可以在定义池之前或之后配置它,但必须启动池才能使验证设置生效。

以下提供了使用 libvirt secret 保护基于 iSCSI 的存储池的说明。

注意

如果在创建 iSCSI 目标时定义了 user_ID密码,则需要这个流程。

先决条件

流程

  1. 创建具有质询握手身份验证协议(CHAP)用户名的 libvirt secret 文件。例如:

    <secret ephemeral='no' private='yes'>
        <description>Passphrase for the iSCSI example.com server</description>
        <usage type='iscsi'>
            <target>iscsirhel7secret</target>
        </usage>
    </secret>
  2. 使用 virsh secret-define 命令定义 libvirt secret:

    # virsh secret-define secret.xml
  3. 使用 virsh secret-list 命令验证 UUID:

    # virsh secret-list
    UUID                                       Usage
    --------------------------------------------------------------
    2d7891af-20be-4e5e-af83-190e8a922360      iscsi iscsirhel7secret
  4. 使用 virsh secret-set-value 命令,为上一步输出中的 UUID 分配 secret。这样可保证 CHAP 用户名和密码位于由 libvirt 控制的 secret 列表中。例如:

    # virsh secret-set-value --interactive 2d7891af-20be-4e5e-af83-190e8a922360
    Enter new value for secret:
    Secret value set
  5. 使用 virsh edit 命令在存储池的 XML 文件中添加一个身份验证条目,并添加 <auth> 元素,指定 authentication typeusernamesecret usage。例如:

    <pool type='iscsi'>
      <name>iscsirhel7pool</name>
        <source>
           <host name='192.0.2.1'/>
           <device path='iqn.2010-05.com.example.server1:iscsirhel7guest'/>
           <auth type='chap' username='_example-user_'>
              <secret usage='iscsirhel7secret'/>
           </auth>
        </source>
      <target>
        <path>/dev/disk/by-path</path>
      </target>
    </pool>
    注意

    <auth> 子元素位于虚拟机的 <pool><disk> XML 元素的不同位置。对于 <pool><auth><source> 元素中指定,这描述了在哪里查找池源,因为身份验证是某些池源(iSCSI 和 RBD)的属性。对于是域子元素的 <disk>,对 iSCSI 或 RBD 磁盘的身份验证是磁盘的一个属性。另外,磁盘的 <auth> 子元素与存储池的 <auth> 子元素不同。

    <auth username='redhat'>
      <secret type='iscsi' usage='iscsirhel7secret'/>
    </auth>
  6. 要激活更改,激活存储池。如果池已启动,停止并重启存储池:

    # virsh pool-destroy iscsirhel7pool
    # virsh pool-start iscsirhel7pool