Added draft of security guide to my forked repo of swauth.
This commit is contained in:
parent
96d6e54385
commit
f0415ed5b0
@ -0,0 +1,9 @@
|
||||
This document is licensed under Creative Commons Attribution 3.0 License.
|
||||
|
||||
|
||||
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
|
||||
Rodney Beede
|
||||
http://www.rodneybeede.com/
|
Binary file not shown.
@ -0,0 +1,120 @@
|
||||
<section xml:id="ch027_storage-idpH123">
|
||||
<title>SWAuth</title>
|
||||
<para>SWAuth is another popular alternative to Keystone.
|
||||
In contrast to Keystone it stores the user accounts,
|
||||
credentials, and metadata in object storage itself. More
|
||||
specifics about where the objects are stored can be found
|
||||
on the SWAuth website at
|
||||
<link xlink:href="http://gholt.github.io/swauth/">http://gholt.github.io/swauth/</link>.</para>
|
||||
<para>SWAuth has these types of roles (or groups) for a
|
||||
user:</para>
|
||||
<informaltable>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>.super_admin</td>
|
||||
<td>Can perform any action on any
|
||||
OpenStack Account, Container, or Object</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>.reseller_admin</td>
|
||||
<td>Can perform most actions on
|
||||
any OpenStack Account, Container, or Object.
|
||||
Cannot create other reseller admins.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>.admin</td>
|
||||
<td>Can perform actions limited to
|
||||
the single OpenStack Account it belongs to</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Regular User</td>
|
||||
<td>Can access containers or
|
||||
objects they have permission to in the
|
||||
OpenStack Account to which they belong
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</informaltable>
|
||||
<para>The following table provides a matrix of what each
|
||||
role/group can do:</para>
|
||||
<figure>
|
||||
<title>Object storage SWAuth role matrix</title>
|
||||
<mediaobject>
|
||||
<imageobject role="html">
|
||||
<imagedata contentdepth="393"
|
||||
contentwidth="1047"
|
||||
fileref="static/swift_swauth_roles_matrix.png"
|
||||
format="PNG" scalefit="1"/>
|
||||
</imageobject>
|
||||
<imageobject role="fo">
|
||||
<imagedata contentdepth="100%"
|
||||
fileref="static/swift_swauth_roles_matrix.png"
|
||||
format="PNG" scalefit="1" width="100%"/>
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
</figure>
|
||||
<warning><para>The super admin key is stored in
|
||||
<filename>/etc/swift/proxy-server.conf</filename> and MUST
|
||||
be protected! See the File Permissions section for
|
||||
guidance on protecting this file. Frequent changing of
|
||||
this key is recommended.</para></warning>
|
||||
<para>One approach for administration is to create an
|
||||
OpenStack Object Storage Account called "CloudAdmins" and
|
||||
create reseller_admin users in that account. Each user
|
||||
will be able to do administrative functions in all the
|
||||
other accounts. Creating a reseller_admin will require
|
||||
the super admin key.</para>
|
||||
<para>Another useful way to secure the super admin key is
|
||||
to have it exist only on the proxy server and retrieve the
|
||||
key on-demand via ssh or by running the command on the
|
||||
proxy server itself and using a grep to extract the key on
|
||||
the fly.</para>
|
||||
<section xml:id="ch027_storage-idpH1234">
|
||||
<title>Protecting cloud administration</title>
|
||||
<para>When using SWAuth you can actually designate
|
||||
that certain proxy service nodes are to NOT allow
|
||||
administrator API calls. This is useful if you have
|
||||
Proxy service nodes on the public Internet and wish to
|
||||
restrict administration functions to only special
|
||||
Proxy service nodes on a private network. This is
|
||||
done by setting the
|
||||
<code>allow_account_managment</code> to false in your
|
||||
<filename>proxy-server.conf</filename>.</para>
|
||||
<para>Another important consideration is that the
|
||||
SWAuth command line tools expose the user credentials
|
||||
on the command-line. The system from which they are
|
||||
executed must be secure to prevent disclosure in the
|
||||
process list to other uses. Another option is to use
|
||||
the SWAuth admin REST API to implement your own admin
|
||||
CLI tools that don’t expose the key as a command-line
|
||||
option.</para>
|
||||
</section>
|
||||
<section xml:id="ch027_storage-idpH12345">
|
||||
<title>Salting and hashing passwords</title>
|
||||
<para>SWAuth by default stores passwords in
|
||||
clear-text. It also offers a sha1 hashing provider,
|
||||
but the salt used is global. Additionally, no
|
||||
iterations or key stretching is performed. This is a
|
||||
limitation of SWAuth.</para>
|
||||
<para>You may optionally add-in your own hashing code
|
||||
or provider as a hook to SWAuth. See the
|
||||
<link xlink:href="http://gholt.github.io/swauth/dev/authtypes.html">SWAuth code and site</link>
|
||||
for details.</para>
|
||||
<para>If you use the global salt be sure to secure it
|
||||
and back it up. If you have multiple proxy nodes each
|
||||
one has to have a copy so that may be good enough for
|
||||
you. If you ever lose it or change it then all
|
||||
existing user passwords will not work and will have to
|
||||
be reset.</para>
|
||||
<para>You should make sure the salt you choose is
|
||||
generated using a cryptographically secure random
|
||||
number generator and of sufficient length. At least
|
||||
20 characters is recommended.</para>
|
||||
<para>The salt is stored in the
|
||||
<filename>/etc/swift/proxy-server.conf</filename>
|
||||
file which must be secured with proper ACLs. See the
|
||||
File Permissions section for guidance.</para>
|
||||
</section>
|
||||
</section><!-- SWAuth -->
|
||||
</section><!-- Object Storage Authentication -->
|
BIN
doc/source/Draft Security Guide/swift_swauth_roles_matrix.png
Normal file
BIN
doc/source/Draft Security Guide/swift_swauth_roles_matrix.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 36 KiB |
Loading…
x
Reference in New Issue
Block a user