formatsecret.html.in 11.4 KB
Newer Older
1
<?xml version="1.0" encoding="UTF-8"?>
2
<!DOCTYPE html>
3
<html xmlns="http://www.w3.org/1999/xhtml">
M
Miloslav Trmač 已提交
4 5 6 7 8
  <body>
    <h1>Secret XML format</h1>

    <ul id="toc"></ul>

9
    <h2><a id="SecretAttributes">Secret XML</a></h2>
M
Miloslav Trmač 已提交
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

    <p>
      Secrets stored by libvirt may have attributes associated with them, using
      the <code>secret</code> element.  The <code>secret</code> element has two
      optional attributes, each with values '<code>yes</code>' and
      '<code>no</code>', and defaulting to '<code>no</code>':
    </p>
    <dl>
      <dt><code>ephemeral</code></dt>
      <dd>This secret must only be kept in memory, never stored persistently.
      </dd>
      <dt><code>private</code></dt>
      <dd>The value of the secret must not be revealed to any caller of libvirt,
        nor to any other node.
      </dd>
    </dl>
    <p>
      The top-level <code>secret</code> element may contain the following
      elements:
    </p>
    <dl>
      <dt><code>uuid</code></dt>
      <dd>
        An unique identifier for this secret (not necessarily in the UUID
        format).  If omitted when defining a new secret, a random UUID is
        generated.
      </dd>
      <dt><code>description</code></dt>
      <dd>A human-readable description of the purpose of the secret.
      </dd>
M
Miloslav Trmač 已提交
40 41
      <dt><code>usage</code></dt>
      <dd>
M
Matthew Booth 已提交
42 43
        Specifies what this secret is used for.  A mandatory
        <code>type</code> attribute specifies the usage category, currently
J
John Ferlan 已提交
44 45 46
        only <code>volume</code>, <code>ceph</code>, <code>iscsi</code>,
        and <code>tls</code> are defined. Specific usage categories
        are described below.
M
Miloslav Trmač 已提交
47
      </dd>
M
Miloslav Trmač 已提交
48 49
    </dl>

50
    <h3><a id="VolumeUsageType">Usage type "volume"</a></h3>
M
Miloslav Trmač 已提交
51 52

    <p>
53 54 55 56 57 58
      This secret is associated with a volume, whether the format is either
      for a "qcow" or a "luks" encrypted volume. Each volume will have a
      unique secret associated with it and it is safe to delete the
      secret after the volume is deleted. The
      <code>&lt;usage type='volume'&gt;</code> element must contain a
      single <code>volume</code> element that specifies the path of the volume
59 60
      this secret is associated with. For example, create a volume-secret.xml
      file as follows:
M
Miloslav Trmač 已提交
61 62
    </p>

63
    <pre>
64 65 66 67 68 69 70
&lt;secret ephemeral='no' private='yes'&gt;
   &lt;description&gt;Super secret name of my first puppy&lt;/description&gt;
   &lt;uuid&gt;0a81f5b2-8403-7b23-c8d6-21ccc2f80d6f&lt;/uuid&gt;
   &lt;usage type='volume'&gt;
      &lt;volume&gt;/var/lib/libvirt/images/puppyname.img&lt;/volume&gt;
   &lt;/usage&gt;
&lt;/secret&gt;
71 72 73
    </pre>

    <p>
74
      Define the secret and set the passphrase as follows:
75 76
    </p>
    <pre>
77 78 79 80 81 82 83
# virsh secret-define volume-secret.xml
Secret 0a81f5b2-8403-7b23-c8d6-21ccc2f80d6f created
#
# MYSECRET=`printf %s "open sesame" | base64`
# virsh secret-set-value 0a81f5b2-8403-7b23-c8d6-21ccc2f80d6f $MYSECRET
Secret value set
#
84 85 86
    </pre>

    <p>
87 88
      The volume type secret can be supplied in domain XML for a qcow storage
      volume <a href="formatstorageencryption.html">encryption</a> as follows:
89 90
    </p>
    <pre>
91 92 93
&lt;encryption format='qcow'&gt;
  &lt;secret type='passphrase' uuid='0a81f5b2-8403-7b23-c8d6-21ccc2f80d6f'/&gt;
&lt;/encryption&gt;
94
    </pre>
S
Sage Weil 已提交
95

96 97 98 99 100 101 102 103 104
    <p>
      The volume type secret can be supplied either in volume XML during
      creation of a <a href="formatstorage.html#StorageVol">storage volume</a>
      in order to provide the passphrase to encrypt the volume or in
      domain XML <a href="formatdomain.html#elementsDisks">disk device</a>
      in order to provide the passphrase to decrypt the volume,
      <span class="since">since 2.1.0</span>. An example follows:
    </p>
    <pre>
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
# cat luks-secret.xml
&lt;secret ephemeral='no' private='yes'&gt;
   &lt;description&gt;LUKS Sample Secret&lt;/description&gt;
   &lt;uuid&gt;f52a81b2-424e-490c-823d-6bd4235bc57&lt;/uuid&gt;
   &lt;usage type='volume'&gt;
      &lt;volume&gt;/var/lib/libvirt/images/luks-sample.img&lt;/volume&gt;
   &lt;/usage&gt;
&lt;/secret&gt;

# virsh secret-define luks-secret.xml
Secret f52a81b2-424e-490c-823d-6bd4235bc57 created
#
# MYSECRET=`printf %s "letmein" | base64`
# virsh secret-set-value f52a81b2-424e-490c-823d-6bd4235bc57 $MYSECRET
Secret value set
#
121 122
    </pre>

123
    <h3><a id="CephUsageType">Usage type "ceph"</a></h3>
S
Sage Weil 已提交
124 125 126 127 128 129
    <p>
      This secret is associated with a Ceph RBD (rados block device).
      The <code>&lt;usage type='ceph'&gt;</code> element must contain
      a single <code>name</code> element that specifies a usage name
      for the secret.  The Ceph secret can then be used by UUID or by
      this usage name via the <code>&lt;auth&gt;</code> element of
130 131
      a <a href="formatdomain.html#elementsDisks">disk device</a> or
      a <a href="formatstorage.html">storage pool (rbd)</a>.
132 133 134 135 136
      <span class="since">Since 0.9.7</span>. The following is an example
      of the steps to be taken.  First create a ceph-secret.xml file:
    </p>

    <pre>
137 138 139 140 141 142
&lt;secret ephemeral='no' private='yes'&gt;
   &lt;description&gt;CEPH passphrase example&lt;/description&gt;
   &lt;usage type='ceph'&gt;
      &lt;name&gt;ceph_example&lt;/name&gt;
   &lt;/usage&gt;
&lt;/secret&gt;
143 144 145 146 147 148 149 150 151
    </pre>

    <p>
      Next, use <code>virsh secret-define ceph-secret.xml</code> to define
      the secret and <code>virsh secret-set-value</code> using the generated
      UUID value and a base64 generated secret value in order to define the
      chosen secret pass phrase.
    </p>
    <pre>
152 153 154 155 156 157 158 159 160 161 162 163 164
# virsh secret-define ceph-secret.xml
Secret 1b40a534-8301-45d5-b1aa-11894ebb1735 created
#
# virsh secret-list
 UUID                                 Usage
-----------------------------------------------------------
 1b40a534-8301-45d5-b1aa-11894ebb1735 cephx ceph_example
#
# CEPHPHRASE=`printf %s "pass phrase" | base64`
# virsh secret-set-value 1b40a534-8301-45d5-b1aa-11894ebb1735 $CEPHPHRASE
Secret value set

#
165 166 167 168 169 170 171
    </pre>

    <p>
      The ceph secret can then be used by UUID or by the
      usage name via the <code>&lt;auth&gt;</code> element in a domain's
      <a href="formatdomain.html#elementsDisks"><code>&lt;disk&gt;</code></a>
      element as follows:
S
Sage Weil 已提交
172
    </p>
173
    <pre>
174 175 176
&lt;auth username='myname'&gt;
  &lt;secret type='ceph' usage='ceph_example'/&gt;
&lt;/auth&gt;
177 178 179 180 181 182 183 184
    </pre>

    <p>
      As well as the <code>&lt;auth&gt;</code> element in a
      <a href="formatstorage.html">storage pool (rbd)</a>
      <code>&lt;source&gt;</code> element as follows:
    </p>
    <pre>
185 186 187
&lt;auth type='ceph' username='myname'&gt;
  &lt;secret usage='ceph_example'/&gt;
&lt;/auth&gt;
188
    </pre>
S
Sage Weil 已提交
189

190
    <h3><a id="iSCSIUsageType">Usage type "iscsi"</a></h3>
191 192 193 194 195

    <p>
      This secret is associated with an iSCSI target for CHAP authentication.
      The <code>&lt;usage type='iscsi'&gt;</code> element must contain
      a single <code>target</code> element that specifies a usage name
196
      for the secret. The iSCSI secret can then be used by UUID or by
197
      this usage name via the <code>&lt;auth&gt;</code> element of
198 199
      a <a href="formatdomain.html#elementsDisks">disk device</a> or
      a <a href="formatstorage.html">storage pool (iscsi)</a>.
200 201 202 203 204 205
      <span class="since">Since 1.0.4</span>. The following is an example
      of the XML that may be used to generate a secret for iSCSI CHAP
      authentication. Assume the following sample entry in an iSCSI
      authentication file:
    </p>
      <pre>
206 207 208 209 210
&lt;target iqn.2013-07.com.example:iscsi-pool&gt;
backing-store /home/tgtd/iscsi-pool/disk1
backing-store /home/tgtd/iscsi-pool/disk2
incominguser myname mysecret
&lt;/target&gt;
211 212 213 214 215 216 217 218 219
      </pre>
    <p>
      Define an iscsi-secret.xml file to describe the secret. Use the
      <code>incominguser</code> username used in your iSCSI authentication
      configuration file as the value for the <code>username</code> attribute.
      The <code>description</code> attribute should contain configuration
      specific data. The <code>target</code> name may be any name of your
      choosing to be used as the <code>usage</code> when used in the pool
      or disk XML description.
220
    </p>
M
Miloslav Trmač 已提交
221
    <pre>
222 223 224 225 226 227
&lt;secret ephemeral='no' private='yes'&gt;
   &lt;description&gt;Passphrase for the iSCSI example.com server&lt;/description&gt;
   &lt;usage type='iscsi'&gt;
      &lt;target&gt;libvirtiscsi&lt;/target&gt;
   &lt;/usage&gt;
&lt;/secret&gt;
228 229 230 231 232 233 234 235 236 237
    </pre>

    <p>
      Next, use <code>virsh secret-define iscsi-secret.xml</code> to define
      the secret and <code>virsh secret-set-value</code> using the generated
      UUID value and a base64 generated secret value in order to define the
      chosen secret pass phrase.  The pass phrase must match the password
      used in the iSCSI authentication configuration file.
    </p>
    <pre>
238 239 240 241 242 243 244 245 246 247 248 249
# virsh secret-define secret.xml
Secret c4dbe20b-b1a3-4ac1-b6e6-2ac97852ebb6 created

# virsh secret-list
 UUID                                 Usage
-----------------------------------------------------------
 c4dbe20b-b1a3-4ac1-b6e6-2ac97852ebb6 iscsi libvirtiscsi

# MYSECRET=`printf %s "mysecret" | base64`
# virsh secret-set-value c4dbe20b-b1a3-4ac1-b6e6-2ac97852ebb6 $MYSECRET
Secret value set
#
250 251 252 253 254 255 256 257 258
    </pre>

    <p>
      The iSCSI secret can then be used by UUID or by the
      usage name via the <code>&lt;auth&gt;</code> element in a domain's
      <a href="formatdomain.html#elementsDisks"><code>&lt;disk&gt;</code></a>
      element as follows:
    </p>
    <pre>
259 260 261
&lt;auth username='myname'&gt;
  &lt;secret type='iscsi' usage='libvirtiscsi'/&gt;
&lt;/auth&gt;
262 263 264 265 266 267 268 269
    </pre>

    <p>
      As well as the <code>&lt;auth&gt;</code> element in a
      <a href="formatstorage.html">storage pool (iscsi)</a>
      <code>&lt;source&gt;</code> element as follows:
    </p>
    <pre>
270 271 272
&lt;auth type='chap' username='myname'&gt;
  &lt;secret usage='libvirtiscsi'/&gt;
&lt;/auth&gt;
273
    </pre>
274

275
    <h3><a id="tlsUsageType">Usage type "tls"</a></h3>
J
John Ferlan 已提交
276 277 278 279 280 281 282 283 284 285 286 287 288

    <p>
      This secret may be used in order to provide the passphrase for the
      private key used to provide TLS credentials.
      The <code>&lt;usage type='tls'&gt;</code> element must contain a
      single <code>name</code> element that specifies a usage name
      for the secret.
      <span class="since">Since 2.3.0</span>.
      The following is an example of the expected XML and processing to
      define the secret:
    </p>

    <pre>
289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304
# cat tls-secret.xml
&lt;secret ephemeral='no' private='yes'&gt;
   &lt;description&gt;sample tls secret&lt;/description&gt;
   &lt;usage type='tls'&gt;
      &lt;name&gt;TLS_example&lt;/name&gt;
   &lt;/usage&gt;
&lt;/secret&gt;

# virsh secret-define tls-secret.xml
Secret 718c71bd-67b5-4a2b-87ec-a24e8ca200dc created

# virsh secret-list
 UUID                                 Usage
-----------------------------------------------------------
 718c71bd-67b5-4a2b-87ec-a24e8ca200dc  tls TLS_example
#
J
John Ferlan 已提交
305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

    </pre>

    <p>
      A secret may also be defined via the
      <a href="html/libvirt-libvirt-secret.html#virSecretDefineXML">
       <code>virSecretDefineXML</code></a> API.

      Once the secret is defined, a secret value will need to be set. The
      secret would be the passphrase used to access the TLS credentials.
      The following is a simple example of using
      <code>virsh secret-set-value</code> to set the secret value. The
      <a href="html/libvirt-libvirt-secret.html#virSecretSetValue">
      <code>virSecretSetValue</code></a> API may also be used to set
      a more secure secret without using printable/readable characters.
    </p>

    <pre>
323 324 325
# MYSECRET=`printf %s "letmein" | base64`
# virsh secret-set-value 718c71bd-67b5-4a2b-87ec-a24e8ca200dc $MYSECRET
Secret value set
J
John Ferlan 已提交
326 327 328

    </pre>

M
Miloslav Trmač 已提交
329 330
  </body>
</html>