<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>System architecture on CloudBolt Documentation</title>
		<link>https://docs.cloudbolt.io/docs/cmp/system-architecture/</link>
		<description>Recent content in System architecture on CloudBolt Documentation</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
		
			<atom:link href="https://docs.cloudbolt.io/docs/cmp/system-architecture/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Appliance security</title>
				<link>https://docs.cloudbolt.io/docs/cmp/system-architecture/appliance-security/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.cloudbolt.io/docs/cmp/system-architecture/appliance-security/</guid>
				<description>&lt;p&gt;CMP is a highly sensitive piece of infrastructure because it often houses credentials with elevated privileges across multiple cloud environments. The appliance can be configured to meet different hardening guidelines depending on your regulatory environment. If you have specific hardening needs, &lt;a href=&#34;https://support.cloudbolt.io/hc/en-us/requests/new&#34;&gt;contact Support&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;encryption&#34;&gt;Encryption&lt;/h2&gt;&#xA;&lt;p&gt;CMP encrypts the secrets file with AES in CBC mode. The key is derived with Argon2.&lt;/p&gt;&#xA;&lt;h2 id=&#34;tls-and-end-to-end-transport-encryption&#34;&gt;TLS and end-to-end transport encryption&lt;/h2&gt;&#xA;&lt;p&gt;Avoid unencrypted protocols during deployment when establishing connections to external providers, for example, resource handlers and configuration managers.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Hardware guidelines</title>
				<link>https://docs.cloudbolt.io/docs/cmp/system-architecture/hardware-guidelines/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.cloudbolt.io/docs/cmp/system-architecture/hardware-guidelines/</guid>
				<description>&lt;p&gt;Processing requirements depend on active workloads. Memory requirements depend on the total size of transactions and the objects being managed. The application itself has minimal storage requirements, but the underlying storage backend should have a relatively high-performance disk subsystem.&lt;/p&gt;&#xA;&lt;h2 id=&#34;deployment-shapes&#34;&gt;Deployment shapes&lt;/h2&gt;&#xA;&lt;p&gt;The two shapes below correspond to the two designs described in &lt;a href=&#34;https://docs.cloudbolt.io/docs/cmp/system-architecture/&#34;&gt;System architecture&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Single node&lt;/strong&gt; is appropriate for most initial production deployments and for development and testing environments. It is one appliance running all CMP roles.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Distributed (HA)&lt;/strong&gt; is for production environments with consistent, high workloads. This could be a large number of transactions, blueprints, managed VMs and objects, or a combination of the three. It splits the roles across three web servers and three job engines.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;alert alert-info&#34; role=&#34;alert&#34;&gt;&#xA;&lt;p&gt;The CMP installer supports only the x86_64 architecture.&lt;/p&gt;&#xA;&lt;/div&gt;</description>
			</item>
			<item>
				<title>Network connectivity</title>
				<link>https://docs.cloudbolt.io/docs/cmp/system-architecture/network-connectivity/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.cloudbolt.io/docs/cmp/system-architecture/network-connectivity/</guid>
				<description>&lt;p&gt;The preconfigured application uses the following ports and services on a single appliance. Ensure that connectivity requirements are in place for internal network communication with the CMP appliance.&lt;/p&gt;&#xA;&lt;div class=&#34;alert alert-info&#34; role=&#34;alert&#34;&gt;&#xA;&lt;p&gt;The appliance makes outbound network connections as required by your configured resource handlers and any other integrations. These are specific to each resource handler and are not detailed in the tables below.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;ports&#34;&gt;Ports&lt;/h2&gt;&#xA;&lt;h3 id=&#34;inbound&#34;&gt;Inbound&lt;/h3&gt;&#xA;&lt;div class=&#34;table-scroll&#34;&gt;&#xA;&lt;div class=&#34;table-responsive&#34;&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;TCP port&lt;/th&gt;&#xA;          &lt;th&gt;Protocol&lt;/th&gt;&#xA;          &lt;th&gt;Usage&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;22&lt;/td&gt;&#xA;          &lt;td&gt;SSH&lt;/td&gt;&#xA;          &lt;td&gt;Appliance management. Not required for end users&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;80&lt;/td&gt;&#xA;          &lt;td&gt;HTTP&lt;/td&gt;&#xA;          &lt;td&gt;HTTP to HTTPS redirect, optional HTTP access&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;443&lt;/td&gt;&#xA;          &lt;td&gt;HTTPS&lt;/td&gt;&#xA;          &lt;td&gt;Web UI and APIs. Also carries the RDP/SSH terminal and console sessions, which are proxied through the web server as WebSocket connections&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;5900-6900&lt;/td&gt;&#xA;          &lt;td&gt;VNC&lt;/td&gt;&#xA;          &lt;td&gt;Port range the appliance uses to give browsers access to VM consoles. Required only for consoles that are not proxied over HTTPS. Configurable through the &lt;code&gt;LOW_CONSOLE_PORT&lt;/code&gt; and &lt;code&gt;HIGH_CONSOLE_PORT&lt;/code&gt; settings&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;alert alert-info&#34; role=&#34;alert&#34;&gt;&#xA;&lt;p&gt;The Guacamole services that support the RDP/SSH terminal, &lt;code&gt;guacd&lt;/code&gt; and &lt;code&gt;guacg&lt;/code&gt;, listen on the loopback interface only and sit behind the web server. They do not need firewall rules. If you relocate &lt;code&gt;guacd&lt;/code&gt; to a secondary server, allow traffic between the nodes on the port you configure for it.&lt;/p&gt;&#xA;&lt;/div&gt;</description>
			</item>
			<item>
				<title>Use SSL with an external PostgreSQL database</title>
				<link>https://docs.cloudbolt.io/docs/cmp/system-architecture/ssl-external-postgresql/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://docs.cloudbolt.io/docs/cmp/system-architecture/ssl-external-postgresql/</guid>
				<description>&lt;p&gt;This procedure applies to a distributed deployment in which the database runs outside the appliance. Every web server and job engine node needs outbound access to the database on TCP 5432. See &lt;a href=&#34;https://docs.cloudbolt.io/docs/cmp/system-architecture/network-connectivity/&#34;&gt;Network connectivity&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;alert alert-info&#34; role=&#34;alert&#34;&gt;&#xA;&lt;p&gt;The paths and commands below use PostgreSQL 14. If your database server runs another version, such as PostgreSQL 18, replace 14 with your version number.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;postgresql-database-configuration&#34;&gt;PostgreSQL database configuration&lt;/h2&gt;&#xA;&lt;p&gt;Perform the following on the PostgreSQL server.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Add the following to the PostgreSQL data directory: &lt;code&gt;/var/lib/pgsql/14/data&lt;/code&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Server SSL certificate: &lt;code&gt;server.crt&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Private key: &lt;code&gt;server.key&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Update the SSL configuration to enable SSL:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Edit &lt;code&gt;/var/lib/pgsql/14/data/postgresql.conf&lt;/code&gt;:&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Uncomment &lt;code&gt;ssl&lt;/code&gt; and set the value to &lt;code&gt;on&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;If the filename for the server SSL certificate is not &lt;code&gt;server.crt&lt;/code&gt;, or the private key is not &lt;code&gt;server.key&lt;/code&gt;, do the following:&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Uncomment &lt;code&gt;ssl_cert_file&lt;/code&gt; and set the value to the server SSL certificate filename&lt;/li&gt;&#xA;&lt;li&gt;Uncomment &lt;code&gt;ssl_key_file&lt;/code&gt; and set the value to the private key filename&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Example &lt;code&gt;/var/lib/pgsql/14/data/postgresql.conf&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# - SSL -&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssl = on&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#ssl_ca_file = &amp;#39;&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#ssl_cert_file = &amp;#39;server.crt&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#ssl_crl_file = &amp;#39;&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#ssl_crl_dir = &amp;#39;&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#ssl_key_file = &amp;#39;server.key&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#ssl_ciphers = &amp;#39;HIGH:MEDIUM:+3DES:!aNULL&amp;#39; # allowed SSL ciphers&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#ssl_prefer_server_ciphers = on&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#ssl_ecdh_curve = &amp;#39;prime256v1&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#ssl_min_protocol_version = &amp;#39;TLSv1.2&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#ssl_max_protocol_version = &amp;#39;&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#ssl_dh_params_file = &amp;#39;&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#ssl_passphrase_command = &amp;#39;&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#ssl_passphrase_command_supports_reload = off&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Update the allowed hosts to use SSL by adding &lt;code&gt;hostssl&lt;/code&gt; entries for your IP addresses or IP ranges:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Edit &lt;code&gt;/var/lib/pgsql/14/data/pg_hba.conf&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Example &lt;code&gt;/var/lib/pgsql/14/data/pg_hba.conf&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# TYPE  DATABASE        USER            ADDRESS                 METHOD&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# &amp;#34;local&amp;#34; is for Unix domain socket connections only&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;local   all             all                                     peer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# IPv4 local connections:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;host    all             all             127.0.0.1/32            scram-sha-256&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# IPv6 local connections:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;host    all             all             ::1/128                 scram-sha-256&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# Allow replication connections from localhost, by a user with the&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# replication privilege.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;local   replication     all                                     peer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;host    replication     all             127.0.0.1/32            scram-sha-256&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;host    replication     all             ::1/128                 scram-sha-256&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hostssl all             all             192.168.56.0/24         scram-sha-256&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Restart the database&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl restart postgresql-14&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Verify SSL is configured properly by connecting to the database using the &lt;code&gt;psql&lt;/code&gt; command below:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#Replace value for password in the psql command below&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;psql &amp;#34;dbname=cloudbolt host=db.cloudbolt.vm user=cb_dba password=yourdbpassword sslmode=require&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Example expected return after running the &lt;code&gt;psql&lt;/code&gt; command above&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# Example of successful psql command return&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;psql (14.2)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Type &amp;#34;help&amp;#34; for help.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cloudbolt=&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
			</item>
	</channel>
</rss>
