<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>AndrewC</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/andrewc/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/andrewc/feed.xml</link>
    <description>Experiments and adventures with Azure</description>
    <lastBuildDate>Tue, 16 Apr 2019 06:22:10 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Understanding Azure Virtual Machine IOPS, throughput and disk latency – Part 2</title>
      <link>https://docs.microsoft.com/archive/blogs/andrewc/understanding-azure-virtual-machine-iops-throughput-and-disk-latency-part-2</link>
      <pubDate>Fri, 09 Sep 2016 15:27:22 GMT</pubDate>
      <dc:creator><![CDATA[Andrew.Cobb]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/andrewc/?p=1355</guid>
      <description><![CDATA[Continuing on from Part 1 :...]]></description>
      <content:encoded><![CDATA[Continuing on from Part 1 : <a href="https://blogs.technet.microsoft.com/andrewc/2016/09/09/understanding-azure-virtual-machine-iops-throughput-and-disk-latency">https://blogs.technet.microsoft.com/andrewc/2016/09/09/understanding-azure-virtual-machine-iops-throughput-and-disk-latency</a>

Part 1 showed the IOPS, throughout and latency characteristics of an Azure disk when there was no caching involved.

This post covers the impact of caching and premium storage.

<span style="font-size: 14pt"><strong>Test 4 – Read Cache – Standard Disk.
</strong></span>

We will re-run the tests using the F: drive, which is a standard disk with <strong>Read Caching</strong> turned on
<p style="margin-left: 36pt"><img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0521_Understandi1.png" /></p>
<strong>Results :
</strong>

Read IOPS is now showing ~32000 – on a standard 500 IOPS disk.
<p style="margin-left: 36pt"><img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0521_Understandi2.png" /></p>
Using the same F: drive, change the Access Specification to 100% write and re-run.

In this case, the IOPS are still ~500 as write operations are not cached.
<p style="margin-left: 36pt"><img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0521_Understandi3.png" /><img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0521_Understandi4.png" /></p>
<span style="font-size: 14pt"><strong>Test 5 – Read/Write Cache – Standard Disk
</strong></span>

Now switch to drive G: which has both read and write caching enabled.
<p style="margin-left: 36pt"><img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0521_Understandi5.png" /></p>
With the access specification still set to 100% write, we find ~32000 IOPS
<p style="margin-left: 36pt"><img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0521_Understandi6.png" /></p>
<strong>Summary:
</strong>
<ul>
 	<li>
<div><strong>Caching *may* make significant difference to the apparent performance of the disk subsystem
</strong></div>
<ul>
 	<li><strong>I say apparent, because actual throughput to/from the disk subsystem is unchanged – but cache can reduce the number of IOs that occur.
</strong></li>
</ul>
</li>
 	<li><strong>Read cache will not necessarily improve performance for any given application – it depends on the application and data profile.
</strong></li>
 	<li><strong>Write cache should be used with care as data loss is possible in the event of a hardware issue with the physical server holding the cache before it is written to disk.
</strong></li>
 	<li><strong>Consult any guidance or best practices for the specific application in question
</strong></li>
</ul>
<span style="font-size: 14pt"><strong>Test 6 – SSD Premium Storage
</strong></span>

Switching to drive I: (Premium P30 disk) and rerunning the same tests, we see:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0521_Understandi7.png" />

Read operations when using a small block size generates 5000 IOPS as per spec.

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0521_Understandi8.png" />

Changing the block size to 256k and re-running :

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0521_Understandi9.png" />

The IOPS is lower because we hit the 200MB/s throughput limit:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0521_Understandi10.png" />

Testing latency by changing outstanding IO to 1

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0521_Understandi11.png" />

Latency is ~1.6ms (compared to 5ms + for standard storage)

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0521_Understandi12.png" />

<strong>Summary:
</strong>
<ul>
 	<li><strong>Premium storage can achieve 10 times the IOPS, 3 times the throughput and 1/3 the latency when compared to standard disks.
</strong></li>
 	<li><strong>While the raw numbers are better, the same constraints around single threaded IO still apply.
</strong></li>
</ul>
<span style="font-size: 14pt"><strong>Test 7 – Using the Local D: temp disk
</strong></span>

All Azure virtual machines have a temporary disk, presented as D: drive on Windows and /dev/sdb on Linux.

The temp disk is designed for temporary working storage for applications and processes, but not long term storage<strong>. The contents will be lost if the VM is moved to another host.
</strong>

Re-running the previous tests :

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0521_Understandi13.png" />

Read Performance small blocks:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0521_Understandi14.png" />

Read Performance large blocks:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0521_Understandi15.png" />

IO Latency when using outstanding IO set 1:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0521_Understandi16.png" />

<strong>Summary </strong>
<ul>
 	<li>The local temporary disk can provide high IOPS, high throughput and low latency compared to permanent blob/vhd storage.</li>
 	<li>Use with care as the data is transient.</li>
 	<li>
<div>Using D: for SQL Server tempdb is supported and documented :</div>
<ul>
 	<li><a href="https://blogs.technet.microsoft.com/dataplatforminsider/2014/09/25/using-ssds-in-azure-vms-to-store-sql-server-tempdb-and-buffer-pool-extensions/">https://blogs.technet.microsoft.com/dataplatforminsider/2014/09/25/using-ssds-in-azure-vms-to-store-sql-server-tempdb-and-buffer-pool-extensions/</a></li>
 	<li><a href="https://azure.microsoft.com/en-gb/documentation/articles/virtual-machines-windows-classic-sql-perf/">https://azure.microsoft.com/en-gb/documentation/articles/virtual-machines-windows-classic-sql-perf/</a></li>
</ul>
</li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>Understanding Azure Virtual Machine IOPS, throughput and disk latency – Part 1</title>
      <link>https://docs.microsoft.com/archive/blogs/andrewc/understanding-azure-virtual-machine-iops-throughput-and-disk-latency</link>
      <pubDate>Fri, 09 Sep 2016 12:47:55 GMT</pubDate>
      <dc:creator><![CDATA[Andrew.Cobb]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/andrewc/?p=635</guid>
      <description><![CDATA[I'm regularly asked:

 	How best to configure disks in Azure virtual machines for optimal...]]></description>
      <content:encoded><![CDATA[I'm regularly asked:
<ul>
 	<li>How best to configure disks in Azure virtual machines for optimal performance.</li>
 	<li>Why a deployed a solution may not be performing at the desired level.</li>
</ul>
When the discussion takes place, we can find:
<ul>
 	<li>There is not a solid understanding of how Azure disks work and perform.</li>
 	<li>The requirements and characteristics of the application running on the VM is not well known.</li>
</ul>
This walkthough covers how to demonstrate and experiment with the following aspects of VM disk performance in Azure.
<ul>
 	<li>IOPS</li>
 	<li>Latency</li>
 	<li>Throughput</li>
 	<li>Standard vs Premium storage</li>
 	<li>Local temporary storage</li>
</ul>
<span style="font-size: 12pt"><strong>Note</strong> : The data and results here are empirical and for the purposes of explaining Azure disk performance. Real world workloads are more complex and seldom fit the simple IO profile used here, so your mileage may vary.
</span>

<span style="font-size: 18pt"><strong>Step 1 - Preparation
</strong></span>

In preparation for this demo, deploy a Windows Server 2012 R2 machine in Azure with the following minimum requirements:
<ul>
 	<li>Capable of both standard and premium disks (Currently DS and GS series machines)</li>
 	<li>Capable of a minimum of 4 data disks</li>
 	<li>Capable of a minimum of 5000 or more IOPS.</li>
</ul>
In practice, this means a DS2 or higher machine. When deploying a VM in Azure, the portal shows the base capabilities of each machine size:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0434_Understandi1.png" />

For this test, I am using a DS3 machine, deployed in Australia East:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0434_Understandi2.png" />

Add 4 additional data disks to the machine (in addition to the base operating system disk)

These disks should be:
<div>
<table style="border-collapse: collapse" border="0"><colgroup> <col style="width: 234px" /> <col style="width: 234px" /> <col style="width: 234px" /> <col style="width: 234px" /></colgroup>
<tbody valign="top">
<tr>
<td style="padding-left: 11px;padding-right: 11px;border: solid 0.5pt"><strong>Number/Name</strong></td>
<td style="padding-left: 11px;padding-right: 11px;border-top: solid 0.5pt;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt"><strong>Standard/Premium</strong></td>
<td style="padding-left: 11px;padding-right: 11px;border-top: solid 0.5pt;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt"><strong>Cache Setting</strong></td>
<td style="padding-left: 11px;padding-right: 11px;border-top: solid 0.5pt;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt"><strong>Size</strong></td>
</tr>
<tr>
<td style="padding-left: 11px;padding-right: 11px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Disk 1</td>
<td style="padding-left: 11px;padding-right: 11px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Standard</td>
<td style="padding-left: 11px;padding-right: 11px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">No cache</td>
<td style="padding-left: 11px;padding-right: 11px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">100GB</td>
</tr>
<tr>
<td style="padding-left: 11px;padding-right: 11px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Disk 2</td>
<td style="padding-left: 11px;padding-right: 11px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Standard</td>
<td style="padding-left: 11px;padding-right: 11px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Read Cache</td>
<td style="padding-left: 11px;padding-right: 11px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">100GB</td>
</tr>
<tr>
<td style="padding-left: 11px;padding-right: 11px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Disk 3</td>
<td style="padding-left: 11px;padding-right: 11px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Standard</td>
<td style="padding-left: 11px;padding-right: 11px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Read Write Cache</td>
<td style="padding-left: 11px;padding-right: 11px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">100GB</td>
</tr>
<tr>
<td style="padding-left: 11px;padding-right: 11px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Disk 4</td>
<td style="padding-left: 11px;padding-right: 11px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Premium</td>
<td style="padding-left: 11px;padding-right: 11px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">No cache</td>
<td style="padding-left: 11px;padding-right: 11px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">P30 (1TB)</td>
</tr>
</tbody>
</table>
</div>
When finished, the disk configuration should look like this:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0434_Understandi3.png" />

Cache settings can be set on a per disk basis as shown :

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0434_Understandi4.png" />

Once the disks have been added to the VM, remote in and start <strong>Disk Management</strong>.

Each of the disks should be initialised, formatted and assigned a drive letter as shown.

<strong>Note:</strong> This could also be done using Storage Spaces, but as the goal here is to show individual disk performance rather than aggregate, it is simpler with Disk Management.

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0434_Understandi5.png" />

Once correctly configured, <strong>explorer</strong> should look similar to this:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0434_Understandi6.png" />

<span style="font-size: 16pt"><strong>Step 2 - Testing Tools
</strong></span>

For this test, Iometer was used to generate the load and display the results.

Iometer can be found here : <a href="https://iometer.org/">https://iometer.org/</a>

Other testing tools would be expected to generate the same results given the same inputs.

<span style="font-size: 16pt"><strong>Expected Results
</strong></span>

As shown in the images below:
<ul>
 	<li>A standard disk is expected to handle 500 IOPS or 60MB/s</li>
 	<li>A P30 Premium disk is expected to handle 5000 IOPS or 200MB/s</li>
</ul>
However, be aware:
<ul>
 	<li>Any disk will be limited at the <strong>lower</strong> of IOPS or throughput limits</li>
 	<li>The ability for an application can achieve these numbers is also dependant on the manner in which reads/writes are performed. Applications which perform 'single threaded' IO will often hit a latency bottleneck before they hit these other limits.</li>
</ul>
<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0434_Understandi7.png" /><img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0434_Understandi8.png" />

<span style="font-size: 14pt"><strong>Test 1: IOPS on a Standard Disk
</strong></span>

<span style="font-size: 14pt">Start Iometer and select the following values:
</span>
<ul>
 	<li><span style="font-size: 14pt">Disk Target : E: Drive (no cache)
</span></li>
 	<li><span style="font-size: 14pt">Maximum Disk Sectors : 1000
</span></li>
 	<li><span style="font-size: 14pt"># outstanding IOs : 100
</span></li>
 	<li><span style="font-size: 14pt">Access Specification : 512 B 100% Read
</span></li>
</ul>
<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0434_Understandi9.png" /><img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0434_Understandi10.png" />

Start the test:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0434_Understandi11.png" />

<strong>Observations</strong>
<ul>
 	<li>The results should show a consistent 500 IOPS (Change the update frequency to 1 second in Iometer)</li>
 	<li>Throughput is low – because block size is low (500 IOPS * 512 Bytes = 0.26MB/s)</li>
 	<li>Average Latency is high – mainly because concurrent outstanding IO's is also high.</li>
</ul>
<span style="font-size: 14pt"><strong>Test 2 – Throughput on a single disk
</strong></span>

Change the access specification from 512 B to 256 KiB 100% Read:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0434_Understandi12.png" />

Results:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0434_Understandi13.png" />

<strong>Observations:
</strong>
<ul>
 	<li>
<div>Disk throughput should be much higher.<strong>
</strong></div>
<ul>
 	<li>While we commit to 60MB/s, I typically see 100MB/s as shown above.<strong>
</strong></li>
</ul>
</li>
 	<li>IOPS is significantly lower as the larger block size means the throughput limit is hit before the IOPS limit (381 IOPS * 256KB = 100MB/s)<strong>
</strong></li>
</ul>
<span style="font-size: 14pt"><strong>Test 3 – Latency – single standard disk:
</strong></span>

Change the outstanding IOs to 1 and re-run the tests :

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0434_Understandi14.png" /><img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090916_0434_Understandi15.png" />

<strong>Observations:
</strong>
<ul>
 	<li>The latency when writing to a standard disk is around 5 ms.<strong>
</strong></li>
 	<li>The IOPS and throughput are both significantly lower than the maximum capabilities of the disk.<strong>
</strong></li>
</ul>
<strong>What is happening?
</strong>
<ul>
 	<li>When outstanding IOs is set to 1, Iometer does a read request, waits for the data to come back, and then issues the next request.<strong>
</strong></li>
 	<li>In this scenario, it is simulating an older style application that is performing single threaded IOs<strong>
</strong></li>
 	<li>
<div>If each read request takes 5 ms, then a maximum of 200 read requests will be achieved each second.<strong>
</strong></div>
<ul>
 	<li>(5.27 ms * 189.45 IOPS = 999ms)<strong>
</strong></li>
</ul>
</li>
</ul>
<strong>Summary:
</strong>
<ul>
 	<li><strong>Any application that does single threaded IO is likely to suffer reduced IO performance because of latency.
</strong></li>
 	<li><strong>Caching, local temp storage and/or Premium storage can be used to assist here – see Part 2
</strong></li>
</ul>
<strong>
</strong>]]></content:encoded>
    </item>
    <item>
      <title>Azure AD App Proxy and MFA – Quick Demo</title>
      <link>https://docs.microsoft.com/archive/blogs/andrewc/azure-ad-app-proxy-and-mfa-quick-demo</link>
      <pubDate>Fri, 09 Sep 2016 09:41:23 GMT</pubDate>
      <dc:creator><![CDATA[Andrew.Cobb]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/andrewc/?p=236</guid>
      <description><![CDATA[Most organisations have websites or intranets that are hosted on servers inside their corporate...]]></description>
      <content:encoded><![CDATA[<p>Most organisations have websites or intranets that are hosted on servers inside their corporate network.</p>
<p>Accessing these sites while mobile or working from home has traditionally used one of three approaches:</p>

<ul>
 	<li>Establish a VPN connection to the corporate network.</li>
 	<li>Publish the website via some form of reverse proxy hosted in the DMZ</li>
 	<li>Access the website via an RDS/VDI session (often using one of the first two mechanisms)</li>
</ul>
<p>Each of these approaches work, but have complexities or downsides:</p>

<ul>
 	<li>VPN software may not work on mobile, home or BYO devices.</li>
 	<li>DMZ networks and reverse proxies are complex and costly if not already in place.</li>
 	<li>RDS/VDI requires infrastructure to establish and is a clumsy experience if all that is needed is a website.</li>
</ul>
<p>Azure Active Directory Application Proxy provides an additional mechanism to allow internally hosted sites to be accessed externally without requiring VPNs, DMZs or RDS/VDI.</p>
<p><strong>Testing App Proxy with MFA<br /> </strong></p>
<p>Pre-requisites:</p>

<ul>
 	<li>An Azure AD instance with Basic or Premium features enabled or in trial mode.</li>
 	<li>An Azure MFA provider configured and linked to the AAD instance</li>
 	<li>The URL of an internal website</li>
 	<li>
<div>A small Windows 2012R2 virtual machine that can :</div>
<ul>
 	<li>Access the internal website</li>
 	<li>Access the internet (outbound)</li>
</ul>
</li>
</ul>
<ol>
 	<li>
<div>Start the Classic Azure management portal, navigate to your Azure AD instance and select the <strong>Applications</strong> tab</div>
<p style="margin-left: 36pt"><img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090816_2341_AzureADAppP1.png" /></p>
</li>
 	<li>
<div>Select Add and pick <strong>Publish an application that will be accessible from outside your network</strong></div>
<p style="margin-left: 36pt"><img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090816_2341_AzureADAppP2.png" /></p>
</li>
</ol>
<ol>
 	<li>
<div>Enter the relevant details for the website. Note the internal URL is one you would use on a machine <strong>inside</strong> your corporate network.</div>
<p><img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090816_2341_AzureADAppP3.png" /></p>
</li>
 	<li>Click OK</li>
 	<li>
<div>The status page for the Azure AD Application will then be shown. Select <strong>Download a Connector</strong></div>
<p style="margin-left: 36pt"><img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090816_2341_AzureADAppP4.png" /></p>
</li>
</ol>
<p>The connector should be downloaded and installed on the Windows 2012R2 VM</p>

<ol>
 	<li>
<div>Once the connector is installed and tested, select the <strong>Configure</strong> tab of the application in the classic Azure management portal.</div>
<p style="margin-left: 36pt"><img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090816_2341_AzureADAppP5.png" /></p>
</li>
 	<li>Scroll down to <strong>multi-factor authentication… </strong>and click ON</li>
</ol>
<p><img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090816_2341_AzureADAppP6.png" /></p>
<p style="margin-left: 18pt">For the purposes of this demo, leave other settings unchanged.</p>

<ol>
 	<li>Click <strong>Save</strong> at the bottom of the screen</li>
 	<li>
<div>Add user(s) to test with to the application – highlight the use and click <strong>Assign</strong></div>
<p><img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090816_2341_AzureADAppP7.png" /></p>
</li>
 	<li>
<div>Copy the external URL from the configure tab :</div>
<p><img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090816_2341_AzureADAppP8.png" /></p>
<p>Note : In a production environment, you would typically use your own DNS suffix rather than the Azure provided one.</p>
</li>
 	<li>Paste into a browser. You may need InPrivate/Incognito or similar if you are already logged into Azure AD with different credentials.</li>
</ol>
<p>A logon screen similar to below should appear. The graphics/text on the left are due to customised branding on the AAD environment itseld</p>
<p style="margin-left: 72pt"><img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090816_2341_AzureADAppP9.png" /></p>

<ol>
 	<li>
<div>Log in with the user that you enabled for the application – in this case <a href="mailto:lbrown@aecmgmt.com">lbrown@aecmgmt.com</a></div>
<p style="margin-left: 36pt"><img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090816_2341_AzureADAppP10.png" /></p>
</li>
 	<li>
<div>We are now being notified that MFA is required</div>
<p style="margin-left: 36pt"><img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090816_2341_AzureADAppP11.png" /></p>
<p style="margin-left: 36pt">If this is the first time the user has been required to use MFA, an enrolment process will be initiated.</p>
<p style="margin-left: 36pt"></p>
</li>
 	<li>
<div>Once the MFA approval has gone through the website should be displayed.</div>
<p><img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/09/090816_2341_AzureADAppP12.png" /></p>
</li>
</ol>
<p><strong>Notes on this demo</strong> :</p>

<ul>
 	<li>Screenshots and steps correct at Sep 9<sup>th</sup> 2016 – things change.</li>
 	<li>The internal website in this case did not require any explicit authentication itself – if it did additional steps would be required to pass credentials through.</li>
</ul>]]></content:encoded>
    </item>
  </channel>
</rss>