One of the very first questions that arises when running remote servers, or even just remote software is how to communicate with it. Do we simply use a generic low-level transport method or do we design a purpose built API? A generic method typically permits direct access to everything but at the expense of exposing too much. An API on the other hand limits to only what is needed but that means that you must plan everything beforehand. And incur continuous development as the needs evolve. This decision must be carefully made, taking into consideration the needs to satisfy, the efficiency and ease of use, the cost but also, one could even say above all, the security challenges posed by connecting things together.
The purpose of communicating with a remote asset, beit a server or a piece of software, is multifold. Configuring the remote "thing" is certainly a top reason. But monitoring, issuing commands, updating or upgrading software and OS, retrieving some results are all top reasons too. All of these reasons have different requirements that may vary based upon the use case. To name a few:
Different kinds of mechanisms may be employed to communicate with the remote process. Broadly speaking, the solutions may be specific to an application and only serve predefined functions. Or they could be generic and able to be utilized in any unforeseen situations. The former category, the specific methods, tend to be higher up in the protocol stack. Some examples:
Lower level methods, which generally are more flexible, may take the form of:
Regardless of the method used, external factors impacts the design of the communication solution. In the early days when there was just one global network everything could communicate directly with anything. The only factors that mattered were those found at each end of the "conversation". Nowadays things are much more complex; firewall, reachability, authentication, and other NATing or proxying functions all represent additional hurdles that must be overcome before the endpoints can have a productive "dialog".
Security is a key consideration in the design of the remote access solution. More often than not, it is assumed to be addressed by the fact that the communication is encrypted and no one else can see it. But is it sufficient? What if someone compromises a remote end point and use it to:
Edge computing adds an additional concerns. Running at foreign locations where you do not control the infrastructure opens the door to interception (man-in-the-middle attack). For more information, see this discussion on TLS interception.
Remote communication for Edge sites and nodes comes with a mix of challenges that exceeds what is typically found for other use cases. Very often, the site, and its networking environment, belongs to a 3rd party. This 3rd party may or may not be a customer to the organization owning and operating the Edge computing asset but in either cases coordination, such as opening firewalls, remains a challenge. Also, physical security, or even virtual security is typically non-existent, potentially exposing the site assets and everything connected to them (including remotely) to unauthorized access. Consequently, the following attributes are essential:
When the characteristics listed above are implemented, the access solution becomes inherently safe. The largest benefit of being inherently safe and not having to rely on additional safeguards is that security is then not susceptible to silent failures. A misconfiguration in a firewall protecting the NOC from leaks coming from Edge nodes could go unnoticed for weeks or even months since daily operations are not impacted.
The decentralization paradigm that is Edge computing inherently comes with the notion of having to manage a large number of sites. Similar to the mass production of consumer goods, every penny saved counts. This is due to the time proven multiplicative effect. The best approach in that regard is to keep things simple. The lesser number of components a solution has not only saves on CAPEX but also on OPEX, which, on the long run, is the most important cost contributor. Taking again the example of the firewall protecting the NOC and the Edge site from one another, removing it also removes the need to configure it, to monitor it and eventually to replace it when technology, and threats, evolve.
A permanent Websocket connection, running over HTTPS, is maintained between the remote Edge nodes and an access gateway. The access gateway is normally hosted at our customer NOC. The connections are initiated by the nodes themselves and typically would traverse without configuration any firewall and/or Web proxy present at the Edge site. This connection is then used by various NOC sources. The access gateway transports the TCP sessions across to the Edge sites. Importantly, the IP layer is removed and not transported thereby causing the TCP sessions to being only able to target the corresponding Edge node.
At the NOC, the access gateway provides DNS support for mapping node names and a local (at the NOC) IP address. This IP address comes from a subnet assigned to the access gateway and is only significant at the NOC; the nodes never see this IP address. The NOC TCP sources simply use the node name as the target FQDN.