From data processing and engineering to education and entertainment, computing devices have found a wide variety of applications in modern homes, schools and workplaces. Many such computing devices include processors capable of executing instructions (e.g., instructions corresponding to elements of a computer programming language), and much of the functionality of a computing device may be controlled by a set of executable instructions and, optionally, a set of configuration data (e.g., by a computer program). Development of a computer program for a particular application and/or set of functionality can require a significant investment of time and resources. For example, years of effort by teams of dozens of people is not uncommon. However, executable instructions and configuration data can have a digital representation (e.g., an application “executable” or “binary”) that is easily copied, and illegal and/or uncompensated use of enabled functionality (e.g., application “piracy”) is a significant problem.
Several conventional “rights management” schemes (e.g., “copy-protection” schemes) attempt to address such illegal and/or uncompensated use. For example, some conventional rights management schemes involve cryptographic keys that unlock corresponding sets of application functionality. Some conventional rights management schemes involve authentication and/or periodic re-authentication with a remote server (e.g., remote in a communication network). Some conventional rights management schemes involve checking for the local presence of a physical computing device component (e.g., a “dongle”). However, conventional rights management schemes have disadvantages.
For example, the copy enabling the illegal and/or uncompensated use of application functionality may control and/or be installed on computing device hardware to which the user has physical access. Even where portions of executable instructions and/or configuration data begin encrypted and/or locked, such physical access can enable the user to obtain corresponding decrypted and/or unlocked portions, or otherwise circumvent the need to obtain a legitimate key. Such physical access may also enable the user to emulate, or otherwise circumvent the need for, a remote authentication server and/or a local dongle. Remote access to low-level computing device functionality (e.g., operating system-level functionality) and/or access to low-level functionality of a communication network connected to the computing device (e.g., access to in-transit data packet “sniffing”) can similarly enable a user intent on illegal and/or uncompensated use of application functionality.
Various embodiments in accordance with the present disclosure will be described with reference to the drawings, in which:
Same numbers are used throughout the disclosure and figures to reference like components and features, but such repetition of number is for purposes of simplicity of explanation and understanding, and should not be viewed as a limitation on the various embodiments.
In the following description, various embodiments will be described. For purposes of explanation, specific configurations and details are set forth in order to provide a thorough understanding of the embodiments. However, it will also be apparent to one skilled in the art that the embodiments may be practiced without the specific details. Furthermore, well-known features may be omitted or simplified in order not to obscure the embodiment being described.
In at least one embodiment, illegal, unauthorized, uncompensated and/or under-compensated utilization of computing application functionality may be mitigated at least in part by controlling access to executable instructions that implement the computing application functionality. The executable instructions may be executed by a set of one or more virtual computing machines (“virtual machines”) provisioned by a multi-tenant virtual resource provider. The virtual resource provider may provision the virtual machines and other virtual resources with a managed set of implementation resources such as physical servers, physical network switches and physical network paths. The provisioning, including allocation and ongoing reallocation of the implementation resources, may be managed by a control plane of the virtual resource provider. The control plane may perform a number of control functions for the virtual resource provider including management and enforcement of virtual resource access policies.
For example, the virtual resource provider may provision the set of virtual machines and a set of communication connections enabling communication with the set of virtual machines. The set of virtual resource access policies enforced by the control plane of the virtual resource provider may include one or more policies collectively specifying that the provisioned set of virtual machines executing the executable instructions that implement the computing application functionality are to be accessed with the provisioned set of communication connections (the “allowed” set of communication connections), and no others. Where a communication protocol allows specification of a communication port or a sub-address or the like, such policies may specify the allowed communication connections to a finest level of granularity. The set of virtual resource access policies may further include one or more policies collectively specifying that the computing application functionality is to be accessed in accordance with a license or agreement between a third party provider or vendor of the computing application functionality and a user of the computing application functionality.
In at least one embodiment, the allowed set of communication connections corresponds to communication connections between virtual machines provisioned by the virtual resource provider. For example, the allowed set of communication connections may be between the provisioned set of virtual machines executing the executable instructions that implement the computing application functionality (the “application appliance”) and one or more virtual machines provisioned by the virtual resource provider at which a user account and work environment is maintained by an operating system (one or more “user VMs”). In at least one embodiment, the allowed set of communication connections may include communication connections between the application appliance and one or more virtual machines and/or computing devices not provisioned by the virtual resource provider, and participating in a virtual private computing cloud (VPC) maintained by the virtual resource provider such that the control plane may enforce access policies with respect to the application appliance and/or the allowed set of communication connections.
Various approaches may be implemented in various environments for various applications. For example,
The network 104 may include any appropriate network, including an intranet, the Internet, a cellular network, a local area network, a wide area network, a wireless data network, or any other such network or combination thereof. Components utilized for such a system may depend at least in part upon the type of network and/or environment selected. Protocols and components for communicating via such a network are well known and will not be discussed herein in detail. Communication over the network may be enabled by wired or wireless connections, and combinations thereof. In this example, the network 104 includes the Internet, as the environment includes a Web server 106 for receiving requests and serving content in response thereto, although for other networks an alternative device serving a similar purpose could be utilized as would be apparent to one of ordinary skill in the art.
The illustrative environment 100 includes at least one application server 108 and a data store 110. It should be understood that there may be several application servers, layers, or other elements, processes, or components, which may be chained or otherwise configured, which may interact to perform tasks such as obtaining data from an appropriate data store. As used herein the term “data store” refers to any device or combination of devices capable of storing, accessing, and/or retrieving data, which may include any combination and number of data servers, databases, data storage devices, and data storage media, in any standard, distributed, or clustered environment.
The application server 108 may include any appropriate hardware and software for integrating with the data store as needed to execute aspects of one or more applications for the client device 102, and may even handle a majority of the data access and business logic for an application. The application server 108 provides access control services in cooperation with the data store 110, and is able to generate content such as text, graphics, audio, and/or video to be transferred to the user, which may be served to the user by the Web server 106 in the form of HTML, XML, or another appropriate structured language in this example.
The handling of all requests and responses, as well as the delivery of content between the client device 102 and the application server 108, may be handled by the Web server 106. It should be understood that the Web and application servers 106, 108 are not required and are merely example components, as structured code discussed herein may be executed on any appropriate device or host machine as discussed elsewhere herein. Further, the environment 100 may be architected in such a way that a test automation framework may be provided as a service to which a user or application may subscribe. A test automation framework may be provided as an implementation of any of the various testing patterns discussed herein, although various other implementations may be utilized as well, as discussed or suggested herein.
The environment 100 may also include a development and/or testing side, which includes a user device 118 allowing a user such as a developer, data administrator, or tester to access the system. The user device 118 may be any appropriate device or machine, such as is described above with respect to the client device 102. The environment 100 may also include a development server 120, which functions similar to the application server 108 but typically runs code during development and testing before the code is deployed and executed on the production side and becomes accessible to outside users, for example. In some embodiments, an application server may function as a development server, and separate production and testing storage may not be utilized.
The data store 110 may include several separate data tables, databases, or other data storage mechanisms and media for storing data relating to a particular aspect. For example, the data store 110 illustrated includes mechanisms for storing production data 112 and user information 116, which may be utilized to serve content for the production side. The data store 110 also is shown to include a mechanism for storing testing data 114, which may be utilized with the user information for the testing side. It should be understood that there may be many other aspects that are stored in the data store 110, such as for page image information and access right information, which may be stored in any of the above listed mechanisms as appropriate or in additional mechanisms in the data store 110.
The data store 110 is operable, through logic associated therewith, to receive instructions from the application server 108 or development server 120, and obtain, update, or otherwise process data in response thereto. In one example, a user might submit a search request for a certain type of item. In this case, the data store 110 might access the user information 116 to verify the identity of the user, and may access the catalog detail information to obtain information about items of that type. The information then may be returned to the user, such as in a results listing on a Web page that the user is able to view via a browser on the user device 102. Information for a particular item of interest may be viewed in a dedicated page or window of the browser.
Each server typically will include an operating system that provides executable program instructions for the general administration and operation of that server, and typically will include a computer-readable medium storing instructions that, when executed by a processor of the server, allow the server to perform its intended functions. Suitable implementations for the operating system and general functionality of the servers are known or commercially available, and are readily implemented by persons having ordinary skill in the art, particularly in light of the disclosure herein.
The environment 100 in one embodiment is a distributed computing environment utilizing several computer systems and components that are interconnected via communication links, using one or more computer networks or direct connections. However, it will be appreciated by those of ordinary skill in the art that such a system could operate equally well in a system having fewer or a greater number of components than are illustrated in
In at least one embodiment, one or more aspects of the environment 100 may incorporate and/or be incorporated into a virtual resource provisioning architecture.
One or more of the clients 202-204 may be utilized by one or more authorized users associated with a tenant of the virtual resource provider 206 to interact with a control plane 210 of the virtual resource provider 206, and thereby provision one or more virtual computing resources 212. Alternatively, or in addition, one or more of the clients 202-204 may be utilized to interact with provisioned virtual computing resources 212. The provisioned virtual computing resources 212 may include any suitable type and/or number of virtual resources 214-216. Examples of suitable virtual resources 214-216 include virtual machines such as virtual computer systems (VCSs), virtual networks, virtual private networks (VPNs), virtual network connections, virtual data stores, virtual file system volumes, specialized data processing agents, media streaming agents including audio and video streaming agents, message queues, publish-subscribe topics configured to notify subscribers having subscriptions that match events published to the publish-subscribe topics, monitoring agents, load balancing agents, and suitable combinations thereof.
The virtual resource provider 206 may further include any suitable type and/or number of implementation resources 218. Each of the provisioned computing resources 212 may be implemented by a set of the implementation resources 218. In at least one embodiment, various implementation resources of the implementation resources 218 may be configured to participate in implementing, at least in part, multiple of the provisioned computing resources 212. Examples of suitable implementation resources 218 include VCS servers, data store servers, computers, server racks, networking hardware including switches, routers, gateways, bridges, hubs, repeaters, firewalls and wireless transceivers, power supplies, generators, data centers, rooms in data centers, mobile data centers, as well as non-volatile storage devices including hard drives, processing units such as central processing units (CPUs), caches in processing units, processing cores in multi-core processing units, volatile storage devices such as memory modules including random access memory (RAM) modules, and RAM chips of multi-chip memory modules, network interface hardware and suitable combinations thereof.
In at least one embodiment, one or more types of provisioned computing resource 212, such as virtual computer systems, are implemented by default with a set of implementation resources having a standardized set of implementation resource capacities (e.g., a standardized amount of volatile and/or non-volatile storage). Different implementation resource capacities may be provisioned for such computing resources 212. For example, such computing resources 212 may be provisioned with implementation resources collectively having a set of implementation resource capacities one or more of which is a multiple of a corresponding implementation resource capacity in the standardized set. Suppose a virtual computer system with 1 gigabyte of available RAM corresponds to a “small” size. Virtual computer systems with “medium” and “large” sizes, corresponding to 2 gigabytes and 4 gigabytes of RAM, respectively, may be requested, for example. Provisioned computing resources 212 with larger “sizes” may have commensurately higher associated costs.
The provisioned virtual computing resources 212 may further include any suitable type and/or number of application appliances 220-222. In at least one embodiment, an application appliance may configure a set of one or more virtual resources (e.g., corresponding to the virtual resources 214-216) and/or the implementation resources 218 to provide a set of computing application functionality. Application appliances 220-222 may be provisioned in a manner corresponding to that of provisioning the virtual resources 214-216. In the example virtual resource provider 206, application appliances 220-222 are located in an application vendor space 224 distinct from a general user space 226 of the provisioned computing resources 212. Location in different provisioned computing resource spaces 224-226 may correspond to different access policy and/or cost accounting treatments reflecting different roles with respect to the virtual resource provider 206.
For example, virtual resources 214-216 provisioned in the general user space 226 may facilitate a business end-use of a tenant. In contrast, application appliances 220-222 may be offered by third party vendors to provide a set of computing application functionality. Access policies associated with virtual resources 214-216 in the general user space 226 may allow access from public networks. In contrast, access policies associated with application appliances 220-222 may restrict access to other provisioned computing resources 212 or to a particular subset of the virtual resources 214-216 such as a particular set of user VMs and/or communication connections. Costs associated with virtual resources 214-216 in the general user space 226 may be determined based at least in part on allocated implementation resources 218. In contrast, costs associated with application appliances 220-222 may be determined based at least in part on a flat fee, a fee per suitable unit of time, associated implementation resource 218 costs plus a surcharge, feature usage, and/or any suitable cost accounting method.
The control plane 210 may provision computing resources 212 with implementation resources 218 responsive to provisioning requests. The control plane 210 may further manage and enforce policies that control access to the provisioned computing resources, including one or more policies that define and/or maintain the application vendor space 224 distinct from the general user space 226. The control plane 210 may further track costs associated with maintaining the provisioned computing resources 212 and allocate the costs as appropriate to tenant accounts. An example control plane in accordance with at least one embodiment is described below in more detail with reference to
In at least one embodiment, access to executable instructions that implement the computing application functionality of an application appliance 220-222 is controlled at least in part by enforcing at least one policy specifying that particular application appliances 220-222 be accessed through a particular set of communication connections, and no other.
In the example virtual resource provider 302, the general user space 306 and the application vendor space 308 are separated by a communicative barrier 326 to indicate that ad hoc and/or noncompliant communication connections between the virtual machines 310-314 and the application appliances 316-320 are prevented by one or more policies enforced by the control plane 304. One or more of the virtual machines 310-314 may be connected to one or more of the application appliances 316-320 with policy-complaint communication connections 322-324. In the example virtual resource provider 302, the virtual machine 314 is connected to the application appliance 320 with policy-compliant communication connection 322. The set 326 of virtual machines 310-312 are connected to the set of application appliances 316-318 with policy-compliant communication connection 324. The policy-compliant communication connections 322-324 are depicted as passing through the control plane 304 to indicate the ability of the control plane 304 to enforce associated access policies.
The policy-compliant communication connections 322-324 may be maintained with any suitable communication media and/or communication protocol. For example, the policy-compliant communication connections 322-324 may be maintained with a communication protocol in accordance with a transmission control protocol and/or an internet protocol (e.g., TCP/IP). Each virtual machine 310-314 and/or application appliance 316-320 may be associated with a communication protocol address and/or communication port and, for example, the access policy set associated with the communication connection 322 may specify that a destination of protocol messages conveyed through the communication connection 322 correspond to a particular communication protocol address and a particular communication port. Alternatively, or in addition, the application appliances 316-320 may incorporate and/or provide one or more interfaces 328-332 to the computing application functionality, and, for example, the access policy set may specify that protocol messages conveyed through the communication connection 322 be in accordance with and/or directed to one or more elements of the interface 332 (e.g., a selected subset of such interface elements).
The interfaces 328-332 may include any suitable interface elements such as interface elements corresponding to functionality, or sets of functionality, of the computing application. The interfaces 328-332 may incorporate and/or be incorporated in a user interface (UI) such as a graphical user interface (GUI), a Web-based interface, a programmatic interface such as an application programming interface (API) and/or a set of remote procedure calls (RPCs) corresponding to provisioning interface elements, a messaging interface such as a messaging interface in which the interface elements of the interfaces 328-332 correspond to messages of a communication protocol, a remote desktop protocol such as a remote framebuffer protocol (e.g., RFB) or an “X WINDOW SYSTEM” protocol as described in Scheifler et al., “The X Window System,” ACM Transactions on Graphics, April 1986, pages 79-109, and/or any suitable combination thereof. Web-based interfaces may include Web services interfaces such as Representational State Transfer (REST) compliant (“RESTful”) Web services interfaces or Simple Object Access Protocol (SOAP) compliant Web services interfaces or other “non-RESTful” Web services interfaces.
The virtual resource provider 302 (
An application vendor may also be a tenant of the virtual resource provider 302 (
A provisioning component 408 of the control plane 402 may provision computing resources 212 (
A policy enforcement component 410 of the control plane 402 may manage and enforce virtual resource provider 206 (
A virtual resource provider 206 (
A cost-tracking component 412 of the control plane 402 may track costs (e.g., computation and/or financial costs) associated with provisioning and/or maintaining the computing resources 212 (
An application rights management (ARM) component 414 of the control plane 402 may act to establish and maintain user and vendor rights with respect to provisioned application appliances 220-222 (
The control plane 402 may further include a workflow component 416 configured at least to establish and maintain workflows such as provisioned resource workflows, provisioning workflows and/or policy enforcement workflows established by provisioned resources 212 (
The workflow component 416 may modify, further specify and/or further configure established workflows. For example, the workflow component 416 may select particular implementation resources of the virtual resource provider 206 (
The control plane 402 may be implemented with a set of provisioned resources 212 (
The description now turns to example steps that may be performed in accordance with at least one embodiment.
At step 504, the prototype application appliance may be packaged into a form suitable for provisioning. For example, the authorized user may request that the virtual resource provider 206 (
At step 508, one or more application appliance feature costs may be specified. For example, the authorized user may interact with one or more interface elements of the application vendor interface 406 (
At step 512, the submitted and/or registered application appliance prototype may be verified. For example, the application rights management component 414 (
At step 606, a request to provision an application appliance may be received. For example, the authorized user may submit another provisioning request with the user interface component 404 (
At step 610, a communication connection between the user VM and the application appliance may be provisioned. For example, the provisioning component 408 (
At step 614, access to the provisioned application appliance in accordance with the access policy set configured at step 612 may be enabled. For example, the policy enforcement component 410 (
At step 706, the application appliance instance may be notified of the feature activation request received at step 704. For example, the application rights management component 414 (
At step 710, it may be determined whether the requested feature was activated, for example, in accordance with the response received at step 708. If the requested feature was activated, a process incorporating step 710 may progress to step 714. Otherwise, the process may progress to step 712. At step 712, the sender of the request received at step 704 may be notified of the problem that occurred during processing of the feature activation request. At step 714, the cost tracking component 412 (
As described above with reference to
At step 806, a request may be sent to create a workflow based at least in part on the one or more actions determined at step 804. For example, provisioning component 408 (
At step 810, execution of the component task(s) may be guided in accordance with the workflow. For example, the workflow component 416 (
The various embodiments described herein may be implemented in a wide variety of operating environments, which in some cases may include one or more user computers, computing devices, or processing devices which may be utilized to operate any of a number of applications. User or client devices may include any of a number of general purpose personal computers, such as desktop or laptop computers running a standard operating system, as well as cellular, wireless, and handheld devices running mobile software and capable of supporting a number of networking and messaging protocols. Such a system also may include a number of workstations running any of a variety of commercially-available operating systems and other known applications for purposes such as development and database management. These devices also may include other electronic devices, such as dummy terminals, thin-clients, gaming systems, and other devices capable of communicating via a network.
Most embodiments utilize at least one network that would be familiar to those skilled in the art for supporting communications using any of a variety of commercially-available protocols, such as TCP/IP, OSI, FTP, UPnP, NFS, CIFS, and AppleTalk. Such a network may include, for example, a local area network, a wide-area network, a virtual private network, the Internet, an intranet, an extranet, a public switched telephone network, an infrared network, a wireless network, and any combination thereof. The network may, furthermore, incorporate any suitable network topology. Examples of suitable network topologies include, but are not limited to, simple point-to-point, star topology, self organizing peer-to-peer topologies, and combinations thereof.
In embodiments utilizing a Web server, the Web server may run any of a variety of server or mid-tier applications, including HTTP servers, FTP servers, CGI servers, data servers, Java servers, and business application servers. The server(s) also may be capable of executing programs or scripts in response requests from user devices, such as by executing one or more Web applications that may be implemented as one or more scripts or programs written in any programming language, such as Java®, C, C# or C++, or any scripting language, such as Perl, Python, or TCL, as well as combinations thereof. The server(s) may also include database servers, including without limitation those commercially available from Oracle®, Microsoft®, Sybase®, and IBM®.
The environment may include a variety of data stores and other memory and storage media as discussed above. These may reside in a variety of locations, such as on a storage medium local to (and/or resident in) one or more of the computers or remote from any or all of the computers across the network. In a particular set of embodiments, the information may reside in a storage-area network (“SAN”) familiar to those skilled in the art. Similarly, any necessary files for performing the functions attributed to the computers, servers, or other network devices may be stored locally and/or remotely, as appropriate. Where a system includes computerized devices, each such device may include hardware elements that may be electrically coupled via a bus, the elements including, for example, at least one central processing unit (CPU), at least one input device (e.g., a mouse, keyboard, controller, touch screen, or keypad), and at least one output device (e.g., a display device, printer, or speaker). Such a system may also include one or more storage devices, such as disk drives, optical storage devices, and solid-state storage devices such as random access memory (“RAM”) or read-only memory (“ROM”), as well as removable media devices, memory cards, flash cards, etc.
Such devices also may include a computer-readable storage media reader, a communications device (e.g., a modem, a network card (wireless or wired), an infrared communication device, etc.), and working memory as described above. The computer-readable storage media reader may be connected with, or configured to receive, a computer-readable storage medium, representing remote, local, fixed, and/or removable storage devices as well as storage media for temporarily and/or more permanently containing, storing, transmitting, and retrieving computer-readable information. The system and various devices also typically will include a number of software applications, modules including program modules, services, or other elements located within at least one working memory device, including an operating system and application programs, such as a client application or Web browser. It should be appreciated that alternate embodiments may have numerous variations from that described above. For example, customized hardware might also be utilized and/or particular elements might be implemented in hardware, software (including portable software, such as applets), or both. Further, connection to other computing devices such as network input/output devices may be employed.
Storage media and computer readable media for containing code, or portions of code, may include any appropriate media known or used in the art, including storage media and communication media, such as but not limited to volatile and non-volatile, removable and non-removable media implemented in any method or technology for storage and/or transmission of information such as computer readable instructions, data structures, program modules, or other data, including RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disk (DVD) or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium which may be utilized to store the desired information and which may be accessed by the a system device. Program modules, program components and/or programmatic objects may include computer-readable and/or computer-executable instructions of and/or corresponding to any suitable computer programming language. In at least one embodiment, each computer-readable medium may be tangible. In at least one embodiment, each computer-readable medium may be non-transitory in time. Based on the disclosure and teachings provided herein, a person of ordinary skill in the art will appreciate other ways and/or methods to implement the various embodiments.
The specification and drawings are, accordingly, to be regarded in an illustrative rather than a restrictive sense. It will, however, be evident that various modifications and changes may be made thereunto without departing from the broader spirit and scope of the invention as set forth in the claims.
The use of the terms “a” and “an” and “the” and similar referents in the context of describing embodiments (especially in the context of the following claims) are to be construed to cover both the singular and the plural, unless otherwise indicated herein or clearly contradicted by context. The terms “comprising,” “having,” “including,” and “containing” are to be construed as open-ended terms (i.e., meaning “including, but not limited to,”) unless otherwise noted. The term “connected” is to be construed as partly or wholly contained within, attached to, or joined together, even if there is something intervening Recitation of ranges of values herein are merely intended to serve as a shorthand method of referring individually to each separate value falling within the range, unless otherwise indicated herein, and each separate value is incorporated into the specification as if it were individually recited herein. All methods described herein can be performed in any suitable order unless otherwise indicated herein or otherwise clearly contradicted by context. The use of any and all examples, or exemplary language (e.g., “such as”) provided herein, is intended merely to better illuminate embodiments and does not pose a limitation on the scope unless otherwise claimed. No language in the specification should be construed as indicating any non-claimed element as essential to the practice of at least one embodiment.
Preferred embodiments are described herein, including the best mode known to the inventors. Variations of those preferred embodiments may become apparent to those of ordinary skill in the art upon reading the foregoing description. The inventors expect skilled artisans to employ such variations as appropriate, and the inventors intend for embodiments to be constructed otherwise than as specifically described herein. Accordingly, suitable embodiments include all modifications and equivalents of the subject matter recited in the claims appended hereto as permitted by applicable law. Moreover, any combination of the above-described elements in all possible variations thereof is contemplated as being incorporated into some suitable embodiment unless otherwise indicated herein or otherwise clearly contradicted by context.
All references, including publications, patent applications, and patents, cited herein are hereby incorporated by reference to the same extent as if each reference were individually and specifically indicated to be incorporated by reference and were set forth in its entirety herein.