Configuring Elevated Privileges
There are various scenarios that require us to execute applications with elevated privileges. It’s common for this requirement to surface during lift and shift efforts.
This configuration is done in the Service Definition file. It requires us to specify the Runtime Execution Context to elevated.
Runtime Configuration Template
This template uses the ProgramEntryPoint as an EntryPoint. Roles also support NetFxEntryPoint.
<Runtime executionContext="[limited|elevated]"> <Environment> <Variable name="<variable-name>" value="<variable-value>"> <RoleInstanceValue xpath="<xpath-to-role-environment-settings>"/> </Variable> </Environment> <EntryPoint> <ProgramEntryPoint commandLine="worker.cmd" setReadyOnProcessStart="true" /> </EntryPoint> </Runtime>
Sample ServiceDefinition
This sample ServiceDefinition was generated using the Add-AzureWorkerRole PowerShell command.
<?xml version="1.0" encoding="utf-16"?> <ServiceDefinition xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="briseboisDemo3" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition"> <WorkerRole name="Compute"> <Startup> <Task commandLine="setup_worker.cmd > log.txt" executionContext="elevated"> <Environment> <Variable name="EMULATED"> <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" /> </Variable> <Variable name="RUNTIMEID" value="" /> <Variable name="RUNTIMEURL" value="" /> </Environment> </Task> <Task commandLine=".\startup.cmd > startup_log.txt" executionContext="elevated" /> </Startup> <Endpoints> <InputEndpoint name="HttpIn" protocol="tcp" port="80" /> </Endpoints> <Runtime executionContext="elevated"> <Environment> <Variable name="PORT"> <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/Endpoints/Endpoint[@name='HttpIn']/@port" /> </Variable> <Variable name="EMULATED"> <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" /> </Variable> </Environment> <EntryPoint> <ProgramEntryPoint commandLine="worker.cmd" setReadyOnProcessStart="true" /> </EntryPoint> </Runtime> </WorkerRole> </ServiceDefinition>
Deploying the Cloud Service
There is nothing different about deploying a Cloud Service that executes with elevated privileges. Using your tool of preference, create a new Cloud Service package and deploy it to Microsoft Azure.
Using PowerShell to package the Cloud Service requires you to navigate to the Cloud Service directory and execute the Save-AzureServiceProjectPackage command. This will produce a cloud_package.cspkg package file.
To deploy Azure Cloud Services, I usually use PowerShell. This is an example of what you may write yourself.
New-AzureDeployment ` -Package 'C:\\cloud_package.cspkg' ` -Configuration 'C:\\ServiceConfiguration.Cloud.cscfg' ` -Slot Production ` -Label 'Compute-2015-02-17' ` -ServiceName 'DemoCloudService' ` -Name 'DemoCloudService' ` -Verbose