Commit Graph

29 Commits

Author SHA1 Message Date
Rohit Yadav 366d82e292 FR12 (CLOUDSTACK-9993): Secure Agent Communications (#38)
This introduces a new certificate authority framework that allows
pluggable CA provider implementations to handle certificate operations
around issuance, revocation and propagation. The framework injects
itself to `NioServer` to handle agent connections securely. The
framework adds assumptions in `NioClient` that a keystore if available
with known name `cloud.jks` will be used for SSL negotiations and
handshake.

This includes a default 'root' CA provider plugin which creates its own
self-signed root certificate authority on first run and uses it for
issuance and provisioning of certificate to CloudStack agents such as
the KVM, CPVM and SSVM agents and also for the management server for
peer clustering.

Additional changes and notes:
- Comma separate list of management server IPs can be set to the 'host'
  global setting. Newly provisioned agents (KVM/CPVM/SSVM etc) will get
  radomized comma separated list to which they will attempt connection
  or reconnection in provided order. This removes need of a TCP LB on
  port 8250 (default) of the management server(s).
- All fresh deployment will enforce two-way SSL authentication where
  connecting agents will be required to present certificates issued
  by the 'root' CA plugin.
- Existing environment on upgrade will continue to use one-way SSL
  authentication and connecting agents will not be required to present
  certificates.
- A script `keystore-setup` is responsible for initial keystore setup
  and CSR generation on the agent/hosts.
- A script `keystore-cert-import` is responsible for import provided
  certificate payload to the java keystore file.
- Agent security (keystore, certificates etc) are setup initially using
  SSH, and later provisioning is handled via an existing agent connection
  using command-answers. The supported clients and agents are limited to
  CPVM, SSVM, and KVM agents, and clustered management server (peering).
- Certificate revocation does not revoke an existing agent-mgmt server
  connection, however rejects a revoked certificate used during SSL
  handshake.
- Older `cloudstackmanagement.keystore` is deprecated and will no longer
  be used by mgmt server(s) for SSL negotiations and handshake. New
  keystores will be named `cloud.jks`, any additional SSL certificates
  should not be imported in it for use with tomcat etc. The `cloud.jks`
  keystore is stricly used for agent-server communications.
- Management server keystore are validated and renewed on start up only,
  the validity of them are same as the CA certificates.

New APIs:
- listCaProviders: lists all available CA provider plugins
- listCaCertificate: lists the CA certificate(s)
- issueCertificate: issues X509 client certificate with/without a CSR
- provisionCertificate: provisions certificate to a host
- revokeCertificate: revokes a client certificate using its serial

Global settings for the CA framework:
- ca.framework.provider.plugin: The configured CA provider plugin
- ca.framework.cert.keysize: The key size for certificate generation
- ca.framework.cert.signature.algorithm: The certificate signature algorithm
- ca.framework.cert.validity.period: Certificate validity in days
- ca.framework.cert.automatic.renewal: Certificate auto-renewal setting
- ca.framework.background.task.delay: CA background task delay/interval
- ca.framework.cert.expiry.alert.period: Days to check and alert expiring certificates

Global settings for the default 'root' CA provider:
- ca.plugin.root.private.key: (hidden/encrypted) CA private key
- ca.plugin.root.public.key: (hidden/encrypted) CA public key
- ca.plugin.root.ca.certificate: (hidden/encrypted) CA certificate
- ca.plugin.root.issuer.dn: The CA issue distinguished name
- ca.plugin.root.auth.strictness: Are clients required to present certificates
- ca.plugin.root.allow.expired.cert: Are clients with expired certificates allowed

UI changes:
- Button to download/save the CA certificates.

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2017-09-26 09:19:31 +05:30
Rohit Yadav f30c52a16c CLOUDSTACK-8562: DB-Backed Dynamic Role Based API Access Checker
This feature allows root administrators to define new roles and associate API
permissions to them.

A limited form of role-based access control for the CloudStack management server
API is provided through a properties file, commands.properties, embedded in the
WAR distribution. Therefore, customizing API permissions requires unpacking the
distribution and modifying this file consistently on all servers. The old system
also does not permit the specification of additional roles.

FS:
https://cwiki.apache.org/confluence/display/CLOUDSTACK/Dynamic+Role+Based+API+Access+Checker+for+CloudStack

DB-Backed Dynamic Role Based API Access Checker for CloudStack brings following
changes, features and use-cases:
- Moves the API access definitions from commands.properties to the mgmt server DB
- Allows defining custom roles (such as a read-only ROOT admin) beyond the
  current set of four (4) roles
- All roles will resolve to one of the four known roles types (Admin, Resource
  Admin, Domain Admin and User) which maintains this association by requiring
  all new defined roles to specify a role type.
- Allows changes to roles and API permissions per role at runtime including additions or
  removal of roles and/or modifications of permissions, without the need
  of restarting management server(s)

Upgrade/installation notes:
- The feature will be enabled by default for new installations, existing
  deployments will continue to use the older static role based api access checker
  with an option to enable this feature
- During fresh installation or upgrade, the upgrade paths will add four default
  roles based on the four default role types
- For ease of migration, at the time of upgrade commands.properties will be used
  to add existing set of permissions to the default roles. cloud.account
  will have a new role_id column which will be populated based on default roles
  as well

Dynamic-roles migration tool: scripts/util/migrate-dynamicroles.py
- Allows admins to migrate to the dynamic role based checker at a future date
- Performs a harder one-way migrate and update
- Migrates rules from existing commands.properties file into db and deprecates it
- Enables an internal hidden switch to enable dynamic role based checker feature

Deprecate commands.properties

- Fixes apidocs and marvin to be independent of commands.properties usage
- Removes bundling of commands.properties in deb/rpm packaging
- Removes file references across codebase

Reviewed-by: John Burwell <john.burwell@shapeblue.com>
QA-by: Boris Stoyanov <boris.stoyanov@shapeblue.com>

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2016-04-25 14:52:02 +05:30
Rohit Yadav 752980f370 Revert "packaging: updated hardcoded jasypt version to 1.9.2"
This reverts commit 43f39a1ec3.
2014-12-04 19:47:10 +05:30
Rohit Yadav 43f39a1ec3 packaging: updated hardcoded jasypt version to 1.9.2
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2014-12-04 04:02:46 +05:30
Rajesh Battala 42fd2d91da CLOUDSTACK-7654 fixed issues with zip format templates.
(cherry picked from commit 67ff7dac82)
2014-10-13 00:30:23 -04:00
Koushik Das 4607c26949 Revert "CLOUDSTACK-6834 : 3. Some description changes words like CloudStack etc 4. Change Default installation location if possible include version number 5. Mysql Connector Installer along with other dependecies 6. Add run Service Checkbox 7. Add ReadMe checkbox"
This reverts commit ce5061e107.
2014-07-04 10:04:04 +05:30
Damodar Reddy ce5061e107 CLOUDSTACK-6834 : 3. Some description changes words like CloudStack etc 4. Change Default installation location if possible include version number 5. Mysql Connector Installer along with other dependecies 6. Add run Service Checkbox 7. Add ReadMe checkbox
Signed-off-by: Koushik Das <koushik@apache.org>
2014-07-03 17:43:00 +05:30
Damodar Reddy 0f2c66e6c9 CLOUDSTACK-6834: [Windows] 1. Added Port to the wizard to capture input from the admin.
Signed-off-by: Koushik Das <koushik@apache.org>
2014-06-12 12:37:00 +05:30
Damodar Reddy 23280a47b8 CLOUDSTACK-6702 : [Windows]Due to Progress bar changes mysql path was not getting read. Fixing the same.
Signed-off-by: Abhinandan Prateek <aprateek@apache.org>
2014-06-11 11:25:02 +05:30
Tim Mackey a8212d9ef4 Cleanup of Xen and XenServer terms. Cloned xen plugin creating a xenserver plugin, then removed xen plugin
Signed-off-by: Tim Mackey <tmackey@gmail.com>
Signed-off-by: Sebastien Goasguen <runseb@gmail.com>
2014-06-07 04:50:23 -04:00
Damodar Reddy 603eab751a CLOUDSTACK-6701, CLOUDSTACK-6702:
1. Integrate System Seed Template into MSI Installer
2. Added progress bar status messages for custom actions at needed places.

Signed-off-by: Abhinandan Prateek <aprateek@apache.org>
2014-06-04 12:23:33 +05:30
Damodar Reddy 8a210b50fb CLOUDSTACK-6702: Move all titles and descriptions to a property file or move to build properties
Signed-off-by: Abhinandan Prateek <aprateek@apache.org>
2014-05-28 16:10:42 +05:30
Damodar Reddy ce247a5592 CLOUDSTACK-6700 : Adding optionstheme.xml to include selectable options.
Signed-off-by: Abhinandan Prateek <aprateek@apache.org>
2014-05-23 17:45:50 +05:30
Damodar Reddy 8f98cc304e CLOUDSTACK-6700 : Give Option to install or not MySql Server along with Main Installer on the same server.
Signed-off-by: Abhinandan Prateek <aprateek@apache.org>
2014-05-23 16:25:38 +05:30
Damodar Reddy 61c765b230 CLOUDSTACK-6563: Integrating setuptools for python into MSI
Signed-off-by: Abhinandan Prateek <aprateek@apache.org>
2014-05-20 14:57:44 +05:30
Damodar Reddy aca7606a40 CLOUDSTACK-6563: Integrating dependencies as part of MSI installer so that those will get installed along with cloud stack installation 2014-05-16 10:50:32 +05:30
Damodar Reddy 29b4fe6d9f CLOUDSTACK-6271: The cloud-setup-databases was failing when your jasypt jar path has spaces in it's path 2014-04-29 14:44:03 +05:30
Damodar Reddy 881792991e CLOUDSTACK-6271:[Windows] Integrating setup databases with msi installer for windows
Signed-off-by: Abhinandan Prateek <aprateek@apache.org>
2014-04-28 16:46:26 +05:30
Damodar Reddy d8586462e0 CLOUDSTACK-6291: [Windows] Checking whether Java and other dependencies are installed or not through registry search instead of relying on environment variables. Also setting them into Path environment varibale.
Signed-off-by: Abhinandan Prateek <aprateek@apache.org>
2014-03-28 12:32:21 +05:30
Damodar Reddy c46088c962 CLOUDSTACK-6290: [Windows] Generating SSL keys at the time of installation itself
Signed-off-by: Abhinandan Prateek <aprateek@apache.org>
2014-03-27 16:03:04 +05:30
Damodar Reddy b6fe4e2168 CLOUDSTACK-6105: Fixed the issue where Logs were not getting generated properly
Signed-off-by: Abhinandan Prateek <aprateek@apache.org>
2014-03-26 10:35:26 +05:30
Damodar Reddy 93c46c9be8 CLOUDSTACK-6105: Initial version Windowsfication of the management server
Signed-off-by: Abhinandan Prateek <aprateek@apache.org>
2014-03-24 10:54:46 +05:30
David Nalley d630fa8697 license header changes for scripts folder from Chip Childers 2012-06-23 00:58:00 -04:00
Nitin Mehta 4434aa0d2d bug CS-10789: More changes for the imageformat, introdueced new column in db for the format, created scripts for doffernt hypervisors ...and the list goes on. 2012-04-23 13:44:34 +05:30
frank 2f634c0913 Switch to Apache license 2012-04-03 04:50:05 -07:00
frank 52610ffcb3 add copyright header to shell scripts 2012-01-11 18:41:53 -08:00
Frank 92155522f2 Add license header to files 2011-04-14 11:23:14 -07:00
Chiradeep Vittal 34dc0695c2 Cleanup some scripts 2011-01-19 10:08:30 -08:00
Manuel Amador (Rudd-O) 05c020e1f6 Source code committed 2010-08-11 09:13:29 -07:00