Techniques for Persisting Data Across Cloud Shell Instances

The techniques for persisting user data and securing cloud shells using signed nonces and multiple network interfaces address the challenges of data persistence and security in cloud-based platforms, ensuring efficient and secure operations.

JP7682997B2Active Publication Date: 2025-05-26ORACLE INT CORP
View PDF 4 Cites 0 Cited by

Patent Information

Application Number
JP2023510338
Authority / Receiving Office
JP · JP
Patent Type
Patents
Current Assignee / Owner
Priority Date
2020-10-23
Filing Date
2021-08-12
Publication Date
2025-05-26
Estimated Expiration
2041-08-12

AI Technical Summary

Technical Problem

Existing cloud-based platforms face challenges in persisting user data across instances of a cloud shell, ensuring secure access, and protecting against unauthorized access using multiple network interfaces.

Method used

The techniques involve using a restored block volume to persist user data across secure shell instances, employing signed nonces for secure access, and utilizing multiple network interfaces with virtual cloud networks to isolate IaaS subsystems and protect against unauthorized access.

Benefits of technology

These techniques effectively persist user data, enhance security by ensuring authorized access, and protect cloud shell instances from unauthorized access through robust network isolation.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure 0007682997000001
    Figure 0007682997000001
  • Figure 0007682997000002
    Figure 0007682997000002
  • Figure 0007682997000003
    Figure 0007682997000003
Patent Text Reader

Abstract

[0009] A technique for persisting user data across secure shell instances is provided. The technique includes a method in which a computer system receives a request to reserve a block volume, the request being received from a session manager service. The method also includes reserving the block volume, identifying a data center identifier for the block volume, returning the data center identifier for the block volume to the session manager service, attaching the block volume to a volume management fleet machine, receiving an instruction from the session manager service to release the block volume, creating a backup of the block volume including the data stored in the block volume, and releasing the block volume.
Need to check novelty before this filing date? Find Prior Art

Description

Technical Field

[0001] Reference to Related Applications This application claims the benefit and priority of U.S. Patent Application No. 17 / 078,835, filed on October 23, 2020, entitled "TECHNIQUES FOR PERSISTING DATA ACROSS INSTANCES OF A CLOUD SHELL", U.S. Patent Application No. 16 / 993,973, filed on August 14, 2020, entitled "TECHNIQUES FOR UTILIZING MULTIPLE NETWORK INTERFACES FOR A CLOUD SHELL", and U.S. Patent Application No. 16 / 993,970, filed on August 14, 2020, entitled "TECHNIQUES FOR USING SIGNED NONCES TO SECURE CLOUD SHELLS", the disclosures of which are hereby incorporated by reference in their entirety for all purposes.

Background Art

[0002] Background Cloud-based platforms provide users with scalable and flexible computing resources. Such cloud-based platforms, also referred to as Infrastructure as a Service (IaaS), can provide an entire suite of cloud solutions around a customer's data, for example, solutions for orchestrating transformations, loading data, and presenting data. An IaaS system can implement security protocols to protect against unauthorized access to user data.

Summary of the Invention

[0003] Summary Techniques for Persisting Data across Instances of a Cloud Shell Techniques are provided for persisting user data across secure shell instances, using a restored block volume, and terminating instances between sessions (e.g., a method, system, non-transitory computer-readable medium storing code or instructions executable by one or more processors).

[0004] In one embodiment, a method includes a computer system receiving a request to reserve a block volume, the request received from a session manager service. The method may include the computer system reserving the block volume. The method may include the computer system identifying a data center identifier of the block volume. The method may include the computer system returning the data center identifier of the block volume to the session manager service. The method may include the computer system attaching the block volume. The method may include the computer system receiving, from the session manager service, an instruction to release the block volume. The method may include the computer system creating a backup of the block volume that includes data stored on the block volume. The method may also include the computer system releasing the block volume.

[0005] In a variant, the request may include a user identifier, and reserving a block volume includes determining whether the registered block volume is assigned to the user corresponding to the user identifier, reserving the registered block volume according to the fact that the registered block volume is assigned to the user, and reserving an empty volume from the pool of empty volumes according to the fact that the registered block volume is not assigned to the user corresponding to the user identifier, and the empty volume is pre-formatted to dock with the secure cloud shell. The method may include receiving a request to restore a block volume from a session manager service and creating a restored volume using a backup of the block volume, the restored volume including the data stored in the block volume, and the method may further include returning the data center identifier of the restored volume to the session manager service. The backup of the block volume may further include an identifier of the backup, creating the restored volume may include reserving an empty block volume from the pool of empty volumes, the empty block volume being pre-formatted to dock with the secure cloud shell, and creating the restored volume may further include retrieving the backup of the block volume using the identifier of the backup, at least partially provisioning the empty block volume by loading the backup of the block volume into the empty block volume, and identifying the data center identifier of the empty block volume as the data center identifier of the restored volume. Creating a backup of the block volume may include creating a disk image of the block volume. Creating a backup of the block volume may include converting the data of the block volume into object data and storing the object data in an object storage system.

[0006] In one embodiment, a computer system includes one or more processors and a memory that communicates with the one or more processors. The memory is configured to store computer-executable instructions, and executing the computer-executable instructions causes the one or more processors to perform one or more of the steps of the method described above.

[0007] In certain embodiments, a computer-readable storage medium stores computer-executable instructions that, when executed, cause one or more processors of a computer system to perform one or more of the steps of the method described above.

[0008] Techniques for securing Cloud Shell using signed nonces Techniques are also provided for securing Cloud Shell for operating one or more terminals by using a signed nonce in cooperation with one or more additional security operations (e.g., a method, a system, a non-transitory computer-readable medium storing code or instructions executable by one or more processors).

[0009] In a first aspect, a method includes a session manager service receiving a request to connect a user device to a secure connection to a secure shell instance, the session manager service authorizing the user device, the session manager service configuring a secure shell instance described by a shell identifier of the secure shell instance, the session manager service generating a nonce token, the session manager service signing the nonce token to generate a signed nonce token, and the session manager service providing the signed nonce token, the shell identifier, and a router address to the user device.

[0010] In one example, authorizing a user device includes receiving a login token including a user identifier from the user device, requesting an authorization system public key from an authorization service, authenticating the user device at least in part based on decrypting the login token with the authorization system public key, providing the user identifier, a resource identifier of the resource identified in the request, and an expiration period of the request to the authorization service, requesting a delegation token from the authorization service, and receiving a delegation token from the authorization service, where the authorization service is configured to generate a delegation token and authorize access to the resource identified in the request within the expiration period.

[0011] In one example, signing a nonce includes signing the nonce using a system private key of a public / private key pair held by a session manager service and providing the system public key of the public / private key pair to a secure shell router at a router address.

[0012] In one example, the method further includes storing the nonce in a data store, where the nonce includes a key sequence, and the method further includes verifying whether the nonce is valid at least in part based on searching the data store on the key sequence, and removing the nonce from the data store after the secure shell router has established a secure connection between the user device and a secure shell instance.

[0013] In one example, the method further includes ending the secure shell instance after an inactivity period or after termination of a secure connection by the user device.

[0014] In one example, configuring a secure shell instance includes reserving a block volume, receiving a domain identifier corresponding to the block volume, and allocating an instance on the block volume using the domain identifier, where the instance is allocated from a plurality of available instances, and configuring a secure shell instance further includes receiving a shell identifier corresponding to the instance and installing a configuration file on the instance, where the configuration file includes request information included in the request.

[0015] In one example, the secure shell instance operates the Docker container such that the request includes instructions to execute a terminal on the Docker container.

[0016] In a second aspect, a computer system includes one or more processors and a memory that communicates with the one or more processors, where the memory is configured to store computer-executable instructions, and executing the computer-executable instructions causes the one or more processors to perform steps including one or more steps of the methods of the first aspect and subsequent examples.

[0017] In a third aspect, a non-transitory computer-readable storage medium stores computer-executable instructions that, when executed, cause one or more processors of a computer system to perform steps including one or more steps of the methods of the first aspect and subsequent examples.

[0018] Techniques for utilizing multiple network interfaces for a cloud shell Techniques are further provided for protecting a cloud shell against unauthorized access by an external device using multiple network interfaces in cooperation with multiple virtual cloud networks that isolate different IaaS subsystems (e.g., a method, a system, a non-transitory computer-readable medium storing code or instructions executable by one or more processors).

[0019] In a first aspect, a method includes receiving a command for a computer system to execute an operation, the command being received from a router via a primary virtual network interface card (vNIC), the method further including executing the operation, generating an output of the operation, and sending a message including the output of the operation to a shell subnet via a secondary virtual network interface card, the secondary virtual network interface card being configured for unidirectional transmission from the computer system to the shell subnet. The shell subnet may be configured to send the output of the operation to an external network via a network gateway.

[0020] In one example, the operation may be requested by a user of a user device, and generating an output of the operation may include generating a reply message for the user device and sending the reply message to the router via the primary virtual network interface card. The primary virtual network interface card may be configured to accept a reply message for the user device and reject a message including the output of the operation.

[0021] In one example, the computer system may be a virtual machine within a first virtual cloud network, the first virtual cloud network being configured within a private routing compartment.

[0022] In one example, the router may be within a second virtual cloud network, the second virtual cloud network being different from the first virtual cloud network and configured within a private routing compartment.

[0023] In one example, the shell subnet may be within a third virtual cloud network, the third virtual cloud network being different from the first virtual cloud network and configured within a public routing compartment.

[0024] In one example, the private root compartment may be associated with a first block of IP addresses to which network traffic from the private root compartment can be attributed. The public root compartment may be associated with a second block of IP addresses, which is different from the first block of IP addresses. The second block of IP addresses may be attributable to network traffic from one or more users of the computer system.

[0025] In one example, the network gateway may be a network address translation (NAT) gateway configured to send messages using an IP address of a block of IP addresses attributable to network traffic from one or more users of the computer system.

[0026] In a second aspect, the computer system includes one or more processors and a memory that communicates with the one or more processors, the memory being configured to store computer-executable instructions, and executing the computer-executable instructions causes the one or more processors to perform steps including one or more steps of the methods of the first aspect and subsequent examples.

[0027] In a third aspect, a non-transitory computer-readable storage medium stores computer-executable instructions that, when executed, cause one or more processors of a computer system to perform steps including one or more steps of the methods of the first aspect and subsequent examples.

Brief Description of the Drawings

[0028]

Figure 1

Figure 2

Figure 3

Figure 4

Figure 5

Figure 6

Figure 7

Figure 8

Figure 9

Figure 10

Figure 11

Figure 12

Figure 13

Figure 14

Figure 15

Figure 16

Figure 17

Figure 18

Figure 19

Figure 20

Figure 21

Figure 22

Figure 23

Figure 24

Figure 25

Figure 26

Figure 27

Figure 28

Figure 29

Figure 30

Figure 31

Figure 32

Best Mode for Carrying Out the Invention

[0029] Detailed Description In the following description, various embodiments are described. For the purpose of explanation, specific configurations and details are set forth to provide a complete understanding of the embodiments. However, it will be apparent to those skilled in the art that the embodiments can be practiced without these specific details. Furthermore, well-known features may be omitted or simplified in order not to obscure the described embodiments.

[0030] Techniques for Persistence of Data Across Instances of a Cloud Shell Cloud-based platforms provide users with scalable and flexible computing resources. Such cloud-based platforms, also referred to as Infrastructure as a Service (IaaS), may provide a suite of cloud solutions around a customer's data, for example, solutions for orchestrating transformations, loading data, and presenting data. Users of IaaS resources may require that a secure terminal be created within a secure shell instance (e.g., using two-way encryption via a WebSocket Secure (wss) connection) so that operations and data transfers can be securely executed.

[0031] In some embodiments, the shell instance may be a dedicated computing instance that can run a Docker container (e.g., a host) and allow a user device to run a terminal on that Docker container. The user device may be assigned to a single host, but multiple active terminals may be created on that host. The shell instance may be terminated after a period of inactivity. The instance may run a host, and the host may then run a secure shell (e.g., a terminal). In some embodiments, the instance and / or the host may also be terminated when the terminal has not been active on the host for a period of time.

[0032] In some embodiments, the instance agent may operate on the assigned instance and handle receiving WebSocket traffic and sending that traffic to a secure shell operating on the host. The instance agent may be an HTTP server configured to open a secure WebSocket connection and redirect the input and output to a terminal operating on the instance (e.g., a secure shell operating on a Docker container). In some embodiments, the agent may identify an updated version of the Docker container, start the Docker container, and create a terminal within the container. In some embodiments, the agent may further specialize the Docker container to include secure shell configuration information and run the terminal within the Docker container, at least in part, by passing through certain environment variables.

[0033] In some embodiments, the volume manager service may persist user data from a terminated instance of the same user to a subsequently configured instance. The volume manager service may identify a user block volume and, if a secure shell instance is available, attach it to the secure shell instance and, for the instance, generate a backup of the user data as part of the termination operation at the end of the instance's lifetime. The backup operation may include retention of user data over a retention period, backup in object storage, and / or a backup image (e.g., a volume image). The volume manager system may create a backup before releasing the user block volume. The volume manager service may communicate with a session manager service that may query an instance agent to check for idle time for the secure shell instance. The session manager service may request the volume manager service to release the user block volume after the idle time has exceeded the lifetime of the instance. In some cases, the session manager service may request the volume manager service to release the user block volume after the retention period has elapsed. The retention period may provide reduced latency when the user requests a new secure shell instance by reattaching the user block volume without restoring the user data to a newly configured block volume from block storage.

[0034] To restore a user block volume as part of creating a secure shell instance, backup user data may be transferred from object storage, or another backup storage format, as part of the restore process. For example, a volume manager service may reserve an empty block volume (e.g., at least partially preconfigured for attachment to a secure shell instance), and request that backup user data be transferred by a backup service to provision the empty block volume. The volume manager service may return the unique identifier of the restored user block volume to the session manager service as part of configuring the secure shell instance, thereby persisting user data from the terminated instance to the new restored instance.

[0035] In some embodiments, the techniques described herein may be incorporated as computer-executable instructions into a software development kit (SDK) that may be used by a web-based terminal to create and access these resources. In this way, the SDK may also be used by other providers to implement a secure web-based terminal. Further, the techniques described herein may allow a user device to connect to a secure shell that operates one or more terminals with improved security and latency. For example, rather than relying on manual instructions to configure backups, the session manager may potentially improve inefficiencies introduced by uneven system load, as well as overhead introduced by UI backup system requirements and by maintaining user block volume over periods between user connections to a secure shell instance (e.g., when the user is not accessing user data) by automatically persisting user data. Latency may be reduced in the termination process by automating block volume storage management rather than relying on releases initiated by the user. In this way, connection requests may encounter shorter wait times for block volumes that should be reserved during periods of high system demand and low storage availability in a given data center or IaaS region.

[0036] Figure 1 shows an exemplary system 100 for managing secure shell instances according to one or more embodiments. In some embodiments, system 100 may enable a user to securely connect to a compute instance (e.g., a virtual machine (VM) or Docker). Secure access may enable the user to connect to distributed computing system resources (e.g., Infrastructure as a Service (IaaS)) including, but not limited to, distributed storage, compute cores, etc. via an encrypted connection (e.g., https and / or WebSocket Secure (wss)) for real-time data transfer with a VM of an IaaS system. In some embodiments, user device 110 may generate a signed request for a secure shell instance and send the signed request to session manager service 120. Session manager service 120 may verify user device 110 and perform operations as part of fulfilling the signed request and as part of configuring the secure shell instance.

[0037] In some embodiments, user device 110 may generate a signed request using a user interface including, but not limited to, a graphical user interface console or a command line interface (CLI). The user interface may include an identity approval service that may generate a user public / secret key pair. In some cases, the user public / secret key pair may be a temporary key pair generated, for example, at session initialization, at generation of a request for secure VM connection, etc. User device 110 may generate a signed request using the secret key of the user public / secret key pair.

[0038] In some embodiments, the session manager service 120 may implement one or more approval steps as part of managing and provisioning a secure shell instance. Approval may include, for example, receiving a signed request (e.g., as a step of verifying the identity of the user device 110), and requesting a public key and using the key to verify the signature of the signed request by verifying the signed request.

[0039] In some embodiments, the session manager service 120 may satisfy the signed request at least in part by reserving and configuring a secure shell instance. Optionally, the session manager service 120 may communicate with the volume manager service 130 to reserve a block volume 140. The volume manager service 130 may return a domain identifier of the block volume 140 to the session manager service 120. In some embodiments, the domain identifier may describe one or more data centers within the geographic region (e.g., availability domain (AD)) of the reserved block volume 140. As will be described in more detail below with reference to the drawings, the volume manager service 130 may facilitate one or more techniques for persisting user data across multiple secure shell sessions. For example, the technique may optionally include releasing the user block volume from the secure shell instance and generating a user data backup in response to receiving a release request by the volume manager service 130 before ending the secure shell session.

[0040] In some embodiments, the session manager service 120 may provide the instance manager service 150 with a domain identifier of the block volume 140 (e.g., the AD of the reserved block volume). The instance manager service 150 may allocate compute instances in the AD provided by the volume manager service. The instance manager service 150 may provide the session manager service 120 with instance identifier information (e.g., cloud infrastructure ID) for the allocated instances. The allocation of compute instances may be done per user and / or per compartment (where a compartment is a logical container that controls access to cloud system resources and may include sub-compartments). For example, the session manager service 120 may allocate separate instances to a user in different compartments. In contrast, the session manager service 120 may allocate a single compute instance for multiple containers such that separate containers share the same compute instance, one per compartment (where a container is a packaged software application that may include application code, runtime, system tools, system libraries, and settings).

[0041] In some embodiments, the session manager service 120 may provide the user device 110 with an instance identifier, along with the router address of the router 160. The router 160 may be configured to connect the user device (e.g., via a multiplexed web socket connection) to a secure shell instance, as described in more detail below. Further, the router may also be configured to verify the user device 110 and the session manager service 120 as part of securely connecting the user device 110 to the secure shell instance.

[0042] In some embodiments, the session manager service 120 may generate a non-token as part of the approval and verification of the secure connection of the user device 110 to the secure shell instance. In some embodiments, the non-token may be a web token (e.g., JavaScript Object Notation "json" web token (jwt token)) that includes information including, but not limited to, headers, expiration (e.g., in minutes before expiration), keys, and / or random strings (e.g., a set-length alphanumeric sequence). In some cases, a non-token is generated and provided to the user device 110 along with the instance identifier and router address.

[0043] As part of configuring the secure shell instance, the session manager service 120 may select and configure an existing instance from the pool of available instances 180, as described in more detail with reference to the following figures. In some cases, the session manager service may install a configuration file and a delegation token on the selected instance. The configuration may include parameter information including, but not limited to, instance identifier, domain identifier, request details (e.g., resource allocation, compartment, tenancy), etc. The delegation token may be installed in the user's shell environment on the instance. The token may provide evidence that the user has been authenticated and may allow the user to execute commands on their account without the need for re-authentication. In some embodiments, the IaaS system may reject CLI commands executed against user accounts where the delegation token is not installed in the user's shell environment.

[0044] In some embodiments, the configuration parameters installed by the session manager service 120 may be stored in the instance configuration store 190. The instance configuration store 190 may enable a new secure shell instance to be restored and / or reconfigured using the request parameters following the termination of the secure shell instance. In some embodiments, the secure shell instance will be terminated when the user completes the use of the secure shell instance. In some embodiments, the session manager service 120 may instruct the instance manager service 150 to terminate the secure shell instance based on the period of agent inactivity (e.g., idle time) and / or the period of activity via the router 160. The idle time may be provided as part of the configuration parameters. In some embodiments, the user of the user device 110 may request that the secure shell instance be terminated, which may be implemented by the session manager service 120.

[0045] As described above, the exemplary system 100 may provide improved security and stability of the IaaS system by at least enabling the user device to connect to the secure shell instance from a console and / or command line interface. Instead of maintaining user block volumes, persisting user data during instance restoration operations reduces the potential impact of a breakout from a container by restoring data from a system service that holds data without read / write access when not in use, rather than maintaining potentially compromised block volumes.

[0046] The exemplary system 100 may further improve the security and performance of the IaaS system by implementing user data persistence techniques. For example, generating user data backups and generating restore volumes in response to receiving restore requests may reduce the system resource usage associated with maintaining user block volumes. Alternatively, the backups may be stored in a low-overhead storage format (e.g., a disk image, etc.) until the data is requested for a restored secure shell session. Similarly, maintaining user block volumes may present a certain level of risk if the system 100 is compromised. For example, in a system that does not permit read / write operations, retaining user data as a backup in long-term storage may reduce the risk of unauthorized access to user data between secure shell sessions.

[0047] Figure 2 shows an exemplary technique 200 for reserving block volumes for a secure shell instance, according to one or more embodiments. As described in more detail above with reference to FIG. 1, as part of reserving and configuring a shell instance, the session manager service 120 may perform one or more operations in cooperation with the configuration services of the exemplary system 100 of FIG. 1.

[0048] In some embodiments, the session manager service may receive, from a user device, a request to connect to a secure shell, as described above with respect to authorizing and validating user requests (e.g., operation 202). In response to receiving the user request, the session manager service 120 may cooperate with the volume manager service 130 to reserve a volume (e.g., operation 204). Reserving a volume may involve steps including, but not limited to, the volume manager service 130 checking whether one or more block volumes are already associated with and / or allocated to the user of the user device 110 (e.g., user block volume 230) and are available for hosting the secure shell instance 250 (e.g., operation 206). This may include checking a user identifier (e.g., username or login ID) against a registry of block volumes managed by the volume manager service 130. If the user block volume 230 is identified, domain identifier information (e.g., resource ID, data center infrastructure locator, etc.) may be returned to the session manager service 120 to indicate that the volume has been reserved for hosting the secure shell instance 250 (e.g., operation 208).

[0049] The volume manager service 130 may find that the user block volume 230 is not available for attachment to the secure shell instance 250. In some embodiments, the volume manager service 130 may reserve an empty block volume 240 that may include one or more of the available block volumes 140 in a given data center and / or IaaS region that may not yet be assigned to a user. Similarly, the volume manager service 130 may provide resource identifier information for the session manager service 120 to realize in subsequent operations. For example, the session manager service 120 may assign an instance in the block volume 140 returned by the volume manager service 130 (e.g., operation 210).

[0050] In some embodiments, assigning an instance may include providing a domain identifier to the instance manager service 150. As described in more detail with reference to FIG. 1, the instance manager service 150 may select and reserve an existing instance that is maintained as part of some available instances (e.g., instance 180 of FIG. 1) that may be at least partially preconfigured for use as a secure shell instance. The instance manager service 150 may return an instance identifier (e.g., instance ID) to the session manager service 120, which may enable the session manager service 120 to identify the selected instance in subsequent operations. In some embodiments, instead of creating and configuring an instance when realizing a connection request, selecting and reserving an existing instance may potentially reduce system latency when processing the connection request.

[0051] Figure 3 shows an exemplary technique 300 for releasing a block volume containing user data from a secure shell instance, according to one or more embodiments. One or more subsystems of the system 100 of FIG. 1 (e.g., the session manager service 120, the volume manager service 130, and the instance manager service 150) may perform operations associated with terminating and / or restoring a secure shell instance (e.g., the secure shell instance 250 of FIG. 2). For example, when a user of a user device (e.g., the user device 110 of FIG. 1) requests to disconnect from a secure shell instance, terminating the secure shell session may include detaching the user block volume from the secure shell instance, as well as one or more additional and / or alternative operations, as described below.

[0052] In some embodiments, the session manager service 120 requests an idle time from the instance agent 350 (e.g., operation 302). As described above, the instance agent 350 may be an HTTP server configured to open a secure WebSocket connection and redirect input and output to a terminal operating on the instance (e.g., a secure shell operating on a Docker container). In some embodiments, the agent may identify an updated version of the Docker container, start the Docker container, and create a terminal within the container. In some embodiments, the agent may further specialize the Docker container to include secure shell configuration information and execute the terminal within the Docker container, at least in part, by passing through specific environment variables.

[0053] In some embodiments, the session manager service 120 may be configured to terminate the secure shell instance after a period has elapsed since the last connection that exceeded a threshold time and / or after a user request to disconnect or terminate the secure shell instance. In some embodiments, the session manager service 120 may send a request to the instance manager service 150 to terminate the secure shell instance after the idle time returned by the instance agent 350 exceeds the configured lifespan of the secure shell instance (e.g., operation 304). In response, the instance manager service 150 may perform additional operations to terminate the secure shell instance (e.g., in cooperation with the instance agent 350).

[0054] As part of the termination operation, the volume manager service 130 may receive a request to release the block volume (e.g., operation 308). In some embodiments, the block volume (e.g., block volume 140 of FIG. 1) may include user data generated and / or stored during the secure shell session that may be useful to the user of the user device (e.g., user device 110 of FIG. 1). In this way, the volume manager service 130 may perform one or more operations to facilitate termination of the secure shell instance, including but not limited to creating a backup of the block volume (e.g., operation 310).

[0055] In some embodiments, the volume manager service 130 may create a backup using the backup service 340. The backup service may include external IaaS resources such as, but not limited to, a block storage service 342, an object storage service 344, a volume image service 346, etc. In some embodiments, the volume manager service 130 may maintain the user block volume during the retention period instead of creating a backup. The retention period may reduce latency when the user requests a new secure shell instance by reattaching the user block volume without requiring the creation of a backup, or by restoring the user data to a newly configured block volume from the block storage.

[0056] In some embodiments, the volume manager service 130 may create a backup using the object storage service 344 such that the backup is formatted for transfer to an object storage system. In contrast to block volume storage, object storage may potentially reduce the IaaS system overhead and the resources required to maintain the user block volume by enabling the storage of data as chunks of objects in a data store. In some embodiments, the object storage service 344 may enable the storage of user data at a lower cost with respect to system resources, even though it introduces an additional data format conversion operation that may introduce latency into the secure shell session restoration process.

[0057] In some embodiments, the volume manager service 130 may create a backup by creating a volume image (e.g., using the volume image service 346). The volume image (e.g., a disk image of a block volume) may include the contents and structure of the volume as a computer file. The volume image may be created by generating a copy along with a manifest of blocks that preserve the structure of the original block volume. In some cases, the volume image may be compressed with respect to the block volume to potentially reduce the size of the image to the size of the data stored in the block volume (e.g., omitting surplus or unused reserved capacity within the block volume). The volume image may enable user data to be restored from a single file rather than in a restore procedure that involves provisioning multiple blocks and / or chunks of objects. Thus, it may enable system restore operations with potentially reduced latency and reduced resource requirements, at least in part due to not maintaining a block volume for user data between secure shell sessions.

[0058] FIG. 4 shows an exemplary technique 400 for restoring a block volume for a restored secure shell instance, according to one or more embodiments. One or more subsystems of the system 100 of FIG. 1 (e.g., the session manager service 120, the volume manager service 130, and the instance manager service 150) may perform operations associated with ending and / or restoring a secure shell instance (e.g., the secure shell instance 250 of FIG. 2). Restoring a secure shell instance may include creating a new secure shell instance with an empty block volume and provisioning backup data to the empty block volume (also referred to as “hydrating” the empty block volume).

[0059] In some embodiments, the session manager service 120 may receive, from the user device 110, a request to connect to a secure shell instance (e.g., operation 402), as described in more detail above with reference to FIG. 1. In the restoration operation of technique 400, the user request may include a request for the session manager service 120 to reconnect to the secure shell instance after requesting an end operation (e.g., technique 300 of FIG. 3), rather than an initial configuration and / or connection to the secure shell instance.

[0060] In some embodiments, the session manager service 120 may request the volume manager service to reserve a block volume 140 for attaching to a secure shell instance, as described in further detail above with reference to FIG. 2. Instead of searching for a user block volume, as described above, the volume manager service 130 may reserve an empty block volume 240 (e.g., operation 404). The empty block volume 240 may be preconfigured for attachment to a secure shell instance, for example, as part of a pool of block volumes.

[0061] The volume manager service 130 may provision backup user data 430 to an empty block volume 240 (e.g., operation 406). As described in more detail with reference to FIG. 2, the backup user data 430 may be stored in several different data formats, including but not limited to block storage and object storage, for example, as a disk image (e.g., as a single file), or may be distributed across multiple data sub-units (e.g., blocks, objects, etc.). In some embodiments, the volume manager service 130 may require that a reserved empty block volume be provisioned with backup user data 430 using a backup service (e.g., the backup service 340 of FIG. 3). In some embodiments, the backup service may facilitate the transfer of backup user data 430 (e.g., blocks) via a distributed storage system (e.g., a cloud storage system). In some embodiments, provisioning the empty block volume 240 may include reformatting the backup user data 430 from object data to block data (e.g., if the backup is stored as object data).

[0062] In some embodiments, the volume manager service 130 may identify a data center (e.g., AD) identifier of an empty block volume where backup user data 430 is provisioned (e.g., operation 408). Identifying the data center identifier may include identifying the system in which the backup user data 430 is stored and verifying the hardware address of the empty block volume 240 within an IaaS infrastructure (e.g., data center). Once identified, the volume manager service 130 may return the data center identifier to the session manager service 120 (e.g., operation 410). The session manager service 120 may use the data center identifier to provide to an instance manager service (e.g., the instance manager service 150 of FIG. 1) as part of configuring and creating a secure shell instance, as described in more detail above with reference to FIGS. 1-2.

[0063] FIG. 5 shows a sequence diagram illustrating an exemplary data flow 500 in which a block volume containing user data is released, according to one or more embodiments. A user of the user device 110 requests to connect to a secure shell instance, and the session manager service 120 requests the volume manager service to reserve a volume. After determining to terminate the secure shell instance, the session manager service 120 requests the volume manager service 130 to release the block volume.

[0064] In data flow 500, user device 110 (which may be an example of user device 110 in FIG. 1) may submit a request to connect to a secure shell instance, which may be received by session manager service 120, as described in more detail with reference to FIGS. 1-2. Upon receiving the request, session manager service 120 may configure a shell instance, as described in more detail above with reference to the figures. Configuring a shell instance may include, but is not limited to, reserving a volume, allocating an instance from some available instances created for the purpose of configuring a secure shell instance, and installing a configuration file on the allocated instance, among other operations.

[0065] Reserving a volume may include one or more operations, such as requesting the volume manager service 130 to reserve a block volume, as described in more detail with reference to FIGS. 2 and 4. For example, reserving a block volume may include searching for an existing block volume for a user block volume (e.g., user block volume 230 in FIG. 2) that contains user data, and returning the data center identifier of the user block volume to session manager service 120. In some cases, the volume manager service may identify and return the data center identifier (e.g., AD identifier) of the reserved block volume (e.g., empty block volume 240 in FIG. 2), as may occur when the user block volume is not found by the volume manager service 130.

[0066] Configuring a shell instance may include the session manager service 120 receiving a shell instance identifier (e.g., an IaaS resource identifier) from the instance manager service. As described in more detail with reference to FIGS. 1-2, the instance may be reserved from a pool of at least partially pre-configured instances to which a reserved volume may be attached. Attaching a reserved volume may include, for example, one or more operations that request the volume manager service 130 to attach the volume. In response to a request by the session manager service 120, the volume manager service 130 may attach the volume and return a confirmation to the session manager service 120.

[0067] When the session manager service 120 determines that the secure shell instance is idle and / or the user of the user device 110 requests to terminate the secure shell instance, the session manager service 120 may request the volume manager service 130 to release the block volume, as described in more detail with reference to FIG. 3. As part of releasing the block volume, the volume manager service may create a backup of the user data included in the block volume. The volume manager service may receive a backup identifier from the backup service 340 as part of the backup operation. In some embodiments, the backup operation may be performed by the backup service, as described in more detail with reference to FIG. 3.

[0068] Releasing a block volume may include deleting user data from the block volume (e.g., reformatting) and returning the storage capacity to availability for future configurations of the block volume. As part of releasing the block volume, the volume manager service 130 may confirm that the block volume has been released to the session manager service 120.

[0069] FIG. 6 shows a sequence diagram illustrating an exemplary data flow 600 in which user data is persisted to a restored secure shell instance according to one or more embodiments. A user of the user device 110 requests a connection and / or reconnection to the secure shell instance, and the session manager service 120 may request the volume manager service 130 to restore the user volume. The volume manager service 130 may cooperate with the backup service 340 to provision the restored volume.

[0070] In the data flow 600, the session manager service 120 may receive a connection request from the user device 110. As described in more detail with reference to FIG. 3, when the user device 110 has previously been connected to the secure shell instance and data from that instance has been stored in a backup, the session manager service 120 may send a restore request to the volume manager service 130. The restore request may include identifying information about the user of the user device 110 and / or the backup user data (e.g., user identifier, user name, last session identifier, backup identifier, etc.).

[0071] Instead of searching for existing user block volumes (e.g., user block volume 230 in FIG. 2), the volume manager service 130 may reserve an empty block volume (e.g., empty block volume 240 in FIG. 2). In contrast to the operations described with reference to FIG. 2, the volume manager service 130 may provide a backup identifier to the backup service 340 as part of a provisioning process for restoring user backup data (e.g., user backup data 430 in FIG. 4).

[0072] Provisioning a restore volume may include transferring backup data from a backup storage system to an empty block volume by the backup service 340. This may include restoring the data structure to reproduce the user block volume. The volume manager service 130 may provide the backup service 340 with the data center identifier of the empty block volume, and the backup service may provision the backup data to the empty volume. In some embodiments, the volume manager service 130 may perform a provisioning operation by providing a backup data identifier to the backup service 340, receiving the corresponding user backup data, and restoring the data to the reserved block volume.

[0073] Once provisioned, the volume manager service 130 may provide a restore volume identifier to the session manager service 120, which may correspond to the data center identifier of an empty block volume. Using this identifier, the session manager service 120 may perform operations, including but not limited to, reserving an instance from a pool of preconfigured instances and requesting the volume manager service 130 to attach the restore volume to the reserved instance, as described in more detail with reference to FIG. 2. The volume manager service 130 may, in some cases, confirm the attachment of the restore volume by returning a confirmation to the session manager service 120.

[0074] FIG. 7 shows an exemplary flow for releasing a block volume for a secure shell instance, according to one or more embodiments. The operations of the flow may be implemented as hardware circuitry and / or stored as computer-readable instructions on a non-transitory computer-readable medium of a computer system, such as the volume manager service 130 of FIG. 1. When implemented, the instructions represent modules that include circuitry or code executable by a processor of the computer system. Execution of such instructions configures the computer system to perform the particular operations described herein. Each circuitry or code, in combination with the processor, performs its respective operation. Although the operations are shown in a particular order, it should be understood that the particular order is not required and that one or more operations may be omitted, skipped, and / or rearranged.

[0075] In one example, flow 700 includes an operation 702 in which the computer system receives a request to reserve a block volume. As described in more detail with reference to FIG. 2, the request may be generated by a session manager service (e.g., session manager service 120 of FIG. 1) in response to a request from a user device (e.g., user device 110 of FIG. 1) to connect to a secure shell instance (e.g., secure shell instance 250 of FIG. 2). The request may include a user identifier (e.g., username, login ID, session ID, network address, etc.) associated with the user device 110.

[0076] In one example, flow 700 includes an operation 704 in which the computer system reserves a block volume. Reserving a block volume may include the volume manager service checking whether a user block volume (e.g., user block volume 230 of FIG. 2) is maintained by the block volume storage system of the IaaS system to which the volume manager service is connected, as described in more detail below with reference to FIG. 8. If not, the volume manager service may reserve an empty block volume (e.g., empty block volume 240 of FIG. 2).

[0077] In one example, flow 700 includes an operation 706 in which the computer system identifies a data center identifier for the block volume. The data center identifier may describe an IaaS storage resource (e.g., a networked storage infrastructure) that maintains the block volume (e.g., block volume 140 of FIG. 1) and may be unique to a single data center of the IaaS system (e.g., a facility in a specific geographic area).

[0078] In one example, flow 700 includes an operation 708 where the computer system returns a data center identifier for a block volume. The volume manager system may provide the data center identifier for the reserved block volume identified as part of operation 708 to the session manager service. The session manager service may then provide the data center identifier for the reserved block volume to the instance manager service (e.g., instance manager service 150 of FIG. 1) as part of configuring a secure shell instance, as will be described in more detail with reference to FIGS. 1-2.

[0079] In one example, flow 700 includes an operation 710 where the computer system attaches a block volume. The volume manager service may attach the reserved block volume to an instance allocated from a pool of partially pre-configured instances (e.g., instance 180 of FIG. 1) selected by the instance manager service for use when creating a secure shell instance.

[0080] In one example, flow 700 includes an operation 712 in which the computer system receives an instruction to release a block volume. The volume manager service may receive a request from the session manager service after the session manager service has checked for an idle time exceeding the lifetime of the secure shell instance for the secure shell instance, as will be described in more detail with reference to FIG. 3. In some embodiments, a user of the user device may request to terminate the secure shell instance. The session manager service may request the volume manager service to release the reserved block volume as one of a plurality of operations associated with terminating the secure shell instance, such as disconnecting the secure shell instance from Docker (e.g., as a Docker container), deleting the instance, and disassociating the compute resources from the block volume, to potentially protect the core IaaS resources and user data.

[0081] In some embodiments, a retention period may follow the termination of the secure shell during which user block volume data may be maintained and / or retained. Retaining the user block volume data may reduce the latency associated with initializing a new secure shell instance, for example, by attaching the user block volume data to the new secure shell instance without restoring the user data from a backup such as object storage. In some embodiments, the retention period may include several hours or days, such as 12 hours, 24 hours, 36 hours, 48 hours, 72 hours, etc. In some embodiments, the retention period may be calculated from the end of the idle time and the secure shell instance timeout may trigger the termination of the instance, but the user block volume may be retained until a retention period (e.g., 72 hours) has elapsed after the idle timeout.

[0082] In one example, flow 700 includes an operation 714 where a computer system creates a backup of a block volume. The volume manager service may request creation of the backup as part of releasing the block volume. The backup may be created in different formats including, but not limited to, block storage, object storage, and / or a volume image, as will be described in more detail with reference to FIG. 3. Backup data (e.g., user backup data 430 of FIG. 4) may be created by a backup service (e.g., backup service 340 of FIG. 3) that may be an IaaS core service with which the volume manager service communicates.

[0083] In one example, flow 700 includes an operation 716 where a computer system releases a block volume. The volume manager service may release the block volume, at least in part, by reformatting the volume (e.g., clearing data stored on the block volume) and disassociating storage resources previously identified with the block volume such that they are available for other uses. Releasing the block volume, as opposed to maintaining a user block volume, as may be the case during a hold time after terminating a secure shell instance, may potentially reduce dedicated resources for maintaining the user block volume during periods when the user is not connected to the secure shell instance, allowing the IaaS system described herein to operate with reduced computational overhead.

[0084] FIG. 8 is a diagram illustrating an exemplary flow for reserving a block volume for a secure shell instance according to one or more embodiments. The operations of the flow may be implemented as a hardware circuit and / or stored as computer-readable instructions on a non-transitory computer-readable medium of a computer system, such as the volume manager service 130 of FIG. 1. When implemented, the instructions represent modules that include circuitry or code executable by a processor of the computer system. Execution of such instructions configures the computer system to perform the specific operations described herein. Each circuit or code, in combination with the processor, performs its respective operation. Although the operations are shown in a particular order, it should be understood that the particular order is not required and that one or more operations may be omitted, skipped, and / or rearranged.

[0085] In one example, flow 800 may include one or more operations that are performed by the volume manager service in response to receiving a request to reserve a block volume (e.g., operation 702 of FIG. 7). Thus, flow 800 includes operation 702, whereby the volume manager service receives a request to reserve a block volume from the session manager service (e.g., session manager service 120 of FIG. 1).

[0086] In one example, flow 800 includes operation 804 where the computer system determines whether a registered block volume is assigned. A registered block volume may be a block volume associated with a user of a user device (e.g., user device 110 of FIG. 1). Thus, operation 804 may include the volume manager service verifying whether a user block volume (e.g., user block volume 230 of FIG. 2) is maintained by the block volume storage system of the IaaS system to which the volume manager service is connected.

[0087] In one example, flow 800 includes an operation 806 in which the computer system reserves a registered block volume in response to the registered block volume being assigned. If operation 804 returns a data center identifier for a user block volume, the volume manager service may reserve the user block volume for attachment to a secure shell instance.

[0088] In one example, flow 800 includes an operation 808 in which the computer system reserves an empty volume in response to a registered block volume not being assigned. In contrast to operation 806, when a user block volume is unavailable, the volume manager service may reserve an empty block volume (e.g., empty block volume 240 of FIG. 2). The empty block volume may be at least partially preconfigured using one or more settings and / or configuration parameters for attachment to a secure computing instance.

[0089] FIG. 9 shows an exemplary flow 900 for restoring a block volume for a secure shell instance according to one or more embodiments. The operations of the flow are implemented as a hardware circuit and / or stored as computer-readable instructions on a non-transitory computer-readable medium of a computer system such as volume manager service 130 of FIG. 1. When implemented, the instructions represent a module that includes a circuit or code executable by a processor of the computer system. Execution of such instructions configures the computer system to perform the particular operations described herein. Each circuit or code, in combination with the processor, performs its respective operation. It should be understood that the operations are shown in a particular order, but the particular order is not required and one or more operations may be omitted, skipped, and / or rearranged.

[0090] In one example, flow 900 includes operation 902 where the computer system receives a request to restore a block volume. As described in more detail with reference to FIG. 4, the volume manager service may receive a request to restore a block volume from the session manager service (e.g., session manager service 120 in FIG. 1) after a user of a user device (e.g., user device 110 in FIG. 1) requests to reconnect to a secure shell instance (e.g., secure shell instance 250 in FIG. 2). In some embodiments, the request may include a user identifier, whereby the volume manager service may perform one or more backup restore operations as described below.

[0091] In one example, flow 900 includes operation 904 where the computer system reserves an empty block volume from a pool of empty volumes. In contrast to the operations described with reference to flow 800 of FIG. 8, the volume manager service may at least partially fulfill the restore request of operation 902 by reserving an empty block volume (e.g., empty block volume 240 in FIG. 2) without checking whether the user block volume is maintained by an IaaS data storage system. For example, as described in more detail with reference to FIG. 7, when a backup is created, the volume manager service may reserve an empty block volume without performing the operations described with reference to FIG. 8.

[0092] Alternatively, the volume manager system may fulfill the operations described with reference to FIG. 8 by checking whether the user block volume is maintained by an IaaS data storage system. In this way, instead of reserving an empty block volume, the volume manager service may return a user block volume data center identifier.

[0093] In one example, flow 900 includes an operation 906 where the computer system requests user backup data. The volume manager service may request that the user data backup (e.g., user data backup 430 in FIG. 4) be transferred to the reserved empty block volume of operation 904. The request may be made to a backup service (e.g., backup service 340 in FIG. 3) that may be a core IaaS service that facilitates data backup and restore operations.

[0094] In one example, flow 900 includes an operation 908 where the computer system provisions an empty block volume. As will be described in more detail with reference to FIG. 4, provisioning an empty block volume may include operations to recreate the structure of a user block volume (e.g., user block volume 230 in FIG. 2) that precedes a backup operation (e.g., operation 714 in FIG. 7).

[0095] In one example, flow 900 includes an operation 910 where the computer system identifies the data center identifier of the empty block volume. The volume manager service may identify the data center identifier of the empty block volume as the data center identifier of the restore volume so that the restore volume may be attached to a secure shell instance. The data center identifier may be a unique identifier corresponding to the data center (e.g., IaaS infrastructure) where the empty block volume is maintained.

[0096] In one example, flow 900 includes an operation 912 where the computer system returns the data center identifier of the restore volume. The data center identifier may be returned by the volume manager service to the session manager service for the configuration of the secure shell instance, as described in more detail above with reference to FIGS. 1 - 2.

[0097] Techniques for Securing Cloud Shell Using Signed Nonces Cloud-based platforms provide users with scalable and flexible computing resources. Such cloud-based platforms, also referred to as Infrastructure as a Service (IaaS), may also provide a suite of cloud solutions around a customer's data, for example, solutions for orchestrating transformations, loading data, and presenting data. Users of IaaS resources may require that a secure terminal be created within a secure shell instance (e.g., using two-way encryption via a WebSocket Secure or wss connection) so that operations and data transfers can be securely executed.

[0098] In some embodiments, the shell instance may be a dedicated computing instance that can run a Docker container (e.g., a host) and may enable a user device to run a terminal on that Docker container. The user device may be assigned to a single host, but multiple active terminals may be created on that host. The shell instance may be terminated after a period of inactivity. The instance may run a host, and the host may then run a secure shell (e.g., a terminal). In some embodiments, the instance and / or the host may also be terminated when the terminal has not been active on the host for a period of time.

[0099] In some embodiments, the instance agent may operate on the assigned instance and handle receiving WebSocket traffic and sending that traffic to a secure shell operating on the host. The instance agent may be an HTTP server configured to open a secure WebSocket connection and redirect input and output to a terminal operating on the instance (e.g., a secure shell operating on a Docker container). In some embodiments, the agent may identify an updated version of a Docker container, start the Docker container, and create a terminal within the container. In some embodiments, the agent may further specialize the Docker container to include secure shell configuration information and run the terminal within the Docker container, at least in part, by passing through certain environment variables.

[0100] In some embodiments, the session manager service may provide command line access from a browser to a user's resources. The session manager service may provide one or more available compute instances that are assigned and / or specialized to support a particular user account. Providing available compute instances (e.g., by creating one or more compute instances configured with default parameters prior to receiving a secure shell request) may allow the session manager service to improve the latency of the system response (e.g., by creating and specializing an instance within 5 seconds, 10 seconds, 30 seconds, 60 seconds, etc.). The session manager service may also provide a web-based terminal that allows a user to use IaaS infrastructure resources (e.g., under intellectual property rights and / or via other Unix commands) on a specialized instance through a secure connection that is ultimately approved after the user is authenticated in multiple operations.

[0101] In some embodiments, the techniques described herein may be incorporated as computer-executable instructions into a software development kit (SDK) that may be used by a web-based terminal for the creation of these resources and access to those resources. In this way, the SDK may also be used by other providers to implement a secure web-based terminal. Further, the techniques described herein may allow a user device to connect to a secure shell that operates one or more terminals with improved security and latency. For example, rather than creating a new instance upon request to securely connect to the secure shell, the session manager may potentially improve system latency introduced by the pre-configuration of instances by selecting and configuring a secure shell instance from among a plurality of available instances.

[0102] Furthermore, implementing one or more techniques for securing one or more terminals can improve the operation and performance of the systems described herein. For example, providing a nonce that may be signed by both a session manager service and a user device, along with an operation that checks the signature (e.g., implemented by a router that facilitates connection of the user device to a secure shell instance), can provide improved security and prevent unauthorized access to data and / or IaaS resources via terminals operating on the secure shell instance. Additionally, implementing a one-time use protocol where the validity of the nonce may be determined in relation to a database of unused nonces can prevent reuse of the nonce. In addition, a multi-step security protocol may also provide additional user authentication and resource authorization protection that allows the session manager service to prevent reuse of login tokens (e.g., tokens generated by an identity approval service after authenticating the user device) by unpermitted and / or unauthenticated user devices. Additionally, configuring a secure shell within a Docker container system may improve security by isolating data related to the secure shell, thereby potentially reducing exposure of external data to breaches.

[0103] FIG. 10 shows an exemplary system 1000 for managing a secure shell instance according to one or more embodiments. In some embodiments, system 1000 may enable a user to securely connect to a computing instance (e.g., a virtual machine or “VM” or a Docker container). Secure access may enable the user to connect via an encrypted connection (e.g., https and / or WebSocket Secure “WSS”) to distributed computing system resources (e.g., infrastructure-as-a-service or “IaaS”) including, but not limited to, distributed storage, compute cores, etc. for real-time data transfer with a VM of an IaaS system. In some embodiments, user device 1010 may generate a signed request for a secure shell instance and send the signed request to session manager service 1020. Session manager service 1020 may verify user device 1010 and perform operations as part of configuring a secure shell instance as part of fulfilling the signed request.

[0104] In some embodiments, user device 1010 may generate a signed request using a user interface including, but not limited to, a graphical user interface console or a command line interface (CLI). The user interface may include an identity approval service that may generate a user public / private key pair. Optionally, the user public / private key pair may be a temporary key pair generated, for example, at session initialization, at generation of a request for a secure VM connection, etc. User device 1010 may generate a signed request using the private key of the user public / private key pair.

[0105] In some embodiments, the session manager service 1020 may implement one or more approval steps as part of managing and provisioning a secure shell instance. Approval may include, for example, receiving a signed request (such as as a step of verifying the identity of the user device 1010), and requesting a public key (such as to an approval service) and using the key to verify the signature of the signed request. Additionally or alternatively, the public key may be included in a login token provided by the approval service, as described in more detail below with reference to FIG. 29.

[0106] In some embodiments, the session manager service 1020 may fulfill the signed request, at least in part, by reserving and configuring a secure shell instance. Optionally, the session manager service 1020 may communicate with the volume manager service 1030 to reserve a block volume 1040. The volume manager service 1030 may return a domain identifier of the block volume 1040 to the session manager service 1020. In some embodiments, the domain identifier may describe one or more data centers within the geographic region (e.g., an availability domain, or "AD") of the reserved block volume 1040.

[0107] In some embodiments, the session manager service 1020 may provide the domain identifier of the block volume 1040 (e.g., the AD of the reserved block volume) to the instance manager service 1050. The instance manager service 1050 may allocate compute instances in the AD provided by the volume manager service. The instance manager service 1050 may provide instance identifier information (e.g., cloud infrastructure ID) about the allocated instances to the session manager service 1020. The allocation of compute instances may be done per user and / or per compartment (where a compartment is a logical container that controls access to cloud system resources and may include sub-compartments). For example, the session manager service 1020 may allocate separate instances to a user in different compartments. In contrast, the session manager service 1020 may allocate a single compute instance for multiple containers such that separate containers share the same compute instance, one per compartment (where a container is a packaged software application that may include application code, runtime, system tools, system libraries, and settings).

[0108] In some embodiments, the session manager service 1020 may provide the instance identifier, along with the router address of the router 1060, to the user device 1010. The router 1060 may be configured to connect the user device (e.g., via a multiplexed web socket connection) to a secure shell instance, as described in more detail below. Further, the router may also be configured to verify the user device 1010 and the session manager service 1020 as part of securely connecting the user device 1010 to the secure shell instance, as described below.

[0109] In some embodiments, the session manager service 1020 may generate a nonce as part of the approval and verification of the secure connection of the user device 1010 to the secure shell instance. In some embodiments, the nonce may be a web token (e.g., a JavaScript Object Notation "json" web token or "jwt" token) that includes information including, but not limited to, headers, expiration (e.g., in minutes before expiration), keys, and / or random or pseudo-random strings (e.g., an alphanumeric sequence of a set length, a random number or pseudo-random number, etc.). Optionally, a nonce is generated and provided to the user device 1010 along with the instance identifier and router address.

[0110] In some embodiments, the session manager service 1020 may store the nonce in the nonce and identifier store 1070. The nonce and identifier store 1070 may be a distributed data store (e.g., cloud storage) that stores a nonce table, as described in more detail below with reference to FIG. 13, and the nonce table may allow the session manager service 1020 to, for example, track the nonce and ensure that the nonce is valid for a single request from the user device 1010, thereby further securing access of the user device to the secure shell instance. Similarly, the nonce and identifier store 1070 may also store the login token provided by the approval service, including the user public key of the user key pair, which may be used to verify the user device 1010 during the fulfillment of the user request, as described in more detail below with reference to FIGS. 11, 14, and 16.

[0111] As part of configuring a Secure Shell instance, the session manager service 1020 may select and configure an existing instance from a pool of available instances 1080, as described in more detail with reference to the following figures. In some cases, the session manager service may install a configuration file and a delegation token on the selected instance. The configuration may include parameter information including, but not limited to, instance identifier, domain identifier, request details (e.g., resource allocation, compartment, tenancy), etc. The delegation token may enable the user device 1010 to access IaaS system resources without additional approval at the instance level.

[0112] In some embodiments, the configuration parameters installed by the session manager service 1020 may be stored in the instance configuration store 1090. The instance configuration store 1090 may enable a new Secure Shell instance to be restored and / or reconfigured using the request parameters following the termination of the Secure Shell instance. In some embodiments, the Secure Shell instance will be terminated when the user completes the use of the Secure Shell instance. In some embodiments, the session manager service 1020 may instruct the instance manager service 1050 to terminate the Secure Shell instance based on the period of agent inactivity (e.g., idle time) and / or the period of activity via the router 1060. The idle time may be provided as part of the configuration parameters. In some embodiments, the user of the user device 1010 may request that the Secure Shell instance be terminated, which may be implemented by the session manager service 1020.

[0113] As described above, the exemplary system 1000 may provide improved security and stability for the IaaS system by enabling at least user devices to connect from a console and / or command line interface to a secure shell instance. For example, using single-use non-tokens and instances may potentially include the risk of breakout (where software accesses unauthorized data and / or resources). A single-use non-token may be signed, for example, by a private key of the user device, which may prevent another user from accessing the secure shell instance. As another example, instead of reusing an instance that may potentially endanger the user device after using the same instance, a single-use instance may reduce the potential impact of breakout from a container by replacing the instance after the instance is no longer used.

[0114] FIG. 11 shows an exemplary system 1100 for managing a secure shell session according to one or more embodiments. Referring to the system described in FIG. 10 (e.g., the exemplary system 100), the exemplary system 1100 may include one or more of the components (e.g., the volume manager service 130, the instance manager service 150, the instance 180, etc. of FIG. 10). In some embodiments, the exemplary system 1100 may implement one or more approval and security protocols as part of providing a secure connection between the user device and the secure shell instance.

[0115] In some embodiments, the session manager service 120 may receive a signed request from the user device 110 (e.g., operation 1102), and the signed request may be generated by the user device 110. In some embodiments, the user may request a secure shell via a command line interface (CLI) and / or a graphical user interface (GUI), also referred to as a "console" interface. In some cases, the system 1100 may include a GUI / CLI login service 1120 that facilitates communication of identity and authorization information with the session manager service 120. For example, the secure shell request may be signed with a private key generated by the GUI / CLI login service 1120 as part of a public / private key pair associated with the user session. For example, user login and / or identity verification may include generating a temporary public / private key pair that may be used to sign the secure shell request with the private key. The public key may be provided to the authorization service 1130 as part of authorizing access to the user device 110 and generating a login token (e.g., an access token), and the login token (e.g., an access token) may be provided to the session manager service 120 to authorize the signed request (e.g., operation 1104).

[0116] In some embodiments, the approval service 1130 may perform identity approval for a user device based on username / password account details and approve access to specific IaaS resources and / or hierarchical resource layers (e.g., a root compartment including sub-compartments associated with the IaaS resources). The approval service 1130 may communicate directly with the GUI / CLI login service 1120 during the first step of login / approval, from which the GUI / CLI login service 1120 may provide a login token to the session manager service 120. As will be described in more detail below with reference to FIGS. 14 and 16, the session manager service 120 may perform additional operations (e.g., operation 1104) as part of approving access to the secure shell.

[0117] In some embodiments, the session manager service 120 may reserve a shell instance for use when creating a secure shell instance 1140 (e.g., operation 1106). As will be described in more detail below with reference to FIGS. 12 - 14, reserving a shell instance may include one or more operations including, but not limited to, reserving a volume, allocating an instance to the reserved volume, and configuring the allocated instance. The session manager service 120 may receive a shell instance identifier as part of reserving the shell instance and may provide information including, but not limited to, the shell instance identifier, a user identifier associated with the user device 110, and an expiration time (e.g., a validity period) as part of requesting a delegation token from the approval service 1130 (e.g., operation 1108).

[0118] The approval service 1130 may generate a delegation token and provide it to the session manager service 120 (e.g., operation 1110) as a means to enable the user device 110 to securely connect to the secure shell instance 1140. In some embodiments, the session manager service 120 may configure the reserved shell instance by installing the delegation token received from the approval service (e.g., operation 1112). As will be described in more detail with reference to FIG. 13, configuring the secure shell instance 1140 may include realizing the configuration of the instance (e.g., installing a configuration file including one or more aspects of the signed request).

[0119] Subsequent to receiving the delegation token from the approval service 1130, the session manager service 120 may provide the secure shell token to the GUI / CLI login service 1120 (e.g., operation 1114). As will be described in more detail with reference to the following paragraphs, additional verification and access control operations, including but not limited to non-token generation, signing, and / or storage, may be realized by the session manager service 120. In some embodiments, the secure shell token may include additional access control elements and may be associated with metadata including the delegation token.

[0120] In some embodiments, the session manager service 120 may also provide the shell instance identifier to the secure shell router 1150 (e.g., operation 1116). In some embodiments, the secure shell router may be an example of the router 160 of FIG. 10. The secure shell router 1150 may store the shell instance identifier and may use the secure shell identifier as part of verifying the user device 110 during connection to the secure shell instance 1140, as will be described in more detail with reference to FIG. 12 below.

[0121] FIG. 12 shows an exemplary system 1200 for connecting a user device to a secure shell instance according to one or more embodiments. Similar to the techniques described with reference to FIG. 11, the session manager service 120 may facilitate the connection of the user device 110 to the secure shell router 1150 as part of the connection to the secure shell instance 1140.

[0122] In some embodiments, the session manager service 120 may receive a signed request from the user device 110 to create a secure shell instance (e.g., via the GUI / CLI login service 1120 of FIG. 11), as described in more detail with reference to FIG. 11. The request may include a request for the session manager service 120 to create a host for the secure shell instance (e.g., operation 1202). The host may refer to a cloud resource container and / or volume implemented in the IaaS resource. The request may include security and authorization information as described with reference to FIG. 11, and thus, the operations and elements of the system 1200 may include one or more of the above-described elements and / or operations (e.g., the authorization service 1130 of FIG. 11 that generates a delegation token).

[0123] In some embodiments, the session manager service 120 may configure a host for the secure shell instance (e.g., operation 1204). Hereinafter, with reference to FIG. 13, one or more configuration operations included in the configuration of the host will be described in more detail. In some embodiments, the session manager service 120 may use one or more manager services 1230, including but not limited to the volume manager service 130 and the instance manager service 150, as described in more detail above with reference to FIG. 10, to reserve and allocate instances.

[0124] As part of creating secure access to the secure shell instance 1140 of the user device 110, the session manager service 120 may generate a nonce, a shell identifier, and a router address and provide them to the user device 110 (e.g., operation 1206). As described in more detail with reference to FIG. 10, the nonce may include a web token (e.g., a JWT token) that may include a random string having a predetermined number of characters and / or numbers (e.g., an eight-character string of characters and numbers). The shell identifier may be included in the secure shell token described with reference to FIG. 11. The router address may identify the secure shell router 1150 and may enable the user device to request to connect to the secure shell router 1150 via a secure connection (e.g., WebSocket Secure, i.e., a "WSS" connection).

[0125] In some embodiments, the session manager service 120 may sign the nonce using, for example, the private key of the key pair identified by the session manager service 120. As described in more detail with reference to FIG. 14, additional verification procedures may include verification of the system-signed nonce generated by the session manager service 120 signing the nonce. To that end, the session manager service 120 may provide the system-signed nonce to the user device 110 and / or the secure shell router along with the shell instance identifier. In some embodiments, when the session manager service 120 provides the system-signed nonce to the user device 110, the user device 110 may sign the system-signed nonce and provide the double-signed nonce to the secure shell router 1150.

[0126] The Secure Shell Router 1150 may receive a connection request from the user device 110, which may include a user-signed nonce (e.g., operation 1208). The user-signed nonce may be generated by signing the nonce with a private key held by the user device 110, similar to the system-signed nonce. As described above, the user private key may form part of a key pair (e.g., an ephemeral public / private key pair) generated by the GIU / CLI login service, and the public key may be provided to the session manager service 120 and / or the Secure Shell Router 1150.

[0127] As part of permitting the connection request, the Secure Shell Router 1150 may verify the user and system signatures (e.g., operation 1210). The Secure Shell Router 1150 may verify the nonce, at least in part, by checking whether the nonce has expired (e.g., if the nonce includes an expiration period). The verification may be accomplished by a request from the session manager service 120 (e.g., the session manager service 120 may check whether the nonce is valid and may provide an indication of validity). The Secure Shell Router 1150 may also verify that the nonce has not been previously used for a connection request, as will be described in more detail below with reference to FIG. 13.

[0128] In some embodiments, the Secure Shell Router 1150 may verify one or more of the signatures by decrypting the user and system signature nonces, at least in part, using the public keys for the user device 110 and the session manager service 120, respectively. In some embodiments, the Secure Shell Router 1150 may decrypt the double-signed nonce using the user public key and decrypt the system signature using the system public key to verify the user signature, as may occur when the user device 110 signs the system-signed nonce. Decrypting in this way may allow the Secure Shell Router 1150 to confirm the nonce value and verify the nonce. In some embodiments, verification may be accomplished, for example, by comparing the decrypted nonces to confirm whether they match.

[0129] Following verification of the nonce and the user and system signatures, the Secure Shell Router 1150 may connect the user device 110 to the Secure Shell instance 1140 (e.g., operation 1212). As described in more detail above with reference to FIG. 10, the Secure Shell Router 1150 may enable interaction (e.g., full-duplex communication) between a web browser (or other client application) and a web server hosting the Secure Shell instance 1140 via encrypted messages and may provide a WebSocket Secure (wss) connection.

[0130] FIG. 13 shows an exemplary system 1300 for configuring a Secure Shell instance with a one-time use nonce according to one or more embodiments. As described in more detail above with reference to FIGS. 11-13, as part of reserving and configuring the shell instance, the session manager service 120 may perform one or more operations in cooperation with the configuration service of the exemplary system 1300.

[0131] In some embodiments, the session manager service may receive, from the user device, a request to connect to the secure shell, as described above with respect to authorizing and validating user requests (e.g., operation 1302). In response to receiving the user request, the session manager service 120 may cooperate with the volume manager service 130 to reserve a volume (e.g., operation 1304). Reserving a volume may involve steps including, but not limited to, the volume manager service 130 checking whether one or more block volumes are already associated with and / or allocated to the user of the user device 110 (e.g., user block volume 1330) and are available for hosting the secure shell instance 1140 (e.g., operation 1306). This may include checking a user identifier (e.g., username or login ID) against a registry of block volumes managed by the volume manager service 130. If the user block volume 1330 is identified, domain identifier information (e.g., resource ID, data center infrastructure locator, etc.) may be returned to the session manager service 120 to indicate that the volume has been reserved for hosting the secure shell instance 1140 (e.g., operation 1308).

[0132] The volume manager service 130 may find that the user block volume 1330 is not available for hosting the secure shell instance 1140. In some embodiments, the volume manager service may reserve an empty block volume 1340 that may include one or more of the available block volumes 140 in a given data center that the user has not yet been assigned. Similarly, the volume manager service 130 may provide resource identifier information for the session manager service 120 to realize in subsequent operations. For example, the session manager service 120 may assign an instance in the block volume 140 returned by the volume manager service 130 (e.g., operation 1310).

[0133] In some embodiments, assigning an instance may include providing a domain identifier to the instance manager service 150. As described in more detail with reference to FIG. 10, the instance manager service 150 may select and reserve an existing instance that may be reconfigured as part of some of the available instances maintained as a secure shell instance. The instance manager service 150 may return an instance identifier (e.g., instance ID) to the session manager service 120, which may enable the session manager service 120 to identify the selected instance in subsequent operations. In some embodiments, instead of creating and configuring an instance when realizing a connection request, selecting and reserving an existing instance may potentially reduce the system latency in processing the connection request.

[0134] The session manager service 120 may configure the selected instance, at least in part, by installing a configuration file (e.g., operation 1312). The configuration file may identify IaaS resource details (e.g., compartments, root compartments, domain identifiers, etc.) and / or usage details to facilitate completion of user connection requests. The delegation token may be generated by an approval service (e.g., approval service 1120 of FIG. 11), as described in more detail above with reference to FIG. 11. Installing the delegation token on the secure shell instance 1140 may enable the user device 110 to directly access the IaaS system resources via the secure shell instance 1140 without additional requests to the approval service for each resource and / or request.

[0135] The exemplary system 1300 may include additional verification operations that are described in more detail with reference to FIG. 12. For example, the session manager service 120 may generate, sign, and store in the nonce and identifier store 170 a nonce token (e.g., a temporary JWT token) as part of implementing a one-time use nonce technique as part of the nonce verification protocol (e.g., operation 1314). For example, the nonce and identifier store 170 may include a nonce table that includes a list of nonce tokens (e.g., a nonce “key” sequence that may be used to track whether a nonce has been issued and is valid) as a technique for attributing a nonce token to a secure shell instance 1140 when performing one or more verification operations, and for each nonce, may include associated instance identifier information. Optionally, since the nonce token may be temporary, the nonce table may include timing information including, but not limited to, an issue time, an expiration period, etc. In this way, as part of fulfilling a connection request, a nonce token may be found and its validity confirmed. In some embodiments, after the user device 110 is connected to the secure shell instance 1140 (e.g., operation 1214 in FIG. 12), the corresponding nonce token may be removed from the nonce table within the nonce and identifier store 170. In such a case, the session manager service 120 may enable the nonce token to be a one-time use, which may reduce the risk of unauthorized access to the secure shell instance 1140 (e.g., by “spoofing” using a valid nonce token).

[0136] FIG. 14 shows an exemplary technique 1400 for authorizing user devices connecting to a secure shell instance according to one or more embodiments. In connection with the system described above, one or more access control operations may be implemented as part of creating a secure connection between user device 110 and secure shell instance 1140. The operations described in connection with managing a secure shell session may include, for example, one or more of the operations described with reference to the foregoing figures that use user ID login control, delegation tokens, and / or signed nonces with signature verification.

[0137] In some embodiments, session manager service 120 receives a signed request for creating a secure shell instance 1140 that is created and signed by user device 110. As described in more detail with reference to FIG. 11, the request may be received from GUI / CLI login service 1120, which may generate a key pair used by user device 110 to sign the request.

[0138] The session manager service 120 may authenticate user requests using user login or IaaS ID authentication (e.g., operation 1410), as described in more detail with reference to FIG. 11. For example, the user's identity may be authenticated, at least in part, by an approval service (e.g., approval service 1130) combining the username / password with a data center identifier or other IaaS resource access parameters for approval. The approval service may generate a login token that includes the user public key of the key pair generated by the GUI / CLI login service 1120. After signing the login token with the private key of the approval service, the approval service may provide the login token to the user device and / or the GUI / CLI login service 1120. In this way, the session manager service 120 may authenticate both the signed request from the user device 110 and the user identity by requesting the approval service public key from the approval service. In some embodiments, the session manager service 120 may also extract the user public key from the login token and use the user public key to verify the signature on the signed request.

[0139] In some embodiments, the session manager service 120 may approve the secure shell instance 1140 (e.g., operation 1420). As described in more detail with reference to FIG. 11, approving the secure shell instance 1140 may include requesting a delegation token from an approval service. In some cases, the delegation token may be issued in response to approving access to IaaS system resources, based at least in part on a combination of a user ID, an instance identifier, and whether the request has expired (e.g., whether the ephemeral key pair is still valid and / or whether the request itself has expired). Receiving the delegation token may enable the session manager service 120 to configure the secure shell instance 1140 to access IaaS system resources (e.g., compute resources, core services, storage resources, etc.) without further authentication and / or approval when a secure connection is established between the secure shell instance 1140 and the user device 110.

[0140] In some embodiments, the session manager service 120 may generate a nonce and provide the nonce and other information to the user device 110 and / or the GUI / CLI login service 1120. In some embodiments, the session manager service 120 provides a system-signed nonce to the secure shell router 1150. In some embodiments, the session manager service provides a system-signed nonce to the user device 110 as part of signature verification (e.g., operation 1430). The user device 110 may sign the system-signed nonce and generate a doubly-signed nonce. In so doing, the session manager service 120 may provide a public key that matches the private key used to sign the system-signed nonce. The secure shell router 1150 may receive the user-signed nonce from the user device 110 and verify the signature to authenticate the request. In some embodiments, verifying the signature may include decrypting the doubly-signed nonce using the user public key and the system public key, respectively, to verify the user signature and the system signature. Verification may include comparing the decrypted nonce to a system-generated nonce stored, for example, in a nonce database (e.g., the nonce and identifier store 170 of FIG. 10). In some embodiments, verifying the signature may include decrypting the user-signed nonce and the system-signed nonce and comparing the nonce strings included in those nonces to confirm a match.

[0141] In one example, the Secure Shell Router 1140 may connect to the Session Manager Service 120 and, upon receiving a nonce, extract the expiration from the nonce. The lifespan of the nonce may be configurable (e.g., the expiration time may be 5 minutes, or any other number of seconds, minutes, or hours). If the nonce has expired, the Secure Shell Router 1150 may return an error instead of establishing a secure connection. If the nonce has not expired, the Secure Shell Router 1150 may verify the nonce (e.g., by signature verification), and if it is invalid, the Secure Shell Router 1150 may return the same error. In some embodiments, the Secure Shell Router 1150 may invalidate a valid nonce to prevent reuse of the same nonce. After three access control operations have completed successfully, the Secure Shell Router 1150 may connect the User Device 110 to the Secure Shell Instance 1140 (e.g., via a wss connection).

[0142] FIG. 15 shows a sequence diagram illustrating an exemplary data flow 1500 in which a user device is connected to a Secure Shell instance according to one or more embodiments. The user of the User Device 110 requests to connect to the Secure Shell instance through the GUI and / or CLI, and the Session Manager Service 120 provisions IaaS resources, configures the instance, and provides a nonce used to verify the User Device 110 to the Secure Shell Router 1150.

[0143] In data flow 1500, user device 110 (which may be an example of user device 110 in FIG. 10) may submit a request to connect to a secure shell instance. As described in more detail with reference to FIG. 11, the request may be submitted through a GUI / CLI login service (e.g., GUI / CLI login service 1110 in FIG. 11) and received by session manager service 120. The request may be signed with the private key of a public / private key pair generated by the GUI / CLI login service. The key pair may be temporary, and the validity of the key pair may serve as one of the verification parameters of the signed request, as described in more detail above with reference to FIG. 14 and below with reference to FIG. 16.

[0144] Upon receiving the signed request, session manager service 120 may configure a shell instance, as described in more detail with reference to the above figures. Configuring a shell instance may include, but is not limited to, reserving a volume, allocating an instance from some available instances created for the purpose of configuring a secure shell instance, and installing a configuration file that may include a delegation token on the allocated instance. As described in more detail below with reference to FIG. 16, one or more operations may be included to authenticate the user identity and authorize access to IaaS system resources through the secure shell instance.

[0145] Configuring a shell instance may include the session manager service 120 receiving a shell instance identifier (e.g., an IaaS resource identifier) from the instance manager service. Using the shell instance identifier, the session manager service 120 may generate a nonce and may receive a router address corresponding to a secure shell router 1150 (which may be an example of the secure shell router 1150 of FIG. 11). The session manager service 120 may sign the nonce using the private key of the public / private key pair maintained by the session manager service 120. The session manager service 120 may provide the system-signed nonce, the shell instance identifier, and the router address to the user device 110 (e.g., via a GUI / CLI login service), which may enable the user device to address the secure shell router 1150 as part of connecting to a secure shell instance. In some embodiments, the session manager service 120 may provide an unsigned nonce to the user device 110. In such a case, the session manager service 120 may sign the nonce to generate a system-signed nonce.

[0146] Upon receiving information (e.g., a nonce, a shell instance identifier, and a router address) from the session manager service 120, the user device 110 may sign the nonce (e.g., using the private key of the key pair used to sign requests). The user device 110 may then connect to the secure shell router 1150 (e.g., at the router address) and may provide the user-signed nonce and the shell instance identifier. In some embodiments, the user-signed nonce includes both a user signature and a system signature, thereby enabling signature verification for both the user device 110 and the session manager service 120 using a single doubly-signed nonce.

[0147] To verify a request received from the user device 110, the secure shell router 1150 may request from the session manager service 120 a shell identifier associated with the request and a system-signed nonce. In response, the session manager service 120 may provide the shell instance identifier and the system-signed nonce to the secure shell router 1150. In some embodiments, the secure shell router 1150 may not need to request the system-signed nonce from the session manager service 120, such as when the session manager service 120 provides the system-signed nonce to the user device 110.

[0148] As will be described in more detail with reference to FIG. 14, the secure shell router may check the signature by decrypting a nonce token signed using the user public key and the system public key. Verification may also include comparing shell instance identifiers received from both the user device 110 and the session manager service 120.

[0149] Upon verifying the signature, the secure shell router 1150 may connect the user device 110 to a secure shell instance (e.g., the secure shell instance 1140 of FIG. 11) via an encrypted connection (e.g., a wss connection). In some embodiments, the session manager service 120 or the secure shell router 1150 may verify, for example, the signed nonce token and, after connecting the user device 110 to the secure shell instance, remove the entry for the nonce token from the data store, similar to when the session manager service 120 stores the nonce token and the corresponding shell instance identifier in the data store.

[0150] FIG. 16 shows a sequence diagram illustrating an exemplary data flow 1600 in which a user device connects to a secure shell instance using an approval service 1130 according to one or more embodiments. The approval service 1130 may include, but is not limited to, a general user identity approval service that may be used, for example, to approve access to IaaS resources by approving login authentication. The involvement of the approval service 1130 may include one or more preliminary identity verification and access approval operations, as described in more detail above with reference to FIG. 14.

[0151] In data flow 1600, the session manager service 120 receives a signed request from the user device 110, as described with reference to the foregoing figures. Upon receiving the signed request, the session manager service 120 may request an approval service public key from the approval service. The approval service public key may be used to decrypt the login token received with the signed request (e.g., the login token may be signed with an approval service private key paired with the corresponding public key) to identify user identifier information (e.g., a combination of username / password, request identifier information, etc.). The approval service 1130 may provide the public key to the session manager service 120, and the session manager service may then request authentication of the user identity using the identifier information from the login token. The approval service 1130 may confirm the user identity.

[0152] Upon receiving authentication of the identity of user device 110, the session manager service 120 may request a delegation token from the approval service 1130. As described in more detail with reference to FIG. 11, the delegation token may be used by the session manager service to indicate that the user device is authorized to connect to the IaaS system resources via a secure shell instance configured to satisfy the signed request. Authorization of the user to connect to the IaaS system resources via the secure shell may include providing the IaaS resource information included in the signed request such that the approval service 1130 may determine whether the user device 110 is authorized to connect to the specific resources requested.

[0153] Upon approving user device 110, the approval service 1130 may generate a delegation token and provide it to the session manager service 120. The session manager service 120 may install the delegation token on a secure shell instance (e.g., secure shell instance 1140 of FIG. 11). Configuring the secure shell instance may include additional and / or alternative operations as described above.

[0154] As described with reference to FIG. 15, the session manager service 120 generates a nonce, signs the nonce using the system private key of the public / private key pair of the session manager service 120 to generate a signed nonce, and provides the signed nonce to the user device 110 together with the shell instance identifier and the router address corresponding to the secure shell router 1150 (e.g., "router endpoint"). The user device 110 may sign the system-signed nonce as part of the verification process and send a request (e.g., a request to establish a WebSocket Secure or "wss" connection) including the user-signed nonce to the secure shell router. The user-signed nonce, also signed by the session manager service, may be used by the secure shell router 1150 to verify the request. In some embodiments, as described in more detail with reference to FIG. 15, the session manager service 120 may send an unsigned nonce to the user device 110 such that both the user-signed nonce and the system-signed nonce are provided to the secure shell router 1150 for verification.

[0155] The secure shell router 1150 may verify the signature as described in more detail above with reference to FIG. 15. After verifying the system signature and the user signature and authenticating the nonce and the shell instance identifier, the secure shell router may connect the user device to the secure shell instance.

[0156] FIG. 17 shows an exemplary flow 1700 for managing a secure shell session according to one or more embodiments. The operations of the flow may be implemented as a hardware circuit and / or stored as computer-readable instructions on a non-transitory computer-readable medium of a computer system, such as the session manager service 120 of FIG. 10. When implemented, the instructions represent a module that includes a circuit or code executable by a processor of the computer system. Execution of such instructions configures the computer system to perform the particular operations described herein. Each circuit or code, in combination with the processor, performs its respective operation. Although the operations are shown in a particular order, it should be understood that the particular order is not required and that one or more operations may be omitted, skipped, and / or rearranged.

[0157] In one example, flow 1700 includes an operation 1702 in which a computer system receives a request to connect a user device (e.g., user device 110 of FIG. 10) to a secure shell instance (e.g., secure shell instance 1140 of FIG. 11). As described in more detail with reference to FIGS. 11 and 15, the request may be a signed request generated by the user device and / or a login service (e.g., GUI / CLI login service 1110 of FIG. 11) and provided to the session manager service for fulfillment. The request may be signed by a private key generated by the GUI / CLI login service, as described in more detail with reference to FIGS. 11 and 16, and may be used to authenticate the identity of the user device.

[0158] In one example, flow 1700 includes operation 1704 where a computer system authorizes access to a secure shell instance on a user device. As described in more detail with reference to FIG. 18, authorizing a user device may include one or more operations involving an external authorization service (e.g., authorization service 1130 of FIG. 11). The authorization service may provide authentication of the user (e.g., by verifying user identifiers such as a username / password) and may authorize access to the IaaS resources described in the request.

[0159] In one example, flow 1700 includes operation 1706, and the computer system configures a secure shell instance described by the shell identifier of the secure shell instance. In some embodiments, configuring a secure shell instance may include, but is not limited to, reserving a block volume, allocating an instance to the block volume, and installing a configuration file and a delegation token on the instance. Optionally, reserving a block volume may include checking whether the user device is already associated with a block volume (e.g., user block volume 1330 in FIG. 13) or not yet associated with a block volume, and if not associated, reserving an empty block volume (e.g., empty block volume 1340 in FIG. 13). Optionally, allocating an instance may include selecting an instance from a plurality of available instances. For example, maintaining a plurality of available instances in one or more default configurations that may be reconfigured by installing a configuration file may allow the session manager service to respond more quickly (i.e., with lower latency) to requests. In some embodiments, reserving a block volume and allocating an instance may include communicating with a volume manager service (e.g., volume manager service 130 in FIG. 10) and an instance manager service (e.g., instance manager service 150 in FIG. 10).

[0160] In one example, flow 1700 includes an operation 1708 in which a computer system generates a nonce. The nonce may be a web token (e.g., a JSON Web Token or JWT token) that includes one or more types of information. Optionally, the nonce includes a key sequence that may be used to track whether the nonce is valid for use. For example, a session manager service may store the nonce in a data store (e.g., the nonce and identifier store 1070 of FIG. 10). In some embodiments, the nonce includes a random sequence of letters and / or numbers (e.g., 17 alphanumeric characters) that may be used to verify a request.

[0161] In one example, flow 1700 includes an operation 1710 in which a computer system signs the nonce to produce a signed nonce. As described in more detail with reference to FIG. 12, the system may sign the nonce using the private key of a public / private key pair (e.g., asymmetric encryption). In this way, the signed nonce may be encrypted when transmitted to a user device (e.g., the user device 1010 of FIG. 10).

[0162] For example, flow 1700 includes operation 1712, and the computer system provides the user device with a signed nonce, a shell identifier, and a router address. As described in more detail with reference to FIG. 15, the user device may send a secure connection request (e.g., a WSS connection request) to a secure shell router (e.g., secure shell router 1150 of FIG. 11). The user device may sign the nonce with a private key (e.g., the same key used to sign the request), and provide the public key paired with the private key to the secure shell router at the router address. The user device may also provide the shell identifier to the secure shell router as part of the connection request. Optionally, the computer system may provide the shell identifier to the secure shell router at the router address as an additional verification parameter implemented by the secure shell router.

[0163] FIG. 18 shows an exemplary flow 1800 for configuring a secure shell instance with a one-time use nonce according to one or more embodiments. The operations of the flow are implemented as hardware circuits and / or stored as computer-readable instructions on a non-transitory computer-readable medium of a computer system such as session manager service system 1020 of FIG. 10. When implemented, the instructions represent modules that include circuits or code executable by a processor of the computer system. Execution of such instructions configures the computer system to perform the specific operations described herein. Each circuit or code, in combination with the processor, performs its respective operation. Although the operations are shown in a particular order, it should be understood that the particular order is not required and that one or more operations may be omitted, skipped, and / or rearranged.

[0164] In one example, flow 1800 begins following operation 1702 of FIG. 17, and the computer system receives a request from the user device to create a secure shell instance. Specifically, the computer system (e.g., session manager service 1020 of FIG. 10) may perform one or more operations to authenticate and / or authorize the user device from which the request was received, as part of enabling the session manager service to proceed with the operations described in FIG. 17, by communicating with an approval service (e.g., approval service 1130 of FIG. 11).

[0165] In one example, flow 1800 includes operation 1804 in which the computer system receives a login token that includes a user identifier. As described in more detail with reference to FIG. 16, the session manager service may request that the approval service authenticate the identity of the user device (e.g., as represented in the signed request) and authorize access of the user device to the IaaS resources identified in the request. As part of authenticating the user identity, the session manager service may receive a login token from the user device. The login token may include user information (e.g., username / password, login credentials, login session expiration information, etc.), as well as a user public key paired with a user private key used by the user device to sign the request and / or nonce. The login token may be signed by a secret key maintained by the approval service.

[0166] In one example, flow 1800 includes an operation 1806 where the computer system requests a public key from the approval service. The public key used to sign the login token may be provided. The session manager service may request the public key from the approval service to decrypt the login token as part of authenticating the user device. For example, the login token may provide user identifier information (e.g., device identifier or session identifier information) used to authenticate the user device.

[0167] In one example, flow 1800 includes an operation 1808 where the computer system authenticates the user device. In some embodiments, the session manager service may extract user identifier information from the login token and compare the user identifier information with the information provided with the request.

[0168] In one example, flow 1800 includes an operation 1810 where the computer system requests a delegation token. As described in more detail with reference to FIG. 11, the delegation token is generated by the approval service and provided to the session manager service after the user device is authorized to access the IaaS resources identified in the user request to connect to the secure shell instance. For example, the session manager service may provide user identifier information, instance identifier information, expiration information, etc., at least partially based on whether the approval service determines that a delegation token should be generated.

[0169] In one example, flow 1800 includes an operation 1812 where the computer system receives a delegation token. The session manager service may use the delegation token, for example, to enable the secure shell router to permit access to IaaS resources on the user device without additional approval from the approval service, for example, by installing the delegation token on the secure shell instance as part of configuring the secure shell instance, as described in more detail above with reference to FIG. 11.

[0170] The following sections describe embodiments of the disclosed implementations: Section 1. A method comprising: receiving, by a session manager service, a request to connect a user device to a secure connection to a secure shell instance; approving, by the session manager service, the user device; configuring, by the session manager service, a secure shell instance described by a shell identifier of the secure shell instance; generating, by the session manager service, a nonce; signing, by the session manager service, the nonce to generate a signed nonce; and providing, by the session manager service, the signed nonce, the shell identifier, and a router address to the user device.

[0171] Section 2. Approving the user device comprises: receiving, from the user device, a login token including a user identifier; requesting, by the approval service, an approval system public key; authenticating, at least in part based on decrypting the login token using the approval system public key, the user device. Requesting an authorization token from an authorization service, at least in part, by providing a user identifier, a resource identifier of the resource identified in the request, and an expiration period of the request; Receiving an authorization token from the authorization service, wherein the authorization service is configured to generate an authorization token when access to the resource identified in the request is authorized within the expiration period, the method according to claim 1.

[0172] Clause 3. Signing the non-token involves Signing the non-token using the system private key of the public / private key pair held by the session manager service; and Providing the system public key of the public / private key pair to the secure shell router at the router address, the method according to claim 1.

[0173] Clause 4. Further, Storing the non-token in a data store, the non-token including a key sequence, and further Confirming whether the non-token is valid, at least in part, based on searching the data store on the key sequence; and Removing the non-token from the data store after the secure shell router has established a secure connection between the user device and the secure shell instance, the method according to claim 1.

[0174] Clause 5. Further, Ending the secure shell instance after an inactivity period or after termination of the secure connection by the user device, the method according to claim 1.

[0175] Clause 6. The steps of configuring the secure shell instance are Reserving a block volume; Receiving a domain identifier corresponding to the block volume; Assigning an instance to a block volume using a domain identifier, the instance being assigned from a plurality of available instances, and the step of configuring a secure shell instance further comprises Receiving a shell identifier corresponding to the instance, and Installing a configuration file on the instance, the configuration file including the request information included in the request, the method according to claim 1.

[0176] Claim 7. The method according to claim 1, wherein the secure shell instance operates a Docker container such that the request includes an instruction to execute a terminal on the Docker container.

[0177] Claim 8. A computer system comprising One or more processors, and A memory communicating with the one or more processors, the memory being configured to store computer-executable instructions, and executing the computer-executable instructions causes the one or more processors to execute steps, the steps comprising A session manager service receiving a request to connect a user device to a secure connection to a secure shell instance, and The session manager service approving the user device, and The session manager service configuring a secure shell instance described by a shell identifier of the secure shell instance, and The session manager service generating a nonce, and The session manager service signing the nonce to generate a signed nonce, and The session manager service providing the signed nonce, the shell identifier, and a router address to the user device, the computer system.

[0178] Claim 9. Approving the user device comprises Receiving a login token including a user identifier from a user device; Requesting an approval system public key from an approval service; Authenticating the user device at least in part based on decrypting the login token using the approval system public key; Requesting a delegation token from the approval service at least in part by providing a user identifier, a resource identifier of a resource identified in the request, and an expiration period of the request; Receiving a delegation token from the approval service, wherein the approval service is configured to generate a delegation token when it approves access to the resource identified in the request within the expiration period, the system according to item 8.

[0179] Item 10. Signing a non-token comprises Signing the non-token using a system private key of a public / private key pair held by a session manager service; Providing a system public key of the public / private key pair to a secure shell router at a router address, the system according to item 8.

[0180] Item 11. The computer-executable instructions, when executed, further cause one or more processors of a computer system to perform steps, the steps comprising Storing the non-token in a data store, the non-token including a key sequence, the steps further comprising Confirming whether the non-token is valid at least in part based on searching the data store on the key sequence; Removing the non-token from the data store after the secure shell router has established a secure connection between the user device and a secure shell instance, the system according to item 8.

[0181] Item 12. The computer-executable instructions, when executed, further cause one or more processors of the computer system to perform steps, the steps comprising: The system of claim 8, comprising ending a secure shell instance after a period of inactivity or after termination of a secure connection by a user device.

[0182] Item 13. The steps of configuring a secure shell instance comprise: Reserving a block volume; Receiving a domain identifier corresponding to the block volume; Allocating an instance to the block volume using the domain identifier, the instance being allocated from a plurality of available instances, and the steps of configuring a secure shell instance further comprise: Receiving a shell identifier corresponding to the instance; Installing a configuration file and a delegation token on the instance, the configuration file including the request information included in the request, the system of claim 8.

[0183] Item 14. The secure shell instance operates a Docker container such that the request includes instructions to execute a terminal on the Docker container, the system of claim 8.

[0184] Item 15. A non-transitory computer-readable storage medium storing computer-executable instructions that, when executed, cause one or more processors of a computer system to perform steps, the steps comprising: A session manager service receiving a request to connect a user device to a secure connection to a secure shell instance; The session manager service authorizing the user device; The session manager service configuring a secure shell instance described by a shell identifier of the secure shell instance. The session manager service generates a nonce, the session manager service signs the nonce to generate a signed nonce, and the session manager service provides the signed nonce, the shell identifier, and the router address to the user device, a non-transitory computer-readable storage medium.

[0185] Item 16. Approving a user device comprises receiving a login token including a user identifier from the user device, requesting an approval system public key from an approval service, authenticating the user device at least in part based on decrypting the login token using the approval system public key, requesting a delegation token from the approval service at least in part by providing the user identifier, a resource identifier of the resource identified in the request, and an expiration period of the request, and receiving a delegation token from the approval service, the approval service being configured to generate a delegation token when it approves access to the resource identified in the request within the expiration period, the non-transitory computer-readable storage medium according to Item 15.

[0186] Item 17. Signing the nonce comprises signing the nonce using the system private key of a public / private key pair held by the session manager service, and providing the system public key of the public / private key pair to a secure shell router at the router address, the non-transitory computer-readable storage medium according to Item 15.

[0187] Item 18. When executed, the computer-executable instructions further cause one or more processors of a computer system to execute steps, the steps being including the step of storing non - tokens in a data store, where the non - tokens include a key sequence, and the step further comprising the step of verifying whether the non - token is valid, at least in part, based on searching the data store on the key sequence; and after a secure shell router has established a secure connection between a user device and a secure shell instance, removing the non - token from the data store, the non - transitory computer - readable storage medium according to claim 15.

[0188] Claim 19. The computer - executable instructions, when executed, further cause one or more processors of a computer system to perform steps, the steps including terminating a secure shell instance after a non - activity period or after the termination of a secure connection by a user device, the non - transitory computer - readable storage medium according to claim 15.

[0189] Claim 20. The steps of configuring a secure shell instance include reserving a block volume; receiving a domain identifier corresponding to the block volume; and allocating an instance to the block volume using the domain identifier, where the instance is allocated from a plurality of available instances, and the steps of configuring a secure shell instance further include receiving a shell identifier corresponding to the instance; and installing a configuration file on the instance, where the configuration file includes request information included in a request, the non - transitory computer - readable storage medium according to claim 15.

[0190] Techniques for utilizing multiple network interfaces for a cloud shell Cloud-based platforms provide users with scalable and flexible computing resources. Such cloud-based platforms, also referred to as Infrastructure as a Service (IaaS), may provide a suite of cloud solutions around the customer's data, for example, solutions for orchestrating transformations, loading data, and presenting data. Users of IaaS resources may require that a secure terminal be created within a secure shell instance (e.g., a virtual machine operating on a virtual cloud network (VCN)) such that operations and data transfers can be securely executed (e.g., using two-way encryption over a WebSocket Secure (wss) connection).

[0191] Secure communication modalities may include controlling network traffic to and from the secure shell instance. Network traffic control may involve one or more techniques and / or methods for isolating the secure shell instance from one or more IaaS services (e.g., core cloud services) that may be in communication with multiple instances and may have access to and / or control over the data and computing resources of the IaaS system. Network traffic control may include implementing direction restrictions on network communication to and from the secure shell instance. The direction restrictions may then block certain inbound traffic from external systems and outbound traffic to the IaaS services. Isolating the secure shell instance may include, for example, implementing multiple virtual cloud networks such that the core IaaS services are isolated from the secure shell instance, both being isolated from the network communication services.

[0192] As an example for illustration, a user may submit a command to a secure shell instance via a user device (e.g., using a graphical user interface and / or a command line interface of a browser). The secure shell instance may be configured with a primary virtual network interface card (vNIC), and one or more security rules may define it as ingress only (unidirectional with respect to inbound network traffic to the secure shell instance). The command may cause the secure shell instance to generate an output, which may include an instruction to send the output to an external address (e.g., via the Internet). The secure shell instance may send the output via a secondary vNIC instead of the primary vNIC. Similar to the primary vNIC, the secondary vNIC may be configured with security rules that restrict network traffic through the secondary vNIC to egress only (unidirectional with respect to outbound traffic from the secure shell instance). In this way, approved network traffic may arrive at the secure shell instance via the primary vNIC and leave the secure shell instance via the secondary vNIC. Further, the secure shell instance may be executed on a compute isolation VCN that is isolated from both a service VCN and a network isolation VCN that may each execute an IaaS service and a network communication service, respectively.

[0193] Such a configuration may provide improved security for both the secure shell instance and the IaaS system as a whole. In part, improved security may result because the secure shell instance may have its ability to send messages to the service VCN via the primary vNIC restricted, and its ability to receive messages from the external network via the network isolation VCN and the secondary vNIC restricted. In this way, unauthorized network traffic from the Internet (or other network) may not be able to access the secure shell instance, and the secure shell instance may not be able to access the core IaaS resources without authorization.

[0194] FIG. 19 shows an exemplary technique 1900 for utilizing multiple network interfaces for a secure shell instance, according to one or more embodiments. Controlling the direction of communication between virtual cloud networks may provide improved security for the configured IaaS resources and may limit and / or prevent security risks from reaching the core IaaS resources. To that end, the exemplary technique 1900 may include multiple techniques for controlling the flow of system communication using one or more system components that may be implemented as virtual systems in a distributed computing system (e.g., a cloud network). In some embodiments, those techniques may be implemented to control the source and / or destination of communication with a secure shell instance 1950, which may be an example of a virtual machine (VM) operating on a virtual cloud network (VCN). In some embodiments, the secure shell instance communicates with other components of the distributed computing system (e.g., routers, subnets, etc.) via one or more virtual network interface cards (vNICs), as will be described in more detail below with reference to FIG. 20.

[0195] In some embodiments, the exemplary technique 1900 includes receiving a command to perform an operation (e.g., operation 1902). In some embodiments, the command is generated and / or transmitted from a user device 1920. The user device 1920 may include any form of electrical device configured to access a network (e.g., the Internet and / or a private network), such as a personal computer, a digital workstation, a tablet, a smartphone, etc. The command may include any type of instruction generated by a user of the user device 1920 (e.g., via a browser interface of an IaaS provider). For example, the command may include a computing task, a storage task (e.g., input / output operations, movement of stored data, data conversion, etc.), a configuration task (e.g., a command to access the operating parameters of the secure shell instance 1950), etc. In some embodiments, the user device 1920 may communicate with a system service (e.g., a browser interface and / or a command line interface service) that directs the command to an appropriate subsystem and / or cloud network resource. Such a configuration may provide improved system security via network isolation and / or network isolation. For example, as described in more detail below with reference to FIG. 20, user-originated network traffic may be made distinguishable (e.g., the source IP address may be from a different IP address pool than that of the IaaS service) by using a secondary vNIC on a tenancy different from that of the IaaS service in the VCN.

[0196] In some embodiments, the command received at operation 1902 is sent to the cloud shell router 1930. The cloud shell router may be a virtual router implemented in a virtual cloud network, as will be described in more detail below with reference to FIG. 20. The cloud shell router 1930 may send the command towards an appropriate destination side (e.g., the secure shell instance 1950), which may be implemented in a separate virtual cloud network (e.g., operation 1904). In some embodiments, implementing separate subsystems that perform different operations of the exemplary technique 1900 in separate virtual cloud networks may provide improved security for core cloud resources and / or user data. In some embodiments, the cloud shell router 1930 may communicate with the secure shell instance 1950 via the primary virtual network access card 1940 (vNIC). In some embodiments, the primary vNIC 1940 may represent a network interface configuration for the virtual machine in which the secure shell instance 1950 is implemented. Thus, the primary vNIC 1940 may be configured with one or more operational parameters (e.g., MAC address) along with security rules, which may allow the primary vNIC 1940 to selectively route communications with the secure shell instance 1950, as will be described in more detail below with reference to the figures.

[0197] In some embodiments, the secure shell instance 1950 may execute the operations indicated within the command (e.g., operation 1906). As described above, the secure shell instance 1950 can be a virtual machine (VM) configured to execute one or more types of operations including database operations, computational operations, and the like. For example, the secure shell instance 1950 may execute a command to modify one or more aspects of user IaaS resources and / or data within a compartment of a distributed computer system (e.g., to move data stored in one data center to another data center, to send data to an external server via a public network, etc.).

[0198] In some embodiments, the secure shell instance 1950 may generate a reply message as a result of executing the operations included in the command (e.g., operation 1908). The reply message may be directed to the user of the user device 1920 and / or the user device 1920, rather than to a core IaaS service or an external server (e.g., on a public network or a private network). In some embodiments, the reply message may be generated to provide result information with reference to the operations performed by the secure shell instance 1950. For example, the secure shell instance 1950 may generate a reply message indicating that the operation has completed successfully, been aborted, failed, been rescheduled, etc. The reply message may include status information and specific data required as part of the reply message (e.g., check bits, memory locations, etc.).

[0199] In some embodiments, the secure shell instance 1950 may send a reply message to the cloud shell router 1930 (e.g., operation 1910). The secure shell instance 1950 may send the reply message via the primary vNIC 1940. As will be described in more detail below with reference to FIG. 20, the primary vNIC 1940 may be configured to send the reply message to the cloud shell router 1930 but reject other types of messages received from the secure shell instance 1950.

[0200] In some embodiments, the secure shell instance 1950 may generate an output of an operation (e.g., operation 1912). The output of the operation may include, but is not limited to, communication, data, and / or instructions to an external system that communicates with the secure shell instance 1950 via a network (e.g., a public network and / or a private network). The secure shell instance 1950 may be instructed to generate an output, for example, when the operation included in a command from the user device 1920 involves transferring data via an external network. When transferring data, the secure shell instance 1950 may send the instructions to the data management service of the IaaS system via the internal network of the IaaS system.

[0201] As part of executing a command, for example, when the command is to transfer data or send a message to an external server, the secure shell instance 1950 may send a message (e.g., operation 1914) including the output of the operation to the shell subnet 1970. The secure shell instance 1950 may communicate with the shell subnet 1970 via the secondary vNIC 1960. Similar to the primary vNIC 1940, the secondary vNIC 1960 may be configured using one or more operation parameters (e.g., different MAC addresses) and input / output parameters (e.g., security rules) to control the flow of data and messages to the secure shell instance 1940. As will be described in more detail below with reference to FIG. 20, the secondary vNIC 1960 may be configured to be unidirectional to allow only outgoing messages (e.g., an egress-only configuration) from the secure shell instance 1950 to the shell subnet 1970. In some embodiments, the unidirectional, egress-only configuration for the secondary vNIC 1960 may allow the secure shell instance 1950 to operate with improved security against external risks of intrusion by non-user devices and / or interference by unauthorized access.

[0202] In some embodiments, the shell subnet 1970 may send the output of the operation to the external network 1980 (e.g., operation 1916). In some embodiments, the external network 1980 is a public network. In some cases, connecting the secure shell instance 1950 and / or the shell subnet 1970 to a public network may introduce a security risk due to the possibility that malicious systems may attempt to access the secure shell instance 1950 and / or the core cloud resources. For example, adding a secure shell instance 1950 may provide access to core cloud resources, which may then permit access to user data for multiple users within the cloud service area. For this reason, the shell subnet 1970 may communicate with the external network 1980 via a network address translation (NAT) gateway, as will be described in more detail below with reference to FIG. 20.

[0203] Accordingly, the exemplary technique 1900 demonstrates how communication between the user device 1920, the secure shell instance 1950, and the external network 1980 can be managed to potentially reduce the risk of security threats presented by connecting a secure shell instance to the external network 1980. In some embodiments, the exemplary technique 1900 provides for unidirectional transmission of messages for some types of information, while allowing reply messages to be sent back from the secure shell instance 1950 to the user device 1920. Implementing such control may provide improved security for stored user data to which the secure shell instance 1950 has access and may isolate the secure shell instance 1950 from core cloud services.

[0204] FIG. 20 shows an exemplary system 2000 that utilizes multiple network interfaces to manage communication of secure shell instances according to one or more embodiments. The various operations described above with reference to FIG. 19 may be implemented by an exemplary system 2000 that may include one or more additional features to potentially improve the security of secure shell instance 1950 and core cloud resources.

[0205] In some embodiments, cloud shell router 1930, secure shell instance 1950, and shell subnet 1970 may be implemented as virtual systems within separate virtual cloud networks (VCNs). Further, the separate VCNs may be implemented in multiple route compartments (also referred to as “tenancies”). As shown in FIG. 20, cloud shell router 1930 is implemented in service VCN 2010, secure shell instance 1950 is implemented in compute isolation VCN 2020, and both are implemented in private route compartment 2030. In contrast, shell subnet 1970 may be implemented in network isolation VCN 2040 within public route compartment 2050. Generally, private route compartment 2030 and public route compartment 2050 may constitute different and / or separate logical containers of data and compute resources implemented in an IaaS system such that system resources within private route compartment 2030 cannot be accessed by system resources of public route compartment 2050. Private route compartment 2030 and public route compartment 2050 may be associated with different distinguishable blocks of IP addresses, which may enable determination of the source of messages from an IaaS system such as from public route compartment 2050 or private route compartment 2030.

[0206] In some embodiments, the public root compartment 2050 and the configured system implemented within the public root compartment 2050 (e.g., the shell subnet 1970 within the network isolation VCN 2040) may be assigned IP addresses from a block of IP addresses identified by a user output operation (e.g., the message of operation 1916 in FIG. 19). In contrast, the private root compartment 2030 and the configured system implemented within the private root compartment (e.g., the cloud shell router 1930 within the service VCN 2010) may be assigned IP addresses from a block of IP addresses identified by an IaaS system communication operation (e.g., communication with an external network such as the external network 1980). Using a separate block of IP addresses that can be attributed to either the IaaS system itself or a user of the IaaS system as the communication source can improve the security of the entire IaaS network (e.g., across multiple data centers, regions, etc.). For example, some IaaS systems may be implemented in multiple data centers (also called domains) within a region, and a global IaaS system may include multiple regions that communicate with each other via private and / or public networks. Distinguishing user source communication from system source communication can reduce the risk of large-scale system traffic type attacks (e.g., distributed denial of service, or DDOS attacks) from reaching core services.

[0207] As an example for illustration, communications from the shell subnet 1970 may be attributed to the user of the user device 1920 (potentially anonymized) by the IP address of the shell subnet 1970. Thus, a message from the shell subnet 1970 that is purported to have originated from the core cloud service of the IaaS system may be rejected at the receiver point, for example, with respect to a non-matching source IP address and source identifier (e.g., username). In another example, isolating outgoing user traffic to the public root compartment may provide improved forensic information for determining the source of an intrusion into the IaaS system. For example, by tracing the source IP address to the public root compartment 2050, an investigation may be able to identify a compromised user instance and potentially reveal that the core IaaS service has not been compromised.

[0208] In some embodiments, the user device 1920 (e.g., a browser and / or command line interface running a secure shell client) may be connected to the cloud shell router 1930. The user device 1920 may be connected to the cloud shell router via an external network 1980 (e.g., a public network). The external network 1980 may include, for example, the Internet, an encrypted network, and the like. The user device 1920 may communicate with the cloud shell router 1930 via an Internet gateway 2060 (e.g., a "NET" gateway). The Internet gateway 2060 may be a virtual router added to the service VCN 2010 to provide a path for network traffic between the service VCN 2010 and the external network 1980.

[0209] In some embodiments, service VCN 2010 may also implement additional IaaS core services, including, but not limited to, a secure session manager service, a volume manager service, an instance manager service, and / or a web server, that facilitate the creation, management, termination, and cleanup of secure shell instance 1950 and its associated data (e.g., block volumes, object storage, etc.).

[0210] In some embodiments, secure shell instance 1950 communicates with cloud shell router 1930 via primary virtual network interface card (vNIC) 1940. The vNIC can enable the instance to connect to the VCN and may determine how the instance connects to other systems inside and outside the VCN. As described above with reference to FIG. 19, primary vNIC 1940 may be configured to manage traffic between cloud shell router and secure shell instance 1950 (e.g., using security rules).

[0211] The security rule may specify the type of ingress or egress traffic permitted inside or outside the primary vNIC 1940. For example, the primary vNIC 1940 may be configured to receive signals from the cloud shell router 1930 to the secure shell instance 1950, but reject output messages from the secure shell instance 1950. In some embodiments, the primary vNIC 1940 may receive a reply message from the secure shell instance 1950 addressed to the user device 1920, for example, in response to a request for a reply message included in a message from the user device 1920. The primary vNIC 1940 may be attached to the secure shell instance 1950, and the security rule (e.g., ingress / egress control) may be part of the configuration of the secure shell instance 1950 at startup and / or a default feature of the secure shell instance 1950.

[0212] In some embodiments, the secure shell instance 1950 may be a virtual machine (e.g., also referred to as a "VM", a software-based emulation of a full computer operating within a physical host computer) specialized for the user of the user device 1920 with a configuration file provided by a configuration subsystem of the service VCN 2010 (e.g., a session manager service). In some embodiments, the secure shell instance 1950 may be selected from an instance pool 2022 that includes one or more pre-generated instances configured with default parameters. The default parameters may include a security rule that defines traffic management rules for the primary vNIC 1940.

[0213] In some embodiments, the secure shell instance 1950 includes a secondary vNIC 1960. The secondary vNIC 1960 may be attached to the secure shell instance 1950 during the configuration of a pre-generated instance from the instance pool 2022. Alternatively, the pre-generated instances within the instance pool 2022 may be pre-configured to include the secondary vNIC 1960. In some embodiments, the secondary vNIC includes egress-only security rules (e.g., control over the traffic flow that restricts communication to only a single direction from the secure shell instance 1950 to the shell subnet 1970). This will be described in more detail below with reference to the drawings. As described above, restricting network traffic in this way may provide additional and / or improved security for the secure shell instance 1950 and the service VCN 2010.

[0214] In some embodiments, the shell subnet 1970 may be configured to communicate with an external network 1980 and / or a private IaaS network 2082 via one or more virtual routers implemented in the network isolation VCN 2040. In some embodiments, the shell subnet 1970 may send the output traffic received from the secure shell instance 1950 via the secondary vNIC 1960 to the external network 1980 using a network address translation (NAT) gateway 2070. The NAT gateway 2070 may be a virtual router configured to perform network address translation. The NAT gateway may provide access to the Internet to cloud resources without public IP addresses without exposing those resources to incoming Internet connections. For example, the secure shell instance 1950 and the shell subnet 1970 may lack access to the external network 1980 as a security measure to potentially reduce the risk of intrusion from malicious attacks. In such cases, the NAT gateway 2070 may provide a connection to the Internet using an IP address not directly identified in the secure shell instance 1950 or the shell subnet 1970 (e.g., from a public block of IP addresses that may be attributed to the public root compartment 2050).

[0215] In some embodiments, the output from the secure shell instance 1950 that includes requests for core IaaS resources may be routed by the shell subnet 1970 to the service (SVC) gateway 2072. The service gateway 2072 may be a virtual router attached to the network isolation VCN 2040 that can enable the VCN host to privately access IaaS services (database resources, object storage, metadata management, etc.) without exposing the VCN host to the public Internet. Thus, the service gateway 2072 may enable the shell subnet 1970 to send output traffic via an internal network 2082 (e.g., a "private network") configured to communicate with the IaaS core services in the region and / or other regions.

[0216] FIG. 21 shows an exemplary technique 2100 for one-way communication by a secure shell instance using multiple network interfaces, according to one or more embodiments. The configuration of the secure shell instance 1950 may include adding one or more additional virtual network interface cards (vNICs) to the secure shell instance 1950. The vNIC may enable the secure shell instance 1950 to send output messages via a communication path separate from the communication path used to receive instructions and / or commands from a user device (e.g., the user device 1920 of FIG. 19). In some embodiments, the vNIC may be configured using security rules to define the direction control of communication with the secure shell instance 1950, as described in more detail below.

[0217] As described in more detail with reference to FIG. 20, the primary vNIC 1940 may be configured to facilitate communication between the secure shell instance 1950 and the cloud shell router 1930. In some embodiments, the secure shell instance 1950 may operate in a compute-isolated virtual cloud network (VCN), and the cloud shell router 1930 may operate in a service VCN. In some embodiments, the secure shell instance 1950 may include the primary vNIC 1940 as a default configuration. In some embodiments, the primary vNIC 1940 may be configured using security rules that define an ingress-only restriction for communication with the secure shell instance 1950. The ingress-only restriction may limit the type of communication that can be received by the secure shell instance 1950 and / or the source from which communication can be received by the secure shell instance 1950.

[0218] In some embodiments, the primary vNIC 1940 may be configured to enable incoming communication from core cloud resources (e.g., whitelisted IaaS system components). For example, the cloud shell router 1930 may send a command to the secure shell instance 1950 (e.g., operation 2110). The secure shell instance 1950 may receive the command via the primary vNIC 1940, which may be configured to permit communication from the cloud shell router 1930 (e.g., operation 2112). The secure shell instance 1950 may then execute the operation indicated by the command and generate an output as described with reference to FIG. 19 (e.g., operation 2114).

[0219] In some embodiments, the secondary vNIC 1960 may be configured to act as an egress point for communication to facilitate transmission of output from the secure shell instance 1950 to an external network (e.g., the external network 1980 of FIG. 19) via the shell subnet 1970. As described in more detail with reference to FIG. 20, the shell subnet 1970 may operate in a network isolation VCN to potentially improve security by reducing the risk of intrusion by malicious attacks originating from the external network. In some embodiments, the secondary vNIC 1960 may be configured during setup as a pre-generated instance of the secure shell instance (e.g., in the instance pool 2022 of FIG. 20). In some embodiments, the secondary vNIC 1960 may be configured during specialization of the secure shell instance (such as by a session manager service, an instance manager service, and / or other core cloud resources). The secondary vNIC 1960 may be configured using security rules to permit outgoing messages from the secure shell instance 1950, for example, addressed to the shell subnet 1970. For example, the secure shell subnet 1950 may transmit the output via the secondary vNIC 1960 (e.g., operation 2116) and direct a message including the output towards the shell subnet 1970 (e.g., operation 2118). In this way, the exemplary technique 2100 may include implementing the primary vNIC 1940 as an ingress point for communication to the secure shell instance 1950 and implementing the secondary vNIC 1960 as a separate egress point for communication from the secure shell instance 1950.

[0220] Figure 22 shows an exemplary technique 2200 for using a first network interface for bidirectional communication with a secure shell instance, according to one or more embodiments. The secure shell instance 1950 may be configured (e.g., during setup and / or specialization) to send messages via both the primary virtual network access card 1940 (vNIC) and the secondary vNIC 1960, even if it follows a defined approach to provide secure communication and potentially reduce the risk of intrusion.

[0221] In some embodiments, the primary vNIC 1940 may include a security rule that defines a blanket prohibition on all outgoing messages from the secure shell instance 1950 (e.g., an ingress-only rule with no exceptions). In contrast, the security rule may define the type of communication, the destination of the communication, or other exceptions to the security rule. For example, the primary vNIC 1940 may be configured to allow the transmission of return messages addressed to a user device (e.g., the user device 1920 of FIG. 19) from the secure shell instance 1950 to the cloud shell router 1930. Such return messages may include status information of the operation (e.g., completion, abort, termination, etc.) and may also include other return information requests by the user device as part of a command.

[0222] As an example for illustration, the secure shell instance 1950 may send messages through two different routes depending on the type and / or destination of the message. In this example, the cloud shell router 1930 sends a command to the secure shell router (e.g., operation 2210), and the secure shell instance 1950 receives the command from the cloud shell router 1930 via the primary vNIC 1940 (e.g., operation 2212). The secure shell instance 1950 may execute the operation indicated by the command and may generate output and reply messages (e.g., operation 2214). As described above with reference to FIG. 21, the secure shell instance 1950 may send the output as a message addressed to the shell subnet 1970 via the secondary vNIC 1960 (e.g., operation 2216). In contrast, the secure shell instance 1950 may send the reply message back to the cloud shell router 1930 via a different route through the primary vNIC 1940 (e.g., operation 2218).

[0223] Configuring the primary vNIC 1940 to permit reply messages may provide additional security to a system implementing the exemplary technique 2200. For example, a reply message containing status information may be used by the core cloud service to track and manage resource usage by the secure shell instance 1950. Further, configuring the secure shell instance 1950 to send the reply message to the cloud shell router 1930 rather than the shell subnet 1970 may potentially reduce the risk that the secure shell instance is arbitrarily used by an external system in case the shell subnet 1970 is accidentally exposed and at least partially the external system cannot receive feedback that enables it to replace the owner of the secure shell instance 1950.

[0224] FIG. 23 shows an exemplary technique 2300 for one-way communication with a secure shell instance, according to one or more embodiments. The implications of the security rules described above with reference to FIGS. 21-4 may include that the secure shell instance 1950 may be restricted in the types and manners of communication it is configured to effect with respect to the output from the operations it performs.

[0225] In some embodiments, the primary virtual network interface card 1940 (vNIC) may be configured with security rules that do not permit output messages from the secure shell instance 1950 to be sent via the primary vNIC 1940. This may be implemented to control access from a secure shell instance 1950, which may operate on a compute-isolated virtual cloud network (VCN) (e.g., the compute-isolated VCN 2020 of FIG. 20), to core cloud services operating on a service VCN (e.g., the service VCN 2010 of FIG. 20). As described in more detail above with reference to FIG. 22, some types of messages may be permitted (e.g., reply messages), but additional and / or alternative types of output messages (e.g., execution commands, data transformation instructions, input / output operation instructions, etc.). Thus, restricting the types of communication permitted by the primary vNIC 1940 may potentially reduce the risk of the secure shell instance 1950 compromising the service VCN or core cloud services.

[0226] For purposes of illustration, in an example, the primary vNIC 1940 may be configured to be ingress only with respect to output messages from the secure shell instance 1950. Thus, when the secure shell instance 1950 executes a command from a user device (e.g., the user device 1920 of FIG. 19) and generates output (e.g., operation 2310), the transmission of the addressed output to the cloud shell router 1930 may be rejected by the primary vNIC 1940 (e.g., operation 2312). The rejection by the primary vNIC 1940 may describe any number of logical operations that prevent the output message from being sent to the cloud shell router 1930 and / or any other component system of the service VCN. For example, a security rule may blacklist a particular destination by address (e.g., MAC address).

[0227] In some embodiments, the secondary vNIC 1960 may be configured with security rules that do not permit the secure shell instance 1950 to receive network traffic via the secondary vNIC 1960. This may be implemented to control access to the secure shell instance 1950 by the shell subnet 1970, which may communicate with the Internet and thus may be at risk of attack by external systems. The security rules implemented as part of configuring the secondary vNIC 1960 may include a blanket restriction on all inbound communication to the secure shell instance from the shell subnet 1970 or any other IaaS system. Alternatively, communication, source, or a particular message type may be permitted as part of configuring the secondary vNIC 1960 (e.g., whitelisting).

[0228] For purposes of illustration, the secondary vNIC 1960 may be configured to be egress only with respect to communication to the secure shell instance 1950. In this example, an external network request may be received in the shell subnet 1970 (e.g., operation 2314). The external network request may be a command for the shell subnet 1970 to send a command to the secure shell instance 1950 (e.g., to read data stored in a block volume system attached to the secure shell instance 1950). In this example, the secondary vNIC 1960 configured for egress only may be limited to unidirectional communication, enabling the secure shell instance 1950 to send an output message via the secondary vNIC, but may reject an external network request from the shell subnet 1970 (e.g., operation 2316).

[0229] In some embodiments, the secondary vNIC 1960 may similarly reject any incoming message, even if received from another source. For example, the MAC address of the secondary vNIC 1960 may be discovered by an external system that may attempt to directly address the secondary vNIC 1960. The egress-only security configuration may similarly protect the secure shell instance 1950 from such attempts.

[0230] FIG. 24 illustrates an exemplary system 2400 for managing communication of secure shell instances in a regional cloud system according to one or more embodiments. The techniques described with reference to the previous figures may be implemented in a regional IaaS system. The regional IaaS system may include a plurality of domains 2410, where a domain may be an IaaS identifier corresponding to a data center that is a physical installation of computer hardware (e.g., servers, network infrastructure, etc.) configured to operate the IaaS system. Some components of the exemplary system 2400 may be regional, while other components may be domain-specific. Implementing a regional system may potentially reduce system overhead and reduce the demand on system resources due to the use of multiple communication points (e.g., ingress and egress points). Additionally, implementing integrated communication resources may provide improved security by limiting the number of access points to secure shell instances and core cloud services.

[0231] In some embodiments, as described in more detail with reference to FIG. 20, the exemplary system 2400 may include two or more route compartments associated with different blocks of IP addresses. For example, the private route compartment 2420 may include a regional jump host virtual cloud network (VCN) 2430, a regional service VCN 2440, and a regional compute isolation VCN 2450. Similarly, the public route compartment 2460 may include a regional network isolation VCN 2470 configured to connect to an external network (e.g., the external network 1980 of FIG. 19) via a regional network address translation (NAT) gateway 2480 and to connect to core cloud services via a regional service gateway 2482.

[0232] In some embodiments, the jump host VCN 2430 may include a regional network gateway 2432 (NET) that may enable network traffic between the configured network of the private route compartment 2420 and an external network (e.g., the Internet, a private user network, etc.). For example, commands may be received from the user device 1920 via the regional network gateway 2432. In some embodiments, the jump host VCN 2430 may be configured to send commands to a regional router subnet 2442 operating on the regional service VCN 2440. The regional router subnet 2442 may direct the commands to a pool subnet 2452 addressed to a secure shell instance (e.g., the secure shell instance 1950 of FIG. 19) operating within a pool of instances 2454. In some embodiments, each domain 2410 may include a pool 2454 of instances operating on the pool subnet 2452. The pool 2454 may then include a plurality of secure shell instances associated with secure shells created for users of the IaaS secure shell service. Each secure shell instance may include a plurality of virtual network interface cards (vNICs), as described in more detail with reference to the foregoing figures.

[0233] In some embodiments, output messages from instances operating on the pool subnet 2452 within the compute isolation VCN 2450 may be directed to a regional shell subnet 2472 operating on the network isolation VCN 2470. In contrast, reply messages addressed to the user device may be directed to a router subnet 2442 operating on the service VCN 2440. The regional subnet may direct the messages to an external destination via an appropriate gateway.

[0234] FIG. 25 shows an exemplary flow 2500 for utilizing multiple network interfaces for a secure shell instance, according to one or more embodiments. The operations of the flow may be implemented as hardware circuitry and / or stored as computer-readable instructions on a non-transitory computer-readable medium of a computer system such as the secure cell instance 1950 of FIG. 19. When implemented, the instructions represent modules that include circuitry or code executable by a processor of the computer system. Execution of such instructions configures the computer system to perform the particular operations described herein. Each circuitry or code, in combination with the processor, performs its respective operation. Although the operations are shown in a particular order, it should be understood that the particular order is not required and that one or more operations may be omitted, skipped, and / or rearranged.

[0235] In one example, flow 2500 includes an operation 2502 in which the computer system receives a command to perform an operation via a primary virtual network interface card (vNIC). As described in more detail above with reference to FIGS. 19 and 21-24, the primary vNIC (e.g., primary vNIC 1940 of FIG. 19) may be configured during the creation and / or specialization of a secure cloud instance (e.g., secure cloud instance 1950 of FIG. 19) with security rules. The security rules may control network traffic to the secure shell instance such that the primary vNIC is configured to be ingress-only with respect to one or more types of network traffic. For example, the primary vNIC may be configured to restrict network traffic between the secure shell instance and an external system (e.g., a core cloud service, an external network device, etc.) such that the secure shell instance may receive incoming traffic via the primary vNIC but may not transmit outgoing traffic via the primary vNIC.

[0236] In one example, flow 2500 includes an operation 2504 in which a computer system executes an operation. The secure shell instance may be a virtual machine (VM) hosted on a virtual cloud network (VCN), as described in more detail above with reference to FIG. 20. Thus, the secure shell instance may include computing resources (e.g., cores, threads, etc.) and may include data storage (e.g., block volumes, etc.). In some cases, the secure shell instance may be configured to execute commands received via a secure shell (e.g., a terminal, a bash shell, etc.) created to securely connect a user of a user device (e.g., user device 1920 of FIG. 19) to the secure shell instance via, for example, an encrypted connection (e.g., a WebSocket Secure connection).

[0237] In one example, flow 2500 includes an operation 2506 in which a computer system generates an output of the operation. In some embodiments, the output may include movement of data, transmission of requested information, and / or other types of output from the secure shell instance. Given that such output may include sensitive information, implementing network traffic control can potentially reduce the risk of misdirecting the output to an unauthorized destination.

[0238] In one example, flow 2500 includes operation 2508 where the computer system sends a message including the output of the operation to the shell subnet via a secondary virtual network interface card (e.g., the second vNIC 1960 of FIG. 19). The secondary vNIC may be configured using security rules that define unidirectional restrictions on network traffic, for example, for sending the output from a secure shell instance to the shell subnet (e.g., shell subnet 1970). As will be described in more detail with reference to FIG. 20, the shell subnet and the secure shell instance may operate in different VCNs that are isolated from each other, which may potentially improve communication security.

[0239] FIG. 26 shows an exemplary flow 2600 for two-way communication with a secure shell instance using a network interface according to one or more embodiments. The operations of the flow are implemented as a hardware circuit and / or stored as computer-readable instructions on a non-transitory computer-readable medium of a computer system such as the secure cell instance 1950 of FIG. 19. When implemented, the instructions represent a module that includes a circuit or code executable by a processor of the computer system. Execution of such instructions configures the computer system to perform the specific operations described herein. Each circuit or code, in combination with the processor, performs its respective operation. Although the operations are shown in a particular order, it should be understood that the particular order is not required and that one or more operations may be omitted, skipped, and / or rearranged.

[0240] In one example, flow 2600 begins following operation 2504 of FIG. 25, and the computer system performs operations. In particular, the computer system (e.g., the secure shell instance 1950 of FIG. 19) may implement one or more operations associated with the communication of the operation output described with reference to the operations described in FIG. 26.

[0241] In one example, flow 2600 includes operation 2602 where the computer system generates a reply message for the user device. As described in more detail with reference to FIGS. 19 and 22, the secure shell instance may generate a reply message as part of executing the operation. The reply message may be a message for the user device (e.g., user device 1920 of FIG. 19). For example, the reply message may be an acknowledgement, status, or check bit that may be included as part of a command received from the user device.

[0242] In one example, flow 2600 includes operation 2604 where the computer system transmits the reply message to a router via a primary virtual network interface card (e.g., primary vNIC 1940 of FIG. 19). As described in more detail with reference to FIG. 22, the primary vNIC may be configured for unidirectional network traffic, allowing inbound traffic to reach the secure shell instance but not allowing outbound traffic from the secure shell instance to an IaaS service (e.g., cloud shell router 1930 of FIG. 19). In some embodiments, the primary vNIC may be configured to allow the reply message to be sent to the cloud shell router such that the reply message is sent to the user device via one or more elements operating within the service VCN (e.g., service VCN 2010 of FIG. 20).

[0243] FIG. 27 shows an exemplary flow 2700 for communicating bidirectionally with a Secure Shell instance using a network interface according to one or more embodiments. The operations of the flow are implemented as a hardware circuit and / or may be stored as computer-readable instructions on a non-transitory computer-readable medium of a computer system such as the Secure Cell instance 1950 of FIG. 19. When implemented, the instructions represent modules that include circuitry or code executable by a processor of the computer system. Execution of such instructions configures the computer system to perform the particular operations described herein. Each circuitry or code, in combination with the processor, performs its respective operation. Although the operations are shown in a particular order, it should be understood that the particular order is not required and that one or more operations may be omitted, skipped, and / or rearranged.

[0244] In one example, flow 2700 includes an operation 2702 in which a computer system receives an external network request via a secondary virtual network interface card (vNIC). As described in more detail with reference to the foregoing paragraphs, the secondary vNIC (e.g., the secondary vNIC 1960 of FIG. 19) may be configured for unidirectional network traffic from a Secure Shell instance (e.g., via configuration of security rules during setup of the Secure Shell instance). Thus, if an external network request reaches the secondary vNIC, the request may be unauthorized or misaddressed to the secondary vNIC.

[0245] In one example, flow 2700 includes an operation 2704 in which the computer system rejects the external network request. The secondary vNIC may optionally be configured to reject incoming network requests. For example, the security rules included in the configuration of the secondary vNIC may define the secondary vNIC as unidirectional without exception.

[0246] In one example, flow 2700 includes operation 2706 where the computer system returns an error message. In some embodiments, returning the error message may involve storing identifier information (e.g., username, login credentials, IP address, etc.) that describes an external network request for potential use by an IaaS security service. For example, auditing unauthorized inbound network traffic can help identify whether one or more IaaS services and / or user instances may have been compromised. In some embodiments, the error message may be directed directly to the IaaS security service, for example, as a notification that an unauthorized inbound request was received at a secondary vNIC (which is egress only).

[0247] The following sections describe embodiments of the disclosed implementations: Section 1. A method comprising: receiving, by a computer system, a command for the computer system to perform an operation, the command being received from a router via a primary virtual network interface card (vNIC); performing, by the computer system, the operation; generating, by the computer system, an output of the operation; and transmitting, by the computer system, a message including the output of the operation to a shell subnet via a secondary virtual network interface card, the secondary virtual network interface card being configured for unidirectional transmission from the computer system to the shell subnet; wherein the shell subnet is configured to transmit the output of the operation to an external network via a network gateway.

[0248] Section 2. The operation is requested by a user of a user device, and the step of generating an output of the operation comprises: generating a reply message for the user device; sending a reply message to a router via a primary virtual network interface card, the primary virtual network interface card being configured to receive a reply message for a user device The method according to claim 1, configured to reject a message including an output of an operation.

[0249] Claim 3. The computer system is a virtual machine within a first virtual cloud network, the first virtual cloud network being configured within a private route compartment, the method according to claim 1.

[0250] Claim 4. The router is within a second virtual cloud network, the second virtual cloud network being different from the first virtual cloud network and configured within a private route compartment, the method according to claim 3.

[0251] Claim 5. The shell subnet is within a third virtual cloud network, the third virtual cloud network being different from the first virtual cloud network and configured within a public route compartment, the method according to claim 3.

[0252] Claim 6. The private route compartment is associated with a first block of IP addresses to which network traffic from the private route compartment can be attributed, the public route compartment is associated with a second block of IP addresses, the second block of IP addresses being different from the first block of IP addresses, The method according to claim 5, wherein the second block of IP addresses can be attributed to network traffic from one or more users of the computer system.

[0253] Claim 7. The method according to claim 1, wherein the network gateway is a network address translation (NAT) gateway and is configured to send a message using an IP address of a block of IP addresses that can be attributed to network traffic from one or more users of the computer system.

[0254] Claim 8. A computer system, comprising one or more processors and a memory in communication with the one or more processors, the memory being configured to store computer-executable instructions, and executing the computer-executable instructions causes the one or more processors to perform steps, the steps comprising: receiving, by the computer system, commands for the computer system to perform operations, received from a router via a primary virtual network interface card (vNIC); performing, by the computer system, the operations; generating, by the computer system, an output of the operations; and sending, by the computer system, a message including the output of the operations to a shell subnet via a secondary virtual network interface card, the secondary virtual network interface card being configured for unidirectional transmission from the computer system to the shell subnet, wherein the shell subnet is configured to send the output of the operations to an external network via a network gateway.

[0255] Claim 9. The operations are requested by a user of a user device, and the step of generating an output of the operations comprises: generating a reply message for the user device; and sending the reply message to the router via the primary virtual network interface card, the primary virtual network interface card configured to receive a reply message to the user device, The system according to item 8, configured to reject a message including the output of the operation.

[0256] Item 10. The computer system is a virtual machine within a first virtual cloud network, and the first virtual cloud network is configured within a private route compartment. The system according to item 8.

[0257] Item 11. The router is within a second virtual cloud network, and the second virtual cloud network is different from the first virtual cloud network and is configured within a private route compartment. The system according to item 10.

[0258] Item 12. The shell subnet is within a third virtual cloud network, and the third virtual cloud network is different from the first virtual cloud network and is configured within a public route compartment. The system according to item 10.

[0259] Item 13. The private route compartment is associated with a first block of IP addresses to which network traffic from the private route compartment can be attributed. The public route compartment is associated with a second block of IP addresses, and the second block of IP addresses is different from the first block of IP addresses. The second block of IP addresses can be attributed to network traffic from one or more users of the computer system. The system according to item 12.

[0260] Item 14. The network gateway is a network address translation (NAT) gateway and is configured to send a message using an IP address from a block of IP addresses to which network traffic from one or more users of the computer system can be attributed. The system according to item 8.

[0261] Item 15. A computer-readable storage medium storing computer-executable instructions that, when executed, cause one or more processors of a computer system to execute steps, the steps comprising: the computer system receiving, via a primary virtual network interface card (vNIC), commands for the computer system to perform operations received from a router; the computer system performing the operations; the computer system generating an output of the operations; the computer system sending, via a secondary virtual network interface card, a message including the output of the operations to a shell subnet, the secondary virtual network interface card being configured for unidirectional transmission from the computer system to the shell subnet; the shell subnet being configured to send the output of the operations to an external network via a network gateway. A computer-readable storage medium.

[0262] Item 16. The operations are requested by a user of a user device, and the step of generating an output of the operations comprises: generating a reply message for the user device; sending the reply message to the router via the primary virtual network interface card, the primary virtual network interface card being configured to: receive a reply message for the user device; reject a message including the output of the operations. The computer-readable storage medium according to Item 15.

[0263] Item 17. The computer system is a virtual machine within a first virtual cloud network, and the first virtual cloud network is configured within a private routing compartment. The computer-readable storage medium according to Item 15.

[0264] Item 18. The router is within a second virtual cloud network, which is different from the first virtual cloud network and is configured within a private route compartment, the computer-readable storage medium according to Item 17.

[0265] Item 19. The shell subnet is within a third virtual cloud network, which is different from the first virtual cloud network and is configured within a public route compartment, the computer-readable storage medium according to Item 17.

[0266] Item 20. The private route compartment is associated with a first block of IP addresses to which network traffic from the private route compartment can be attributed, The public route compartment is associated with a second block of IP addresses, which is different from the first block of IP addresses, The second block of IP addresses can be attributed to network traffic from one or more users of the computer system, the computer-readable storage medium according to Item 19.

[0267] As described above, Infrastructure as a Service (IaaS) is a specific type of cloud computing. IaaS can be configured to provide virtualized computing resources over a public network (e.g., the Internet). In the IaaS model, a cloud computing provider can host infrastructure components (e.g., servers, storage devices, network nodes (e.g., hardware), deployment software, platform virtualization (e.g., hypervisor layer), etc.). In some cases, the IaaS provider may also supply various services (e.g., billing, monitoring, logging, security, load balancing, and clustering, etc.) to accompany those infrastructure components. Therefore, since these services may be policy-driven, it may be possible for IaaS users to implement policies to drive load balancing to maintain application availability and performance.

[0268] In some cases, IaaS customers may access resources and services through a wide area network (WAN) such as the Internet and use the cloud provider's services to install the remaining elements of the application stack. For example, a user can log in to the IaaS platform, create a virtual machine (VM), install an operating system (OS) on each VM, deploy middleware such as a database, create storage buckets for workloads and backups, and even install enterprise software on that VM. The customer can then use the provider's services to perform various functions, including balancing network traffic, troubleshooting application problems, monitoring performance, and managing disaster recovery.

[0269] In most cases, cloud computing models will require the participation of a cloud provider. The cloud provider may be a third-party service specialized in the provision of IaaS (e.g., offer, rental, sale), but this is not necessary. An entity may also choose to deploy a private cloud and become its own provider of infrastructure services.

[0270] In some examples, IaaS deployment is the process of placing a new application or a new version of an application on a prepared application server, etc. It may also include the process of preparing the server (e.g., installing libraries, daemons, etc.). This is often managed by a cloud provider under the hypervisor layer (e.g., servers, storage, network hardware, and virtualization). Thus, the customer may be responsible for handling (OS), middleware, and / or application deployment, etc. on a self-service virtual machine (which may be launched on demand, for example).

[0271] In some examples, IaaS provisioning may even refer to obtaining a computer or virtual host for use and installing the required libraries or services on them. In most cases, deployment does not include provisioning, and provisioning may need to be executed first.

[0272] In some cases, there are two different problems with IaaS provisioning. First, there is the initial challenge of provisioning an initial set of infrastructure before anything can operate. Second, once everything is provisioned, there is the challenge of evolving the existing infrastructure (e.g., adding new services, changing services, deleting services, etc.). In some cases, these two challenges may be addressed by enabling the infrastructure configuration to be defined declaratively. In other words, the infrastructure (e.g., what components are needed and how they interact) can be defined by one or more configuration files. Thus, the overall topology of the infrastructure (e.g., what resources depend on what other resources and how they each cooperate) can be described declaratively. In some examples, once the topology is defined, a workflow can be generated to create and / or manage the different components described in the configuration file.

[0273] In some examples, the infrastructure may have many interconnected elements. For example, there may be one or more virtual private clouds (VPCs), also known as the core network (e.g., a potentially on-demand pool of configurable and / or shareable computing resources). In some examples, there may also be one or more security group rules that are provisioned to define how network security is set up, and one or more virtual machines (VMs). Other infrastructure elements, such as load balancers, databases, etc., may also be provisioned. As more and more infrastructure elements are desired and / or added, the infrastructure can evolve incrementally.

[0274] In some examples, continuous deployment techniques may be employed to enable the deployment of infrastructure code across various virtual computing environments. Additionally, the techniques described may enable infrastructure management within these environments. In some examples, a service team may write code that is desired to be deployed to one or more, but often many, different production environments (e.g., sometimes spanning the globe across various different geographical locations). However, in some examples, the infrastructure to which the code is deployed must first be set up. In some cases, provisioning may be done manually, resources may be provisioned using a provisioning tool, and / or once the infrastructure is provisioned, the code may be deployed using a deployment tool.

[0275] FIG. 28 is a block diagram 2800 showing an exemplary pattern of an IaaS architecture according to at least one embodiment. A service operator 2802 may be communicatively coupled to a secure host tenancy 2804 that may include a virtual cloud network (VCN) 2806 and a secure host subnet 2808. In some examples, the service operator 2802 may use one or more client computing devices, which may be portable handheld devices (e.g., iPhone®, cellular phone, iPad®, computing tablet, personal digital assistant (PDA)) or wearable devices (e.g., Google Glass® head-mounted display), and may run software such as Microsoft Windows Mobile®, and / or various mobile operating systems such as iOS, Windows Phone, Android, BlackBerry 8, Palm OS, and communicate over the Internet, email, short message service (SMS), BlackBerry®, or other enabled communication protocols. Alternatively, the client computing device may be a general-purpose personal computer, including, by way of example, personal computers and / or laptop computers running various versions of Microsoft Windows®, Apple Macintosh®, and / or Linux® operating systems, and / or a workstation computer running any of various commercially available UNIX® or UNIX-like operating systems, including but not limited to various GNU / Linux operating systems such as Google® Chrome OS.Alternatively, or in addition, the client computing device may be any other electronic device such as a thin client computer, an Internet-enabled gaming system (e.g., a Microsoft Xbox game console with or without a Kinect (registered trademark) gesture input device), and / or a personal messaging device that can communicate via the VCN 2806 and / or a network accessible to the Internet.

[0276] The VCN 2806 may include a local peering gateway (LPG) 2810, which may be communicatively coupled to a secure shell (SSH) VCN 2812 via the LPG 2810 included in the SSH VCN 2812. The SSH VCN 2812 may include an SSH subnet 2814, and the SSH VCN 2812 may be communicatively coupled to a control plane VCN 2816 via the LPG 2810 included in the control plane VCN 2816. Also, the SSH VCN 2812 may be communicatively coupled to a data plane VCN 2818 via the LPG 2810. The control plane VCN 2816 and the data plane VCN 2818 may be included in a service tenancy 2819 that may be owned and / or operated by an IaaS provider.

[0277] The control plane VCN 2816 may include a control plane demilitarized zone (DMZ) layer 2820 that functions as a perimeter network (e.g., a portion of a corporate network between a corporate intranet and an external network). DMZ-based servers have limited responsibilities and may help keep security breaches contained. Further, the DMZ layer 2820 may include one or more load balancer (LB) subnets 2822, a control plane app layer 2824 that may include an app subnet 2826, and a control plane data layer 2828 that may include a database (DB) subnet 2830 (e.g., a front-end DB subnet and / or a back-end DB subnet). The LB subnet 2822 included in the control plane DMZ layer 2820 may be communicatively coupled to the app subnet 2826 included in the control plane app layer 2824 and to an internet gateway 2834 that may be included in the control plane VCN 2816. The app subnet 2826 may be communicatively coupled to the DB subnet 2830 included in the control plane data layer 2828, to a service gateway 2836, and to a network address translation (NAT) gateway 2838. The control plane VCN 2816 may include a service gateway 2836 and a NAT gateway 2838.

[0278] The control plane VCN 2816 may include a data plane mirror app layer 2840 that may include an app subnet 2826. The app subnet 2826 included in the data plane mirror app layer 2840 may include a virtual network interface controller (VNIC) 2842 that may execute a compute instance 2844. The compute instance 2844 may communicatively couple the app subnet 2826 of the data plane mirror app layer 2840 to the app subnet 2826 that may be included in the data plane app layer 2846.

[0279] The data plane VCN 2818 may include a data plane application layer 2846, a data plane DMZ layer 2848, and a data plane data layer 2850. The data plane DMZ layer 2848 may include an LB subnet 2822 that can be communicatively coupled to the application subnet 2826 of the data plane application layer 2846 and the Internet gateway 2834 of the data plane VCN 2818. The application subnet 2826 may be communicatively coupled to the service gateway 2836 of the data plane VCN 2818 and the NAT gateway 2838 of the data plane VCN 2818. The data plane data layer 2850 may also include a DB subnet 2830 that can be communicatively coupled to the application subnet 2826 of the data plane application layer 2846.

[0280] The Internet gateway 2834 of the control plane VCN 2816 and the data plane VCN 2818 may be communicatively coupled to a metadata management service 2852 that can be communicatively coupled to the public Internet 2854. The public Internet 2854 may be communicatively coupled to the NAT gateway 2838 of the control plane VCN 2816 and the data plane VCN 2818. The service gateway 2836 of the control plane VCN 2816 and the data plane VCN 2818 may be communicatively coupled to a cloud service 2856.

[0281] In some examples, the service gateway 2836 of the control plane VCN 2816 or the data plane VCN 2818 may make application programming interface (API) calls to the cloud service 2856 without passing through the public Internet 2854. The API calls from the service gateway 2836 to the cloud service 2856 may be unidirectional, and the service gateway 2836 may make API calls to the cloud service 2856, and the cloud service 2856 may send the requested data to the service gateway 2836. However, the cloud service 2856 may not initiate API calls to the service gateway 2836.

[0282] In some examples, the secure host tenancy 2804 can be directly connected to the service tenancy 2819, and the service tenancy may otherwise be isolated. The secure host subnet 2808 may communicate with the SSH subnet 2814 through the LPG 2810, which may enable two-way communication through an isolated system in other aspects. Connecting the secure host subnet 2808 to the SSH subnet 2814 may provide the secure host subnet 2808 with access to other entities within the service tenancy 2819.

[0283] The control plane VCN 2816 may enable a user of the service tenancy 2819 to set up or otherwise provision desired resources. The desired resources provisioned within the control plane VCN 2816 may be deployed or otherwise used within the data plane VCN 2818. In some examples, the control plane VCN 2816 may be isolated from the data plane VCN 2818, and the data plane mirror app layer 2840 of the control plane VCN 2816 may communicate with the data plane app layer 2846 of the data plane VCN 2818 through the VNIC 2842, which may be included in the data plane mirror app layer 2840 and the data plane app layer 2846.

[0284] In some examples, a user or customer of the system may perform requests, such as create, read, update, or delete (CRUD) operations, via the public Internet 2854 that can communicate the requests to the metadata management service 2852. The metadata management service 2852 may communicate the requests to the control plane VCN 2816 via the Internet gateway 2834. This request may be received by the LB subnet 2822 included in the control plane DMZ layer 2820. The LB subnet 2822 may determine that the request is valid, and in response to this determination, the LB subnet 2822 may send the request to the app subnet 2826 included in the control plane app layer 2824. If the request is verified and requires a call to the public Internet 2854, the call to the public Internet 2854 may be sent to the NAT gateway 2838 that can make the call to the public Internet 2854. Memory that may be desired to be stored by the request may be stored in the DB subnet 2830.

[0285] In some examples, the data plane mirror app layer 2840 may facilitate direct communication between the control plane VCN 2816 and the data plane VCN 2818. For example, it may be desired that configuration changes, updates, or other suitable modifications be applied to resources included in the data plane VCN 2818. Via the VNIC 2842, the control plane VCN 2816 may communicate directly with the resources included in the data plane VCN 2818, thereby performing changes, updates, or other suitable modifications to the configuration.

[0286] In some embodiments, the control plane VCN 2816 and the data plane VCN 2818 may be included in the service tenancy 2819. In this case, the user or customer of the system may not have to own or operate either the control plane VCN 2816 or the data plane VCN 2818. Instead, the IaaS provider may own or operate the control plane VCN 2816 and the data plane VCN 2818, and both of them may be included in the service tenancy 2819. This embodiment may enable network isolation that can prevent a user or customer from interacting with the resources of other users or other customers. Also, this embodiment may allow the user or customer of the system to privately store a database without relying on the public Internet 2854, which may not have the desired level of security for storage purposes.

[0287] In other embodiments, the LB subnet 2822 included in the control plane VCN 2816 may be configured to receive signals from the service gateway 2836. In this embodiment, the control plane VCN 2816 and the data plane VCN 2818 may be configured to be invoked by a customer of the IaaS provider without calling the public Internet 2854. A customer of the IaaS provider may desire this embodiment because the database used by the customer may be controlled by the IaaS provider and may be stored on the service tenancy 2819, which may be isolated from the public Internet 2854.

[0288] FIG. 29 is a block diagram 2900 showing another exemplary pattern of an IaaS architecture according to at least one embodiment. A service operator 2902 (e.g., the service operator 2802 of FIG. 28) may be communicatively coupled to a secure host tenancy 2904 (e.g., the secure host tenancy 2804 of FIG. 28) that may include a virtual cloud network (VCN) 2906 (e.g., the VCN 2806 of FIG. 28) and a secure host subnet 2908 (e.g., the secure host subnet 2808 of FIG. 28). The VCN 2906 may include a local peering gateway (LPG) 2910 (e.g., the LPG 2810 of FIG. 28) that may be communicatively coupled to a secure shell (SSH) VCN 2912 (e.g., the SSH VCN 2812 of FIG. 28) via the LPG 2810 included in the SSH VCN 2912. The SSH VCN 2912 may include an SSH subnet 2914 (e.g., the SSH subnet 2814 of FIG. 28), and the SSH VCN 2912 may be communicatively coupled to a control plane VCN 2916 (e.g., the control plane VCN 2816 of FIG. 28) via the LPG 2910 included in the control plane VCN 2916. The control plane VCN 2916 may be included in a service tenancy 2919 (e.g., the service tenancy 2819 of FIG. 28), and a data plane VCN 2918 (e.g., the data plane VCN 2818 of FIG. 28) may be included in a customer tenancy 2921 that may be owned or operated by a user or customer of the system.

[0289] The control plane VCN 2916 may include a control plane DMZ layer 2920 (e.g., the control plane DMZ layer 2820 of FIG. 28) that may include an LB subnet 2922 (e.g., the LB subnet 2822 of FIG. 28), a control plane application layer 2924 (e.g., the control plane application layer 2824 of FIG. 28) that may include an application subnet 2926 (e.g., the application subnet 2826 of FIG. 28), and a control plane data layer 2928 (e.g., the control plane data layer 2828 of FIG. 28) that may include a database (DB) subnet 2930 (similar to, e.g., the DB subnet 2830 of FIG. 28). The LB subnet 2922 included in the control plane DMZ layer 2920 may be communicatively coupled to the application subnet 2926 included in the control plane application layer 2924 and to an Internet gateway 2934 (e.g., the Internet gateway 2834 of FIG. 28) that may be included in the control plane VCN 2916. The application subnet 2926 may be communicatively coupled to the DB subnet 2930 included in the control plane data layer 2928, to a service gateway 2936 (e.g., the service gateway of FIG. 28), and to a network address translation (NAT) gateway 2938 (e.g., the NAT gateway 2838 of FIG. 28). The control plane VCN 2916 may include the service gateway 2936 and the NAT gateway 2938.

[0290] The control plane VCN 2916 may include a data plane mirror app layer 2940 (e.g., the data plane mirror app layer 2840 of FIG. 28) that may include an app subnet 2926. The app subnet 2926 included in the data plane mirror app layer 2940 may include a virtual network interface controller (VNIC) 2942 (e.g., the VNIC 2842) that may execute a compute instance 2944 (similar to the compute instance 2844 of FIG. 28). The compute instance 2944 may facilitate communication between the app subnet 2926 of the data plane mirror app layer 2940 and an app subnet 2926 that may be included in the data plane app layer 2946 (e.g., the data plane app layer 2846 of FIG. 28) via the VNIC 2942 included in the data plane mirror app layer 2940 and the VNIC 2942 included in the data plane app layer 2946.

[0291] The internet gateway 2934 included in the control plane VCN 2916 may be communicatively coupled to a metadata management service 2952 (e.g., the metadata management service 2852 of FIG. 28) that may be communicatively coupled to the public internet 2954 (e.g., the public internet 2854 of FIG. 28). The public internet 2954 may be communicatively coupled to the NAT gateway 2938 included in the control plane VCN 2916. The service gateway 2936 included in the control plane VCN 2916 may be communicatively coupled to a cloud service 2956 (e.g., the cloud service 2856 of FIG. 28).

[0292] In some examples, the data plane VCN 2918 can be included in the customer tenancy 2921. In this case, the IaaS provider may provide a control plane VCN 2916 for each customer, and the IaaS provider may set up unique compute instances 2944 included in the service tenancy 2919 for each customer. Each compute instance 2944 may enable communication between the control plane VCN 2916 included in the service tenancy 2919 and the data plane VCN 2918 included in the customer tenancy 2921. The compute instance 2944 may enable resources provisioned in the control plane VCN 2916 included in the service tenancy 2919 to be deployed or otherwise used in the data plane VCN 2918 included in the customer tenancy 2921.

[0293] In other examples, a customer of the IaaS provider may have a database residing in the customer tenancy 2921. In this example, the control plane VCN 2916 may include a data plane mirror application layer 2940 that may include an app subnet 2926. The data plane mirror application layer 2940 may be present within the data plane VCN 2918, but the data plane mirror application layer 2940 does not have to reside within the data plane VCN 2918. That is, the data plane mirror application layer 2940 may have access to the customer tenancy 2921, but the data plane mirror application layer 2940 does not have to be present within the data plane VCN 2918 or owned or operated by the customer of the IaaS provider. The data plane mirror application layer 2940 may be configured to make calls to the data plane VCN 2918, but does not have to be configured to make calls to any entity included in the control plane VCN 2916. The customer may desire to deploy or otherwise use resources within the data plane VCN 2918 that are provisioned in the control plane VCN 2916, and the data plane mirror application layer 2940 may facilitate the desired deployment or other use of the customer's resources.

[0294] In some embodiments, a customer of an IaaS provider may apply filters to the data plane VCN 2918. In this embodiment, the customer may determine what the data plane VCN 2918 can access, and the customer may restrict access from the data plane VCN 2918 to the public Internet 2954. The IaaS provider may not be able to filter or otherwise control access to any external network or database of the data plane VCN 2918. Applying filters and controls by the customer on the data plane VCN 2918 included in the customer tenancy 2921 can help isolate the data plane VCN 2918 from other customers and the public Internet 2954.

[0295] In some embodiments, the cloud service 2956 may be invoked by the service gateway 2936 to access services that may not be present on the public Internet 2954, on the control plane VCN 2916, or on the data plane VCN 2918. The connection between the cloud service 2956 and the control plane VCN 2916 or the data plane VCN 2918 may not be live or continuous. The cloud service 2956 may be present on a different network owned or operated by an IaaS provider. The cloud service 2956 may be configured to receive invocations from the service gateway 2936 and may be configured not to receive invocations from the public Internet 2954. Some cloud services 2956 may be isolated from other cloud services 2956, and the control plane VCN 2916 may be isolated from cloud services 2956 that may not be in the same region as the control plane VCN 2916. For example, the control plane VCN 2916 may be located in "Region 1", and the cloud service "Deployment 28" may be located in Region 1 and "Region 2". If an invocation to Deployment 28 is made by the service gateway 2936 included in the control plane VCN 2916 located in Region 1, that invocation may be transmitted to Deployment 28 within Region 1. In this example, the control plane VCN 2916, or Deployment 28 in Region 1, may not be communicatively coupled to, or otherwise communicating with, Deployment 28 in Region 2.

[0296] FIG. 30 is a block diagram 3000 showing another exemplary pattern of an IaaS architecture according to at least one embodiment. A service operator 3002 (e.g., service operator 2802 of FIG. 28) may be communicatively coupled to a secure host tenancy 3004 (e.g., secure host tenancy 2804 of FIG. 28) that may include a virtual cloud network (VCN) 3006 (e.g., VCN 2806 of FIG. 28) and a secure host subnet 3008 (e.g., secure host subnet 2808 of FIG. 28). The VCN 3006 may include an LPG 3010 (e.g., LPG 2810 of FIG. 28), and it may be communicatively coupled to an SSH VCN 3012 (e.g., SSH VCN 2812 of FIG. 28) via the LPG 3010 included in the SSH VCN 3012. The SSH VCN 3012 may include an SSH subnet 3014 (e.g., SSH subnet 2814 of FIG. 28), and the SSH VCN 3012 may be communicatively coupled to a control plane VCN 3016 (e.g., control plane VCN 2816 of FIG. 28) via the LPG 3010 included in the control plane VCN 3016, and may be communicatively coupled to a data plane VCN 3018 (e.g., data plane 2818 of FIG. 28) via the LPG 3010 included in the data plane VCN 3018. The control plane VCN 3016 and the data plane VCN 3018 may be included in a service tenancy 3019 (e.g., service tenancy 2819 of FIG. 28).

[0297] The control plane VCN 3016 may include a control plane DMZ layer 3020 (e.g., the control plane DMZ layer 2820 in FIG. 28) that may include a load balancer (LB) subnet 3022 (e.g., the LB subnet 2822 in FIG. 28), a control plane application layer 3024 (e.g., the control plane application layer 2824 in FIG. 28) that may include an application subnet 3026 (similar to, for example, the application subnet 2826 in FIG. 28), and a control plane data layer 3028 (e.g., the control plane data layer 2828 in FIG. 28) that may include a DB subnet 3030. The LB subnet 3022 included in the control plane DMZ layer 3020 may be communicatively coupled to the application subnet 3026 included in the control plane application layer 3024 and to an Internet gateway 3034 (e.g., the Internet gateway 2834 in FIG. 28) that may be included in the control plane VCN 3016. The application subnet 3026 may be communicatively coupled to the DB subnet 3030 included in the control plane data layer 3028, as well as to a service gateway 3036 (e.g., the service gateway in FIG. 28) and a network address translation (NAT) gateway 3038 (e.g., the NAT gateway 2838 in FIG. 28). The control plane VCN 3016 may include the service gateway 3036 and the NAT gateway 3038.

[0298] The data plane VCN 3018 may include a data plane application layer 3046 (e.g., the data plane application layer 2846 of FIG. 28), a data plane DMZ layer 3048 (e.g., the data plane DMZ layer 2848 of FIG. 28), and a data plane data layer 3050 (e.g., the data plane data layer 2850 of FIG. 28). The data plane DMZ layer 3048 may include an LB subnet 3022 communicatively coupled to a trusted application subnet 3060 and an untrusted application subnet 3062 of the data plane application layer 3046 and to an Internet gateway 3034 included in the data plane VCN 3018. The trusted application subnet 3060 may be communicatively coupled to a service gateway 3036 included in the data plane VCN 3018, to a NAT gateway 3038 included in the data plane VCN 3018, and to a DB subnet 3030 included in the data plane data layer 3050. The untrusted application subnet 3062 may be communicatively coupled to a service gateway 3036 included in the data plane VCN 3018 and to a DB subnet 3030 included in the data plane data layer 3050. The data plane data layer 3050 may include a DB subnet 3030 communicatively coupled to a service gateway 3036 included in the data plane VCN 3018.

[0299] The untrusted application subnet 3062 can include one or more primary VNICs 3064(1)-(N) communicatively coupled to tenant virtual machines (VMs) 3066(1)-(N). Each tenant VM 3066(1)-(N) can be communicatively coupled to respective application subnets 3067(1)-(N) that can be included in respective container egress VCNs 3068(1)-(N) that can be included in respective customer tenancies 3070(1)-(N). Each secondary VNIC 3072(1)-(N) can facilitate communication between the untrusted application subnet 3062 included in the data plane VCN 3018 and the application subnets included in the container egress VCNs 3068(1)-(N). Each container egress VCN 3068(1)-(N) can include a NAT gateway 3038 communicatively coupled to the public internet 3054 (e.g., the public internet 2854 of FIG. 28).

[0300] The internet gateway 3034 included in the control plane VCN 3016 and in the data plane VCN 3018 can be communicatively coupled to a metadata management service 3052 (e.g., the metadata management system 2852 of FIG. 28) communicatively coupled to the public internet 3054. The public internet 3054 can be communicatively coupled to a NAT gateway 3038 included in the control plane VCN 3016 and in the data plane VCN 3018. The service gateway 3036 included in the control plane VCN 3016 and in the data plane VCN 3018 can be communicatively coupled to a cloud service 3056.

[0301] In some embodiments, the data plane VCN 3018 can be integrated with the customer tenant 3070. This integration can be useful or desirable for customers of the IaaS provider in some cases, such as when support may be desired when running code. The customer may provide code to be executed that may be disruptive, communicate with other customer resources, or otherwise cause undesirable effects. In response, the IaaS provider may determine whether to execute the code provided to the IaaS provider by the customer.

[0302] In some examples, a customer of the IaaS provider may grant temporary network access to the IaaS provider and request that a certain function be attached to the data plane layer app 3046. The code for executing the function may be executed in the VMs 3066(1) to (N) and may not be configured to operate anywhere else on the data plane VCN 3018. Each of the VMs 3066(1) to (N) may be connected to one customer tenant 3070. Each of the containers 3071(1) to (N) included in the VMs 3066(1) to (N) may be configured to execute the code. In this case, there may be double isolation (e.g., the containers 3071(1) to (N) may execute the code and the containers 3071(1) to (N) may be included in at least the VMs 3066(1) to (N) included in the untrusted app subnet 3062), which may help prevent incorrect or otherwise undesirable code from damaging the IaaS provider's network or the networks of different customers. The containers 3071(1) to (N) may be communicatively coupled to the customer tenant 3070 and may be configured to send or receive data with the customer tenant 3070. The containers 3071(1) to (N) may not be configured to send or receive data with any other entity within the data plane VCN 3018. When the execution of the code is complete, the IaaS provider may kill or otherwise discard the containers 3071(1) to (N).

[0303] In some embodiments, the trusted application subnet 3060 may execute code that may be owned or operated by an IaaS provider. In this embodiment, the trusted application subnet 3060 may be communicatively coupled to the DB subnet 3030 and may be configured to execute CRUD operations within the DB subnet 3030. The untrusted application subnet 3062 may be communicatively coupled to the DB subnet 3030, but in this embodiment, the untrusted application subnet may be configured to execute read operations within the DB subnet 3030. The containers 3071(1)-(N) that may be included in each customer's VMs 3066(1)-(N) and may execute code from that customer may not be communicatively coupled to the DB subnet 3030.

[0304] In other embodiments, the control plane VCN 3016 and the data plane VCN 3018 may not be directly communicatively coupled. In this embodiment, there may be no direct communication between the control plane VCN 3016 and the data plane VCN 3018. However, communication may occur indirectly through at least one method. An LPG 3010 that may facilitate communication between the control plane VCN 3016 and the data plane VCN 3018 may be established by an IaaS provider. In another example, the control plane VCN 3016 or the data plane VCN 3018 may make calls to cloud services 3056 via a service gateway 3036. For example, a call from the control plane VCN 3016 to the cloud services 3056 may include a service request that may communicate with the data plane VCN 3018.

[0305] FIG. 31 is a block diagram 3100 showing another exemplary pattern of an IaaS architecture according to at least one embodiment. A service operator 3102 (e.g., service operator 2802 of FIG. 28) may be communicatively coupled to a secure host tenancy 3104 (e.g., secure host tenancy 2804 of FIG. 28) that may include a virtual cloud network (VCN) 3106 (e.g., VCN 2806 of FIG. 28) and a secure host subnet 3108 (e.g., secure host subnet 2808 of FIG. 28). The VCN 3106 may include an LPG 3110 (e.g., LPG 2810 of FIG. 28), which may be communicatively coupled to an SSH VCN 3112 (e.g., SSH VCN 2812 of FIG. 28) via the LPG 3110 included in the SSH VCN 3112. The SSH VCN 3112 may include an SSH subnet 3114 (e.g., SSH subnet 2814 of FIG. 28), and the SSH VCN 3112 may be communicatively coupled to a control plane VCN 3116 (e.g., control plane VCN 2816 of FIG. 28) via the LPG 3110 included in the control plane VCN 3116 and may be communicatively coupled to a data plane VCN 3118 (e.g., data plane 2818 of FIG. 28) via the LPG 3110 included in the data plane VCN 3118. The control plane VCN 3116 and the data plane VCN 3118 may be included in a service tenancy 3119 (e.g., service tenancy 2819 of FIG. 28).

[0306] The control plane VCN 3116 may include a control plane DMZ layer 3120 (e.g., the control plane DMZ layer 2820 in FIG. 28) that may include an LB subnet 3122 (e.g., the LB subnet 2822 in FIG. 28), a control plane application layer 3124 (e.g., the control plane application layer 2824 in FIG. 28) that may include an application subnet 3126 (e.g., the application subnet 2826 in FIG. 28), and a control plane data layer 3128 (e.g., the control plane data layer 2828 in FIG. 28) that may include a DB subnet 3130 (e.g., the DB subnet 3030 in FIG. 30). The LB subnet 3122 included in the control plane DMZ layer 3120 may be communicatively coupled to the application subnet 3126 included in the control plane application layer 3124 and an Internet gateway 3134 (e.g., the Internet gateway 2834 in FIG. 28) that may be included in the control plane VCN 3116. The application subnet 3126 may be communicatively coupled to the DB subnet 3130 included in the control plane data layer 3128, a service gateway 3136 (e.g., the service gateway in FIG. 28), and a network address translation (NAT) gateway 3138 (e.g., the NAT gateway 2838 in FIG. 28). The control plane VCN 3116 may include the service gateway 3136 and the NAT gateway 3138.

[0307] The data plane VCN 3118 may include a data plane application layer 3146 (e.g., the data plane application layer 2846 of FIG. 28), a data plane DMZ layer 3148 (e.g., the data plane DMZ layer 2848 of FIG. 28), and a data plane data layer 3150 (e.g., the data plane data layer 2850 of FIG. 28). The data plane DMZ layer 3148 may include an LB subnet 3122 communicatively coupled to a trusted app subnet 3160 (e.g., the trusted app subnet 3060 of FIG. 30) and an untrusted app subnet 3162 (e.g., the untrusted app subnet 3062 of FIG. 30) of the data plane application layer 3146 and to an Internet gateway 3134 included in the data plane VCN 3118. The trusted app subnet 3160 may be communicatively coupled to a service gateway 3136 included in the data plane VCN 3118, to a NAT gateway 3138 included in the data plane VCN 3118, and to a DB subnet 3130 included in the data plane data layer 3150. The untrusted app subnet 3162 may be communicatively coupled to a service gateway 3136 included in the data plane VCN 3118 and to a DB subnet 3130 included in the data plane data layer 3150. The data plane data layer 3150 may include a DB subnet 3130 communicatively coupled to a service gateway 3136 included in the data plane VCN 3118.

[0308] The untrusted application subnet 3162 can include primary VNICs 3164(1) to (N) communicatively coupled to tenant virtual machines (VMs) 3166(1) to (N) resident within the untrusted application subnet 3162. Each tenant VM 3166(1) to (N) can execute code in respective containers 3167(1) to (N) and can be communicatively coupled to an application subnet 3126 that can be included in a data plane application layer 3146 that can be included in a container egress VCN 3168. Each secondary VNIC 3172(1) to (N) can facilitate communication between the untrusted application subnet 3162 included in the data plane VCN 3118 and the application subnet included in the container egress VCN 3168. The container egress VCN can include a NAT gateway 3138 communicatively coupled to a public internet 3154 (e.g., the public internet 2854 of FIG. 28).

[0309] The internet gateway 3134 included in the control plane VCN 3116 and the data plane VCN 3118 can be communicatively coupled to a metadata management service 3152 (e.g., the metadata management system 2852 of FIG. 28) communicatively coupled to the public internet 3154. The public internet 3154 can be communicatively coupled to a NAT gateway 3138 included in the control plane VCN 3116 and the data plane VCN 3118. The service gateway 3136 included in the control plane VCN 3116 and the data plane VCN 3118 can be communicatively coupled to a cloud service 3156.

[0310] In some examples, the pattern shown by the architecture of block diagram 3100 of FIG. 31 may be considered an exception to the pattern shown by the architecture of block diagram 3000 of FIG. 30 and may be desirable for the customers of the IaaS provider when the IaaS provider cannot communicate directly with the customers (e.g., in a disconnected region). Each of the containers 3167(1)-(N) included in VM3166(1)-(N) for each customer may be accessed in real time by the customer. The containers 3167(1)-(N) may be configured to make calls to respective secondary VNICs 3172(1)-(N) included in the app subnet 3126 of the data plane app layer 3146 that may be included in the container egress VCN 3168. The secondary VNICs 3172(1)-(N) may send calls to the NAT gateway 3138, and the NAT gateway 3138 may send calls to the public Internet 3154. In this example, the containers 3167(1)-(N) that may be accessed in real time by the customer may be isolated from the control plane VCN 3116 and from other entities included in the data plane VCN 3118. The containers 3167(1)-(N) may also be isolated from resources from other customers.

[0311] In other examples, a customer may invoke cloud service 3156 using containers 3167(1) through (N). In this example, the customer may execute code within containers 3167(1) through (N) that requests services from cloud service 3156. Containers 3167(1) through (N) may send this request to secondary VNICs 3172(1) through (N), which may send the request to a NAT gateway, which may send the request to public Internet 3154. Public Internet 3154 may send the request to the LB subnet 3122 included in control plane VCN 3116 via Internet gateway 3134. In response to determining that the request is valid, the LB subnet may send the request to app subnet 3126, which may send the request to cloud service 3156 via service gateway 3136.

[0312] It should be understood that the illustrated IaaS architectures 2800, 2900, 3000, 3100 may have components other than those shown. Further, the illustrated embodiments are merely some examples of cloud infrastructure systems that may incorporate embodiments of the present disclosure. In some other embodiments, the IaaS system may have more or fewer components than shown, may combine two or more components, or may have a different configuration or arrangement of components.

[0313] In one embodiment, the IaaS system described herein may include a suite of application, middleware, and database service offerings that are self-service, subscription-based, elastically scalable, reliable, highly available, and delivered to customers in a secure manner. An example of such an IaaS system is Oracle Cloud Infrastructure (OCI) provided by the present assignee.

[0314] FIG. 32 shows an exemplary computer system 3200 in which various embodiments of the present disclosure may be implemented. The system 3200 may be used to implement any of the computer systems described above. As shown in the figure, the computer system 3200 includes a processing unit 3204 that communicates with several peripheral subsystems via a bus subsystem 3202. These peripheral subsystems may include a processing acceleration unit 3206, an I / O subsystem 3208, a storage subsystem 3218, and a communication subsystem 3224. The storage subsystem 3218 includes a tangible computer-readable storage medium 3222 and a system memory 3210.

[0315] The bus subsystem 3202 provides a mechanism for the various components and subsystems of the computer system 3200 to communicate with each other as intended. The bus subsystem 3202 is shown schematically as a single bus, although alternative embodiments of the bus subsystem may utilize multiple buses. The bus subsystem 3202 may be any of several types of bus structures, including a memory bus or memory controller using any of various bus architectures, a peripheral bus, and a local bus. For example, such architectures may include an Industry Standard Architecture (ISA) bus, a Micro Channel Architecture (MCA) bus, an Extended ISA (EISA) bus, a Video Electronics Standards Association (VESA) local bus, and a Peripheral Component Interconnect (PCI) bus that may be implemented as a mezzanine bus manufactured in accordance with the IEEE P1386.1 standard.

[0316] The processing unit 3204 can be implemented as one or more integrated circuits (e.g., a conventional microprocessor or microcontroller) and controls the operation of the computer system 3200. One or more processors may be included in the processing unit 3204. These processors may include a single-core processor or a multi-core processor. In certain embodiments, the processing unit 3204 may be implemented as one or more independent processing units 3232 and / or 3234 in which a single-core processor or a multi-core processor is included in each processing unit. In other embodiments, the processing unit 3204 may also be implemented as a quad-core processing unit formed by integrating two dual-core processors on a single chip.

[0317] In various embodiments, the processing unit 3204 can execute various programs in response to program code and can maintain multiple simultaneously-executed programs or processes. At any given time, some or all of the program code to be executed can reside in the processor 3204 and / or the storage subsystem 3218. Through suitable programming, the processor 3204 can provide the various functionalities described above. The computer system 3200 may further include a processing acceleration unit 3206 that may include a digital signal processor (DSP), a special-purpose processor, and the like.

[0318] The I / O subsystem 3208 may include user interface input devices and user interface output devices. User interface input devices may include a keyboard, a pointing device such as a mouse or trackball, a touchpad or touch screen incorporated into a display, a scroll wheel, a click wheel, a dial, buttons, switches, a keypad, a voice input device with a voice command recognition system, a microphone, and other types of input devices. The user interface input devices may include, for example, motion sensing and / or gesture recognition devices such as the Microsoft Kinect (registered trademark) motion sensor that enable a user to control and interact with input devices such as the Microsoft Xbox (registered trademark) 360 game controller through a natural user interface using gestures and spoken commands. The user interface input devices may also include gesture recognition devices such as the Google Glass (registered trademark) blink detector that detects eye movements (e.g., "blinks" while taking a photo and / or making a menu selection) from the user and converts the eye gesture into an input to the input device (e.g., Google Glass (registered trademark)). Additionally, the user interface input devices may include voice recognition sensing devices that enable a user to interact with a voice recognition system (e.g., the Siri (registered trademark) navigator) via voice commands.

[0319] The user interface input device may include, but is not limited to, a three-dimensional (3D) mouse, joystick or pointing stick, game pad and graphic tablet, and audio / visual devices such as speakers, digital cameras, digital camcorders, portable media players, webcams, image scanners, fingerprint scanners, barcode readers, 3D scanners, 3D printers, laser range finders, and eye tracking devices. In addition, the user interface input device may include, for example, medical imaging input devices such as computed tomography, magnetic resonance imaging, positron emission tomography, and medical ultrasonic examination devices. The user interface input device may also include, for example, audio input devices such as MIDI keyboards and digital musical instruments.

[0320] The user interface output device may include a non-visual display such as a display subsystem, indicator light, or audio output device. The display subsystem may be a flat panel device such as one using a cathode ray tube (CRT), liquid crystal display (LCD), or plasma display, a projection device, a touch screen, etc. Generally, the use of the term "output device" is intended to include all possible types of devices and mechanisms for outputting information from the computer system 3200 to the user or another computer. For example, the user interface output device may include, but is not limited to, various display devices for visually conveying text, graphics, and audio / video information such as monitors, printers, speakers, headphones, automotive navigation systems, plotters, audio output devices, and modems.

[0321] The computer system 3200 may include a storage subsystem 3218 that includes software elements shown as being currently located within system memory 3210. The system memory 3210 may store program instructions loadable and executable on the processing unit 3204, as well as data generated during the execution of these programs.

[0322] Depending on the configuration and type of computer system 3200, system memory 3210 may be volatile (such as random access memory (RAM)) and / or non-volatile (such as read-only memory (ROM), flash memory, etc.). RAM typically contains data and / or program modules that are immediately accessible to and / or currently being operated on and executed by processing unit 3204. In some implementations, system memory 3210 may include multiple different types of memory, such as static random access memory (SRAM) or dynamic random access memory (DRAM). In some implementations, a basic input / output system (BIOS) that includes basic routines that help transfer information between elements within computer system 3200 during startup, etc., may typically be stored in ROM. By way of example and not limitation, system memory 3210 also shows application programs 3212, which may include client applications, web browsers, middleware applications, relational database management systems (RDBMS), etc., program data 3214, and operating system 3216. By way of example, operating system 3216 may include various versions of the Microsoft Windows® operating system, Apple Macintosh® operating system, and / or Linux® operating system, various commercially available UNIX® or UNIX-like operating systems (including, but not limited to, various GNU / Linux operating systems, Google Chrome® OS, etc.), and / or mobile operating systems such as iOS, Windows® Phone, Android® OS, BlackBerry® 10 OS, and Palm® OS.

[0323] The memory subsystem 3218 may also provide a tangible computer-readable storage medium for storing the basic programming and data structures that provide the functionality of some embodiments. Software (programs, code modules, instructions) that, when executed by a processor, provides the above-described functionality may be stored in the storage subsystem 3218. These software modules or instructions may be executed by the processing unit 3204. The storage subsystem 3218 may also provide a repository for storing data used in accordance with the present disclosure.

[0324] The storage subsystem 3200 may also include a computer-readable storage medium reader 3220 that may be further connected to a computer-readable storage medium 3222. Together with the system memory 3210 and, optionally, in combination with the system memory 3210, the computer-readable storage medium 3222 may comprehensively represent a storage medium added to remote, local, fixed, and / or removable storage devices for temporarily and / or more permanently accommodating, storing, transmitting, and retrieving computer-readable information.

[0325] A computer-readable storage medium 3222 that includes code or a portion of code can also include any suitable medium known in or used in the art, including, but not limited to, volatile and non-volatile, removable and non-removable media such as storage media and communication media implemented in any method or technology for the storage and / or transmission of information. This can include tangible computer-readable storage media such as RAM, ROM, electronically erasable programmable ROM (EEPROM), flash memory or other memory technologies, CD-ROM, digital versatile disk (DVD), or other optical storage device, magnetic cassette, magnetic tape, magnetic disk storage device or other magnetic storage device, or other tangible computer-readable media. This can also include non-tangible computer-readable media such as data signals, data transmissions, or any other medium that can be used to transmit desired information and that can be accessed by computing system 3200.

[0326] As an example, the computer-readable storage medium 3222 may include a hard disk drive that reads from and writes to a non-removable non-volatile magnetic medium, a magnetic disk drive that reads from and writes to a removable non-volatile magnetic disk, an optical disk drive that reads from and writes to a removable non-volatile optical disk such as a CD ROM, a DVD, and a Blu-Ray (registered trademark) disk, or other optical media. The computer-readable storage medium 3222 may include, but is not limited to, a Zip (registered trademark) drive, a flash memory card, a Universal Serial Bus (USB) flash drive, a Secure Digital (SD) card, a DVD disk, a digital video tape, etc. The computer-readable storage medium 3222 may also include a solid state drive (SSD) based on non-volatile memory such as a flash memory-based SSD, an enterprise flash drive, a solid state ROM, an SSD based on volatile memory such as solid state RAM, dynamic RAM, static RAM, a DRAM-based SSD, a magnetic resistance RAM (MRAM) SSD, and a hybrid SSD that uses a combination of DRAM and a flash memory-based SSD. The disk drives and the computer-readable media associated therewith may provide non-volatile storage of computer-readable instructions, data structures, program modules, and other data to the computer system 3200.

[0327] Communication subsystem 3224 provides an interface to other computer systems and networks. The communication subsystem 3224 serves as an interface for the transmission and reception of data between other systems and the computer system 3200. For example, the communication subsystem 3224 may enable the computer system 3200 to connect to one or more devices via the Internet. In some embodiments, the communication subsystem 3224 may include radio frequency (RF) transceiver components for accessing wireless voice and / or data networks (e.g., using cellular phone technology, advanced data network technologies such as 3G, 4G or EDGE (Enhanced Data rates for GSM Evolution), WiFi (IEEE802.11 family of standards, or other mobile communication technologies, or any combination thereof), a Global Positioning System (GPS) receiver component, and / or other components. In some embodiments, the communication subsystem 3224 can provide wired network connectivity (e.g., Ethernet (registered trademark)) in addition to, or instead of, a wireless interface.

[0328] In some embodiments, the communication subsystem 3224 may also receive input communications on behalf of one or more users who may use the computer system 3200, in the form of structured and / or unstructured data feeds 3226, event streams 3228, event updates 3230, etc.

[0329]

[0330] As an example, the communication subsystem 3224 may be configured to receive data feeds 3226 in real-time from users of social networks and / or other communication services, such as Twitter (registered trademark) feeds, Facebook (registered trademark) updates, web feeds such as Rich Site Summary (RSS) feeds, and / or real-time updates from one or more third-party information sources.In addition, the communication subsystem 3224 may also be configured to receive data in the form of a continuous data stream, which may include an event stream 3228 and / or event updates 3230 of real-time events that are essentially continuous or infinite without an explicit termination. Examples of applications that generate continuous data may include, for example, sensor data applications, financial stock market dashboards, network performance measurement tools (e.g., network monitoring and traffic management applications), clickstream analysis tools, automotive traffic monitoring, and the like.

[0331] The communication subsystem 3224 may also be configured to output structured and / or unstructured data feeds 3226, event streams 3228, event updates 3230, etc., to one or more databases that may communicate with one or more streaming data source computers coupled to the computer system 3200.

[0332] The computer system 3200 can be one of various types, including a handheld portable device (e.g., an iPhone (registered trademark) mobile phone, an iPad (registered trademark) computing tablet, a PDA), a wearable device (e.g., a Google Glass (registered trademark) head-mounted display), a PC, a workstation, a mainframe, a kiosk, a server rack, or any other data processing system.

[0333] Due to the constantly changing nature of computers and networks, the description of the computer system 3200 shown in the figures is intended merely as a specific example. Many other configurations are possible that have more or fewer components than the system depicted in the figures. For example, customized hardware may also be used and / or certain elements may be implemented in hardware, firmware, software (including applets), or a combination. Additionally, connections to other computing devices such as network input / output devices may be employed. Based on the disclosure and teachings provided herein, one of ordinary skill in the art will understand other aspects and / or methods for implementing various embodiments.

[0334] Although specific embodiments of the present disclosure have been described, various modifications, changes, alternative configurations, and equivalents are also included within the scope of the present disclosure. Embodiments of the present disclosure are not limited to operating within a particular data processing environment and can operate freely within multiple data processing environments. Additionally, although embodiments of the present disclosure have been described using a particular series of transactions and steps, it should be apparent to one of ordinary skill in the art that the scope of the present disclosure is not limited to the series of transactions and steps described. The various features and aspects of the embodiments described above may be used individually or in combination.

[0335] Furthermore, although embodiments of the present disclosure have been described using specific combinations of hardware and software, it should be recognized that other combinations of hardware and software are also within the scope of the present disclosure. Embodiments of the present disclosure may be implemented using only hardware, or only software, or combinations thereof. The various processes described herein may be implemented on the same processor or different processors in any combination. Thus, if a component or module is described as being configured to perform a particular operation, such a configuration may be achieved, for example, by designing an electronic circuit to perform the operation, programming a programmable electronic circuit (such as a microprocessor) to perform the operation, or any combination thereof. Processes can communicate using a variety of techniques including, but not limited to, conventional techniques for inter-process communication, different pairs of processes may use different techniques, and the same pair of processes may use different techniques at different times.

[0336] Accordingly, the specification and drawings are to be regarded in an illustrative rather than a restrictive sense. However, it will be apparent that additional, subtractive, eliminative, as well as other modifications and changes can be made without departing from the broader spirit and scope recited in the claims. Thus, while specific embodiments of the disclosure have been described, these are not intended to be limiting. Various modifications and equivalents are within the scope of the claims.

[0337] In the context of describing the disclosed embodiments (particularly in the context of the claims), the use of the words "a", "an", "the", and similar referents should be construed to include both the singular and the plural, unless otherwise indicated herein or unless clearly contradicted by the context. The words "comprising", "having", "including", and "containing" should be construed as open-ended terms (i.e., meaning "including but not limited to") unless specifically stated otherwise. The phrase "connected to" should be construed to mean attached to, incorporated within in part or in whole, or joined together, even if something intervenes. The recitation of a range of values herein is merely intended to serve as a concise way of referring individually to each separate value that falls within the range, and each separate value is incorporated herein as if it were individually recited herein. All methods described herein may be performed in any suitable order, unless otherwise indicated herein or unless clearly contradicted by the context. The use of any and all examples, or exemplary language (e.g., "such as") provided herein is merely intended to better illustrate the embodiments of the disclosure and is not intended to limit the scope of the disclosure unless otherwise claimed. No language in this specification should be construed as indicating any non-claimed element as essential to the practice of the disclosure.

[0338] Disjunctive language such as the phrase "at least one of X, Y, or Z" is generally understood within the context in which it is used to present that items, terms, etc. may be any of X, Y, or Z, or any combination thereof (e.g., X, Y, and / or Z), unless otherwise specified. Thus, such disjunctive language is generally not intended to, and should not be construed to, imply that a particular embodiment requires each and every one of X, at least one of Y, or at least one of Z to be present.

[0339] Preferred embodiments of the present disclosure are described herein, including the best mode known to the applicant for practicing the disclosure. Variations of these preferred embodiments will be apparent to those skilled in the art upon reading the foregoing description. Those skilled in the art should be able to adopt such variations as appropriate, and the present disclosure may be practiced otherwise than as specifically described herein. Accordingly, the present disclosure includes all modifications and equivalents of the subject matter recited in the claims as permitted by applicable law. Further, any combination of the above-described elements in all possible variations thereof is included in the present disclosure unless otherwise indicated herein.

[0340] All cited references, including publications, patent applications, and patents, cited herein are hereby incorporated by reference in their entirety as if each were individually and specifically indicated to be incorporated by reference.

[0341] While the foregoing specification has described specific embodiments of the present disclosure, those skilled in the art will recognize that the present disclosure is not limited thereto. The various features and aspects of the above disclosure may be used individually or together. Further, embodiments may be utilized in any number of environments and applications beyond those described herein without departing from the broader spirit and scope of the present disclosure. Accordingly, the specification and drawings are to be regarded as illustrative rather than restrictive.

Claims

1. A method comprising: a computer system receiving a request to reserve a block volume, the request being received from a session manager service, the method further comprising: the computer system reserving the block volume; the computer system identifying a data center identifier of the block volume; the computer system returning the data center identifier of the block volume to the session manager service; the computer system attaching the block volume; the computer system receiving from the session manager service an instruction to release the block volume; the computer system creating a backup of the block volume including data stored on the block volume; the computer system releasing the block volume.

2. The request includes a user identifier, and reserving the block volume comprises: determining whether a registered block volume is assigned to a user corresponding to the user identifier; reserving the registered block volume in response to the registered block volume being assigned to the user; reserving an empty volume from a pool of empty volumes in response to the registered block volume not being assigned to the user corresponding to the user identifier, the empty volume being pre-formatted to dock with a secure cloud shell. The method according to claim 1.

3. The method further comprises: receiving from the session manager service a request to restore the block volume; creating a restored volume using the backup of the block volume, the restored volume including data stored on the block volume, the method further comprising: returning a data center identifier of the restored volume to the session manager service. The method according to claim 1.

4. The backup of the block volume further includes an identifier of the backup, and creating the restored volume comprises: Reserving an empty block volume from an empty volume pool, the empty block volume being pre-formatted to dock with a secure cloud shell, and creating the restore volume further comprises searching for a backup of the block volume using the identifier of the backup; provisioning the empty block volume, at least in part, by loading the backup of the block volume onto the empty block volume; and identifying the data center identifier of the empty block volume as the data center identifier of the restore volume. The method according to claim 3 **Claim 5** The method according to any one of claims 1 to 4, further comprising holding the block volume during a retention period. **Claim 6** Creating the backup of the block volume includes creating a disk image of the block volume. The method according to any one of claims 1 to 5 **Claim 7** Creating the backup of the block volume includes converting the data of the block volume into object data; and storing the object data in an object storage system. The method according to any one of claims 1 to 6 **Claim 8** A computer system comprising one or more processors; and a memory communicating with the one or more processors, the memory being configured to store computer-executable instructions, and executing the computer-executable instructions causes the one or more processors to perform steps that include the computer system receiving a request to reserve a block volume, the request being received from a session manager service, and the steps further include the computer system reserving the block volume; the computer system identifying a data center identifier of the block volume; the computer system returning the data center identifier of the block volume to the session manager service; and the computer system attaching the block volume. The computer system receives a command to release the block volume from the session manager service, The computer system creates a backup of the block volume including the data stored in the block volume, The computer system includes releasing the block volume, a computer system.

9. The request includes a user identifier, and reserving the block volume Determining whether a registered block volume is assigned to a user corresponding to the user identifier, Reserving the registered block volume in response to the registered block volume being assigned to the user, Reserving an empty volume from a pool of empty volumes in response to the registered block volume not being assigned to the user corresponding to the user identifier, the empty volume being pre-formatted to dock with a secure cloud shell, the computer system according to claim 8.

10. Executing the computer-executable instructions further causes the one or more processors to perform steps, the steps Receiving a request to restore the block volume from the session manager service, Creating a restored volume using the backup of the block volume, the restored volume including the data stored in the block volume, and the steps further Returning a data center identifier of the restored volume to the session manager service, the computer system according to claim 8.

11. The backup of the block volume further includes an identifier of the backup, and creating the restored volume Reserving an empty block volume from a pool of empty volumes, the empty block volume being pre-formatted to dock with a secure cloud shell, and creating the restored volume further Searching for the backup of the block volume using the identifier of the backup, Provisioning the empty block volume, at least in part, by loading the backup of the block volume onto the empty block volume; The computer system of claim 10, comprising: identifying the data center identifier of the empty block volume as the data center identifier of the restore volume. **Claim 12** The computer system according to any one of claims 8 to 11, wherein executing the computer-executable instructions further causes the one or more processors to perform a step of holding the block volume during a holding period. **Claim 13** The computer system according to any one of claims 8 to 12, wherein creating the backup of the block volume includes creating a disk image of the block volume. **Claim 14** Creating the backup of the block volume comprises: Converting the data of the block volume into object data; Storing the object data in an object storage system; The computer system according to any one of claims 8 to 13. **Claim 15** A program comprising computer-executable instructions that, when executed, cause one or more processors of a computer system to perform the method according to any one of claims 1 to 7.

Citation Information

Patent Citations

  • Storage system

    JP2005276017A

  • A system and method for providing flexible storage and retrieval of snapshot archives.

    JP2013540314A

  • Enhanced Software Application Platform

    US20130124807A1

  • Best practice analysis, migration advisor

    US8954574B1