Logging access types based on inserting tenant control headers into requests

Information

  • Patent Grant
  • 12034726
  • Patent Number
    12,034,726
  • Date Filed
    Wednesday, May 31, 2023
    a year ago
  • Date Issued
    Tuesday, July 9, 2024
    7 months ago
Abstract
A proxy server receives a first request from a first user to access a resource hosted by a cloud-based server. The proxy server inserts a first tenant control header into the first request specifying a tenant identifier. The tenant identifier indicates a tenant permitted to access the resource. The proxy server then transmits the first request with the inserted first tenant control header to the cloud-based server. In response to receiving a first response indicating a rejection of the first request with the inserted first tenant control header, the proxy server transmits the first request again to the cloud-based server but without the first tenant control header. The proxy server then logs the first request as an access request using a non-permitted tenant identifier.
Description
FIELD

Embodiments of the invention relate to the field of network communications, and more specifically, to using a proxy server configured to use tenant control headers to manage access requests for resources.


BACKGROUND

IT administrators are concerned with maintaining high security, performance, and reliability of their customer network (e.g., a corporate network). To prevent the loss of sensitive or confidential data from the corporate network, IT administrators can allow users to access applications using corporate accounts, while blocking access to the application using personal accounts.


SUMMARY

A networked system includes a proxy server configured to proxy requests and responses between client devices and cloud-based servers. The proxy server stores customer access policies that are applicable to resources requested by the client devices. When the proxy server receives a request, the proxy server determines a tenant identifier from the customer access policy, inserts a tenant control header with the tenant identifier in the request, and sends the modified request to the cloud-based server. The cloud-based server can then compare the tenant identifier in the tenant control header to a tenant identifier in the body of the request. In response to receiving a response from the cloud-based server indicating a rejection of the request, the proxy server transmits the request again to the cloud-based server but without the tenant control header. The proxy server then logs the request as an access request using a non-permitted tenant identifier.





BRIEF DESCRIPTION OF THE DRAWINGS

The invention may best be understood by referring to the following description and accompanying drawings that are used to illustrate embodiments of the invention. In the drawings:



FIG. 1 illustrates an exemplary networked system according to some embodiments described herein;



FIG. 2 illustrates a sequence diagram including operations performed by a proxy server enforcing customer access policies on requests for resources according to an embodiment.



FIG. 3 illustrates a sequence diagram including operations performed by a proxy server enforcing customer access policies on requests for resources according to an embodiment.



FIG. 4 is a flow diagram that illustrates exemplary operations for enforcing access policies on requests to access resources by a proxy server according to an embodiment; and



FIG. 5 illustrates a block diagram for an exemplary data processing system that can be used in some embodiments.





DESCRIPTION OF EMBODIMENTS

A proxy server sits between user devices and the internet and intercepts any network traffic from the user devices. For example, a proxy server receives requests (e.g., HTTP requests) from the user devices that are transmitted by the proxy server on the user's behalf. The proxy server can then relay responses to the requests back to the user devices. Some cloud-based services facilitate a tenant control feature that allows a proxy server to prevent access to a resource if a known tenant (e.g., a customer-defined domain) is not used. To use this feature, the proxy server inserts a tenant control header into the request specifying the tenant that is to be allowed to access the requested resource. The cloud-based service will reject any requests that are not associated with the tenant indicated in the tenant control header. For example, the cloud-based service will block a request that includes account credentials with the domain “example.com” when a tenant identified in the tenant control header is “company.com.”


However, blocking all requests with credentials that do not match the tenant identified in the tenant control header can be over-inclusive and result in a poor user experience. The embodiments described herein provide mechanisms for enforcing customer access policies in a manner that allows the proxy server to distinguish requests that include credentials for tenants allowed to access the requested resource from requests that do not.


In one embodiment, a proxy server receives a request from a user to access a resource hosted by a cloud-based server. The proxy server can insert a tenant control header into the request that specifies a tenant identifier (e.g., a domain name, directory identifier, etc.) that indicates a tenant that is permitted to access the resource. The proxy server then transmits the request with the inserted tenant control header to the cloud-based server. The cloud-based server can then compare the tenant identifier in the tenant control header to a tenant identifier in the body of the request. When they do not match, the cloud-based server rejects the request, and, conversely, when they do match, the cloud-based server accepts the request. In response to receiving a response from the cloud-based server indicating a rejection of the request, the proxy server transmits the request again to the cloud-based server but without the tenant control header. The proxy server then logs the request as an access request using a non-permitted tenant identifier.


Embodiments of the invention provide many technical advantages, in addition to addressing the deficiencies of previous solutions. For example, improvements to the security of resources can be realized by using the tenant control header to differentiate between requests that use account credentials with a permitted tenant identifier from requests that use account credentials without a permitted tenant identifier.



FIG. 1 illustrates an exemplary networked system according to some embodiments described herein. The exemplary networked system 100 illustrated in FIG. 1 includes a proxy server 120 situated between a client device 105 and a cloud-based server 130. The exemplary networked system 100 also includes a configuration server 140 that is connected to and/or in communication with the proxy server 120. The embodiment depicted in FIG. 1 illustrates operations for handling requests from the client device 105 to access resources hosted by the cloud-based server 130, where the resources may have access policies defined by a customer via a customer device 107 in communication with the configuration server 140.


Examples of client device 105 include computing devices (e.g., laptops, desktops, workstations, smartphones, palm tops, mobile phones, tablets, gaming systems, set top boxes, wearable devices, internet-of-things (IoT) devices, electronic devices, etc.) that are capable of transmitting and/or receiving network traffic. In some embodiments, client device 105 executes a client network application 110 that is capable of transmitting and/or receiving network traffic. For example, client network applications 110 may be a web browser or other application that can access network resources (e.g., web pages, images, word processing documents, PDF files, movie files, music files, or other computer files).


In one embodiment, proxy server 120 is an intermediary device configured to receive requests to access and/or modify resources hosted by the cloud-based server 130, and further receives responses to such requests from the cloud-based server 130. For example, web traffic (e.g., HTTP requests/responses, HTTPS requests/responses, SPDY requests/responses, HTTP/2 requests, responses, etc.) for domains handled by cloud-based server 130 may be received at proxy server 120.


In some embodiments, the proxy server 120 includes a tenant control module 122 and a plurality of databases, including a customer access policies database 124 and an access logs database 126. The customer access policies database 124 stores access policies provided by a customer associated with a resource. The customer access policies database 124 can receive the access policies from a customer device 107, either directly or via the configuration server 140. The access logs database 126 stores access log data associated with requests to access resources hosted by the cloud-based server. In one embodiment, the access log data for a request indicates whether the request was received with account credentials associated with a permitted or a non-permitted tenant (e.g., domain).


In some embodiments, the tenant control module 122 is configured to generate tenant control headers that can be inserted or appended to requests received by the proxy server 120. The tenant control module 122 can generate the tenant control header based on customer access policies that allow a customer to define who can access a resource. The tenant control header can include a tenant identifier. Example tenant identifiers can include a domain (e.g., “example.com”) or a directory identifier value that identifies a tenant. The insertion of the tenant control header into the request can result in the granting of access to the resource if the request includes credentials for a tenant matching a tenant identifier in the tenant control header. Conversely, access to the resource can be denied if the request includes credentials for a tenant that does not match a tenant identifier in the tenant control header.


Examples of cloud-based server 130 includes computing devices that may serve and/or generate network resources (e.g., web pages, images, word processing documents, PDF files, movie files, music files, or other computer files). Cloud-based server 130 may also be an edge server to the server that serves and/or generates network resources. Although not illustrated in FIG. 1, it should be understood that the network resources of cloud-based server 130 may be stored separately from the device that responds to the requests.


Examples of customer device 107 include computing devices (e.g., laptops, desktops, workstations, smartphones, palm tops, mobile phones, tablets, gaming systems, set top boxes, wearable devices, internet-of-things (IoT) devices, electronic devices, etc.) that are capable of managing resources associated with the customer, including through the creation of customer access policies for such resources. In one embodiment, the configuration server 140 receives configuration data from the customer device 107. In one embodiment, the configuration server 140 allows a user of the customer device 107 to provide the configuration data to configure settings and parameters for access policies that apply to resources hosted by the cloud-based server 130.



FIG. 2 illustrates a sequence diagram including operations performed by a proxy server enforcing customer access policies on requests for resources according to an embodiment.


At operation 2.1, client device 105 makes a request to access a resource that is received at proxy server 120. For example, the request can be made by a client network application (e.g., client network application 110) operating on the client device 105. The request can be generated in response to a user selecting a link or URL (e.g., in a browser application). For example, proxy server 120 receives an HTTP “GET” request to access a resource hosted by cloud-based server 130. In one embodiment, the requested resource is a web page (e.g., an HTML page) located at, e.g., www.example.com/index.html. The request may include a request for an action to be performed on the resource. The request may include credentials for accessing the resource, including a user name, an email address, etc.


At operation 2.2, the proxy server 120 modifies the request by inserting a tenant control header. In some embodiments, the proxy server includes a tenant control module 122 that is configured to generate the tenant control header that is inserted into, or appended to, the request from the client device 105. In one embodiment, the tenant control module 122 accesses a customer access policies database 124 using an identifier of the resource requested (e.g., an application name, etc.) to retrieve associated policies defined by a customer.


In some embodiments, a customer access policy for a resource may indicate that permitted requests should include a specific tenant identifier. An example tenant identifier is a domain associated with the customer. For example, when a customer access policy for a resource indicates that credentials in the request should include the tenant identifier “company.com,” the tenant control module 122 generates a tenant control header that includes the domain “company.com.”


At operation 2.3, after modifying the request to include the tenant control header, the proxy server 120 sends the modified request to the cloud-based server 130 hosting the resource. The cloud-based server 130 is configured to decrypt the request and identify account credentials in the request. For example, the cloud-based server 130 identifies a username or email address in the request. The cloud-based server 130 is further configured to extract the tenant identifier from the tenant control header. The cloud-based server 130 then compares the domain of the account credentials with the domain indicated by the tenant identifier from the tenant control header.


At operation 2.4, when the domain of the account credentials and the domain indicated by the tenant identifier from the tenant control header do not match, the cloud-based server 130 determines that the account credentials in the request are not permitted access to the resource. For example, if the tenant identifier from the tenant control header indicates that credentials with the domain “company.com” are permitted and the account credentials in request have the domain “email.com,” the cloud-based server rejects the request.


At operation 2.5, in response to determining that the domain in the account credentials do not match the domain from the tenant control header, the cloud-based server 130 sends a response indicating the rejection of the request to the proxy server 120. In some embodiments, the response can include an HTTP status response, such as a “4xx client error” response indicating that the request cannot be fulfilled. Example responses can include a “401 Unauthorized” or a “403 Forbidden” HTTP client error code.


In some embodiments, the response from the cloud-based server 130 can be a webpage. In such embodiments, the proxy server 120 can be configured to analyze the content of the webpage to determine whether the request failed. For example, the proxy server 120 can identify keywords or phrases from the content of the webpage (e.g., an error code).


In some embodiments, the proxy server 120 can fingerprint known success responses, e.g., via status codes, keywords/phrases, expected redirects, etc. In such embodiments, when the proxy server 120 receives the response from the cloud-based server 130, the proxy server 120 can compare the response to the fingerprinted known success responses. When the response from the cloud-based server 130 differs from the known success responses, the proxy server 120 can identify the response as indicating that the request failed.


At operation 2.6, the proxy server 120 removes the tenant control header from the modified request. Upon receipt of the rejection response, the proxy server 120 recognizes the rejection of the request with the tenant control header as indicating that the request included credentials with a domain other than a permitted domain. Instead of blocking, or dropping, the request, however, the proxy server 120 is configured to remove the tenant control header from the modified request. In some embodiments, the proxy server 120 can retrieve the original request that was stored without the tenant control header (e.g., from storage).


In another embodiment, the proxy server 120 can generate a failure notification message and transmit the failure notification message back to the client device 105 that initiated the request to access the resource (in operation 2.1). In such embodiments, the failure notification message can be an indication to the client device to retransmit the request to access the resource to the proxy server 120.


In some embodiments, the failure notification message include a rate-limit status code (e.g., “429 Too Many Requests.”) or include a “retry-after” HTTP header. In some embodiments, the proxy server 120 can return a client-specific response. For example, the response back to the client device 105 can include a 429 error code or a retry-after HTTP header based on client support. In some embodiments, the proxy server 120 can fingerprint and identify the client device 105 to determine which method(s) are supported by the client device 105. In situations where the client device 105 does not support either a rate-limit status code or a “retry-after” HTTP header, the proxy server 120 can retransmit the request on behalf of the client device 105 (e.g., by retrieving a stored copy of the original request).


At operation 2.7, after retrieving the original request, receiving a retransmitted request, or modifying the request to remove the tenant control header, the proxy server 120 resends the request, or forwards as-is the retransmitted request, without the tenant control header to the cloud-based server 130.


At operation 2.8, the proxy server 120 logs the request received from the client device 105 as using a non-permitted tenant identifier. The rejection of the modified request with the tenant control header is an indication that the initial request from the client device 105 did not have account credentials matching the tenant identifier indicated in the tenant control header. In embodiments, the proxy server 120 can generate and store the log entry in a database (e.g., access logs database 126) prior to, simultaneously with, or subsequent to sending the request without the tenant control header to the cloud-based server 130.


At operation 2.9, the cloud-based server 130 decrypts the received request without the tenant control header and accepts the request to access the resource. At operation 2.10, in response to accepting the request to access the resource, the cloud-based server 130 sends a response with the requested resource to the proxy server 120. For example, the cloud-based server 130 can retrieve the requested resource and/or grant access to the requested resource. The cloud-based server 130 can then generate a response with the resource and send the response to the proxy server 120. At operation 2.11, the proxy server 120 can send the response with the resource to the client device 105.



FIG. 3 illustrates a sequence diagram including operations performed by a proxy server enforcing customer access policies on requests for resources according to an embodiment.


At operation 3.1, client device 105 makes a request to access a resource that is received at proxy server 120. For example, the request can be made by a client network application (e.g., client network application 110) operating on the client device 105. The request can be generated in response to a user selecting a link or URL (e.g., in a browser application). For example, proxy server 120 receives an HTTP “GET” request to access a resource hosted by cloud-based server 130. In one embodiment, the requested resource is a web page (e.g., an HTML page) located at, e.g., www.example.com/index.html. The request may include a request for an action to be performed on the resource. The request may include credentials for accessing the resource, including a user name, an email address, etc.


At operation 3.2, the proxy server 120 modifies the request by inserting a tenant control header. In some embodiments, the proxy server includes a tenant control module 122 that is configured to generate the tenant control header that is inserted into, or appended to, the request from the client device 105. In one embodiment, the tenant control module 122 accesses a customer access policies database 124 using an identifier of the resource requested (e.g., an application name, etc.) to retrieve associated policies defined by a customer.


In some embodiments, a customer access policy for a resource may indicate that permitted requests should include a specific tenant identifier. An example tenant identifier is a domain associated with the customer. For example, when a customer access policy for a resource indicates that credentials in the request should include the tenant identifier “company.com,” the tenant control module 122 generates a tenant control header that includes the domain “company.com.”


At operation 3.3, after modifying the request to include the tenant control header, the proxy server 120 sends the modified request to the cloud-based server 130 hosting the resource. The cloud-based server 130 is configured to decrypt the request and identify account credentials in the request. For example, the cloud-based server 130 identifies a username or email address in the request. The cloud-based server 130 is further configured to extract the tenant identifier from the tenant control header. The cloud-based server 130 then compares the domain of the account credentials with the domain indicated by the tenant identifier from the tenant control header.


At operation 3.4, when the domain of the account credentials and the domain indicated by the tenant identifier from the tenant control header match, the cloud-based server 130 determines that the account credentials in the request are permitted access to the resource. For example, if the tenant identifier from the tenant control header indicates that credentials with the domain “company.com” are permitted and the account credentials in request have the domain “company.com,” the cloud-based server accepts or approves the request for the resource.


At operation 3.5, in response to determining that the domain in the account credentials matches the domain from the tenant control header, the cloud-based server 130 sends a response with the requested resource to the proxy server 120. For example, the cloud-based server 130 can retrieve the requested resource and/or grant access to the requested resource. The cloud-based server 130 can then generate a response with the resource and send the response to the proxy server 120.


At operation 3.6, the proxy server 120 logs the access request received from the client device 105 as using a permitted tenant identifier. The acceptance of the modified request with the tenant control header, as shown by the cloud-based server 130 sending the response with the resource, is an indication that the initial request from the client device 105 used account credentials matching the tenant identifier indicated in the tenant control header. In embodiments, the proxy server 120 can generate and store the log entry in a database (e.g., access logs database 126) prior to, simultaneously with, or subsequent to sending the response with the resource to the client device. At operation 3.7, the proxy server 120 can send the response with the resource to the client device 105.



FIG. 4 is a flow diagram that illustrates exemplary operations for enforcing access policies on requests to access resources by a proxy server according to an embodiment. The operations of FIG. 4 will be described with reference to the exemplary embodiment of FIG. 1. However, it should be understood that the operations of FIG. 4 can be performed by embodiments of the invention other than those discussed with reference to FIG. 1, and the embodiments discussed with reference to FIG. 1 can perform operations different than those discussed with reference to FIG. 4. The operations of FIG. 4 are described as being performed by a proxy server (e.g., proxy server 120).


In operation 405, a proxy server receives a first request from a first user to access a resource hosted by a cloud-based server. For example, the request can be made by the first user using a client network application operating on a client device. The request can be generated in response to a user selecting a link or URL (e.g., in a browser application). For example, the proxy server can receive an HTTP “GET” request to access a resource hosted by the cloud-based server. In one embodiment, the requested resource is a web page (e.g., an HTML page) located at, e.g., www.example.com/index.html. The request may include a request for an action to be performed on the resource. The request may include user credentials for accessing the resource, including a user name, an email address, etc.


In operation 410, the proxy server inserts a first tenant control header into the first request, the first tenant control header specifying a tenant identifier, the tenant identifier indicating a tenant permitted to access the resource. In some embodiments, the proxy server accesses a customer access policies database to retrieve a customer access policy associated with the resource. The proxy server then identifies a tenant identifier from the customer access policy. In one embodiment, the tenant identifier identifies a tenant that is permitted to access the resource. In such embodiments, the tenant identifier can be a domain (e.g., “example.com”) or a directory identifier value. For example, the tenant identifier can be a domain associated with an organization or corporate system indicating that account credentials with the domain of the organization are allowed to access the resource. The proxy server generates the first tenant control header with the tenant identifier. The proxy server then inserts or appends the tenant control header to the first request.


In operation 415, the proxy server transmits the first request with the inserted first tenant control header to the cloud-based server. The cloud-based server is configured to decrypt the first request. The cloud-based server can extract or identify account credentials from the first request and compare the account credentials to the tenant identifier in the tenant control header of the first request. The cloud-based server may then accept or reject the first request based on the comparison. When the tenant identifier indicated by the account credentials in the first request does not match the tenant identifier in the tenant control header, the cloud-based server may reject the request.


In operation 420, the proxy server receives a first response indicating a rejection of the first request with the inserted first tenant control header. The rejection by the cloud-based server can be an indication to the proxy server that the first request used account credentials that did not match the tenant identifier from the customer access policy associated with the resource. This can be an indication that the account credentials were from a personal account (e.g., “email.com”) instead of from the tenant indicated by the tenant identifier (e.g., “company.com”).


In some embodiments, the rejection is indicated by the inclusion of an HTTP client error code in the first response. Examples of HTTP client error codes can include a “401 Unauthorized” or a “403 Forbidden” HTTP client error code. In other embodiments, the response from the cloud-based server can be a webpage. In such embodiments, the proxy server can be configured to analyze the content of the webpage to determine whether the request failed. For example, the proxy server can identify keywords or phrases from the content of the webpage (e.g., an error code) to determine whether the first request failed. In some embodiments, the proxy server can fingerprint known success responses, e.g., via status codes, keywords/phrases, expected redirects, etc. In such embodiments, the response can be compared with fingerprinted known success responses. When the response from the cloud-based server differs from the known success responses, the proxy server can identify the response as indicating that the request failed.


The failure notification message can include a rate-limit status code (e.g., “429 Too Many Requests.”) or include a “retry-after” HTTP header. In some embodiments, the proxy server 120 can return a client-specific response. For example, the response back to the client device 105 can include a 429 error code or a retry-after HTTP header based on client support. In some embodiments, the proxy server 120 can fingerprint and identify the client device 105 to determine which method(s) are supported by the client device 105. In situations where the client device 105 does not support either a rate-limit status code or a “retry-after” HTTP header, the proxy server 120 can retransmit the request on behalf of the client device 105 (e.g., by retrieving a stored copy of the original request).


In operation 425, the proxy server, responsive to receiving the first response, transmits the first request again to the cloud-based server but without the first tenant control header. In one embodiment, the proxy server removes the tenant control header that was inserted in the first request in operation 415. In other embodiments, the proxy server retrieves an original copy of the first request for retransmission to the cloud-based server. In other embodiments, where the proxy server does not store a copy of the first request, the proxy server sends a failure notification to the client device that initiated the first request. In some embodiments, the failure notification message includes a rate-limit status code (e.g., “429 Too Many Requests.”) or include a “retry-after” HTTP header. In some embodiments, the proxy server can fingerprint and identify the client device to determine which method(s) are supported by the client device, and then configure a failure notification message accordingly. For example, the failure notification message can be configured to include the rate-limit status code or the “retry-after” HTTP header based on the capabilities of the client device. In such embodiments, the client device can retransmit the request to the proxy server, and the proxy server can retransmit the request to the cloud-based server. Where the client device does not support either a rate-limit status code or a “retry-after” HTTP header, the proxy server can retransmit the request on behalf of the client device (e.g., by retrieving a stored copy of the original request).


In operation 430, the proxy server logs the first request as an access request using a non-permitted tenant identifier. In response to receiving the rejection of the first request with the tenant control header, the proxy server can log the first request as being from an unsanctioned account.


In one embodiment, when the tenant identifier indicated by the account credentials in a request (e.g., a second request) matches the tenant identifier in the tenant control header inserted or appended to the second request, the cloud-based server may accept the request. In such embodiments, responsive to accepting the request, the cloud-based server can send a second response to the proxy server. The second response can include the requested resource and can be proxied to a requesting client device via the proxy server. In such embodiments, the proxy server further logs the second request in an access logs database as a request that used a permitted tenant identifier.



FIG. 5 illustrates a block diagram for an exemplary data processing system 500 that may be used in some embodiments. One or more such data processing systems 500 may be used to implement the embodiments and operations described with respect to the data centers, origin server, control server, or other electronic devices. The data processing system 500 is an electronic device that stores and transmits (internally and/or with other electronic devices over a network) code (which is composed of software instructions and which is sometimes referred to as computer program code or a computer program) and/or data using machine-readable media (also called computer-readable media), such as machine-readable storage media 510 (e.g., magnetic disks, optical disks, read only memory (ROM), flash memory devices, phase change memory) and machine-readable transmission media (also called a carrier) (e.g., electrical, optical, radio, acoustical or other form of propagated signals—such as carrier waves, infrared signals), which is coupled to the processing system 520 (e.g., one or more processors and connected system components such as multiple connected chips). For example, the depicted machine-readable storage media 510 may store program code 530 that, when executed by the processing system 520, causes the data processing system 500 to perform any of the operations described herein.


The data processing system 500 also includes one or more network interfaces 540 (e.g., a wired and/or wireless interfaces) that allows the data processing system 500 to transmit data and receive data from other computing devices, typically across one or more networks (e.g., Local Area Networks (LANs), the Internet, etc.). The data processing system 500 may also include one or more input or output (“I/O”) components 550 such as a mouse, keypad, keyboard, a touch panel or a multi-touch input panel, camera, frame grabber, optical scanner, an audio input/output subsystem (which may include a microphone and/or a speaker), other known I/O devices or a combination of such I/O devices.


Additional components, not shown, may also be part of the data processing system 500, and, in certain embodiments, fewer components than that shown in FIG. 5 may also be used in a data processing system 500. One or more buses may be used to interconnect the various components shown in FIG. 5.


Thus, an electronic device (e.g., a computer or a mobile client device) includes hardware and software, such as a set of one or more processors coupled to one or more machine-readable storage media to store code for execution on the set of processors and/or to store data. For instance, an electronic device may include non-volatile memory containing the code since the non-volatile memory can persist the code even when the electronic device is turned off, and while the electronic device is turned on that part of the code that is to be executed by the processor(s) of that electronic device is copied from the slower non-volatile memory into volatile memory (e.g., dynamic random access memory (DRAM), static random access memory (SRAM)) of that electronic device. Typical electronic devices also include a set or one or more physical network interface(s) to establish network connections (to transmit and/or receive code and/or data using propagating signals) with other electronic devices. One or more parts of an embodiment of the invention may be implemented using different combinations of software, firmware, and/or hardware.


The techniques shown in the figures can be implemented using code and data stored and executed on one or more computing devices (e.g., client devices, servers, etc.). Such computing devices store and communicate (internally and/or with other computing devices over a network) code and data using machine-readable media, such as machine-readable storage media (e.g., magnetic disks; optical disks; random access memory; read only memory; flash memory devices; phase-change memory) and machine-readable communication media (e.g., electrical, optical, acoustical or other form of propagated signals—such as carrier waves, infrared signals, digital signals, etc.). In addition, such computing devices typically include a set of one or more processors coupled to one or more other components, such as one or more storage devices, user input/output devices (e.g., a keyboard, a touchscreen, and/or a display), and network connections. The coupling of the set of processors and other components is typically through one or more busses and bridges (also termed as bus controllers). The storage device and signals carrying the network traffic respectively represent one or more machine-readable storage media and machine-readable communication media. Thus, the storage device of a given computing device typically stores code and/or data for execution on the set of one or more processors of that computing device. Of course, one or more parts of an embodiment of the invention may be implemented using different combinations of software, firmware, and/or hardware.


In the preceding description, numerous specific details are set forth. However, it is understood that embodiments of the invention may be practiced without these specific details. In other instances, well-known circuits, structures and techniques have not been shown in detail in order not to obscure the understanding of this description. Those of ordinary skill in the art, with the included descriptions, will be able to implement appropriate functionality without undue experimentation.


References in the specification to “one embodiment,” “an embodiment,” “an example embodiment,” etc., indicate that the embodiment described may include a particular feature, structure, or characteristic, but every embodiment may not necessarily include the particular feature, structure, or characteristic. Moreover, such phrases are not necessarily referring to the same embodiment. Further, when a particular feature, structure, or characteristic is described in connection with an embodiment, it is submitted that it is within the knowledge of one skilled in the art to effect such feature, structure, or characteristic in connection with other embodiments whether or not explicitly described.


In the preceding description and the claims, the terms “coupled” and “connected,” along with their derivatives, may be used. It should be understood that these terms are not intended as synonyms for each other. “Coupled” is used to indicate that two or more elements, which may or may not be in direct physical or electrical contact with each other, co-operate or interact with each other. “Connected” is used to indicate the establishment of communication between two or more elements that are coupled with each other.


While the flow diagrams in the figures show a particular order of operations performed by certain embodiments of the invention, it should be understood that such order is exemplary (e.g., alternative embodiments may perform the operations in a different order, combine certain operations, overlap certain operations, etc.).


While the invention has been described in terms of several embodiments, those skilled in the art will recognize that the invention is not limited to the embodiments described, can be practiced with modification and alteration within the spirit and scope of the appended claims. The description is thus to be regarded as illustrative instead of limiting.

Claims
  • 1. A computer-implemented method comprising: receiving, by a proxy server, a first request from a first user to access a resource hosted by a cloud-based server;inserting a first tenant control header into the first request, the first tenant control header specifying a tenant identifier, the tenant identifier indicating a tenant permitted to access the resource;transmitting the first request with the inserted first tenant control header to the cloud-based server;receiving a first response indicating a rejection of the first request with the inserted first tenant control header, the first response including an HTTP client error code;responsive to receiving the first response indicating the rejection of the first request with the inserted first tenant control header, removing the first tenant control header from the first request;transmitting the first request again to the cloud-based server but without the first tenant control header; andlogging the first request as an access request using a non-permitted tenant identifier.
  • 2. The computer-implemented method of claim 1, further comprising: receiving, by the proxy server, a second request from a second user to access the resource hosted by the cloud-based server;inserting a second tenant control header into the second request, the second tenant control header specifying the tenant identifier;transmitting the second request with the inserted second tenant control header to the cloud-based server;receiving a second response indicating an acceptance of the second request with the inserted second tenant control header; andlogging the second request as an access request using a permitted tenant identifier.
  • 3. The computer-implemented method of claim 1, wherein the rejection of the first request with the inserted first tenant control header indicates a tenant identifier in the first request did not match the tenant identifier in the first tenant control header.
  • 4. The computer-implemented method of claim 1, further comprising: receiving, from a customer device, configuration data including parameters for access policies for resources, the parameters including the tenant identifier indicating the tenant permitted to access the resource;generating a customer access policy for the resource based on the received configuration data; andstoring the customer access policy in a policies database.
  • 5. The computer-implemented method of claim 4, wherein inserting the first tenant control header into the first request comprises: retrieving the customer access policy from the policies database;identifying the tenant identifier from the customer access policy; andgenerating the first tenant control header with the tenant identifier.
  • 6. The computer-implemented method of claim 1, wherein the tenant identifier is one of a domain and a directory identifier value.
  • 7. A non-transitory machine-readable storage medium that provides instructions that, if executed by a processor, will cause said processor to perform operations comprising, comprising: receiving, by a proxy server, a first request from a first user to access a resource hosted by a cloud-based server;inserting a first tenant control header into the first request, the first tenant control header specifying a tenant identifier, the tenant identifier indicating a tenant permitted to access the resource;transmitting the first request with the inserted first tenant control header to the cloud-based server;receiving a first response indicating a rejection of the first request with the inserted first tenant control header, the first response including an HTTP client error code;responsive to receiving the first response indicating the rejection of the first request with the inserted first tenant control header, removing the first tenant control header from the first request;transmitting the first request again to the cloud-based server but without the first tenant control header; andlogging the first request as an access request using a non-permitted tenant identifier.
  • 8. The non-transitory machine-readable storage medium of claim 7, wherein the operations further comprise: receiving, by the proxy server, a second request from a second user to access the resource hosted by the cloud-based server;inserting a second tenant control header into the second request, the second tenant control header specifying the tenant identifier;transmitting the second request with the inserted second tenant control header to the cloud-based server;receiving a second response indicating an acceptance of the second request with the inserted second tenant control header; andlogging the second request as an access request using a permitted tenant identifier.
  • 9. The non-transitory machine-readable storage medium of claim 7, wherein the rejection of the first request with the inserted first tenant control header indicates a tenant identifier in the first request did not match the tenant identifier in the first tenant control header.
  • 10. The non-transitory machine-readable storage medium of claim 7, wherein the operations further comprise: receiving, from a customer device, configuration data including parameters for access policies for resources, the parameters including the tenant identifier indicating the tenant permitted to access the resource;generating a customer access policy for the resource based on the received configuration data; andstoring the customer access policy in a policies database.
  • 11. The non-transitory machine-readable storage medium of claim 10, wherein inserting the first tenant control header into the first request comprises: retrieving the customer access policy from the policies database;identifying the tenant identifier from the customer access policy; andgenerating the first tenant control header with the tenant identifier.
  • 12. The non-transitory machine-readable storage medium of claim 7, wherein the tenant identifier is one of a domain and a directory identifier value.
  • 13. A server, comprising: a processor; anda non-transitory machine-readable storage medium that provides instructions that, if executed by the processor, will cause the server to perform operations including: receiving a first request from a first user to access a resource hosted by a cloud-based server;inserting a first tenant control header into the first request, the first tenant control header specifying a tenant identifier, the tenant identifier indicating a tenant permitted to access the resource;transmitting the first request with the inserted first tenant control header to the cloud-based server;receiving a first response indicating a rejection of the first request with the inserted first tenant control header, the first response including an HTTP client error code;responsive to receiving the first response indicating the rejection of the first request with the inserted first tenant control header, removing the first tenant control header from the first request;transmitting the first request again to the cloud-based server but without the first tenant control header; andlogging the first request as an access request using a non-permitted tenant identifier.
  • 14. The server of claim 13, wherein the operations further comprise: receiving a second request from a second user to access the resource hosted by the cloud-based server;inserting a second tenant control header into the second request, the second tenant control header specifying the tenant identifier;transmitting the second request with the inserted second tenant control header to the cloud-based server;receiving a second response indicating an acceptance of the second request with the inserted second tenant control header; andlogging the second request as an access request using a permitted tenant identifier.
  • 15. The server of claim 13, wherein the rejection of the first request with the inserted first tenant control header indicates a tenant identifier in the first request did not match the tenant identifier in the first tenant control header.
  • 16. The server of claim 13, wherein the operations further comprise: receiving, from a customer device, configuration data including parameters for access policies for resources, the parameters including the tenant identifier indicating the tenant permitted to access the resource;generating a customer access policy for the resource based on the received configuration data; andstoring the customer access policy in a policies database.
  • 17. The server of claim 16, wherein inserting the first tenant control header into the first request comprises: retrieving the customer access policy from the policies database;identifying the tenant identifier from the customer access policy; andgenerating the first tenant control header with the tenant identifier.
  • 18. The server of claim 13, wherein the tenant identifier is one of a domain and a directory identifier value.
US Referenced Citations (215)
Number Name Date Kind
8156246 Short Apr 2012 B2
8266269 Short Sep 2012 B2
9038108 McCausland May 2015 B2
9038151 Chua May 2015 B1
9229800 Jain Jan 2016 B2
9471775 Wagner Oct 2016 B1
9509776 Chou Nov 2016 B2
9514327 Ford Dec 2016 B2
9553860 Meyer Jan 2017 B2
9774495 Okita Sep 2017 B1
9858559 Raleigh Jan 2018 B2
9880933 Gupta Jan 2018 B1
9900317 Cantrill Feb 2018 B2
9961011 Mordani May 2018 B2
10057775 Raleigh Aug 2018 B2
10165447 Raleigh Dec 2018 B2
10205701 Voss Feb 2019 B1
10305861 Moysi May 2019 B2
10333959 Katrekar Jun 2019 B2
10348767 Lee Jul 2019 B1
10367748 Short Jul 2019 B2
10425386 Wardell Sep 2019 B2
10425443 Ronen Sep 2019 B2
10630771 Garza Apr 2020 B1
10708379 Gupta Jul 2020 B1
10728342 Lieberman Jul 2020 B1
10749943 Feiguine Aug 2020 B1
10776441 Echeverria Sep 2020 B1
10798100 Chu Oct 2020 B1
10868836 Yancey Dec 2020 B1
10909088 Colrain Feb 2021 B2
11146569 Brooker Oct 2021 B1
11153190 Mahajan Oct 2021 B1
11184403 Wu Nov 2021 B1
11196551 Weldemariam Dec 2021 B2
11269808 Yuan Mar 2022 B1
11269939 Sammer Mar 2022 B1
11271972 Ravi Mar 2022 B1
11271973 Ravi Mar 2022 B1
11303647 Wu Apr 2022 B1
11334388 Jakobsson May 2022 B2
11372654 Battle Jun 2022 B1
11381537 Freed Jul 2022 B1
11416628 Miller Aug 2022 B2
11423111 Vaishnavi Aug 2022 B2
11431697 Parekh Aug 2022 B2
11502908 Singh Nov 2022 B1
11593270 Brooker Feb 2023 B1
11611497 Manikanta Mar 2023 B1
11632360 Tan Apr 2023 B1
11726846 Bhatia Aug 2023 B2
11736585 Perng Aug 2023 B2
11792284 Nanduri Oct 2023 B1
11816073 Chakrabarti Nov 2023 B1
11831516 Li Nov 2023 B2
11895192 Mehta Feb 2024 B1
11909750 Morris Feb 2024 B1
20030065805 Barnes, Jr. Apr 2003 A1
20030163692 Kleinsteiber Aug 2003 A1
20030163727 Hammons Aug 2003 A1
20090037492 Baitalmal Feb 2009 A1
20100103837 Jungck Apr 2010 A1
20100198730 Ahmed Aug 2010 A1
20100250497 Redlich Sep 2010 A1
20100333116 Prahlad Dec 2010 A1
20110225506 Casalaina Sep 2011 A1
20130058346 Sridharan Mar 2013 A1
20130204849 Chacko Aug 2013 A1
20130322446 Biswas Dec 2013 A1
20140020068 Desai Jan 2014 A1
20140068705 Chambers Mar 2014 A1
20140108474 David Apr 2014 A1
20140181285 Stevens Jun 2014 A1
20140189069 Gero Jul 2014 A1
20140192804 Ghanwani Jul 2014 A1
20150081863 Garg Mar 2015 A1
20150163206 McCarthy Jun 2015 A1
20150195178 Bhattacharya Jul 2015 A1
20150207758 Mordani Jul 2015 A1
20150229645 Keith Aug 2015 A1
20150310188 Ford Oct 2015 A1
20150365370 Gvildys Dec 2015 A1
20150373097 Konkus Dec 2015 A1
20160092339 Straub Mar 2016 A1
20160127454 Maheshwari May 2016 A1
20170006135 Siebel Jan 2017 A1
20170012872 Chao Jan 2017 A1
20170041296 Ford Feb 2017 A1
20170048319 Straub Feb 2017 A1
20170078248 Bian Mar 2017 A1
20170126549 Paramasivam May 2017 A1
20170195217 Parasmal Jul 2017 A1
20170195237 Parasmal Jul 2017 A1
20170331791 Wardell Nov 2017 A1
20170331832 Lander Nov 2017 A1
20170339148 Syomichev Nov 2017 A1
20170339247 Tiwari Nov 2017 A1
20170364702 Goldfarb Dec 2017 A1
20180041598 Vats Feb 2018 A1
20180063089 Moysi Mar 2018 A1
20180063143 Wilson Mar 2018 A1
20180077144 Gangawane Mar 2018 A1
20180081983 Carru Mar 2018 A1
20180083915 Medam Mar 2018 A1
20180083944 Vats Mar 2018 A1
20180083977 Murugesan Mar 2018 A1
20180109498 Singh Apr 2018 A1
20180159856 Gujarathi Jun 2018 A1
20180176301 Rosier Jun 2018 A1
20180288063 Koottayi Oct 2018 A1
20180322136 Carpentier Nov 2018 A1
20180367363 Jaeger Dec 2018 A1
20180367396 Kompella Dec 2018 A1
20180367541 Ponnuswamy Dec 2018 A1
20180375828 Rawat Dec 2018 A1
20190058709 Kempf Feb 2019 A1
20190075438 Kuo Mar 2019 A1
20190095491 Bhattacharjee Mar 2019 A1
20190098106 Mungel Mar 2019 A1
20190102162 Pitre Apr 2019 A1
20190103991 Cidon Apr 2019 A1
20190103993 Cidon Apr 2019 A1
20190104035 Cidon Apr 2019 A1
20190104111 Cidon Apr 2019 A1
20190104413 Cidon Apr 2019 A1
20190116153 Deverakonda Venkata Apr 2019 A1
20190138638 Pal May 2019 A1
20190147092 Pal May 2019 A1
20190158605 Markuze May 2019 A1
20190182213 Saavedra Jun 2019 A1
20190268421 Markuze Aug 2019 A1
20190306010 Medam Oct 2019 A1
20190306111 Tang Oct 2019 A1
20190306138 Carru Oct 2019 A1
20190312857 Lander Oct 2019 A1
20190318122 Hockey Oct 2019 A1
20190349426 Smith Nov 2019 A1
20190373083 Nucci Dec 2019 A1
20200007583 Dixit Jan 2020 A1
20200014763 Boon Jan 2020 A1
20200053129 Neystadt Feb 2020 A1
20200097583 Fanghaenel Mar 2020 A1
20200133955 Padmanabhan Apr 2020 A1
20200137065 Tubbs Apr 2020 A1
20200186501 Neystadt Jun 2020 A1
20200201935 Filipovic Jun 2020 A1
20200204551 Singh Jun 2020 A1
20200236187 Tal Jul 2020 A1
20200250295 Padmanabhan Aug 2020 A1
20200250683 Padmanabhan Aug 2020 A1
20200252404 Padmanabhan Aug 2020 A1
20200252406 Padmanabhan Aug 2020 A1
20200257700 Xu Aug 2020 A1
20200272670 Vaishnavi Aug 2020 A1
20200274782 Balaiah Aug 2020 A1
20200304502 Jafari Sep 2020 A1
20200336484 Mahajan Oct 2020 A1
20200344233 Lai Oct 2020 A1
20200374106 Padmanabhan Nov 2020 A1
20200394332 Jakobsson Dec 2020 A1
20200403994 Bitterfeld Dec 2020 A1
20200404059 Feiguine Dec 2020 A1
20210067461 Cidon Mar 2021 A1
20210067468 Cidon Mar 2021 A1
20210075815 dos Santos Silva Mar 2021 A1
20210081947 Hockey Mar 2021 A1
20210105275 Bansal Apr 2021 A1
20210168142 Foxhoven Jun 2021 A1
20210176326 Carley Jun 2021 A1
20210182423 Padmanabhan Jun 2021 A1
20210234860 Bansal Jul 2021 A1
20210286861 Churchill Sep 2021 A1
20210306436 Magerramov Sep 2021 A1
20210336934 Deshmukh Oct 2021 A1
20210367944 Gupta Nov 2021 A1
20210377210 Singh Dec 2021 A1
20210409336 Talur Dec 2021 A1
20220019367 Freilich Jan 2022 A1
20220027431 Zheng Jan 2022 A1
20220029929 Jain Jan 2022 A1
20220094741 Kothandaraman Mar 2022 A1
20220141192 Silveira May 2022 A1
20220141308 Saha May 2022 A1
20220174491 Cristache Jun 2022 A1
20220210063 Brar Jun 2022 A1
20220224703 Devarajan Jul 2022 A1
20220247657 Kamath Aug 2022 A1
20220266451 Cristache Aug 2022 A1
20220286494 Zheng Sep 2022 A1
20220321566 Coyle Oct 2022 A1
20220321567 Klosterman Oct 2022 A1
20220341217 Cristache Oct 2022 A1
20220353339 Singh Nov 2022 A1
20220385656 Gujarathi Dec 2022 A1
20220393943 Pangeni Dec 2022 A1
20230015603 Smith Jan 2023 A1
20230019448 Deshmukh Jan 2023 A1
20230020330 Schwerin Jan 2023 A1
20230031855 Busbee Feb 2023 A1
20230075355 Twigg Mar 2023 A1
20230079238 Cristache Mar 2023 A1
20230112401 Cristache Apr 2023 A1
20230169529 Mukhitov Jun 2023 A1
20230186870 Cristache Jun 2023 A1
20230206329 Cella Jun 2023 A1
20230208943 VanAntwerp Jun 2023 A1
20230231884 Deshmukh Jul 2023 A1
20230239234 Zohar Jul 2023 A1
20230247003 Chanak Aug 2023 A1
20230262030 Bansal Aug 2023 A1
20230269137 Fehring Aug 2023 A1
20230281527 Cella Sep 2023 A1
20230319054 Hendrey Oct 2023 A1
20230328086 Kapoor Oct 2023 A1
20240080329 Reed Mar 2024 A1
Non-Patent Literature Citations (5)
Entry
Cao et al “LogStore: A Cloud-Native and Multi-Tenant Log Database,” Industrial Track Paper, SIGMOD'21, Jun. 20-25, 2021, Virtual Event, China, pp. 2464-2476 (Year: 2021).
Koponen et al “Network Virtualization in Multi-Tenant Datacenters,” 11th USENIX Symposium on Networked Systems Design and Implementation, pp. 203-216, (Year: 2014).
Chen et al “Collaborative Network Security in Multi-Tenant Data Center for Cloud Computing,” Tsinghua Science and Technology, pp. 82-94 (Year: 2014).
Factor et al “Secure Logical Isolation for Multi-Tenancy in Cloud Storage,” IEEE, pp. 1-5 (Year: 2013).
Sadeh et al “SignedQuery: Protecting Users Data in Multi-tenant SaaS Environments,” IEEE, pp. 213-218, (Year: 2013).