<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Posts on Cloud Insights</title>
        <link>https://www.kelvinpapp.com/posts/</link>
        <description>Recent content in Posts on Cloud Insights</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language>
        <lastBuildDate>Mon, 10 Apr 2023 19:44:03 +0000</lastBuildDate>
        <atom:link href="https://www.kelvinpapp.com/posts/index.xml" rel="self" type="application/rss+xml" />
        
        <item>
            <title>Obsidian Email to Note with Power Automate</title>
            <link>https://www.kelvinpapp.com/obsidian-email-to-note-with-power-automate/</link>
            <pubDate>Mon, 10 Apr 2023 19:44:03 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/obsidian-email-to-note-with-power-automate/</guid>
            <description>It&amp;rsquo;s been a minute&amp;hellip;
I thought I&amp;rsquo;d take a few minutes to document a process I&amp;rsquo;ve developed that forms part of my productivity flow within Obsidian. For those of you unfamiliar, Obsidian is a personal knowledge base and note-taking application - similar in nature to OneNote, Evernote, Notion etc. I&amp;rsquo;ve become a huge fan over recent weeks, moving my entire note-taking workflow to it in place of various other - often disparate - methods of tracking my thoughts, actions, and musings across my work and personal life.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2023/04/Note-Taking.jpg"
         alt="A pen on a notepad headed &#39;Notes&#39;"/>
</figure>

<p>It&rsquo;s been a minute&hellip;</p>
<p>I thought I&rsquo;d take a few minutes to document a process I&rsquo;ve developed that forms part of my productivity flow within <a href="https://obsidian.md/">Obsidian</a>. For those of you unfamiliar, Obsidian is a personal knowledge base and note-taking application - similar in nature to OneNote, Evernote, Notion etc. I&rsquo;ve become a huge fan over recent weeks, moving my entire note-taking workflow to it in place of various other - often disparate - methods of tracking my thoughts, actions, and musings across my work and personal life. There are lots of things behind this decision; the way it supports organic and simple linking of thoughts and topics, the ease with which you can search and sort your notes, it&rsquo;s extensible nature, the use of markdown as a primary input format etc. etc. - but fundamentally it just ticks all of my current boxes where others don&rsquo;t&hellip; all that is, except for one! 🙂</p>
<h2 id="so-whats-the-issue">So what&rsquo;s the issue?</h2>
<p>To explain my predicament, I first need to explain a little about the way that Obsidian stores note content. Each time you create a note, a new markdown file is created based on the title. This is stored in a file structure that Obsidian refer to as your &ldquo;vault&rdquo;, which is ultimately just a folder structure in a location on your device that mimics that which you build out in the Obsidian application. For the most part this structure is largely irrelevant - the magic of discovering / searching / linking your content is in the way you leverage tags and links within your note metadata and content - but it does serve the nice purpose of being non-proprietary. At any point you could do away with Obsidian and still have access to all of your notes in a reasonable structure. This is great - and also enables the use of various cloud sync services (e.g. OneDrive, Google Drive, Dropbox etc.) to synchronise your note content into different installations of Obsidian across your devices; providing flexibility and reassurance that your data is securely stored and always available. I do exactly this, storing my vault in OneDrive for Business, and also making use of a Community Plugin to push my content into a GitHub repository for version history and a tertiary copy of my data (local, OneDrive, and GitHub).</p>
<p>So what&rsquo;s the catch? Well, this comes when you start to consider when and how you capture those incidental and sometimes random &ldquo;things&rdquo; that you want to drop into a note to refer to or action later, but where you may not have access to your Obsidian vault. How often do you pull up the Notes app on your phone, or find yourself simply emailing yourself a URL to an article to read later? This is a common requirement for most of us&hellip; particularly in the context of &ldquo;Personal Knowledge Management&rdquo; (PKM) workflows. It&rsquo;s also one that is bizarrely difficult to integrate with Obsidian given the &ldquo;local&rdquo; nature of the Obsidian Vault.</p>
<p>Now, there is a mobile Obsidian app. Why not use this? Well, there&rsquo;s a further constraint here in that (specific to iOS, but I believe also relevant to Android) to sync to mobile you are required to subscribe to Obsidian Sync - a premium sync service that costs £7.99 per month. I&rsquo;m the first to invest in and support subscription services that I believe add value to my life&hellip; but I&rsquo;ll be damned if I&rsquo;m going to pay an amount equivalent to Netflix / Disney+ / Amazon Prime for a very occasional scenario that&rsquo;s often better served with a quick email &ldquo;note to self&rdquo;.</p>
<h2 id="ok-so-whats-the-fix">OK, so what&rsquo;s the fix?</h2>
<p>The fix for me involves a relatively simple bit of Power Automate. Similar workflows are alluded to regularly on the Obsidian forums, but I struggled to find a decent and up to date summary of the steps involved, so cobbled together a Flow of my own to address my use case. Hopefully this write up saves someone else an hour or two of jiggery pokery down the line. A screenshot of the Power Automate can be found towards the end of this post, the actions taken are as follows:</p>
<ol>
<li>
<p>Step 1 is the trigger, initiating the Flow when an email is received that meets specific criteria. I&rsquo;m taking advantage of &ldquo;Plus Addressing&rdquo; (a topic I&rsquo;ve blogged about previously, <a href="https://www.kelvinpapp.com/using-plus-addressing-in-exchange-online/">see here</a>) to tag specific emails for processing by the Flow - &ldquo;<a href="mailto:myemail+obsidian@kelvinpapp.com">myemail+obsidian@kelvinpapp.com</a>&rdquo;. The trigger is also scoped to only fire on emails received from my work, or personal email addresses.</p>
</li>
<li>
<p>Steps 2 &amp; 3 process the email, marking it as read and then moving it to my archive (once it&rsquo;s added to Obsidian, I no longer have a need for the email&hellip; I&rsquo;ve always worked on the premise that mail in my inbox is either unread or requires a follow up, everything else is deleted or archived).</p>
</li>
<li>
<p>Step 4 takes the email body and converts it to plain text, ready for saving as a markdown file within the folder structure of my Obsidian Vault. There are some quirks with this function which account for steps 5-7 - additional line spaces are inserted when a double line space is present in the original email. This irritates me, so steps 5 and 6 define double and single space variables respectively, before step 7 uses a &ldquo;replace&rdquo; function to identify these in the plain text output of step 4 and correct them. The replace expression used is as follows:</p>
</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-Batchfile" data-lang="Batchfile"><span style="display:flex;"><span>replace
</span></span><span style="display:flex;"><span>(outputs(&#39;Convert_Email_to_Plain_Text&#39;)?[&#39;body&#39;],
</span></span><span style="display:flex;"><span>variables(&#39;Double Space&#39;),
</span></span><span style="display:flex;"><span>variables(&#39;Single Space&#39;)
</span></span><span style="display:flex;"><span><span style="color:#75715e">)</span>
</span></span></code></pre></div><ol start="4">
<li>Step 8 defines a variable for the markdown output which we populate in step 9. Step 9 is a condition which addresses another nuance of my setup depending on whether the original email has come from my personal, or corporate email account. In the case of the latter a signature is appended which I remove using another expression, this time a &ldquo;split&rdquo; function which looks for the start of my signature and only takes the text before that point. The split expression used is as follows:</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-Batchfile" data-lang="Batchfile"><span style="display:flex;"><span>split(outputs(&#39;Remove_Double_Line_Spacing&#39;),&#39;Kelvin Papp&#39;)[0]
</span></span></code></pre></div><ol start="5">
<li>The output of the condition is the &ldquo;setting&rdquo; of the output variable initialised in step 8. This is subtly different on either side of the condition - taking the direct output of step 7 in the case of my personal email, or the output of the split function above if the email has come from my corporate address. In both cases I also append some default frontmatter which I use subsequently in Obsidian:</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-TOML" data-lang="TOML"><span style="display:flex;"><span><span style="color:#a6e22e">---</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Created</span><span style="color:#960050;background-color:#1e0010">:</span> <span style="color:#a6e22e">dd</span><span style="color:#960050;background-color:#1e0010"> </span><span style="color:#a6e22e">MMMM</span><span style="color:#960050;background-color:#1e0010"> </span><span style="color:#a6e22e">yyyy</span><span style="color:#960050;background-color:#1e0010"> </span><span style="color:#a6e22e">HH</span><span style="color:#960050;background-color:#1e0010">:</span><span style="color:#a6e22e">mm</span> <span style="color:#960050;background-color:#1e0010">(</span><span style="color:#a6e22e">based</span> <span style="color:#a6e22e">on</span> <span style="color:#a6e22e">the</span> <span style="color:#a6e22e">email</span> <span style="color:#a6e22e">received</span> <span style="color:#a6e22e">time</span><span style="color:#960050;background-color:#1e0010">)</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">From</span><span style="color:#960050;background-color:#1e0010">:</span> <span style="color:#a6e22e">Recipient</span> <span style="color:#a6e22e">Email</span> <span style="color:#a6e22e">Address</span> <span style="color:#960050;background-color:#1e0010">(</span><span style="color:#a6e22e">taken</span> <span style="color:#a6e22e">from</span> <span style="color:#a6e22e">the</span> <span style="color:#a6e22e">original</span> <span style="color:#a6e22e">email</span><span style="color:#960050;background-color:#1e0010">)</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Tags</span><span style="color:#960050;background-color:#1e0010">:</span> <span style="color:#a6e22e">Work</span>, <span style="color:#a6e22e">Personal</span>, <span style="color:#a6e22e">Email</span><span style="color:#960050;background-color:#1e0010">/</span><span style="color:#a6e22e">New</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">---</span>
</span></span></code></pre></div><ol start="6">
<li>Finally, step 10 creates a markdown file using the name &ldquo;Subject.md&rdquo; (where the subject line is taken from the received email), and using the output variable defined in the steps above. This (the final bit of magic, and possible based on the flat file nature of Obsidian) is saved into the OneDrive for business folder used for my Obsidian Vault, in a dedicated &ldquo;Email Notes&rdquo; folder.</li>
</ol>
<h2 id="power-automate-flow">Power Automate Flow</h2>
<figure class="center"><img src="/img/2023/04/Power-Automate-Flow-for-Email-to-Obsidian.png"
         alt="A screenshot of the Power Automate flow being used to send email notes to Obsidian via OneDrive for Business."/>
</figure>

<h2 id="summary">Summary</h2>
<p>&hellip;and that&rsquo;s all there is to it! In a few (fairly) simple steps you can now email anything you like to yourself and have it appear automatically within Obsidian as a new note, complete with bespoke frontmatter to help you with identification and organisation of &ldquo;incidental&rdquo; notes or information you wanted to send to your future self! I find this super useful, and infinitely quicker and easier than trying to navigate a third-party notes application on my phone (assuming that was even possible without a separate subscription). I hope you do too&hellip;</p>
<p>As usual, feel free to get in touch with any questions or feedback. Hopefully more (potentially Obsidian related) content to follow very soon!</p>
]]></content>
        </item>
        
        <item>
            <title>Using Plus Addressing in Exchange Online</title>
            <link>https://www.kelvinpapp.com/using-plus-addressing-in-exchange-online/</link>
            <pubDate>Sun, 20 Mar 2022 19:48:03 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/using-plus-addressing-in-exchange-online/</guid>
            <description>It&amp;rsquo;s been a while! I first started drafting this post late last year following a discussion with a colleague at work about how useful I find this feature&amp;hellip; only to discover it was a total revelation to the person I was speaking with. Having drafted around 80% of what you see below I held back on finishing it after having my own revelation; the post was pretty dull 🙂 Fast forward though and there have been some developments that make finishing that final 20% worthwhile&amp;hellip;</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2022/03/Plus-Sign.jpg"
         alt="A plus sign on a white background"/>
</figure>

<p>It&rsquo;s been a while! I first started drafting this post late last year following a discussion with a colleague at work about how useful I find this feature&hellip; only to discover it was a total revelation to the person I was speaking with. Having drafted around 80% of what you see below I held back on finishing it after having my own revelation; the post was pretty dull 🙂 Fast forward though and there have been some developments that make finishing that final 20% worthwhile&hellip;</p>
<p>Plus Addressing is one of those nifty features that you&rsquo;ve either never heard of, or know all about and absolutely love. For those unaware plus addressing allows you route custom variations of your primary email address without the need for the creation of specific aliases - enabling you to create and issue bespoke addresses on the fly that you can subsequently track and take action against. Take the simple example of signing up to an online newsletter. Do you know that your email address won&rsquo;t be sold on to a third-party? Are you confident that unsubscribing will <em>actually</em> lead to your address being deleted or no longer used? Do you want to easily hive those communications off to a folder  for later review? By using a custom email address you can regain some control; tracing the source of spam email or implementing rules to filter out or delete ongoing and unwanted use. Typically this requires administrator intervention to define and add the SMTP alias to a mailbox. Plus addressing negates the need for this - allowing you to take control of implementing inbound address variations as and where you see fit.</p>
<p>It&rsquo;s been a standard feature for Gmail users for years - back in my Gmail days I&rsquo;d use it routinely when signing up to third-party websites. Usage is simple; append whatever you want between the username and &ldquo;@&rdquo; portion of your email address using a &ldquo;plus&rdquo; (+) symbol. For example &ldquo;<em><a href="mailto:joe.bloggs@domain.com">joe.bloggs@domain.com</a></em>&rdquo; might choose to provide &ldquo;<em><a href="mailto:joe.bloggs+retailername@domain.com">joe.bloggs+retailername@domain.com</a></em>&rdquo; as their email address. This would be delivered as normal but the &ldquo;plus&rdquo; portion of the address would remain visible, enabling a range of things such as:</p>
<ul>
<li>Automatic routing to folders using mailbox rules,</li>
<li>Visibility in the event an address being (maliciously or otherwise) passed to a third-party,</li>
<li>Automatic deletion if use of the address becomes a source of frustration etc.</li>
</ul>
<p>In many respects plus addresses operate much like mailbox aliases but with the advantage of not needing to be created in advance. You can&rsquo;t send from them - worth noting if you intend to use them to subscribe to mailing lists that require outbound email validation, or have other requirements that need you to present on the address. For this you&rsquo;ll need to rely on traditional aliases and the recently announced (preview) support for sending from these. You can discover more detail on this functionality in <a href="https://techcommunity.microsoft.com/t5/exchange-team-blog/sending-from-email-aliases-public-preview/ba-p/3070501">Sending From Email Aliases – Public Preview</a>.</p>
<h2 id="whats-the-history-with-plus-addressing-and-exchange-online">What&rsquo;s the history with Plus Addressing and Exchange Online?</h2>
<p>Plus Addressing has been available in Exchange Online since late 2020, but there&rsquo;s been a catch. The use of the &ldquo;+&rdquo; symbol is permitted within the various RFCs that underpin email address formatting (<a href="https://www.rfc-editor.org/rfc/rfc2822#section-3.4.1">RFC2822</a> / <a href="https://datatracker.ietf.org/doc/html/rfc5322">RFC5322</a> / <a href="https://datatracker.ietf.org/doc/html/rfc6854">RFC6854</a>) and has been supported by Exchange in the context of mail aliases for a number of years as a result. Microsoft&rsquo;s stance <em>has</em> been to make the feature opt-in with guidance to remove any existing &ldquo;+&rdquo; objects from mail aliases when you do to mitigate potential mail routing issues.</p>
<p>For those that wanted to opt-in, the way to do so was to enable the feature via a single PowerShell command:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>Set-OrganizationConfig -AllowPlusAddressInRecipients $true
</span></span></code></pre></div><h2 id="whats-changing">What&rsquo;s changing?</h2>
<p>Microsoft&rsquo;s approach to Plus Addressing is changing. Announced last year the feature will become <em>opt-out</em> instead of <em>opt-in</em>. A Message Centre update this weekend confirmed the timescales for this change with all tenants due to enabled by default during April and May. For some organisations - notably those with hybrid mail deployments and a heavy use of &ldquo;+&rdquo; characters in mail addresses and aliases - this introduces an element of risk. This risk is summarised in the below statement from Microsoft (taken from <a href="https://docs.microsoft.com/en-us/exchange/recipients-in-exchange-online/plus-addressing-in-exchange-online">Plus Addressing in Exchange Online</a>):</p>
<blockquote>
<p>This feature was rolled out behind a setting because, historically, customers have been able to use plusses in addresses for mailboxes in Exchange Online and on-premises servers. When this feature is enabled, Exchange Online will first check if the full address can resolve to a mailbox that the service is aware of. It is only when that resolution fails, that a plus is looked for and a second attempt to resolve the address without the plus and tag is done. This means that the feature is compatible with addresses containing plusses that Exchange Online knows about. If you relay messages to a mailbox on-premises that does not resolve in Exchange Online, message delivery will be affected. The messages will be parsed and addressed to the parsed address for example, <a href="mailto:sean@contoso.com">sean@contoso.com</a> instead of the full <a href="mailto:sean+newsletter@contoso.com">sean+newsletter@contoso.com</a>, using the example above.</p>
</blockquote>
<p>The &ldquo;<em>-AllowPlusAddressInRecipients</em>&rdquo; setting is being deprecated and replaced with a new setting which can be configured to prevent Plus Addressing functionality. If you wish to prevent Plus Addressing from being used in your organisation it&rsquo;s important you run the following command in your tenant in advance of April:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>Set-OrganizationConfig -DisablePlusAddressInRecipients $true
</span></span></code></pre></div><h2 id="summary">Summary</h2>
<p>For many organisations Plus Addressing is a neat bit of functionality that - with some minor user training and awareness - can add a great deal of end-user value. It&rsquo;s not without risk though and it&rsquo;s important that you understand the potential for issues if you have complex routing scenarios or a legacy of &ldquo;+&rdquo; symbols in your addresses. You can read more in the <a href="https://docs.microsoft.com/en-us/exchange/recipients-in-exchange-online/plus-addressing-in-exchange-online">link I posted above</a>.</p>
<p>In other news&hellip; it&rsquo;s good to be back 🙂 Social media and blogging tends to take a back seat when things get hectic. I&rsquo;d forgotten how enjoyable it is to get your head into something and play it back to (hopefully) benefit others&hellip; feel free to get in touch with any questions or feedback.</p>
]]></content>
        </item>
        
        <item>
            <title>Windows 365: An Introduction</title>
            <link>https://www.kelvinpapp.com/windows-365-an-introduction/</link>
            <pubDate>Sat, 17 Jul 2021 16:11:41 +0100</pubDate>
            
            <guid>https://www.kelvinpapp.com/windows-365-an-introduction/</guid>
            <description>One of the announcements from Inspire this week that has everyone talking is, of course, Windows 365. What is it? Where does it fit? What about Azure Virtual Desktop? Just some of the many questions I&amp;rsquo;ve seen raised, and received directly in the last few days. It’s an exciting launch – one that dramatically simplifies the approach towards Cloud Desktop for many organisations – but one that also raises questions in terms of its positioning, and its general suitability against certain use cases.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2021/07/Windows-365.png"
         alt="Windows 365"/>
</figure>

<p>One of the announcements from Inspire this week that has everyone talking is, of course, <a href="https://microsoft.com/windows365">Windows 365</a>. What is it? Where does it fit? What about <a href="https://azure.microsoft.com/en-gb/services/virtual-desktop/">Azure Virtual Desktop</a>? Just some of the many questions I&rsquo;ve seen raised, and received directly in the last few days. It’s an exciting launch – one that dramatically simplifies the approach towards Cloud Desktop for many organisations – but one that also raises questions in terms of its positioning, and its general suitability against certain use cases. Whilst the detailed technical information on Windows 365 is still sparse, there is some detail working its way through. I thought I’d take the chance to summarise what we know so far and tackle some of these questions. This won’t be close to exhaustive (and subject to change pre-release on August 2nd)&hellip; but it should help to address some of the initial things you may find yourself questioning&hellip;</p>
<h2 id="so-what-is-it">So what is it?</h2>
<figure class="center"><img src="/img/2021/07/Your-Windows-In-the-Cloud.png"
         alt="A screenshot referencing some of the benefits of Windows 365: simplicity, security, and the ability to stream to any device"/>
</figure>

<p>At its core, Windows 365 is another form of Desktop as a Service - iterating the previous move by Microsoft into this space with what <em>was</em> Windows Virtual Desktop (WVD) - now Azure Virtual Desktop (AVD). It’s built on much of the same architecture but operates on a fixed (with some caveats) price per month vs. the consumption based model applied to AVD. I&rsquo;ve written about <a href="https://www.kelvinpapp.com/getting-to-grips-with-wvd/">AVD</a> before, and covered off some of the long history I&rsquo;ve had with various Remote Desktop and VDI solutions in general. The way the market for this type of technology continues to reinvent itself to address the needs of users and business is something I find fascinating, but I can&rsquo;t argue with the need. In spite of an underlying shift to &ldquo;cloud-native&rdquo;, centralised / hosted / managed desktops (whatever term you prefer) have a place. Not only this, but advances in connectivity and technology have the potential to make this way of working more seamless than ever before.</p>
<p>Windows 365 is published in the same way as AVD so accessible across devices and platforms (Windows, MacOS, Linux, Android and iOS) using a combination of clients, apps, and browsers. You’ll be able to subscribe to either a Business or Enterprise Windows 365 desktop in a variety of VM sizes as outlined in <a href="https://twitter.com/Brinkhoff_C">Christian Brinkhoff&rsquo;s</a> excellent <a href="https://techcommunity.microsoft.com/t5/windows-it-pro-blog/get-started-with-windows-365/ba-p/2530504">blog post on the Tech Community</a>:</p>
<figure class="center"><img src="/img/2021/07/Windows-365-Sizing.png"
         alt="A screenshot of a table summarising the different VM sizes available with Windows 365"/>
</figure>

<p>In terms of key differences to AVD (beyond the charging model):</p>
<ul>
<li>The subscription and related Azure services are managed by Microsoft</li>
<li>Desktops are dedicated to the user (there’s no concept of a multi-session / pooled desktop)</li>
<li>Profiles are local (save OneDrive redirections), no FSLogix support</li>
<li>Monitoring is limited to Endpoint Analytics and in-guest / agent based alerting</li>
<li>Backup is restricted to in-guest agent based solutions, or redirection (e.g. ODfB)</li>
<li>Sizing is restricted to specific CPU / RAM combinations</li>
</ul>
<p>These differences are unsurprising in many respects… it’s more of a &ldquo;Managed Service&rdquo; than AVD, and there are constraints on access and management as a result. The more important distinctions come when you start to look at the differences between the Business and Enterprise editions of Windows 365:</p>
<h3 id="business-windows-365-desktops">Business Windows 365 Desktops:</h3>
<ul>
<li>Are provisioned as Azure AD joined VMs</li>
<li>Cannot be integrated with an Azure or on-premises network</li>
<li>Need to be managed like standalone desktop endpoints</li>
<li>Are limited to 300x endpoints per organisation</li>
</ul>
<h3 id="enterprise-windows-365-desktops">Enterprise Windows 365 Desktops:</h3>
<ul>
<li>Are attached to customer managed Azure VNets at the point of deployment</li>
<li>Are provisioned as hybrid joined VMs
<ul>
<li>The virtual network specified must have sight of Active Directory</li>
<li>Users must be synchronised between AD &amp; Azure AD</li>
<li>Azure AD Domain Services is not supported (Active Directory only)</li>
</ul>
</li>
<li>Can access corporate applications in Azure / on-premises (subject to Azure networking)</li>
<li>Connect to the internet via the customers Azure subscription (egress charges apply)</li>
<li>Require the assigned user to be licensed for Endpoint Manager</li>
<li>Are enrolled into and managed by (patching, application deployment etc.) Endpoint Manager</li>
<li>Require an Endpoint Manager license to be assigned to each user allocated a desktop</li>
</ul>
<p>The two flavours are very different in terms of pre-requisites, capability, and configuration, and further still from AVD. There are some important questions to ask when determining which is right for you:</p>
<ul>
<li>Is corporate application access required?</li>
<li>Do you use traditional Active Directory, or Azure AD only?</li>
<li>Is the storage of desktops outside of your own Azure tenant an issue?</li>
<li>Are you looking for cost-benefits associated with pooled desktops, out-of-hours shutdown, or <a href="https://azure.microsoft.com/en-gb/pricing/reserved-vm-instances/">Reserved Instances</a>?</li>
<li>How important is centralised management of your desktop and applications?</li>
<li>Does you require host-level management of the underlying VMs?</li>
</ul>
<h2 id="summary">Summary</h2>
<p>There&rsquo;s obviously much more to come on Windows 365, so any judgment or opinion now is likely to change. As it stands I find the release really exciting (a viable alternative to AVD which is highly attractive to organisations who just want simplicity), yet also slightly frustrating&hellip; Why the need for hybrid join in Enterprise? Why no support for Azure AD Domain Services? Why no VNet integration for Business Desktops? I appreciate the need for distinction, but the feature mapping seems off to me when I consider the sorts of use cases we will encounter at <a href="https://www.transparity.com">Transparity</a>. As was the case with A(W)VD, I&rsquo;m confident we&rsquo;ll see rapid progress when it comes to features and functionality&hellip; I&rsquo;m just a little impatient!</p>
<p>A side note, but I&rsquo;m not the only one excited for <a href="https://docs.microsoft.com/en-us/azure/virtual-desktop/deploy-azure-ad-joined-vm">native Azure AD join</a> (preview) in AVD, right?! 🙂</p>
]]></content>
        </item>
        
        <item>
            <title>A Dive Into Social Sharing and Hugo</title>
            <link>https://www.kelvinpapp.com/a-dive-into-social-sharing-and-hugo/</link>
            <pubDate>Sun, 28 Mar 2021 14:32:27 +0100</pubDate>
            
            <guid>https://www.kelvinpapp.com/a-dive-into-social-sharing-and-hugo/</guid>
            <description>Another slightly left-field post from me today, which follows directly from my previous post. Since transitioning the blog to Hugo, social sharing hasn&amp;rsquo;t been working in quite the way it should. I noticed this after sharing a link on Twitter only to find that the Twitter Card didn&amp;rsquo;t render in the way I&amp;rsquo;d become used to with WordPress. I&amp;rsquo;ll be honest, I&amp;rsquo;ve never really given any thought to how this works, assuming that this is just &amp;ldquo;native in the way various social media platforms interpret links.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2021/03/Social-Sharing.jpg"
         alt="An image of a phone with the Twitter Logo in front of an abstract background"/>
</figure>

<p>Another slightly left-field post from me today, which follows directly from my <a href="https://www.kelvinpapp.com/migrating-the-blog-to-github-and-hugo/">previous post</a>. Since transitioning the blog to Hugo, social sharing hasn&rsquo;t been working in quite the way it should. I noticed this after sharing a link on Twitter only to find that the <a href="https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/abouts-cards">Twitter Card</a> didn&rsquo;t render in the way I&rsquo;d become used to with WordPress. I&rsquo;ll be honest, I&rsquo;ve never really given any thought to how this works, assuming that this is just &ldquo;native in the way various social media platforms interpret links. It turns out there&rsquo;s actually (and perhaps unsurprisingly) a host of things that influence the format and content that gets pulled, all of which are done for you when you use a platform like WordPress (with a decent theme). Cue a lazy Saturday morning, the rabbit trail that is the internet, and I&rsquo;m now much more informed.</p>
<p>I thought I&rsquo;d take a moment to document my findings in the hope that it helps someone else down the line.</p>
<h2 id="its-all-about-the-meta">It&rsquo;s all about the Meta&hellip;</h2>
<p>The net result of my findings is that meta tags are <em>all important</em>. When you post a link to Twitter, LinkedIn, or various other sites there are attributes those sites look for that define how the media should be displayed. These are often (although not in all cases) based on the common &ldquo;<a href="https://ogp.me/">Open Graph</a>&rdquo; protocol, allowing developers to use a single set of &ldquo;standard&rdquo; properties that work consistently across different social platforms. These attributes set out the important characteristics of the media; the title, description, type of content, image that should be displayed, source URL etc.</p>
<p>That nice thumbnail and detail that gets generated when you post a link on LinkedIn or Facebook? That&rsquo;s Open Graph in practice and you&rsquo;ll see it used almost ubiquitously.</p>
<p>Take the (slightly edited) example below from BBC News:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-HTML" data-lang="HTML"><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">property</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;og:title&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Home - BBC News&#34;</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">property</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;og:type&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;website&#34;</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">property</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;og:description&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Visit BBC News for up-to-the-minute news, breaking news, video, audio and feature stories.&#34;</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">property</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;og:site_name&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;BBC News&#34;</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">property</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;og:locale&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;en_GB&#34;</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">property</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;article:author&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;https://www.facebook.com/bbcnews&#34;</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">property</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;article:section&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Home&#34;</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">property</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;og:url&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;https://www.bbc.co.uk/news&#34;</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">property</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;og:image&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;https://m.files.bbci.co.uk/modules/bbc-morph-news-waf-page-meta/5.1.0/bbc_news_logo.png&#34;</span>&gt;
</span></span></code></pre></div><p>Some sites - Twitter being a prime example - have their own requirements. These allow further customisation of the way that media is presented. In the case of Twitter, &ldquo;<a href="https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/abouts-cards">Cards</a>&rdquo; are used which are rendered based on proprietary meta tags. In some cases Twitter make use of Open Graph tags to assume content for these (saving the need to double up on tags, <a href="https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/markup">see here</a>) but this isn&rsquo;t always the case so you will often see Twitter specific tags listed alongside Open Graph metadata in source code.</p>
<p>The below extract is taken from the same BBC News page used above:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-HTML" data-lang="HTML"><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;twitter:card&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;summary_large_image&#34;</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;twitter:site&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;@BBCNews&#34;</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;twitter:title&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Home - BBC News&#34;</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;twitter:description&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Visit BBC News for up-to-the-minute news, breaking news, video, audio and feature stories.&#34;</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;twitter:creator&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;@BBCNews&#34;</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;twitter:image:src&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;https://m.files.bbci.co.uk/modules/bbc-morph-news-waf-page-meta/5.1.0/bbc_news_logo.png&#34;</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;twitter:image:alt&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;BBC News&#34;</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;twitter:domain&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;www.bbc.co.uk&#34;</span>&gt;
</span></span></code></pre></div><p>Why are these tags important? Well without them you can get some &ldquo;odd&rdquo; behaviour when posting links. In some cases you&rsquo;ll see a basic interpretation of the link content in a vanilla format. Worst case you may find that content doesn&rsquo;t present as a &ldquo;media&rdquo; entry at all - just an ugly, naked URL.</p>
<p>We all know and appreciate the importance of getting this right on social media. In a world of swiping and scrolling not standing out can be the difference between your content being noticed or not&hellip;</p>
<h2 id="so-how-does-hugo-handle-metadata-for-link-sharing">So how does Hugo handle metadata for link sharing?</h2>
<p>I mentioned above that some platforms, like WordPress, take care of meta tagging for you. This is also true of static site generators like <a href="https://gohugo.io/">Hugo</a>, <em>however</em> the additional (relative) complexity of these solutions vs. &ldquo;do it for you&rdquo; services introduces margin for error and puts more emphasis on understanding <em>how</em> this metadata is generated in the background. For the most part with Hugo, metadata is generated based on the <a href="https://gohugo.io/content-management/front-matter/">Front Matter</a> defined in your input content and couples this with <a href="https://gohugo.io/templates/internal/">internal templates</a> (not theme specific) to convert this into the required properties for social sharing.</p>
<p>Let&rsquo;s look at some of the key properties needed to make this work &ldquo;elegantly&rdquo; with Twitter cards and the Hugo properties that feed them, specifically the &ldquo;<a href="https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/summary-card-with-large-image">Summary Card with Large Image</a>&rdquo; option which provides the most prominent summary for Twitter sharing:</p>
<ul>
<li><strong>Title:</strong> Generated from the post name, typically set with the &ldquo;title&rdquo; property in front matter</li>
<li><strong>Description:</strong> Automatically generated based on the post content, or set manually using th &ldquo;description&rdquo; property in front matter</li>
<li><strong>Site:</strong> The Twitter user associated with the content, best set in the config.toml file (.Site.Social.twitter)</li>
<li><strong>Image:</strong> The thumbnail to be used when sharing (required to use the &ldquo;card with large image&rdquo; option)</li>
</ul>
<p>It&rsquo;s worth referring to the internal template (twitter_cards) used to generate Twitter metadata <a href="https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/twitter_cards.html">which can be found here</a> to explain some of these properties and how they are used in more detail:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-HTML" data-lang="HTML"><span style="display:flex;"><span>{{- with $.Params.images -}}
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;twitter:card&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;summary_large_image&#34;</span>/&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;twitter:image&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;{{ index . 0 | absURL }}&#34;</span>/&gt;
</span></span><span style="display:flex;"><span>{{ else -}}
</span></span><span style="display:flex;"><span>{{- $images := $.Resources.ByType &#34;image&#34; -}}
</span></span><span style="display:flex;"><span>{{- $featured := $images.GetMatch &#34;*feature*&#34; -}}
</span></span><span style="display:flex;"><span>{{- if not $featured }}{{ $featured = $images.GetMatch &#34;{*cover*,*thumbnail*}&#34; }}{{ end -}}
</span></span><span style="display:flex;"><span>{{- with $featured -}}
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;twitter:card&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;summary_large_image&#34;</span>/&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;twitter:image&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;{{ $featured.Permalink }}&#34;</span>/&gt;
</span></span><span style="display:flex;"><span>{{- else -}}
</span></span><span style="display:flex;"><span>{{- with $.Site.Params.images -}}
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;twitter:card&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;summary_large_image&#34;</span>/&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;twitter:image&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;{{ index . 0 | absURL }}&#34;</span>/&gt;
</span></span><span style="display:flex;"><span>{{ else -}}
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;twitter:card&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;summary&#34;</span>/&gt;
</span></span><span style="display:flex;"><span>{{- end -}}
</span></span><span style="display:flex;"><span>{{- end -}}
</span></span><span style="display:flex;"><span>{{- end }}
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;twitter:title&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;{{ .Title }}&#34;</span>/&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;twitter:description&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;{{ with .Description }}{{ . }}{{ else }}{{if .IsPage}}{{ .Summary }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }}{{ end -}}&#34;</span>/&gt;
</span></span><span style="display:flex;"><span>{{ with .Site.Social.twitter -}}
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;twitter:site&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;@{{ . }}&#34;</span>/&gt;
</span></span><span style="display:flex;"><span>{{ end -}}
</span></span><span style="display:flex;"><span>{{ range .Site.Authors }}
</span></span><span style="display:flex;"><span>{{ with .twitter -}}
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;twitter:creator&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;@{{ . }}&#34;</span>/&gt;
</span></span><span style="display:flex;"><span>{{ end -}}
</span></span><span style="display:flex;"><span>{{ end -}}
</span></span></code></pre></div><p>Here, we can see exactly how Hugo generates the &ldquo;twitter:&rdquo; metadata, and how the decision is made as to which &ldquo;card&rdquo; type to use. This is based entirely on the presence of a suitable image which is identified by looking (in order) for the following:</p>
<ol>
<li>A specified image, defined in the front matter as noted above</li>
<li>An image within the post content containing the word feature, cover, or thumbnail within the name</li>
<li>An image specified within the site configuration (i.e. the config.toml file defining global site properties)</li>
</ol>
<p>If any of the above are identified, the &ldquo;twitter:card&rdquo; tag is set to &ldquo;summary_large_image&rdquo;. In all other scenarios, this is set to &ldquo;summary&rdquo; which is far less prominent&hellip;</p>
<p>In my case, I&rsquo;d not specified <strong>any</strong> of these so when sharing a post on Twitter only the summary card template was being used. In addition, the Open Graph &ldquo;image&rdquo; property wasn&rsquo;t set - so sites other than Twitter depending on this value to render &ldquo;rich&rdquo; content may also have failed. I say &ldquo;may&rdquo; because some sites (for example, LinkedIn) will render images present within a post if they aren&rsquo;t set explicitly in metadata. This caused me some extra head-scratching yesterday when I was trying to get to the bottom of what was happening with this site&hellip;</p>
<p>I&rsquo;ve since modified my &ldquo;posts&rdquo; archetype so that my front matter is pre-populated with an &ldquo;images&rdquo; option for me to specify&hellip; hopefully preventing me from forgetting in future (or needing to remember to name my post images in a certain way). I will also be setting a fallback image in my site configuration, just in case. An example of the front matter I&rsquo;m now defining is as follows:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">title</span>: <span style="color:#e6db74">&#34;Migrating the Blog to GitHub and Hugo&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">author</span>: <span style="color:#ae81ff">Kelvin Papp</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">type</span>: <span style="color:#ae81ff">posts</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">date</span>: <span style="color:#e6db74">2021-03-23T20:05:45Z</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">draft</span>: <span style="color:#66d9ef">false</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">toc</span>: <span style="color:#66d9ef">false</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">images</span>: 
</span></span><span style="display:flex;"><span>  - <span style="color:#ae81ff">/img/2021/03/Hugo-Logo-Social.png</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">url</span>: <span style="color:#ae81ff">/migrating-the-blog-to-github-and-hugo/</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">categories</span>:
</span></span><span style="display:flex;"><span>  - <span style="color:#ae81ff">Azure</span>
</span></span><span style="display:flex;"><span>  - <span style="color:#ae81ff">Personal</span>
</span></span><span style="display:flex;"><span>  - <span style="color:#ae81ff">Microsoft</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">tags</span>:
</span></span><span style="display:flex;"><span>  - <span style="color:#ae81ff">Azure</span>
</span></span><span style="display:flex;"><span>  - <span style="color:#ae81ff">Hugo</span>
</span></span><span style="display:flex;"><span>  - <span style="color:#ae81ff">Blog</span>
</span></span></code></pre></div><p>This results in the following tag creation for those interested:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-HTML" data-lang="HTML"><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">itemprop</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;name&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Migrating the Blog to GitHub and Hugo&#34;</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">itemprop</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;description&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Ever since I started the blog (two years ago today as it happens!) I&#39;ve been using self-hosted WordPress as my platform of choice...&#34;</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">itemprop</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;datePublished&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;2021-03-23T20:05:45+00:00&#34;</span> /&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">itemprop</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;dateModified&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;2021-03-23T20:05:45+00:00&#34;</span> /&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">itemprop</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;wordCount&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;1213&#34;</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">itemprop</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;image&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;https://www.kelvinpapp.com/img/2021/03/Hugo-Logo-Social.png&#34;</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">itemprop</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;keywords&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Azure,Hugo,Blog,&#34;</span> /&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;twitter:card&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;summary_large_image&#34;</span>/&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;twitter:image&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;https://www.kelvinpapp.com/img/2021/03/Hugo-Logo-Social.png&#34;</span>/&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;twitter:title&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Migrating the Blog to GitHub and Hugo&#34;</span>/&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;twitter:description&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Ever since I started the blog (two years ago today as it happens!) I&#39;ve been using self-hosted WordPress as my platform of choice...&#34;</span>/&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;twitter:site&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;@kelvinpapp&#34;</span>/&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">property</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;og:title&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Migrating the Blog to GitHub and Hugo&#34;</span> /&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">property</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;og:description&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Ever since I started the blog (two years ago today as it happens!) I&#39;ve been using self-hosted WordPress as my platform of choice...&#34;</span> /&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">property</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;og:type&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;article&#34;</span> /&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">property</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;og:url&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;https://www.kelvinpapp.com/migrating-the-blog-to-github-and-hugo/&#34;</span> /&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">property</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;og:image&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;https://www.kelvinpapp.com/img/2021/03/Hugo-Logo-Social.png&#34;</span> /&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">property</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;article:published_time&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;2021-03-23T20:05:45+00:00&#34;</span> /&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">property</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;article:modified_time&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;2021-03-23T20:05:45+00:00&#34;</span> /&gt;
</span></span></code></pre></div><h2 id="some-useful-tools">Some useful tools&hellip;</h2>
<p>I discovered, during my troubleshooting, that both LinkedIn and Twitter have validation tools which allow you to test how your media will present when used in posts on their sites&hellip; these are super useful and worth bearing in mind if you encounter issues like me&hellip;</p>
<p>They can be found as follows:</p>
<ul>
<li><a href="https://cards-dev.twitter.com/validator?">Twitter Card Validator</a></li>
<li><a href="https://www.linkedin.com/post-inspector/">LinkedIn Post Inspector</a></li>
</ul>
<hr>
<p>I hope this helps someone&hellip; a niggly issue for sure, but if you&rsquo;re at all like me it&rsquo;ll drive you mad to see links being posted with inane &ldquo;summary&rdquo; cards on Twitter, or appearing elsewhere with random images associated (or perhaps none at all!)! All power to the meta!</p>
]]></content>
        </item>
        
        <item>
            <title>Migrating the Blog to GitHub and Hugo</title>
            <link>https://www.kelvinpapp.com/migrating-the-blog-to-github-and-hugo/</link>
            <pubDate>Tue, 23 Mar 2021 20:05:45 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/migrating-the-blog-to-github-and-hugo/</guid>
            <description>Ever since I started the blog (two years ago today as it happens!) I&amp;rsquo;ve been using self-hosted WordPress as my platform of choice. This felt like a no-brainer at the outset - a platform I&amp;rsquo;d dabbled with in the past and used almost exclusively in the tech blog community. It&amp;rsquo;s well catered for; there are a multitude of plugins, some well structured and nicely designed themes, and plenty of resources to help you get up and running quickly.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2021/03/Hugo-Logo.png"
         alt="The Hugo Static Site Generator Logo"/>
</figure>

<p>Ever since I started the blog (two years ago today as it happens!) I&rsquo;ve been using self-hosted WordPress as my platform of choice. This felt like a no-brainer at the outset - a platform I&rsquo;d dabbled with in the past and used almost exclusively in the tech blog community. It&rsquo;s well catered for; there are a multitude of plugins, some well structured and nicely designed themes, and plenty of resources to help you get up and running quickly. For the most part it&rsquo;s served the purpose well. It&rsquo;s not without fault though&hellip; and for some time now I&rsquo;ve felt it might be time for a change.</p>
<p>I&rsquo;ve written a little bit previously about how the site <em>was</em> configured (<a href="https://www.kelvinpapp.com/configuring-azure-cdn-for-app-service/">see here</a>). In summary an Azure App Service, standalone MySQL Azure Database, SendGrid and - more recently - Azure CDN. This latter service has been subject to some change. Initially I served all content via the CDN (as per the blog post), but quickly ran into issues with caching when publishing new content. I eventually settled on a plugin to re-write image and theme URLs to the CDN - meaning generated page content was published direct via the Web App, and heavier content via the CDN. The net result of this was good; minimal maintenance, pretty reasonable performance, and a CMS in WordPress that was intuitive and (generally) reliable&hellip;</p>
<h2 id="so-why-change">So why change?</h2>
<p>Well&hellip; in short, the &ldquo;good&rdquo; hasn&rsquo;t <em>really</em> lasted. I&rsquo;ve found (increasingly) that site performance is mediocre. Page load times are pretty high (in spite of plenty of grunt on the App Service side), and no matter what database and image optimisation I&rsquo;ve tried I&rsquo;ve struggled to get things &ldquo;snappy&rdquo;. My Google Analytics stats back this up. WordPress is great, but a little &ldquo;black box&rdquo; at times which makes troubleshooting and performance optimsation a pain. Couple that with seemingly endless engine, theme, and plugin updates, and I&rsquo;ve found I spend more time &ldquo;tinkering&rdquo; than I do thinking about content. Enjoyable as that sometimes is (the tinkering, that is!), it isn&rsquo;t what I set out to do.</p>
<p>Alongside all of the above I&rsquo;ve been aware that a growing number of sites I follow have been moving to alternative platforms. In many cases, for reasons much like my own.</p>
<p>There&rsquo;s been a growing &ldquo;buzz&rdquo; around static site generators (SSGs) which provide many of the benefits of CMS systems like WordPress (e.g. extensive theme libraries which can be applied &ldquo;dynamically&rdquo; to static content), but without the performance or maintenance overhead of a full blown CMS. You&rsquo;ve likely heard of some of these&hellip; <a href="https://jekyllrb.com/">Jekyll</a>, <a href="https://www.gatsbyjs.com/">Gatsby</a>, and <a href="https://gohugo.io/">Hugo</a> are some popular examples.</p>
<h2 id="what-is-a-static-site-generator">What is a Static Site Generator?</h2>
<p>The concept is simple. You input your content - usually in the form of markdown files that define the high level structure and layout - and you process these using your SSG of choice, in accordance with a site configuration file. This configuration file tells your SSG what to do; what theme to apply and how to define certain site settings - date / time format, theme specific variables, and global site information such as the base URL, title, author details and sharing options etc&hellip; These options are often theme specific, but highly configurable in much the same way as full blown CMS solutions like WordPress are (albeit via text input, vs. a nice GUI).</p>
<p>The end result is an output folder containing a dynamically generated static site that combines the layout you&rsquo;ve defined, and the content you&rsquo;ve created into a flat-file website. Want to write another post? All you need to do is upload a markdown file containing your content to the relevant folder, and reprocess. Upload the output to your hosting platform of choice, and you have a website that has many of the benefits of a dynamic site but coupled with those of a static equivalent&hellip; more secure (due to no database), better performing, and next to no &ldquo;server&rdquo; maintenance.</p>
<h2 id="what-have-i-done">What have I done?!</h2>
<p>Well, those of you who have visited before will already have noticed that the look and feel is slightly different. No, I haven&rsquo;t just changed the theme. I&rsquo;ve gone all in with the static site approach&hellip; as of a few days ago this site is no longer built on WordPress. All the content on this site is now generated via <a href="https://gohugo.io/">Hugo</a>. I&rsquo;m staggered at the performance improvement and the (relative) simplicity of the transition. Aside from some time tweaking embedded URLs and some formatting oddities of the markdown export tool I used against WordPress, the process couldn&rsquo;t have been much easier.</p>
<figure class="right-floated"><img src="/img/2021/03/ASWA-Build-Presets.jpg"
         alt="A list of the supported build presets that can be used with Azure Static Web Apps and GitHub"/>
</figure>

<p>It doesnt end there though. The observent of you will have clocked <a href="https://www.github.com">GitHub</a> in the title. Where does that fit?</p>
<p>This, for me, is where the magic of Cloud services comes together. Using SSGs in isolation is quite cool&hellip; you can install locally and run the (in my case) Hugo process to generate content from, and to, a local folder. One of the things that tipped my decision to migrate though, was my discovery of the new(ish) <a href="https://azure.microsoft.com/en-gb/services/app-service/static/">Azure Static Web App service</a>. Static Web Apps are a preview feature (and have the advantage of being free - for now) that integrate with GitHub repositories to automate the processing and delivery of web content based on common frameworks or static site generators&hellip; Hugo is one of these.</p>
<p>When you deploy a Static Web App, you connect it to a GitHub repository - telling it in the process <em>which</em> deployment framework your source repository uses. This creates an automation workflow in your linked repo, triggered whenever a Git commit is made that reprocesses the contents and uploads the revised content to your Web App. This enables updates from anywhere using a simple git push command! To top things off&hellip; you can also commit to a branch, initiate a pull request, and have your &ldquo;staging&rdquo; site provisioned into a separate envronment in your Web App. When the pull request is closed and the branch merged with main / master, the staging site is migrated into production. Magic!</p>
<figure class="center"><img src="/img/2021/03/ASWA-Environments.jpg"
         alt="A view of the Environments section within an Azure Web App, showing the presence of a staging site aligned to GitHub repo pull requests"/>
</figure>

<p>I love this new workflow, and increasingly enjoy working with markdown files / git in my local editor&hellip; largely as a result of contributing more regularly to Microsoft Docs. There&rsquo;s something about the simplicity of plain text and the process that feels efficient and (quite ironically) modern. Performance is fantastic, and I have full ability to test and revert changes as and when I need to.</p>
<p>You can read more about the process for integrating Hugo (and others) with GitHub and Azure Static Web Apps <a href="https://docs.microsoft.com/en-gb/azure/static-web-apps/publish-hugo">here</a>, if interested.</p>
<h2 id="summary">Summary</h2>
<p>I still have some work to do on the new format. There are some layout tweaks I want to make and some extensions I&rsquo;d like to integrate to make interactions (both sharing, and commenting) a bit more &ldquo;blog like&rdquo;. Hopefully you&rsquo;ll agree the new look isn&rsquo;t too shabby though 👌 There&rsquo;s no going back for me&hellip; What started out as a bit of a learning exercise to get more comfortable with GitHub has become a new way of creating content that I&rsquo;m super happy with.</p>
<p>I&rsquo;d encourage those of you wedded to CMS platforms to take a look. It may not be everyone&rsquo;s cup of tea, but for me it&rsquo;s a case of goodbye WordPress, long live GitHub and SSG!</p>
]]></content>
        </item>
        
        <item>
            <title>What’s New? February 2021 Edition</title>
            <link>https://www.kelvinpapp.com/whats-new-february-2021-edition/</link>
            <pubDate>Sat, 13 Feb 2021 17:07:54 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/whats-new-february-2021-edition/</guid>
            <description>Barely a day goes by without some form of Microsoft Cloud related announcement. We&amp;rsquo;ve come to accept that not only does Cloud move quickly, but that staying up to date is a constant battle. I find myself trawling various blogs, message centres, and Twitter accounts almost daily&amp;hellip; Whilst these are pretty accessible to those that want to go digging for what&amp;rsquo;s new I&amp;rsquo;ve considered posting a periodic round up on here a few times - consolidating some of my own findings, and acting as a signpost for others looking to explore some of the key announcements.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2021/02/Message-Center-February-2021.png"
         alt="A screenshot of the Microsoft 365 Message Centre"/>
</figure>

<p>Barely a day goes by without some form of Microsoft Cloud related announcement. We&rsquo;ve come to accept that not only does Cloud move quickly, but that staying up to date is a constant battle. I find myself trawling various blogs, message centres, and Twitter accounts almost daily&hellip; Whilst these are pretty accessible to those that want to go digging for what&rsquo;s new I&rsquo;ve considered posting a periodic round up on here a few times - consolidating some of my own findings, and acting as a signpost for others looking to explore some of the key announcements.</p>
<p>So here goes&hellip; a round-up of a few of my key takeaways so far in February:</p>
<h2 id="microsoft-365">Microsoft 365</h2>
<p><a href="https://www.microsoft.com/en-gb/microsoft-viva">Microsoft Viva</a>. What Microsoft blog worth its salt would let February pass without at least some reference to Viva, Microsoft&rsquo;s new Employee Experience &amp; Engagement platform?! I say <em>platform</em>, more suite of services given the spread of functionality across <a href="https://www.microsoft.com/en-gb/microsoft-viva/topics/overview">Topics</a>, <a href="https://resources.techcommunity.microsoft.com/viva-connections/">Connections</a>, <a href="https://resources.techcommunity.microsoft.com/viva-learning/">Learning</a>, and <a href="https://insights.office.com/VivaInsights/">Insights</a>. Each of these is probably worthy of a post in itself. For now I&rsquo;d encourage you to have a read of Microsoft&rsquo;s <a href="https://bit.ly/36OCTBQ">&ldquo;People Powered Workplace&rdquo;</a> e-book. It&rsquo;s fair to say there&rsquo;s an element of consolidation and rebranding at the heart of Viva, but I&rsquo;m keen not to diminish the impact it&rsquo;s likely to have. Information is lacking in some areas as things stand. More to follow soon.</p>
<p>The all new (well, mostly new) <a href="https://security.microsoft.com/homepage">Microsoft 365 Security Center</a>. A frustration for many has been the plethora of portals that need to be used for the management of M365. Security alone is (was) scattered across no less than 4. No more. Defender for Endpoint, Microsoft 365 Defender, and a number of other controls previously only available in the older Office 365 Security &amp; Compliance Center are now consolidated. Is there more to do? For sure. This is a great start though, and greatly simplifies day to day administration.</p>
<p>You can now sort, search, and filter your Conditional Access policies! Small as this sounds, this <em>greatly</em> eases CA administration in complex environments. This is public preview, so comes with some caveats&hellip; you can <a href="https://techcommunity.microsoft.com/t5/azure-active-directory-identity/search-sort-and-filter-for-conditional-access-is-now-in-public/ba-p/1994699">read more about the new experience here</a>.</p>
<p>There&rsquo;s a <a href="https://admin.microsoft.com/?ref=MessageCenter/:/messages/MC238782">new Teams Pro service plan</a>. The interest here (for me, anyway) is in the future vs. what this means now. This doesn&rsquo;t introduce anything new. Teams Pro becomes the default service incorporated into M365 and O365 SKUs effective from March. I do anticipate some future changes though, specifically the (final) retirement of the Skype for Business service plan and (I suspect) some clarity around consumer vs. enterprise editions of the Teams service. Time will tell&hellip;</p>
<p>We&rsquo;ve had another update to the <em>ongoing</em> legacy authentication story (other words may be more appropriate!). I&rsquo;ve blogged about this previously <a href="https://www.kelvinpapp.com/goodye-basic-authentication/">see here</a>, and should stress that organisations relying on legacy authentication should continue to focus their efforts on removing it from their environments. <strong>Urgently</strong>. That said, we&rsquo;ve seen a relaxing to the timeline previously being followed by Microsoft during February. In their <a href="https://techcommunity.microsoft.com/t5/exchange-team-blog/basic-authentication-and-exchange-online-february-2021-update/ba-p/2111904">latest blog post</a> the Exchange Team softened the approach being taken this year. If you are using legacy protocols, they will <em>continue to be available</em>. If you are not, you should anticipate their removal in line with the previous plan.</p>
<h2 id="azure">Azure</h2>
<p><a href="https://azure.microsoft.com/en-gb/updates/general-availability-soft-delete-for-azure-file-shares-is-now-on-by-default-for-new-storage-accounts/">Soft Delete for Azure file shares is now enabled by default</a> (for new Storage Accounts). I read someone&rsquo;s experience of using this in practice on Twitter this week&hellip; a life-saver for you if you happen to have been unlucky (or careless?!) enough to delete something you shouldn&rsquo;t have. <a href="https://docs.microsoft.com/en-gb/azure/storage/files/storage-files-prevent-file-share-deletion">Read more here</a>.</p>
<p>The <a href="https://docs.microsoft.com/en-gb/azure/architecture/browse/">Azure Achitecture centre</a> is a fantastic resource for those involved in the design and deployment of services on Azure. You can find reference architectures, sample diagrams, confirm recommended practices, and a whole lot more. This month it&rsquo;s had a re-skin and re-launch, go and check it out!</p>
<p><a href="https://azure.microsoft.com/en-gb/updates/acm-for-payg-azure-gov/">Cost Management is now available for Government PAYG subscriptions</a>. Cost Management is one of my favourite features, and now available across all major subscription types (regular PAYG, EA, CSP, Sponsorship, and now Government tenant PAYG). You can cut and shut your spend across resource groups, subscriptions, resource types, and tags, set spend thresholds and alerts, benefit from Azure Advisor recommendations, and a whole lot more. If you haven&rsquo;t spent at least a bit of time in the Cost Management section of the Azure portal you really should&hellip; check it out.</p>
<p>Yet another Azure region is in the works. <a href="https://azure.microsoft.com/en-us/blog/microsoft-will-establish-its-next-us-datacenter-region-in-georgia-s-fulton-and-douglas-counties/">Enter East US 3</a>. OK&hellip; so this may be of limited interest to my British and EU followers, but every expansion of the Azure platform is exciting, right?! More choice for multi-nationals looking for a local point of presence, another option for DR replication, and further evidence that Microsoft are here for the long haul. Standing up a new region is no mean feat. Multiple datacentres. Multiple services. A host of positions to fill to make it operationally viable. The pace Microsoft continue to move at in this space never ceases to amaze me&hellip;</p>
<p>More accreditations. This time in the form of extended <a href="https://azure.microsoft.com/en-gb/updates/172-azure-offerings-achieve-hitrust-certification/">HITRUST CSF</a>, and a first <a href="https://azure.microsoft.com/en-gb/updates/azure-achieves-its-first-pci-3ds-certification/">PCI 3-D Secure (PCI 3DS)</a> certification. A full rundown of the (copious) certification standards the Azure platform aligns to can be found on the <a href="https://servicetrust.microsoft.com/">Service Trust portal</a>&hellip; needless to say though, the list is both <em>ridiculous</em> and highly impressive from the perspective of someone who looks after Security and Compliance. Concerned about data or platform security? It won&rsquo;t be the platform that lets you down&hellip;</p>
<h2 id="certifications">Certifications</h2>
<p>I was pleased to see a number of new Security &amp; Compliance certifications finally launch this month: <a href="https://docs.microsoft.com/en-us/learn/certifications/exams/sc-200">SC-200</a>, <a href="https://docs.microsoft.com/en-us/learn/certifications/exams/sc-300">SC-300</a>, and <a href="https://docs.microsoft.com/en-us/learn/certifications/exams/sc-400">SC-400</a>. I had the <strong>huge</strong> privilege of being involved in the creation of the blueprint for two of these exams and it&rsquo;s great to see them go live.</p>
<p>All three are in beta for the foreseeable future, so those tempted to take one (or all!) will need to wait for their results&hellip; I&rsquo;ll include myself in that list, and will post some first thoughts in the coming weeks as I do.</p>
<hr>
<p>So there we are&hellip; just a few of the many noteworthy things that have happened so far in February. If you want to discover more I&rsquo;d highly recommend you keep an eye on the <a href="https://azure.microsoft.com/en-gb/blog/topics/updates/">Azure Updates page</a> and the <a href="https://admin.microsoft.com/#/MessageCenter">Microsoft 365 Message Centre</a>. That aside, give me a follow on <a href="https://twitter.com/kelvinpapp">Twitter</a> where I try to highlight anything new and noteworthy as I discover it.</p>
<p>Happy learning, and happy reading&hellip; What&rsquo;s your favourite February announcement?</p>
]]></content>
        </item>
        
        <item>
            <title>What happened to the blog?</title>
            <link>https://www.kelvinpapp.com/what-happened-to-the-blog/</link>
            <pubDate>Sat, 30 Jan 2021 16:06:17 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/what-happened-to-the-blog/</guid>
            <description>You could be forgiven for thinking that this site had been kicked into the weeds&amp;hellip; lost in the myriad of other well-intentioned, but ultimately abandoned blogs that litter the internet. That was never the plan. I was asked specifically &amp;ldquo;what happened to the blog&amp;rdquo; recently and struggled for an answer. Having reflected, I thought perhaps I should pull my finger out and post something. It seems some of you like what you read on here (indeed, I&amp;rsquo;ve seen a good amount of continued traffic in spite of no posts of late).</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2021/01/Tumbleweed.jpg"
         alt="Tumbleweed..."/>
</figure>

<p>You could be forgiven for thinking that this site had been kicked into the weeds&hellip; lost in the myriad of other well-intentioned, but ultimately abandoned blogs that litter the internet. That was never the plan. I was asked specifically &ldquo;what happened to the blog&rdquo; recently and struggled for an answer. Having reflected, I thought perhaps I should pull my finger out and post <em>something</em>. It seems some of you like what you read on here (indeed, I&rsquo;ve seen a good amount of continued traffic in spite of no posts of late). Perhaps surprisingly - given the lack of content - I also enjoy putting the posts together that end up on here 🙂</p>
<p>There&rsquo;s something quite therapeutic about putting metaphorical pen to paper. Whether what gets written ends up getting posted is another question altogether&hellip; Irrespective, the process of learning, documenting, and sharing my thoughts is an enjoyable one. I don&rsquo;t write to get feedback, but I do enjoy the interactions that come from putting content out there. I also appreciate the messages that come from people who have learned something new, or gained some sort of insight from my ramblings and taken the time to let me know. I&rsquo;ve missed all of those things in the last 4-5 months.</p>
<h2 id="so-what-happened">So what happened?</h2>
<p>So back to the point, what happened to the blog? Did I consciously stop writing? Was there nothing of interest to post after <a href="https://www.kelvinpapp.com/what-is-continuous-access-evaluation/">Continuous Access Evaluation</a>? Did something happen? The short answer is none of those things. Life just got in the way, as I&rsquo;m sure it has for most people of late.</p>
<p>It&rsquo;s been a strange but busy few months. Lockdown 2 in the UK&hellip; closely followed by 3. Schools closed once again. An immensely busy (but successful) period at work, coupled with a role change that&rsquo;s added some healthy (but enjoyable) pressure. I&rsquo;ve simultaneously had both the most, and least time at my disposal than at any other point in my life. The truth of it is that the blog has taken a back seat at a time where I wish it hadn&rsquo;t. There have been some failed attempts at posting, some half written blogs. Plenty of inspiration, but (perhaps) not enough motivation, that&rsquo;s on me.</p>
<h2 id="is-the-blog-done">Is the blog done?</h2>
<p>So is the blog done? In short, no 🙂 There&rsquo;s certainly no lack of noteworthy tech to post about&hellip; Cloud adoption has sky-rocketed in the last year or so (for obvious reasons), as has the pace of innovation and rate which we&rsquo;re seeing some <em>awesome</em> new things come to market from Microsoft. I&rsquo;ve never been more excited to be associated with a vendor and set of technologies at a point in my career.</p>
<p>I can&rsquo;t promise posts on a schedule, nor can I guarantee an influx of content in the coming days / weeks on the back of this one. I do though have every intention of getting back on the wagon&hellip; and I hope those of you that follow will continue to check in and feedback.</p>
<p>Watch this space&hellip;</p>
]]></content>
        </item>
        
        <item>
            <title>What is Continuous Access Evaluation?</title>
            <link>https://www.kelvinpapp.com/what-is-continuous-access-evaluation/</link>
            <pubDate>Mon, 31 Aug 2020 19:14:23 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/what-is-continuous-access-evaluation/</guid>
            <description>I&amp;rsquo;d not spotted this in my own tenant, but an eagle eyed user (Thomas Naunheim) flagged it on Twitter yesterday&amp;hellip; much to my (nerdy!) excitement. Continuous Access Evaluation (CAE) is now in Public Preview! Those of you who follow my ramblings will know I&amp;rsquo;m a sucker for identity related feature enhancements. Whilst this ticks that box, it also represents a whole lot more&amp;hellip; ushering in a significant change to the way that risky and non-compliant sessions are managed by Azure AD.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2020/08/Continuous-Access-Evaluation-Portal.jpg"
         alt="A screenshot of the Continuous Access Evaluation Preview pane"/>
</figure>

<p>I&rsquo;d not spotted this in my own tenant, but an <a href="https://twitter.com/Thomas_Live/status/1300103347203170304?s=20">eagle eyed user</a> (Thomas Naunheim) flagged it on Twitter yesterday&hellip; much to my (nerdy!) excitement. Continuous Access Evaluation (CAE) is now in Public Preview! Those of you who follow my ramblings will know I&rsquo;m a sucker for identity related feature enhancements. Whilst this ticks that box, it also represents a whole lot more&hellip; ushering in a significant change to the way that risky and non-compliant sessions are managed by Azure AD. I thought it would be worth taking some time to explore the feature; outlining what it is and what it might mean for you&hellip;</p>
<p>Continuous Access Evaluation (CAE) was <a href="https://techcommunity.microsoft.com/t5/azure-active-directory-identity/moving-towards-real-time-policy-and-security-enforcement/ba-p/1276933">first mentioned</a> a few months ago in the Azure AD Tech Community blog. Building on open standards <a href="https://en.wikipedia.org/wiki/OpenID_Connect">OIDC</a> and <a href="https://en.wikipedia.org/wiki/OAuth">OAuth 2.0</a>, CAE makes it possible for user sessions to be evaluated in real time. This enables more effective and robust policing of user access, and alignment of <a href="https://www.kelvinpapp.com/principles-of-zero-trust/">Zero Trust</a> principles.</p>
<h2 id="whats-changing">What&rsquo;s changing?</h2>
<figure class="right-floated"><img src="/img/2020/08/CA-Session-Controls-Dialogue.jpg"
         alt="The interface within Conditional Access settings which allows the customisation of session times using the Sign-in frequency setting."/>
</figure>

<p>Let&rsquo;s consider how access is governed under during a &ldquo;normal&rdquo; session today. When a user accesses an online service (e.g. Exchange Online), requests are authorised via tokens issued by the authentication provider (Azure AD). These are provided at the point a successful authentication takes place, with a default validity of one hour. During this time all requests from the presenting party are authorised. Whilst we can manipulate this using Conditional Access session controls (see image) or by <a href="https://docs.microsoft.com/en-gb/azure/active-directory/develop/active-directory-configurable-token-lifetimes">modifying token lifetimes</a>, in either scenario we&rsquo;re reliant on a period of time passing before a request is refused. This isn&rsquo;t always ideal.</p>
<p>Why does this matter? Consider the scenario where an administrator needs to block access to a service immediately by disabling an account. Under the &ldquo;normal&rdquo; model the right to access is maintained until such time as the token refresh interval is reached. Only at this point is the user access denied which may not be desirable (consider a bad leaver). In another example, a user might legitimately satisfy a Conditional Access policy based on location (such as the corporate office) and then reappear in an unauthorised location within the session lifetime. In these examples we would prefer the session to be invalidated via the account being disabled, or through re-evaluation of the request by Conditional Access.</p>
<p>Continuous Access Evaluation Protocol (CAEP) changes all of this, providing a way for the resource provider (relaying party) to be notified by the identity provider where tokens should no longer be honoured. The trigger for this could be any number of things&hellip; a state change, a security event, an administrative action. Relaying parties will also be able to synchronise key policy elements to enable proactive session termination (i.e. not based on the IDP issuing a signal). Irrespective, and regardless of the token validity, the user can be prompted by the resource provider to re-authenticate – potentially denying access. Very cool!</p>
<h2 id="enabling-continuous-access-evaluation">Enabling Continuous Access Evaluation</h2>
<p>CAE can be enabled within the Security section of the Azure AD Portal <a href="https://aad.portal.azure.com/#blade/Microsoft_AAD_IAM/SecurityMenuBlade/ContinuousAccessEvaluation">direct link</a>, however you should be aware of some limitations in the short term. Obviously &ldquo;preview&rdquo; carries some caveats&hellip; limited support, likely to undergo some changes etc. etc. I don&rsquo;t need to tell you that 🙂 Unique to CAE though are some specifics around where / how it applies.</p>
<p>First and foremost, CAE assumes &ldquo;compatible&rdquo; relaying parties and clients. Those which can interpret event information from the Identity Provider, and handle the requirement to permit access or invoke re-authentication based on that information. At present, this is limited to Exchange Online, SharePoint, and Microsoft Teams (with more planned for future).</p>
<p>In a similar vein, only certain conditions are supported at the moment. These are listed as:</p>
<ul>
<li>User Account is deleted or disabled</li>
<li>Password for a user is changed or reset</li>
<li>MFA is enabled for the user</li>
<li>Admin explicitly revokes all Refresh Tokens for a user</li>
<li>Elevated user risk detected by Azure AD Identity Protection</li>
</ul>
<p>&hellip;again, more planned for the future.</p>
<p>Where CAE applies, Microsoft make an important note regarding &ldquo;old&rdquo; access token lifetimes:</p>
<blockquote>
<p>Because risk and policy are evaluated in real time, clients that negotiate continuous access evaluation aware sessions will rely on CAE instead of existing static access token lifetime policies, which means that configurable token lifetime policy will not be honored anymore for CAE-capable clients that negotiate CAE-aware sessions. Token lifetime is increased to be long lived, up to 28 hours, in CAE sessions. Revocation is driven by critical events and policy evaluation, not just an arbitrary time period. This change increases the stability of applications without affecting security posture.</p>
<p><em>Continuous access evaluation: Microsoft Docs</em></p>
</blockquote>
<p>Where CAE <em>cannot</em> be applied, regular access token lifetimes will be obeyed.</p>
<h2 id="summary">Summary</h2>
<p>When I began writing up this article the &ldquo;Learn More&rdquo; link for CAE in the Azure AD portal wasn&rsquo;t working. This has now been rectified and you can discover more about the inner workings <a href="https://docs.microsoft.com/en-us/azure/active-directory/conditional-access/concept-continuous-access-evaluation">here</a>.</p>
<p>Tying in with some of my previous posts on Security in general (and specifically Zero Trust), I see the implementation of CAE as a huge positive. The underlying mechanism(s) by which authentication requests are processed have long been a blocker for true &ldquo;Zero Trust&rdquo; application and whilst minimal, the associated risks can&rsquo;t be entirely mitigated.</p>
<p>CAE is a big step forward. Providing intelligence between the session, the endpoint, the connected application, and the administrator in way which far more logically aligns with a Zero Trust mentality. It marks the beginning of a new era for Azure AD aligned applications in my mind. It&rsquo;s significant.</p>
<p>Stay tuned for more feedback on how it operates in practice, how it scales to other applications, and when it dips out of preview. In the meantime I&rsquo;d encourage you to have a read of the supporting documentation and a play in your own environments. If you have questions I can help with, don&rsquo;t hesitate to get in touch with me on <a href="https://twitter.com/kelvinpapp">Twitter</a>.</p>
]]></content>
        </item>
        
        <item>
            <title>My Sign-Ins goes GA</title>
            <link>https://www.kelvinpapp.com/my-sign-ins-goes-ga/</link>
            <pubDate>Wed, 05 Aug 2020 19:35:49 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/my-sign-ins-goes-ga/</guid>
            <description>A brief, but long overdue post to reference a long awaited - but now here - feature in Azure AD! The My Sign-Ins made a Preview appearance some time ago now. Relatively feature-rich from the off, it does what it says on the tin&amp;hellip; aggregates and shows all sign-ins for the logged in user in a clear, simple to understand dashboard. As of a few days ago, it&amp;rsquo;s (finally!) entered the world of General Availability.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2020/08/My-Sign-Ins-Dashboard.jpg"
         alt="A screenshot of the My Sign-Ins dashboard"/>
</figure>

<p>A brief, but long overdue post to reference a long awaited - but now here - feature in Azure AD! The My Sign-Ins made a Preview appearance some time ago now. Relatively feature-rich from the off, it does what it says on the tin&hellip; aggregates and shows all sign-ins for the logged in user in a clear, simple to understand dashboard. As of a few days ago, it&rsquo;s (finally!) entered the world of General Availability.</p>
<h2 id="what-is-my-sign-ins">What is &ldquo;My Sign-Ins&rdquo;?</h2>
<p>There are a host of ways to monitor Sign-In activity from an administrative perspective - Azure AD, MCAS, and Sentinel to name a few. Until now though there&rsquo;s not been an easy way for <em>end users</em> to review their sign-in activity. More to the point, there&rsquo;s not been a way for users to easily identify and report <em>suspicious</em> sign-in attempts. &ldquo;Is that important?&rdquo; I hear you cry&hellip; well yes! Who understands their activity better, and who can take proactive action more effectively than the end user?</p>
<p>By reviewing sign-in history users can quickly identify attempts to exploit their account. Take the below attempts to access my account today as an example:</p>
<figure class="center"><img src="/img/2020/08/Failed-Sign-Ins.jpg"
         alt="A screenshot showing failed sign-in attempts from different countries in the My Sign-Ins portal"/>
</figure>

<p>My Sign-Ins will show successful authentications which the user might interpret as suspicious. This includes the location, service, and source IP. <em>Obviously</em> this would never happen because you all employ <a href="https://www.kelvinpapp.com/principles-of-zero-trust/">Zero Trust</a>, use MFA, and your users would deny the random sign-in request. It&rsquo;s useful none the less though 😉 Should such a situation occur, users can take action directly from the My Sign-Ins portal to secure their account.</p>
<p>New at the point of GA is the decision to present suspicious sign-in attempts detected by <a href="https://docs.microsoft.com/en-us/azure/active-directory/identity-protection/overview-identity-protection">Identity Protection</a> at the top of the list. Users can specify whether the attempts were, or weren&rsquo;t them. This refines the behaviour of the Identity Protection service in the case of a legitimate sign-in, and triggers account protection measures if not.</p>
<figure class="center"><img src="/img/2020/08/Identity-Protection-Sign-In.png"
         alt="A screenshot showing an unusual sign-in attempt flagged within My Sign-Ins. This allows the user to confirm the sign in as legitimate, or take action to secure their account."/>
</figure>

<h2 id="summary">Summary</h2>
<p>Publicising the ability for users to monitor, validate, and search their Azure AD authentications might not be top of your list, but it does add huge value in empowering users to take responsibility for the use of their accounts. Go give it a whirl!</p>
<p>You can read more about the announcement <a href="https://techcommunity.microsoft.com/t5/azure-active-directory-identity/end-users-can-now-report-this-wasn-t-me-for-unusual-sign-in/ba-p/1257369">here</a> in the blog post from <a href="https://twitter.com/Alex_A_Simons">Alex Simons</a>.</p>
]]></content>
        </item>
        
        <item>
            <title>Learnings from Lockdown</title>
            <link>https://www.kelvinpapp.com/learnings-from-lockdown/</link>
            <pubDate>Sun, 17 May 2020 17:56:48 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/learnings-from-lockdown/</guid>
            <description>As the world has endured lockdown, the past few months (if not the year to date!) have been &amp;ldquo;odd&amp;rdquo; for many. I&amp;rsquo;m sure those of you reading might choose to replace that final adjective with other alternatives&amp;hellip; Irrespective of your choice of words, 2020 for virtually everyone on the planet has been a defining year.
For the most part the focus has been on the negative. The day-to-day impact of lockdown.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2020/05/Lockdown.jpg"
         alt="An image intended to depict someone in lockdown"/>
</figure>

<p>As the world has endured lockdown, the past few months (if not the year to date!) have been &ldquo;odd&rdquo; for many. I&rsquo;m sure those of you reading might choose to replace that final adjective with other alternatives&hellip; Irrespective of your choice of words, 2020 for virtually everyone on the planet has been a defining year.</p>
<p>For the most part the focus has been on the negative. The day-to-day impact of lockdown. The countless personal tragedies. The impact on our health services. The long-term effects on the economy&hellip; I could go on. This past couple of weeks though I&rsquo;ve found myself contemplating the things closer to home. The small victories. The many examples of initiative and hard work that have allowed things to continue with a sense of normality. The shift in the way people think and approach communication. There are many.</p>
<p>In spite of the horrific nature of COVID-19, things are happening around us that will continue to define the way we work and interact for years to come. There are also areas I&rsquo;m sure many of us would admit we need to do better on in the future&hellip; a wake up call perhaps. Much of this is technology aligned and I&rsquo;ve found it fascinating to see how the world has embraced a number of the services I love to talk about and work with, day in and day out.</p>
<p>I thought I&rsquo;d take a moment to summarise some of the things I&rsquo;ve noticed over these last 6-8 weeks (or is it 9-10&hellip; or 11-12&hellip; who knows anymore?!). Perhaps they resonate with you, perhaps they don&rsquo;t. Either way I&rsquo;m keen to hear your feedback. What are the positives you are looking to maintain following COVID? What things have you have noticed? What&rsquo;s changed and is unlikely to revert post-lockdown?</p>
<p>Here goes&hellip;</p>
<h2 id="organisations--people-adapt">Organisations &amp; People Adapt</h2>
<p>This is the biggie for me. As the lockdown became an inevitability many organisations were forced to consider the way they delivered services to their users with an initial sense of trepidation. Whilst technology sits at the heart of most modern businesses, for a significant portion this is (or at least was) in a very traditional way.</p>
<p>&ldquo;<a href="https://en.wikipedia.org/wiki/Digital_transformation">Digital Transformation</a>&rdquo; is one of those phrases I have an instinctive negative reaction to (hear me out&hellip;!). It conjures up a vision of wholesale change, large expense, and for some represents an idealistic vision that seems unattainable. In practice this is rarely the case, but it&rsquo;s become one of those phrases that often provokes a defensive response.</p>
<figure class="right-floated"><img src="/img/2020/05/Digital-Transformation.jpg"
         alt="A Digital Transformation anecdote representing COVID-19 as a demolition ball to an organisation averse to digital transformation"/>
</figure>

<p>COVID-19 has changed that; forcing some lateral thinking and driving change based on the need to do <em>something</em>. In many cases it&rsquo;s the fear of change as opposed to the cost or ability to effect it that prompts hesitation. Whilst I don&rsquo;t want to typecast digital transformation (solely) as &ldquo;remote working&rdquo;, the modernisation of the user experience and flexibility that comes from adoption of cloud services is a huge part. The coronavirus pandemic and lockdown has acted as a significant catalyst.</p>
<p>In much the same way as organisations, people have also had to adapt. The illusion of a perfect working environment has been shattered; invaded by children, pets, and our often less than perfect desk setups. I&rsquo;ve spent the last 7 weeks working from my kitchen table. It&rsquo;s OK. Comfortable enough, and (now) equipped with a Surface Dock and decent monitor. It&rsquo;s a far cry though from my setup at work, or the office I used to have upstairs&hellip; the one we decided just a few short months ago would be better served as a bedroom because &ldquo;I hardly ever work from home anymore&rdquo;(!).</p>
<p>The reality is that none of that has really mattered. Every other person I speak to has the same challenges, the same distractions. We&rsquo;re all in the same boat. With that comes an acceptance that may not have been there had we not been challenged in quite the way we all have. A wholehearted positive in my opinion.</p>
<h2 id="video-isnt-all-that-bad">Video isn&rsquo;t all that bad&hellip;</h2>
<p>If you&rsquo;re anything like me, in spite of having the tools at your fingertips the prospect of a video call used to be a daunting one. Of the many calls I participated in during a typical week only a small portion used to involve video. It wasn&rsquo;t so much a novelty, just a feature that wasn&rsquo;t relevant to most calling scenarios.</p>
<p>The importance of face to face communication has always been well understood. In a pre-lockdown world there was a fairly typical format to most customer engagements&hellip; preliminary interaction was nearly always by phone. Some fact finding. Some introductions. Any serious requirement though was nearly alway followed with an on-site meeting to discuss the detail. This felt like a necessity, enabling the free-flowing back and forth conversation that&rsquo;s difficult to achieve on a call. As we&rsquo;ve quickly come to rely on Teams, Zoom, and a plethora of others for our day to day communication, there&rsquo;s been a marked relaxation towards the use of video to bridge this gap.</p>
<p>For me, video has become a default. Whether it&rsquo;s a quick call to a colleague, or a more involved customer meeting my assumption now is that most attendees will have cameras enabled. Whilst I long for the day when I can go and visit customers in person once again, it&rsquo;s hard to imagine us going back to a position where video doesn&rsquo;t play a major part in the way we undertake business communications. It&rsquo;s not the same (clearly!), but visual cues, the ability to easily interact with remote participants, and a broad level of acceptance / comfort will undoubtedly mean it&rsquo;s used far more readily post-lockdown. That leaves aside the many other business benefits. Less time spent travelling. A reduction in expenses. The ease and speed with which we can interact and progress etc. It&rsquo;s a no-brainer.</p>
<p>Video is very firmly here to stay.</p>
<h2 id="office-communication-is-underrated">Office Communication is Underrated</h2>
<p>Notwithstanding the benefits of video and remote working, something I really miss is the hustle and bustle of an office environment and the working day&hellip; Countless small interactions played a large part in the way I managed my teams and the way I kept my finger on the pulse of what needed to be done. It&rsquo;s amazing how much effort it takes to replicate that effectively when working remotely.</p>
<p>The danger of missing out on the incidental stuff is that you become a slave to meetings. Things that &ldquo;just happen&rdquo; in an office environment need to be instigated when you&rsquo;re all apart. In practice this takes the form of calls. Lots of them. This is something I have had to (and am still learning to) manage more efficiently. Calls are rarely brief in spite of best intentions. It&rsquo;s perfectly natural to want to catch up, to chat, and to try and make up for all of the &ldquo;normal&rdquo; things that we get up to when we&rsquo;re in the office. The reality is that it&rsquo;s nigh on impossible to replicate the passing comments in the kitchen, or overhearing a discussion and chipping in with some help&hellip;</p>
<p>I&rsquo;ve struggled with this, and in truth I still do. I&rsquo;ve found myself having to be far more selective about what I do and don&rsquo;t get involved in - knowing full well that accepting every 30-60 minute call is self-defeating. I try to dedicate time each day to catching up with those in my team that isn&rsquo;t focussed on anything other than making sure they are OK and have what they need. It&rsquo;s not a perfect substitute, but it goes some way to making up for what we miss when we&rsquo;re passing in the corridor or making a coffee. It ensures that more formal conversations we need to have during the day can be focussed and productive. That said, I&rsquo;d trade it in a heartbeat to go back to the way things were.</p>
<h2 id="bc--dr-plans-arent-reviewed-frequently-enough">BC / DR Plans aren&rsquo;t Reviewed Frequently Enough</h2>
<p>For many, the moment we entered lockdown was akin to a disaster. We often theorise on the scenarios that will trigger a BC / DR response. The usual &ldquo;plane hitting the building&rdquo;, or fire / flood type scenarios. The prospect of a mass event leaving offices perfectly functional but devoid of people however wasn&rsquo;t high on many lists.</p>
<figure class="left-floated"><img src="/img/2020/05/This-is-Fine.jpg"
         alt="The &#39;this is fine&#39; meme, showing a character in a fire-filled office that believes all is well"/>
</figure>

<p>This was reflected in the way that some organisations found themselves having to respond. A mix of panic, chaos, hard work and in (most) cases&hellip; good fortune. I&rsquo;ve made reference already to the way organisations and employee&rsquo;s adapted. There&rsquo;s an underlying point though that many weren&rsquo;t prepared for what came along.</p>
<p>Obviously forecasting any and all DR-type scenarios isn&rsquo;t possible. For me though there&rsquo;s a broader principle here that needs to be noted for the future, focussed on architectural principles. We live in an age where most roles can be fulfilled remotely. There are obvious exceptions; manufacturing, hospitality, retail (etc.). In nearly all cases though there are examples of roles which can be made location agnostic with the right systems and infrastructure.</p>
<p>DR is about more than having a plan to recover systems. Indeed, with many systems now moving to SaaS the conversation is more about providing and maintaining access. This goes beyond basic conversations around laptops and a VPN. It extends to the way we manage devices, the way we securely access systems and data (<a href="https://www.kelvinpapp.com/principles-of-zero-trust/">Zero Trust anyone?!</a>, and the processes and methods we use to manage employee communication and engagement.</p>
<p>Much like security, DR principles need to be built-in, not bolted-on. This is a lesson I think many have taken away from recent weeks. A &ldquo;wake up call&rdquo; sounds crass, but irrespective of your choice of words I suspect the focus on managing and maintaining BC / DR plans will shift as we move forwards.</p>
<h2 id="summary">Summary</h2>
<p>The Cloud has defined business response in many cases. I&rsquo;ve seen examples of work programs being accelerated, and lightbulb moments as the value cloud services can bring is realised in these oh-so-strange times.</p>
<p>This is slightly left-field of my usual posts (not to mention slightly longer) I appreciate. I feel though that COVID-19, and the resulting lockdown represent a watershed moment for our industry. I&rsquo;ve been selective with my words in places. There are too many examples of organisations (and individuals) looking to capitalise on the pandemic with <a href="https://en.wikipedia.org/wiki/Fear,_uncertainty,_and_doubt">FUD</a> and pressure-tactics. That isn&rsquo;t my intention with this post. For me, there are some key learnings for us all. I want to recognise and learn from them.</p>
<p>There will be other examples many of you will have noted. I&rsquo;d welcome some examples and some debate on my own thoughts. What have you seen? How will you learn from this period?</p>
]]></content>
        </item>
        
        <item>
            <title>Conditional Access Updates: May 2020</title>
            <link>https://www.kelvinpapp.com/conditional-access-updates-may-2020/</link>
            <pubDate>Wed, 06 May 2020 16:46:19 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/conditional-access-updates-may-2020/</guid>
            <description>Hot on the heels of the MyApps portal updates last week, a number of Conditional Access updates have made their way into Azure AD. Those of you who follow this blog will know I have an unhealthy fascination with all things #Identity, so I thought I&amp;rsquo;d take the time to dive into each and explain what they mean to you&amp;hellip;
Three features were announced in a blog post yesterday by Alex Simons.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2020/05/Policy-Details.png"
         alt="A screenshot of the Conditional Access Policy Details summary"/>
</figure>

<p>Hot on the heels of the <a href="https://www.kelvinpapp.com/snippet-03-using-the-new-myapps-experience/">MyApps portal updates</a> last week, a number of Conditional Access updates have made their way into Azure AD. Those of you who follow this blog will know I have an unhealthy fascination with all things <strong>#Identity,</strong> so I thought I&rsquo;d take the time to dive into each and explain what they mean to you&hellip;</p>
<p>Three features were announced in a <a href="https://techcommunity.microsoft.com/t5/azure-active-directory-identity/updates-to-azure-ad-conditional-access-report-only-mode-insights/ba-p/1257357#">blog post</a> yesterday by <a href="https://twitter.com/alex_a_simons">Alex Simons</a>. Whilst each is minor in isolation, collectively they address a number of things which have been requested for some time&hellip; specifically around visibility and reporting. The announcements are as follows:</p>
<ul>
<li>Report-only mode is now generally available</li>
<li>A new &ldquo;Policy Details&rdquo; blade is now in preview</li>
<li>The Insights &amp; Reporting workbook is now generally available</li>
</ul>
<h3 id="conditional-access-report-only-mode">Conditional Access Report-Only Mode</h3>
<p>I touched on report-only mode for Conditional Access in one of my <a href="https://www.kelvinpapp.com/conditional-access-updates-from-ignite/">Ignite blog posts</a> last November. At the time it was just entering preview and was wholeheartedly welcomed (at least by me!)&hellip; There are lots of things that send shivers down the spines of AD administrators. Cloud or otherwise. Changes that result in people being wrongly locked out of accounts is right up there! Report-only mode mitigates this risk, providing visibility on the impact of potential changes <em>before</em> they are made live.</p>
<p>When enabled, report-only mode records the success or failure outcome that would have been associated with a logon attempt. I&rsquo;ve used this on a number of provisional policies I&rsquo;ve been testing with and it works well. An additional tab appears in the sign-in logs that records two key things:</p>
<ul>
<li>The controls that would be associated with the policy being applied</li>
<li>The applicability and outcome of the policy on that authentication attempt</li>
</ul>
<p>This is immeasurably helpful when implementing new policies; sparing blushes(!), and providing insight into the results of those slightly less &ldquo;standard&rdquo; policies we sometimes find ourselves deploying. This announcement see&rsquo;s this feature exit preview, and become fully fledged. It&rsquo;s also now the default setting for any newly created policies. I&rsquo;d encourage you to use it&hellip; set aside your impatience and let it run it&rsquo;s course for a day or two before enabling anything new.</p>
<h3 id="all-new-policy-details-blade">All New Policy Details Blade</h3>
<p>I&rsquo;ll mention this second, as opposed to at the end in line with Alex&rsquo;s release announcement. For me, this flows quite logically on from report-only mode - providing visibility and insight into the behaviour of Conditional Access policies in a way which we haven&rsquo;t had access to before.</p>
<p>You&rsquo;ve done the right thing. You&rsquo;ve deployed a policy in report-only mode, tested it thoroughly, and now you&rsquo;ve deployed it to live. A number of your users are having issues though, why? In the &ldquo;old&rdquo; world, your visibility of applied Conditional Access policies was limited to Success, Failure, or Not Applied&hellip; Why did the policy fail? Why did the user fall within scope? What&rsquo;s going on?! It has always been difficult to tell.</p>
<p>Policy Details seeks to address this by providing additional insight into applied policies. Where a policy results in behaviour we wouldn&rsquo;t expect, we can now discover why. Not just &ldquo;Failure&rdquo; to apply, but &ldquo;Failure because&rdquo;. Against each Conditional Access policy within the sign-in log we can now expand the view to show us which criteria were satisfied (or not).</p>
<p>Take the following simple example, I have a policy which blocks legacy authentication in my tenant (don&rsquo;t we all?!). It&rsquo;s not been applied to a recent sign-in attempt where perhaps I expected it to be. Using the Policy Details view I can determine that whilst the resulting action would have been a block had the conditions been met, in this case my browser (unsurprisingly) doesn&rsquo;t match the Client app defined in the policy:</p>
<figure class="center"><img src="/img/2020/05/Policy-Details-Failed-to-Apply.png"
         alt="A screenshot that shows a logon attempt didn&#39;t satisfy the conditions within a Conditional Access policy."/>
</figure>

<p>This is a super-nice bit of visibility to have when troubleshooting&hellip; It&rsquo;s currently in preview, but should be visible in your tenants already. Give it a go!</p>
<h3 id="insights--reporting-workbook">Insights &amp; Reporting Workbook</h3>
<p>The final part of the announcement (albeit not in quite the right order!) relates to the general availability of Insights &amp; Reporting for Conditional Access. &ldquo;Insights&rdquo; terminology is used throughout the Azure portal to monitor, identify trends, and generally get a view as to the health of various resources deployed. This has been lacking when it comes to Conditional Access, with only limited reporting available - unless you are familiar enough with <a href="https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/">KQL</a> and Log Analytics to construct your own queries.</p>
<p>The new Insights &amp; Reporting blade for Conditional Access addresses this <a href="https://aad.portal.azure.com/#blade/Microsoft_AAD_IAM/ConditionalAccessBlade/InsightsAndReporting">direct link here</a>. Leveraging diagnostic logs from Azure AD, it provides you with some visual analysis of your policies, and the authentication traffic flowing through them:</p>
<figure class="center"><img src="/img/2020/05/Insights-Reporting.png"
         alt="A view of the new Insights &amp; Reporting blade within the Conditional Access section of the Azure AD portal"/>
</figure>

<p>You can filter by policy to see where, to what, and to whom your policies are applying. You can also search against users or response types to gather additional detail on the effectiveness of the policies you have defined.</p>
<p>It&rsquo;s worth noting that this view is an extension of the regular &ldquo;Workbooks&rdquo; that are available in Azure AD (once you&rsquo;ve configured forwarding to Log Analytics). These are incredibly useful when it comes to analysing authentication traffic in your environment, or when looking for specific types of activity (such as legacy authentication requests). You can access these in the regular Azure AD blade <a href="https://aad.portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/Workbooks">here</a>. Naturally you can also delve deeper within Log Analytics should you choose.</p>
<figure class="center"><img src="/img/2020/05/Sign-In-Analysis.png"
         alt="An example of an Azure AD workbook, visible after configuring Diagnostic Log forwarding"/>
</figure>

<p>There are some preliminary steps you need to run through to gain access to these views if you haven&rsquo;t already:</p>
<ul>
<li>Ensure you have an active Azure subscription</li>
<li>Create a Log Analytics workspace (if one does not exist)</li>
<li>Enable diagnostic log forwarding from Azure AD (audit logs, and sign-in logs)</li>
</ul>
<p>These are detailed more fully in this <a href="https://docs.microsoft.com/en-us/azure/active-directory/reports-monitoring/howto-integrate-activity-logs-with-log-analytics">Microsoft Docs article</a>, but once enabled you&rsquo;re good to go.</p>
<hr>
<h3 id="summary">Summary</h3>
<p>Unsurprisingly, these are welcome additions from my perspective. Some we were expecting&hellip; report-only mode has been a while coming&hellip; for others though (notably Policy details) these changes represent a positive improvement in administrative controls which aid visibility, and the ease with which changes can be implemented.</p>
<p>Azure AD remains one of the most underrated parts of the Microsoft Cloud stack for many of the organisations I speak to. Particularly premium variants. Security controls, like Conditional Access, and the ease with which they can be used to better secure not just Microsoft workloads, but a whole host of SaaS applications make it an absolute no-brainer for many organisations to embrace far more fully than they do. I&rsquo;ll continue to bang the drum&hellip; and I hope Microsoft continue to innovate and add value to the product in the way that they have to date. It&rsquo;s a brave new world!</p>
<p>If you haven&rsquo;t already, please, please look at some of what you can do with Azure AD. If you have questions&hellip; please ask away!</p>
]]></content>
        </item>
        
        <item>
            <title>Snippet #03: Using the New MyApps Experience</title>
            <link>https://www.kelvinpapp.com/snippet-03-using-the-new-myapps-experience/</link>
            <pubDate>Sun, 26 Apr 2020 18:29:55 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/snippet-03-using-the-new-myapps-experience/</guid>
            <description>I posted an update I&amp;rsquo;d noticed this week on the new MyApps experience coming to Azure AD. It made reference to the upcoming switchover, confirming that the old portal would be retired in late July:
Have you experimented with the new #MyApps portal for #AzureAD yet? It&amp;#39;s coming soon! Confirmation this week in Message Center that the old experience will disappear for good on July 20th... #Microsoft #Identity @azuread pic.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2020/04/New-MyApps-Portal.jpg"
         alt="An screenshot of the new MyApps portal"/>
</figure>

<p>I posted an <a href="https://admin.microsoft.com/Adminportal/Home#MessageCenter?id=MC209920">update I&rsquo;d noticed</a> this week on the new MyApps experience coming to Azure AD. It made reference to the upcoming switchover, confirming that the old portal would be retired in late July:</p>
<div align="center"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">Have you experimented with the new <a href="https://twitter.com/hashtag/MyApps?src=hash&amp;ref_src=twsrc%5Etfw">#MyApps</a> portal for <a href="https://twitter.com/hashtag/AzureAD?src=hash&amp;ref_src=twsrc%5Etfw">#AzureAD</a> yet? It&#39;s coming soon! Confirmation this week in Message Center that the old experience will disappear for good on July 20th... <a href="https://twitter.com/hashtag/Microsoft?src=hash&amp;ref_src=twsrc%5Etfw">#Microsoft</a> <a href="https://twitter.com/hashtag/Identity?src=hash&amp;ref_src=twsrc%5Etfw">#Identity</a> <a href="https://twitter.com/azuread?ref_src=twsrc%5Etfw">@azuread</a> <a href="https://t.co/Ye1tvHDW90">pic.twitter.com/Ye1tvHDW90</a></p>&mdash; Kelvin Papp (@kelvinpapp) <a href="https://twitter.com/kelvinpapp/status/1253648427881304064?ref_src=twsrc%5Etfw">April 24, 2020</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div>
<p>In my mind it was a fairly minor bit of news. The new experience has been in preview for quite some time and isn&rsquo;t the most exciting aspect of the end user experience&hellip; Based on the response though, it seems not everyone is aware of what&rsquo;s to come. At the expense of an hour or so on a sunny, lockdown afternoon, I thought I&rsquo;d take a moment to expand slightly on my initial 220 characters&hellip;</p>
<h2 id="so-whats-happening">So what&rsquo;s happening?</h2>
<p>The MyApps portal is a too often forgotten part of the Azure AD user experience. Unlike the <a href="https://portal.office.com/">Microsoft 365 portal</a>, the <a href="https://myapps.microsoft.com">MyApps portal</a> collates <em>every</em> application you have access to into a single view. This covers the integrated Microsoft 365 applications, <em>and</em> third-party SaaS applications. I&rsquo;ve covered some of the advantages of doing this in a <a href="https://www.kelvinpapp.com/5-things-you-should-be-doing-with-azure-ad/">previous post</a>, along with a <a href="https://www.kelvinpapp.com/shared-youtube-with-azure-ad/">simple guide</a> on how to achieve it. It&rsquo;s powerful when used to its full capacity. If you aren&rsquo;t already doing it, you&rsquo;re missing a trick.</p>
<p>The change is largely a cosmetic one, updating the interface from one that looks like this:</p>
<figure class="center"><img src="/img/2020/04/Old-MyApps-Portal.jpg"
         alt="A screenshot showing the old MyApps experience"/>
</figure>

<p>To one that better aligns with the look and feel of other modernised portals:</p>
<figure class="center"><img src="/img/2020/04/New-MyApps-Portal.jpg"
         alt="A screenshot showing the new MyApps experience"/>
</figure>

<p>The refresh also makes way for some other new functionality that&rsquo;s particularly useful if you&rsquo;re leveraging Azure AD in anger; <a href="https://aad.portal.azure.com/#blade/Microsoft_AAD_IAM/StartboardApplicationsMenuBlade/Collections">App Collections</a>. App Collections extend the new MyApps experience, providing a way for you to organise applications for your end users for the first time. You can read more about this new bit of functionality <a href="https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/access-panel-collections">here in Microsoft Docs</a></p>
<h2 id="what-do-you-need-to-do">What do you need to do?</h2>
<p>If you haven&rsquo;t already, I&rsquo;d encourage you to activate the preview on some test accounts to familiarise yourself with the new experience. It takes less than 5 minutes, and I can almost guarantee you&rsquo;ll quickly roll it out across the board and have a new appreciation for what MyApps can bring to your organisation.</p>
<p>To do so:</p>
<ul>
<li>Create a new Security Group containing users you want to target</li>
<li>Navigate to Azure AD &gt; User Settings &gt; <a href="https://aad.portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/UserSettings">Manage user feature preview settings</a></li>
<li>Toggle the &ldquo;Users can use preview features for My Apps&rdquo; option to &ldquo;Selected&rdquo;, and target your test user group</li>
</ul>
<figure class="center"><img src="/img/2020/04/Enable-the-new-MyApps-Portal.jpg"
         alt="The settings pane used to enable the MyApps preview functionality"/>
</figure>

<p>After you&rsquo;ve enabled the feature and targeted your users, you can turn-on the experience in the MyApps portal. Load MyApps as normal and click on your profile picture. In the menu that appears you should see the option to enable the new MyApps experience:</p>
<figure class="center"><img src="/img/2020/04/Enabling-the-new-Experience-in-the-Portal.jpg"
         alt="Enable the new experience in the users MyApps portal"/>
</figure>

<p>Click this, et voila! You can undo the changes at any time by reversing the steps above. Alternatively you may be comfortable enough to take the plunge and enable for all. Irrespective, your users will all see the new experience come July.</p>
<hr>
<h2 id="in-summary">In Summary</h2>
<p>This obviously isn&rsquo;t a deep-dive, but the above (brief) detail aside, there&rsquo;s little more to be aware of, save having a play with app collections once you&rsquo;re up and running. This is a relatively minor update in the grand scheme of things, but one that seemed to pique the interest of those that follow me on <a href="https://twitter.com/kelvinpapp">Twitter</a> in particular.</p>
<p>My hope is that Microsoft continue to develop MyApps. Collections bring a nice bit of administrative control to what users see over the old experience. The new portal is also much nicer to view and navigate. The lack of ability to sort, customise, and show / hide / prioritise applications at user level is still a frustration for me (and others) however&hellip;</p>
<p>The MyApps portal has the potential (and ambition, I think) to be the one-stop shop for your applications, data, and third-party services. These changes bring it a step closer, but there are additional improvements that can be made. Let&rsquo;s hope they come&hellip; 🙂</p>
]]></content>
        </item>
        
        <item>
            <title>What is FIDO2 and why should you care?</title>
            <link>https://www.kelvinpapp.com/what-is-fido2-and-why-should-you-care/</link>
            <pubDate>Sun, 16 Feb 2020 17:20:52 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/what-is-fido2-and-why-should-you-care/</guid>
            <description>FIDO2 is something I&amp;rsquo;ve referenced previously on here, albeit not in too much detail. Many only take a passing interest in what this standard is and its importance when it comes to popular concepts like passwordless authentication. This was confirmed to me today as I found myself browsing through the responses to a recent @SwiftOnSecurity post on Twitter:
LastPass is basically a dead product they don’t support even U2F, much less FIDO or FIDO2.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2020/02/FIDO_Alliance.png"
         alt="The FIDO Alliance Logo"/>
</figure>

<p>FIDO2 is something I&rsquo;ve referenced previously on here, albeit not in too much detail. Many only take a passing interest in what this standard is and its importance when it comes to popular concepts like <a href="https://www.kelvinpapp.com/passwordless-with-yubikey/">passwordless authentication</a>. This was confirmed to me today as I found myself browsing through the responses to a recent <a href="https://twitter.com/swiftonsecurity">@SwiftOnSecurity</a> post on Twitter:</p>
<div align="center"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">LastPass is basically a dead product they don’t support even U2F, much less FIDO or FIDO2.</p>&mdash; SwiftOnSecurity (@SwiftOnSecurity) <a href="https://twitter.com/SwiftOnSecurity/status/1228541322518286336?ref_src=twsrc%5Etfw">February 15, 2020</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div>
<p>The crux of the conversation that followed was the lack of support <a href="https://www.lastpass.com/">LastPass</a> has when it comes to supporting FIDO2 standards. Why is this important though, and why should it be a factor in how you select services (like password managers)?</p>
<p>For the record, I&rsquo;m a longstanding (premium) user of LastPass. It&rsquo;s served me well over the years and still has some neat features not available in many alternatives. That said, the lack of progress when it comes to support for passwordless / WebAuthN has been a frustration for many (myself included). Thinking and principles around authentication security have matured significantly in recent years. Multi-Factor Authentication (MFA) has become mainstream, as have friction-less sign-in solutions like Windows Hello. FIDO2 is a major contributor to this; in terms of both user experience, and security standards. As people become more aware and less accepting of &ldquo;poor&rdquo; progression on these fronts, the importance of adopting new standards become all the more important.</p>
<p>The response from LastPass has been woefully inadequate, with many informed users taking services elsewhere as a result.</p>
<h2 id="so-what-is-fido2">So what is FIDO2?</h2>
<p>Before we talk FIDO2, we should first cover the basics of the <a href="https://fidoalliance.org/">FIDO Alliance</a> and it&rsquo;s contribution to date. FIDO is short for &ldquo;Fast Identity Online&rdquo;, an industry alliance focussed on improving authentication standards. It&rsquo;s ultimate objective is minimising (or removing) passwords altogether. This is made possible through the adoption of common standards across the industry.</p>
<p>The original FIDO standard attempted to reduce the importance of passwords through an approach built on public key cryptography. This is known as the Universal Authentication Framework (UAF). Unlike traditional authentication approaches that require the transmission of a password, the FIDO standard relies on a local action. This can be the providing of a fingerprint, entering of a PIN, inserting a security key etc. and results in access a locally held <em>private</em> key. This key is used to sign an authentication request, which can be decrypted by the <em>public</em> key available to the service.</p>
<figure class="center"><img src="/img/2020/02/FIDO_Authentication_Process.png"
         alt="A graphic depicting the authentication process used in the original FIDO UAF standard."/>
</figure>

<p>UAF has been enhanced with the <a href="https://en.wikipedia.org/wiki/Universal_2nd_Factor">Universal 2nd Factor (U2F)</a> standard. This provides support for two-factor authentication (2FA) alongside UAF, and replaces traditional OTP solutions with USB, NFC, or Bluetooth equivalents. The net result is a streamlined experience for the end user, minimal prompts or interaction.</p>
<p>It&rsquo;s with that background, that we can discuss FIDO2. This new(er) standard builds on FIDO 1.0. Leveraging U2F alongside a new web API called Web Authentication (<a href="https://en.wikipedia.org/wiki/WebAuthn">WebAuthn</a>), FIDO2 allows web applications to use public-key encryption and authenticators directly. This is integrated into browsers, allowing users to log in using biometrics, mobile apps or FIDO2 security keys. There&rsquo;s no need for a username or a password&hellip; true seamless, friction-less, and passwordless authentication!</p>
<figure class="center"><img src="/img/2020/02/FIDO2_Authentication_Process.jpg"
         alt="A graphic depicting the authentication process used in the original FIDO2 UAF standard."/>
</figure>

<h2 id="what-does-it-mean-for-you">What does it mean for you?</h2>
<p>Coming full circle, let&rsquo;s apply this logic to services like LastPass. When compliant with FIDO2, no password is exchanged with the service at logon. The presence of a FIDO2 device, or access from a FIDO2 certified platform (such as a Windows Hello enabled laptop) allows access to the service. This is achieved in a manner which also satisfies MFA. In the context of a service entrusted with sensitive information this should be a given in 2020. Certainly far better than a master password that can be compromised, or a clunky integration of 2FA via an OTP code&hellip;</p>
<p>FIDO2 will change the way we consume and authenticate against online services. The backing of organisations like Microsoft, and integration of FIDO2 into platforms and applications means that this level of security is capable of being mainstream&hellip; <em>if</em> adopted by application vendors.</p>
<p>Translating this into a real world example, we can consider the way Microsoft have embedded FIDO2 and WebAuthn into Windows 10. As an end user I can walk up to any Azure AD joined device in my organisation and present my FIDO2 compliant YubiKey. Coupling this &ldquo;something I have&rdquo; with &ldquo;something I know&rdquo; (a PIN), I can be logged into the device without mention of a username or password. The same is true when accessing online services backed by Azure AD&hellip; Insert the key, enter the PIN and you&rsquo;re in. No fuss, ultra secure.</p>
<p>The LastPass example may be of minor relevance to most of you reading. The principle is universal though. Open standards like FIDO2 provide the mechanism for simplicity, security, and minimise the risk of data breach. End users might not appreciate the detail, but I can guarantee you they&rsquo;ll appreciate the ease. Your CISO will thank you too&hellip; 🙂</p>
]]></content>
        </item>
        
        <item>
            <title>AZ-500 Exam: Initial Thoughts</title>
            <link>https://www.kelvinpapp.com/az-500-exam-initial-thoughts/</link>
            <pubDate>Sat, 04 Jan 2020 20:14:09 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/az-500-exam-initial-thoughts/</guid>
            <description>After much procrastination and delay, I finally got around to sitting (and passing!) my AZ-500 exam this last week. Having posted previously on my experiences with the MS equivalent (MS-500), I thought I&amp;rsquo;d repeat the process for AZ-500. To anyone preparing for, or considering taking AZ-500, I hope you find this brief overview useful&amp;hellip;
For those unfamiliar, AZ-500 is the exam focussed on the security aspects of the Azure platform.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2020/01/Azure-Certified-Security-Engineer.jpg"
         alt="The Azure Certified Security Engineer Certification Logo"/>
</figure>

<p>After much procrastination and delay, I finally got around to sitting (and passing!) my AZ-500 exam this last week. Having <a href="https://www.kelvinpapp.com/ms-500-exam-initial-thoughts/">posted previously</a> on my experiences with the MS equivalent (MS-500), I thought I&rsquo;d repeat the process for AZ-500. To anyone preparing for, or considering taking AZ-500, I hope you find this brief overview useful&hellip;</p>
<p>For those unfamiliar, AZ-500 is the exam focussed on the security aspects of the Azure platform. This goes beyond the Microsoft 365 elements covered in <a href="https://docs.microsoft.com/en-us/learn/certifications/exams/ms-500">MS-500</a>, looking instead at the infrastructure and platform aligned tools that can help you to improve your security posture when leveraging Azure. A full summary of the skills measured can be found on the <a href="https://docs.microsoft.com/en-us/learn/certifications/exams/az-500">exam page</a>. By way of an overview though, the following key areas are measured:</p>
<ul>
<li>Managing Identity &amp; Access (20%-25%)</li>
<li>Implementing Platform Protection (35%-40%)</li>
<li>Managing Security Operations (15%-20%)</li>
<li>Securing Data &amp; Applications (30%-35%)</li>
</ul>
<p>I&rsquo;d been considering this exam for some time, it&rsquo;s a logical follow-on from MS-500. For various reasons though I&rsquo;d put it off, and put it off&hellip; until finally I figured I&rsquo;d just get on and book it to give me a deadline to work to 🙂 The impetus to finally get on with it was two-fold. One, having exam passes in both AZ-500 and MS-500 is a pre-requisite to the new(ish) Microsoft Security competency. Two, I plan to spend some considerable time over the coming few months working on some security-centric activity. These things, coupled with some time over the Christmas period ended up being the catalyst I needed. With hindsight, I wonder what took me so long!</p>
<h2 id="so-how-was-it-and-what-are-the-key-things-you-need-to-know-to-help-you-prepare-for-the-az-500-exam">So how was it, and what are the key things you need to know to help you prepare for the AZ-500 Exam?</h2>
<p>Some initial repetition here with my MS-500 post: <em>If you&rsquo;re here for the inside scoop / gossip in the form of exam content, you&rsquo;ve come to the wrong place. That&rsquo;s not my style, and I&rsquo;d suggest you <a href="https://www.microsoft.com/en-us/learning/certification-exam-policies.aspx">have a read of this link</a></em> 😉</p>
<p>What follows are some pointers based on my experience, and some useful content that will help you on your way&hellip;</p>
<p><strong>Know your content.</strong> Some more needless repetition, but every bit as valid. You absolutely <em>need</em> to have real world experience on the topics covered in this exam. Know your way around the Azure portal, have a sense of the various services that are available, and understand how they interact with one another. This exam in particular goes well beyond the &ldquo;how does this work&rdquo; style of some others. You need to be familiar with concepts and principles as much as the mechanics of how things are configured.</p>
<p><strong>Be prepared for Labs.</strong> This exam isn&rsquo;t all about Q&amp;A, there&rsquo;s a lab based element too (sorry, &ldquo;<a href="https://docs.microsoft.com/en-us/learn/certifications/posts/performance-testing-is-coming-to-microsoft-exams">Performance Testing</a>&rdquo; element 🙂). You will need to put into practice the things you are expected to know. I only had a single lab, but it was wide-ranging - covering Storage, Key Vault, IAM, Monitor, Azure Security Center, and a number of other elements.</p>
<p><strong>Read the Microsoft Azure Cloud Adoption Framework (CAF)</strong>, notably the <a href="https://docs.microsoft.com/en-us/azure/cloud-adoption-framework/strategy/">strategy</a>, <a href="https://docs.microsoft.com/en-us/azure/cloud-adoption-framework/plan/">plan</a>, and <a href="https://docs.microsoft.com/en-us/azure/cloud-adoption-framework/govern/">govern</a> sections. This document lays out the recommendations Microsoft want you to be aware of when it comes to Azure planning and adoption. You&rsquo;ll also discover best practice references which will help you to narrow down your responses to some of the questions.</p>
<p><strong>Don&rsquo;t rely on your own understanding, read / learn more widely.</strong> Microsoft Docs is a resource which has come on leaps and bounds since the days of TechNet. Detailed how-to guides, in addition to deep-dives on specific features and services are available in abundance. Focus in on the areas you feel weak on, and take advantage of some of the guides others have put together which collate useful links for learning. I found the following particularly useful in my preparation:</p>
<ul>
<li><a href="https://stanislas.io/2019/04/25/preparation-guide-for-microsoft-az-500-microsoft-azure-security-technologies-certification/">Preparation Guide for Microsoft AZ-500</a></li>
<li>Microsoft Azure Security Engineer (AZ-500) on <a href="https://app.pluralsight.com/paths/certificate/microsoft-azure-security-engineer-az-500">Pluralsight</a></li>
<li>The <a href="https://myignite.techcommunity.microsoft.com/sessions/79318?source=sessions">AZ-500 Exam Preparation session</a> from Ignite 2019</li>
</ul>
<p><strong>Have the right learning foundations in place.</strong> If you haven&rsquo;t already, I&rsquo;d suggest you take <a href="https://docs.microsoft.com/en-us/learn/certifications/exams/az-103">AZ-103</a> before you sit this exam. Much of the <a href="https://docs.microsoft.com/en-us/learn/certifications/exams/az-300">AZ-300</a> / <a href="https://docs.microsoft.com/en-us/learn/certifications/exams/az-301">AZ-301</a> content is also relevant, specifically design principles around governance which extend naturally into the security considerations AZ-500 focuses on.</p>
<h2 id="performance-testing-gripes">Performance Testing Gripes&hellip;</h2>
<p>It wasn&rsquo;t all plain sailing for me, and whilst I typically refrain from negativity in these posts, this feels worthy of a mention. When it came to my lab section (I had just one, with ~12 tasks from memory), I encountered a couple of issues that totally threw me for 5-10 minutes. In the grand scheme of things it made no difference, but had I been tight for time or close to passing I&rsquo;d have been more than a bit annoyed. I know I&rsquo;m not alone on this - colleagues have experienced similar - but to anyone at Microsoft reading this, the labs <em>have</em> to be solid and reliable if they are to continue to increase in their importance within exams.</p>
<p>For the record, I think Performance Testing is a good thing. It minimises the use of cheat-sheets / dumps (which have become so prevalent). It also better assesses candidates understanding of the things they should know&hellip; That said, every experience I&rsquo;ve had has been poor. Labs crashing, poorly worded tasks, or insufficient access to complete tasks.</p>
<p>I won&rsquo;t give specifics away, but there were two activities I had to skip. One due to a lack of permissions within the environment. The other down to a badly worded question which didn&rsquo;t match the lab environment I had access to. Neither was a disaster in my case, but annoying none the less to know I <em>could</em> have scored better than I did&hellip;</p>
<hr>
<h2 id="in-summary">In Summary&hellip;</h2>
<p>As is typically the case with these more focussed exams, much of the content is niche in nature. A significant portion of the content is probably only relevant to a subset of customers I deal with. Notwithstanding, it never ceases to amaze me just how vast and comprehensive the Azure portfolio is. Would I recommend you take it? If Infrastructure Security is your thing, or an area of interest - absolutely.</p>
<p>For those interested, I secured a fairly respectable score of 823. Not a scrape, but by no means an ace. I couldn&rsquo;t possibly admit to forgetting about having booked it for the day I did&hellip; fortunately I didn&rsquo;t need the excuse! I enjoyed this exam. It gave me an opportunity to cement my understanding of some specific services. It also opened my eyes to some new services I&rsquo;d previously glossed over.</p>
<p>To those who have stumbled here looking to take AZ-500, good luck! I hope at least some of this has proven useful in your search for information! ?</p>
]]></content>
        </item>
        
        <item>
            <title>Shared YouTube with Azure AD</title>
            <link>https://www.kelvinpapp.com/shared-youtube-with-azure-ad/</link>
            <pubDate>Sun, 15 Dec 2019 17:35:04 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/shared-youtube-with-azure-ad/</guid>
            <description>A slightly random entry today, triggered largely by a post on the Microsoft Tech Community forums this week. The post in question was asking whether it was possible to authenticate to YouTube with Azure AD - specifically, whether it was possible to securely access a shared account without divulging credentials. For many organisations shared accounts are a necessity, particularly with reference to platforms like Twitter and YouTube. Teams of people often contribute content to these sites, with credentials routinely shared.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/12/YouTube-in-Azure-AD-App-Gallery.jpg"
         alt="A screenshot of the YouTube app in the Azure AD App Gallery"/>
</figure>

<p>A slightly random entry today, triggered largely by <a href="https://techcommunity.microsoft.com/t5/Azure-Active-Directory/Can-I-use-Azure-AD-accounts-to-manage-a-youtube-site/m-p/1063301">a post on the Microsoft Tech Community</a> forums this week. The post in question was asking whether it was possible to authenticate to YouTube with Azure AD - specifically, whether it was possible to securely access a shared account without divulging credentials. For many organisations shared accounts are a necessity, particularly with reference to platforms like Twitter and YouTube. Teams of people often contribute content to these sites, with credentials routinely shared. This is problematic when it comes to leavers - triggering a need for passwords to be reset which then need to be memorised all over again. Azure AD provides a neat way around this which we&rsquo;ll discuss below.</p>
<p>I&rsquo;ve written <a href="https://www.kelvinpapp.com/5-things-you-should-be-doing-with-azure-ad/">in the past</a> about the advantages associated with integrating SaaS applications with Azure AD. The solution here is an extension of that principle. I expected to be able to quickly track down a guide on how to implement this for the poster, but struggled to do so. I jotted down a quick response and decided I&rsquo;d pop my own guide together instead. A couple of days later, here we are&hellip;</p>
<p>The specific feature I want to cover is the ability for credentials to be bound to a user for an application in Azure AD. The application portal is one of Azure AD&rsquo;s most useful features (in my opinion). It provides a single point of access to all corporate applications - Microsoft or otherwise. In this case we can create a link to YouTube that&rsquo;s published to users. When clicked the user will automatically be signed in. Unlike a &ldquo;true&rdquo; SSO app, this won&rsquo;t authenticate using the users Azure AD credentials. Instead, we&rsquo;ll allocate the username and password which will be populated automatically when the link is clicked. We’ll also benefit from additional audit tools - with the ability to track usage through app sign-in logs.</p>
<h2 id="integrating-youtube-with-azure-ad">Integrating YouTube with Azure AD</h2>
<p>The first step is to navigate to our Azure AD portal and select the <a href="https://aad.portal.azure.com/#blade/Microsoft_AAD_IAM/StartboardApplicationsMenuBlade/AllApps/menuId/">Enterprise Applications</a> section. We are going to add a new application for YouTube by selecting &ldquo;New Application&rdquo; and searching for YouTube in the gallery:</p>
<figure class="center"><img src="/img/2019/12/YouTube-in-Azure-AD-App-Gallery.jpg"
         alt="A screenshot showing the adding of the YouTube app from the Azure AD app gallery"/>
</figure>

<p>After clicking &ldquo;add&rdquo;, the YouTube app will be registered with Azure AD, after which we can modify several properties to make it available. Select YouTube from the list of Enterprise applications and you should be presented with the overview page:</p>
<figure class="center"><img src="/img/2019/12/YouTube-App-Overview.jpg"
         alt="A screenshot showing the YouTube app overview page after registering it from the gallery."/>
</figure>

<p>There are a couple of changes to the default configuration. We need to make it accessible to users, and we need to provide our shared account credentials. First of all we&rsquo;re going to configure the application so it will present credentials when clicked. By default, think of the app as a dumb link - it will direct users to YouTube, but they will need to manually login. As mentioned earlier we don&rsquo;t want to authenticate using Azure AD. Instead, we want to select &ldquo;Password-based&rdquo; sign-in from the Single sign-on section of the app:</p>
<figure class="center"><img src="/img/2019/12/Set-the-SSO-Mode.jpg"
         alt="A screenshot showing the available SSO options within the YouTube app"/>
</figure>

<p>This sets the URL the application will call when clicked by the user - directing us to the Google sign-in page:</p>
<p>We then need to assign our users (or groups) to the app. Navigate to &ldquo;Users and groups&rdquo; within the application properties and add the relevant users:</p>
<figure class="center"><img src="/img/2019/12/User-Assigned-to-App.jpg"
         alt="A user assigned to the application."/>
</figure>

<p>The next step is the key one. We need to assign our shared account username and password to the user or group. We do this by selecting the user (or group) and clicking &ldquo;Update Credentials&rdquo;. In the dialogue that appears we can insert the username and password for our YouTube account:</p>
<figure class="center"><img src="/img/2019/12/Update-Credentials.jpg"
         alt="Setting the credentials that will be provided to YouTube when the user accesses the Azure AD application"/>
</figure>

<p>Click save, and we&rsquo;re ready to test&hellip;</p>
<h2 id="testing-the-azure-ad-application">Testing the Azure AD Application</h2>
<p>Sign in to the Microsoft MyApps portal <a href="https://myapps.microsoft.com/">myapps.microsoft.com</a> with a user account assigned to the application. You should see the new YouTube application listed amongst your assigned applications:</p>
<figure class="center"><img src="/img/2019/12/MyApps-Portal-Entry.jpg"
         alt="The new YouTube application in the Microsoft MyApps portal"/>
</figure>

<p>If you don&rsquo;t already have it installed, you will need to install the MyApps Secure Sign-In Extension. Your browser will prompt you if this is the case:</p>
<figure class="center"><img src="/img/2019/12/Secure-Sign-In-Extension.jpg"
         alt="A prompt for the MyApps Secure Sign-In Extension to be installed"/>
</figure>

<p>Once installed, and after a brief pause when you select your Azure AD application, you should be directed to the Google sign-in page for YouTube. The credentials bound to the user in the previous &ldquo;update credentials&rdquo; step will be replayed automatically, and you will be signed in with your shared account.</p>
<h2 id="summary">Summary</h2>
<p>This is a really neat use of Azure AD to both simplify and better secure access to shared YouTube accounts for organisations. The same logic can also be applied to other web based services (e.g. Twitter). In this example the username and password combination is never made directly available to the end user. We can assign / unassign the application as necessary, and ultimately be assured that if a user leaves the organisation or no longer needs access, the underlying credentials remain secure.</p>
<p>I hope you&rsquo;ve found this post useful, feel free to ask away in the comments if you have any follow up questions.</p>
]]></content>
        </item>
        
        <item>
            <title>AD Connect Cloud Provisioning: Preview</title>
            <link>https://www.kelvinpapp.com/ad-connect-cloud-provisioning-preview/</link>
            <pubDate>Sun, 08 Dec 2019 17:40:57 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/ad-connect-cloud-provisioning-preview/</guid>
            <description>This week saw the (preview) release of Azure AD Connect Cloud Provisioning. For those still catching up on Microsoft Ignite news those words might not mean much to you. Dig a little deeper though and you&amp;rsquo;ll realise that this is a big deal. From my perspective it was one of the biggest bits of news to come out of Ignite, and something I made reference to in the highlights video that Transparity&amp;quot; posted while we were out in Orlando.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/12/Azure-AD-Connect-Cloud-Provisioning.jpg"
         alt="A graphical overview of the Cloud Provisioning topology"/>
</figure>

<p>This week saw the (preview) release of Azure AD Connect Cloud Provisioning. For those still catching up on <a href="https://www.microsoft.com/en-us/ignite">Microsoft Ignite</a> news those words might not mean much to you. Dig a little deeper though and you&rsquo;ll realise that this is a big deal. From my perspective it was one of the biggest bits of news to come out of Ignite, and something I made reference to in the <a href="https://www.kelvinpapp.com/microsoft-ignite-highlights-video/">highlights video</a> that <a href="https://www.transparity.com/">Transparity</a>&quot; posted while we were out in Orlando.</p>
<p>A challenge faced by an number of organisations, is what to do following a merger or acquisition. We live in an age where this activity is common, and poses a real challenge to many IT departments. Businesses expect the rapid coming together of infrastructure(s) to provide a simple and seamless experience for end users. This often begins with communication and collaboration capabilities; email, file sharing, and messaging services like Microsoft Teams.</p>
<p>There are two perspectives to achieving this with Microsoft Cloud. On the one hand it can be seen as a simple enabler for the coming together of these common services. On-premises data and applications that take considerable time and effort to consolidate can remain as is, whilst front end services can be stitched together via the cloud. A facade in some respects, but one which can be ultra-effective in M&amp;A scenarios where perception is key. On the other hand, this process can be as fraught with complexity as the back-end systems being deferred. Central to its success is the ability to consolidate user objects into a common Azure AD. Simple if you can meet the prerequisites. Painfully difficult if you don&rsquo;t.</p>
<h2 id="what-are-the-challenges">What are the Challenges?</h2>
<p>Any mid-large scale organisation will be familiar with <a href="https://docs.microsoft.com/en-us/azure/active-directory/hybrid/whatis-azure-ad-connect">Azure AD Connect</a> (AADC). In ultra-simple terms, AADC provides for the synchronisation of user objects and passwords from an on-premises Active Directory, to Azure AD. Without it you are forced to manually manage multiple identities for end users - one on-premises for local resources, and one in the Cloud for Microsoft 365 and other connected services. AADC bridges these two environments - providing for password synchronisation, automatic user provisioning, and similarly de-provisioning / blocking of users when they leave.</p>
<p>AADC supports a multi-forest model - meaning you can synchronise objects from multiple local Active Directory environments. There&rsquo;s one key caveat though. The Active Directory environments must all be capable of being referenced by a single AADC instance. The deployment of multiple AADC instances synchronising objects into a single Azure AD is <a href="https://docs.microsoft.com/en-us/azure/active-directory/hybrid/plan-connect-topologies#multiple-forests-multiple-sync-servers-to-one-azure-ad-tenant">not supported</a>:</p>
<figure class="center"><img src="/img/2019/12/AD-Connect-Many-to-One.png"
         alt="An image showing the lack of support for multiple on-premises AD environments into a single Azure AD using multiple instances of Azure AD Connect"/>
</figure>

<p>For some organisations, this is relatively simple to fix. You can connect all sites to an Azure environment and deploy DC&rsquo;s for all, alongside a central AADC instance. Alternatively you can connect the remote forest(s) to the on-premises environment hosting an existing installation of AADC via VPN / MPLS. There are various things that can complicate this though - networking constraints or company politics to name just a couple&hellip;</p>
<h2 id="how-does-azure-ad-connect-cloud-provisioning-help">How does Azure AD Connect Cloud Provisioning help?</h2>
<p>Azure AD Connect Cloud Provisioning is an entirely new approach to user synchronisation. It does away with the 1:1 limitation of AADC and Azure AD. It also removes the need to host an AADC instance <em>at all</em> for those organisations looking to simplify their approach to hybrid identity. It&rsquo;s entirely new, and entirely welcome for those complex, or politicised organisational coming-togethers.</p>
<p>Through the deployment of on-premises agents, we can now connect multiple, distributed Active Directory environments to a single Azure AD. The provisioning configuration is stored in the cloud and managed as part of the service. There&rsquo;s no more local processing.</p>
<p>We can also deploy multiple agents - providing for high-availability in much the same way as we can with the Pass-Through Authentication (PTA) agent.</p>
<h2 id="are-there-any-limitations">Are there any limitations?</h2>
<p>The short answer is yes. Several as it happens, although I&rsquo;m hopeful at least <em>some</em> of these will be addressed during the course of the preview. Key limitations from my perspective are as follows:</p>
<ul>
<li>No support for Device Objects (users, groups, and contacts only)</li>
<li>No support for pass-through authentication (whether you should be using this or not is worthy of another blog post&hellip;)</li>
<li>Filtering is possible only via Domain, OU, or AD Group, not by attribute</li>
<li>Writeback isn&rsquo;t supported (perhaps the biggest constraint in my opinion&hellip;)</li>
</ul>
<p>A full summary of the available features, along with a comparison matrix vs. Azure AD Connect can be found <a href="https://docs.microsoft.com/en-us/azure/active-directory/cloud-provisioning/what-is-cloud-provisioning">here</a>.</p>
<h2 id="how-can-i-get-started-with-cloud-provisioning">How can I get started with Cloud Provisioning?</h2>
<p>If you haven&rsquo;t seen it already, you can read the <a href="https://techcommunity.microsoft.com/t5/Azure-Active-Directory-Identity/Bring-identities-from-disconnected-ADs-into-Azure-AD-with-just-a/ba-p/827835">Tech Community blog post</a> from [Alex Simons](<a href="https://twitter.com/Alex_A_Simonswhere">https://twitter.com/Alex_A_Simonswhere</a> he discusses cloud provisioning in more detail. The service itself is accessed through the Azure AD Connect section of the Azure AD portal:</p>
<figure class="center"><img src="/img/2019/12/Manage-Provisioning.png"
         alt="A graphic showing Cloud Provisioning in the Azure AD portal"/>
</figure>

<p>From a configuration perspective there are two key steps:</p>
<ul>
<li>Deploy the Provisioning Agent</li>
<li>Configure a Cloud Provisioning profile, specifying domain, filter, and password hash synchronisation options</li>
</ul>
<p>A deployment guide covering both of the above steps is available on Microsoft Docs: <a href="https://docs.microsoft.com/en-us/azure/active-directory/cloud-provisioning/how-to-install">Installing AD Connect Cloud Provisioning</a>.</p>
<h2 id="in-summary">In Summary&hellip;</h2>
<p>Azure AD Connect Cloud Provisioning is an entirely new approach to the synchronisation of users and passwords into Azure AD. It enables new use cases, deals with some significant constraints in AADC, and provides some insight into Microsoft&rsquo;s strategy for user provisioning moving forwards. It&rsquo;s a big deal.</p>
<p>Is it perfect? No, but it&rsquo;s early days. It&rsquo;s also only in preview&hellip; Current caveats aside (of which there are many), it&rsquo;s well worth considering for those organisations who find themselves at the sharp end of M&amp;A activity.</p>
<p>Take a deeper look, consider giving it a go, and let me know what you think!</p>
]]></content>
        </item>
        
        <item>
            <title>Principles of Zero Trust</title>
            <link>https://www.kelvinpapp.com/principles-of-zero-trust/</link>
            <pubDate>Sat, 23 Nov 2019 19:07:06 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/principles-of-zero-trust/</guid>
            <description>I&amp;rsquo;ve been meaning to write something along these lines for some time now. The concept of the changing IT perimeter is something that&amp;rsquo;s front and centre for many organisations as we approach the end of 2019. For most it&amp;rsquo;s no longer the case that data, applications, and users are secured at the network perimeter. We talk less about keeping the bad guys out, and more on the application of security at the data and identity level.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/11/Insecure-Perimeter.jpg"
         alt="An image showing a large hole in a perimeter fence"/>
</figure>

<p>I&rsquo;ve been meaning to write something along these lines for some time now. The concept of the changing IT perimeter is something that&rsquo;s front and centre for many organisations as we approach the end of 2019. For most it&rsquo;s no longer the case that data, applications, and users are secured at the network perimeter. We talk less about keeping the bad guys out, and more on the application of security at the data and identity level. This is a world away from security of old. It also requires a shift in mindset for those tasked with implementing security. For these reasons and many more we&rsquo;ve seen the birth of <em>Zero Trust</em> as a concept. What does this actually mean though, and what are the principles associated with its implementation?</p>
<p>A conversation with a customer this week focussed my attention and prompted me to write down my own thoughts on it. Some argue that Zero Trust is another one of those buzz-phrases - something that will diminish as time goes by. I tend to disagree. Is it a buzz-phrase? Perhaps. Irrespective though, the principles that underpin it are significant. It&rsquo;s also an essential component in the era of cloud.</p>
<h2 id="why-zero-trust">Why Zero Trust?</h2>
<p>I discussed some of the drivers for modern management in a recent presentation I delivered. Many of these principles feed into the need for a different approach towards security too, specifically:</p>
<ul>
<li><strong>Mobility.</strong> Users increasingly have an expectation of working remotely, and at different times of the day and night.</li>
<li><strong>Modern Devices.</strong> In the same vein, users now expect to be able to access and work on corporate content across an increasingly wide array of mobile, laptop, and desktop devices.</li>
<li><strong>Expectations.</strong> Corporate IT shouldn&rsquo;t be a step behind. Newer ways of working, the ability to share and collaborate on data, and the availability of services from anywhere / at any time are available at home. Users expect this in the workplace too.</li>
</ul>
<p>Accommodating these new approaches to working requires a different approach to security. One which does away with the assumption that we consume IT in a way which is secure by default. Devices, applications, and data which sit outside of the traditional perimeter are the new norm. This is where Zero Trust comes in to play.</p>
<figure class="center"><img src="/img/2019/11/Modern-Working-Practices.jpg"
         alt="An image outlining some key statistics associated with changing IT practices - more BYOD, more Cloud, and a growing number of devices being used."/>
</figure>

<h2 id="so-what-is-zero-trust">So what is Zero Trust?</h2>
<p>The statistics above were displayed at a session I attended at Microsoft Ignite: <a href="https://myignite.techcommunity.microsoft.com/sessions/81729?source=sessions">Zero Hype – Taking practical steps towards Zero Trust</a>. They do a great job of further framing some of the comments I make above. The session went on to discuss Zero Trust in more detail. There was a specific focus on dispelling some of the myths and <a href="https://en.wikipedia.org/wiki/Fear,_uncertainty,_and_doubt">FUD</a> associated with Zero Trust across our industry; this is a big issue in my opinion. I&rsquo;d really encourage you to watch the session if you get the chance.</p>
<p>At it&rsquo;s core, Zero Trust is an approach that encourages verification at as many layers as possible when accessing resources. It promotes strong identity, device health attestation, and the principle of least privilege. It also encourages consideration of the assumption that every access attempt is a potential risk. This approach challenges traditional approaches to identity and security. It also brings these approaches up to date with modern ways of delivering data and applications to users - notably those that are cloud based. Ultimately the concept of Zero Trust promotes a good security posture by taking an &ldquo;assume the worst&rdquo; stance.</p>
<p>What Zero Trust is <em>not</em> is something you will ever &ldquo;be&rdquo;, or something you can pay a vendor to provide for you. It&rsquo;s not a literal thing, or something you can achieve overnight. By taking into account basic ZT principles though, you can dramatically reduce your chance of being caught out by the changing behaviours of the modern workforce. Those in heavily governed sectors are likely to find that embracing a Zero Trust mentality will aid the adoption of cloud. From my personal experience, it will certainly appease some of the Security team 🙂</p>
<h2 id="your-journey">Your Journey</h2>
<p>So how do you get there? What, at a practical level, can you do to kick off your Zero Trust strategy? There are some key areas to target, the first of which is that mindset change I mentioned above&hellip; Change your way of thinking when it comes to security to one that assumes everything is a risk. Think of everything as a cloud service, and aim to implement the practices you might be already be associating with select applications, across the board.</p>
<p>I made reference to a <a href="https://www.kelvinpapp.com/5-things-you-should-be-doing-with-azure-ad/">bunch of things you should be doing with Azure AD</a> in a previous post. Start with these and strengthen your approach to identity. Integrate applications so you you can secure them consistently, and implement <a href="https://docs.microsoft.com/en-us/azure/active-directory/privileged-identity-management/pim-configure">PIM</a> to ensure least privilege. Identity is a great place to start, and a fundamental when it comes to secure cloud adoption.</p>
<p>Focus also on device attestation and compliance. Use solutions like <a href="https://www.kelvinpapp.com/microsoft-endpoint-manager-announced/">Microsoft Endpoint Manager (Intune)</a> to manage devices, and impose compliance baselines. Feed these back into your identity platform to make informed decisions around when, and to what level you allow access to your resources.</p>
<p>Understand your applications. Invest in a CASB solution like <a href="https://www.microsoft.com/en-us/microsoft-365/enterprise-mobility-security/cloud-app-security">Microsoft Cloud App Security</a> (MCAS) so you can identify, and manage the services your end users elect to use. Again, integrate these with your identity and device management solutions so you can invoke real-time controls based on user behaviour and activities.</p>
<p>Assume that your data will end up outside of your perimeter. Take advantage of data classification solutions like <a href="https://www.microsoft.com/en-us/security/technology/information-protection">Microsoft Information Protection</a> to enable document level encryption and controls that extend your control beyond the traditional edge.</p>
<figure class="center"><img src="/img/2019/11/Zero-Trust-Sources-and-Controls.jpg"
         alt="A graphic showing the interlinking of Identity, Devices, Access attempts, and Services with the concept of Zero Trust"/>
</figure>

<h2 id="in-conclusion">In Conclusion</h2>
<p>These are just a handful of the things that you can do to get started on your Zero Trust journey. The key message from my perspective is that it&rsquo;s exactly that - a journey. There&rsquo;s no hard and fast rule-book. There&rsquo;s no one solution you can go out there and buy which will help you to &ldquo;be&rdquo; Zero Trust. There are however, a number of really simple to deploy features that many organisations will have access to already. Layer these together, have the right mentality, and the end result is that Zero Trust - buzzword or not - is something that will greatly aid your overall security posture.</p>
<p>I hope this post has been useful at dispelling some myths around Zero Trust. What it is, what it&rsquo;s not, and crucially how you can begin to embrace it yourselves. By way of additional reading I&rsquo;d urge you to take a look at the following other resources:</p>
<ul>
<li>This session from Microsoft Ignite: <a href="https://myignite.techcommunity.microsoft.com/sessions/81729?source=sessions">Zero Hype – Taking practical steps towards Zero Trust</a>. The source of a couple of the graphics in this post, and delivered by the excellent <a href="https://twitter.com/Alex_T_Weinert">Alex Weinert</a>.</li>
<li>This additional Ignite session: <a href="https://myignite.techcommunity.microsoft.com/sessions/83749?source=sessions">Implementing a zero trust security model at Microsoft</a> which discusses the transition Microsoft have made towards Zero Trust within their organisation.</li>
<li>Microsoft&rsquo;s Zero Trust Portal: <a href="https://aka.ms/Zero-Trust">aka.ms/Zero-Trust</a></li>
</ul>
<p>As always, comments and feedback welcome!</p>
]]></content>
        </item>
        
        <item>
            <title>Microsoft Ignite Highlights [Video]</title>
            <link>https://www.kelvinpapp.com/microsoft-ignite-highlights-video/</link>
            <pubDate>Sat, 16 Nov 2019 14:37:40 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/microsoft-ignite-highlights-video/</guid>
            <description>For those not aware I had the incredible opportunity of attending Microsoft Ignite in Orlando last week. Those that follow me on Twitter or LinkedIn may have tired of my incessant updates, but for anyone who&amp;rsquo;s attended previously you&amp;rsquo;ll be aware of just how much is crammed into a few short days. I felt obliged to make at least some noise on social media given the volume of product announcements and news that surfaced.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/11/Microsoft-Ignite.png"
         alt="The feature graphic from Microsoft Ignite 2019"/>
</figure>

<p>For those not aware I had the incredible opportunity of attending Microsoft Ignite in Orlando last week. Those that follow me on <a href="https://twitter.com/kelvinpapp">Twitter</a> or <a href="https://www.linkedin.com/in/kelvinpapp/">LinkedIn</a> may have tired of my incessant updates, but for anyone who&rsquo;s attended previously you&rsquo;ll be aware of just how much is crammed into a few short days. I felt obliged to make at least <em>some</em> noise on social media given the volume of product announcements and news that surfaced. Part of that &ldquo;noise&rdquo; came in the form of an Ignite highlights video, put together by the team at <a href="https://www.transparity.com">Transparity</a> in the closing days 🙂</p>
<p>Those of you who know me personally will know how thrilled I would have been at the prospect of being on camera&hellip; I&rsquo;m far better suited to being behind the camera, or involved in the edit! That said, it came together surprisingly well, in spite of some &ldquo;umming&rdquo; and &ldquo;erring&rdquo; along the way! If nothing else, it served as a good practice for the next time!</p>
<p>We chose to cover some of the key announcements from the week, specifically:</p>
<ul>
<li><a href="https://techcommunity.microsoft.com/t5/Microsoft-Teams-Blog/What-s-New-in-Microsoft-Teams-Ignite-2019/ba-p/937025">New features for Microsoft Teams</a></li>
<li>Upcoming updates to Windows Autopilot</li>
<li><a href="https://azure.microsoft.com/en-gb/services/azure-arc/">Azure Arc</a></li>
<li><a href="https://resources.techcommunity.microsoft.com/project-cortex-microsoft-365">Project Cortex</a></li>
<li>Microsoft <a href="https://powervirtualagents.microsoft.com/en-us">Power Virtual Agents</a></li>
<li><a href="%22https://flow.microsoft.com/en-us">Power Automate</a></li>
<li>The coming together of <a href="https://www.microsoft.com/en-us/microsoft-365/blog/2019/11/04/">Configuration Manager and Intune</a></li>
<li>Migration enhancements coming to Azure AD and Exchange Online</li>
</ul>
<p>See what we had to say below:</p>
<div align="center">
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
  <iframe src="https://www.youtube.com/embed/5WgqI3WID08" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video"></iframe>
</div>
</div>
<p>I made reference to a number of sessions I was looking forward to in my <a href="https://www.kelvinpapp.com/microsoft-ignite-coming-up">Microsoft Ignite: Coming Up</a>post. By all accounts all of the things I was looking forward to lived up to (and exceeded) my expectations. I met some fantastic people, put some faces to names, and learned a HUGE amount over the course of the week. It was truly one of the best technical events I’ve attended… bring on next year!</p>
]]></content>
        </item>
        
        <item>
            <title>Conditional Access Updates from Ignite</title>
            <link>https://www.kelvinpapp.com/conditional-access-updates-from-ignite/</link>
            <pubDate>Sat, 09 Nov 2019 19:26:03 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/conditional-access-updates-from-ignite/</guid>
            <description>Unsurprisingly the last few days at Ignite have been a whirlwind of news and learning. From my perspective the conference has been everything I’d hoped it would be… and then some! Those of you following me on Twitter and LinkedIn will have seen an increase in spam(!) from me as I’ve tried to communicate some of the key exciting things being discussed. Whilst I’ll be doing my best to summarise those on here over the coming days and weeks, I wanted to take a moment to call out a couple of specific Conditional Access updates I felt were worthy of note.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/11/Conditional-Access-Report-Only-Monitoring.png"
         alt="A screenshot of the new report only functionality in the Azure AD portal"/>
</figure>

<p>Unsurprisingly the last few days at <a href="https://www.microsoft.com/en-us/ignite">Ignite</a> have been a whirlwind of news and learning. From my perspective the conference has been everything I’d hoped it would be… and then some! Those of you following me on <a href="https://twitter.com/kelvinpapp">Twitter</a> and <a href="https://www.linkedin.com/in/kelvinpapp">LinkedIn</a> will have seen an increase in spam(!) from me as I’ve tried to communicate some of the key exciting things being discussed. Whilst I’ll be doing my best to summarise those on here over the coming days and weeks, I wanted to take a moment to call out a couple of specific Conditional Access updates I felt were worthy of note.</p>
<p>If you follow this blog you’ll know that Identity, and Azure AD are two of my favourite topics. I’ve written about Conditional Access in particular on a number of occasions. One such post related to the <a href="https://www.kelvinpapp.com/ca-new-baseline-policies">built-in baseline policies</a> that Microsoft introduced earlier this year.</p>
<figure class="center"><img src="/img/2019/11/Baseline-Conditional-Access-Policies.png"
         alt="A screenshot showing the new baseline Conditional Access policies enabled"/>
</figure>

<p>In response to these additions. there&rsquo;s been much debate around where and how they should be used. Microsoft have provided some clarity in recent months, implying that their use is (really) limited to smaller organisations without the skill or licensing to support manual setup. As a general rule, manual policy configuration will provide the most flexibility, but it isn&rsquo;t always feasible or ideal. In response to this there are some changes planned to the way that baseline policies are applied to tenants. The world as you know it is about to change&hellip;!</p>
<h2 id="security-defaults">Security Defaults</h2>
<p>Microsoft want to encourage good, simple security for smaller organisations and effective use of Conditional Access for larger ones. To address this we&rsquo;ve seen the introduction of Security Defaults. This is a setting which can be enabled at the tenant level to enforce good practice.</p>
<p><em>It&rsquo;s also one which will replace the existing baseline Conditional Access policies in the early part of 2020!</em></p>
<p>Moving forwards this single option will enable recommended settings that were previously incorporated into some of the baseline policies. You can find this setting in the Azure AD portal under Properties, &ldquo;Manage Security Defaults&rdquo;:</p>
<figure class="center"><img src="/img/2019/11/Enabling-Security-Defaults.png"
         alt="A screenshot showing the option to enable Security Defaults within the Azure AD portal."/>
</figure>

<p>Toggling this setting to &ldquo;on&rdquo; automatically enables a number of things:</p>
<ul>
<li>All users will need to register for Multi-Factor Authentication</li>
<li>Privileged Accounts will need to perform MFA at each sign-in</li>
<li>End Users will need to perform MFA once registered</li>
<li>Privileged Operations will require MFA</li>
<li>Legacy Authentication will be blocked</li>
</ul>
<p>Further detail on each of these settings can be <a href="https://docs.microsoft.com/en-us/azure/active-directory/conditional-access/concept-conditional-access-security-defaults">found here</a>.</p>
<p>An important thing to note is that Security Defaults cannot be used in tandem with Conditional Access. Microsoft&rsquo;s assumption is that you will use one or the other. Conditional Access where skills and licensing permit, and Security Defaults in other scenarios. Attempting to enable both will yield an error:</p>
<figure class="center"><img src="/img/2019/11/Security-Defaults-Conditional-Access.png"
         alt="A screenshot depicting the error that results when trying to enable Security Defaults if Conditional Access is already in use."/>
</figure>

<h2 id="report-only-mode">Report-Only Mode</h2>
<p>A second (and quite excellent!) change is Report-Only mode for Conditional Access. This is something that&rsquo;s been hinted at for some time, and is ironically something I stumbled across the day before Ignite in my own tenant. It&rsquo;s an <em>incredibly</em> useful addition.</p>
<p>The long story short is that when enabled, Conditional Access policies will fire as if enabled, but resulting actions won&rsquo;t be enforced. They will be logged though, so the potential impact of a new policy can be evaluated.</p>
<figure class="center"><img src="/img/2019/11/Conditional-Access-Report-Only-Monitoring.png"
         alt="A screenshot showing the results of a Conditional Access policy configured in report-only mode."/>
</figure>

<p>You can read more about Conditional Access Report-Only mode <a href="https://docs.microsoft.com/en-us/azure/active-directory/conditional-access/concept-conditional-access-report-only">here on Microsoft Docs</a>.</p>
<hr>
<p>At face value, both of these Conditional Access updates are minor. They certainly didn&rsquo;t capture headlines at Ignite in the way some other announcements did. In both cases though they&rsquo;re significant, reducing administrative effort and aiding the implementation of good security practices that are perceived as either too complex, or too risky.</p>
<p>If you haven&rsquo;t already, I&rsquo;d encourage you to take a deeper look at both. As a trusted supermarket retailer here in the UK would say&hellip; every little helps!</p>
]]></content>
        </item>
        
        <item>
            <title>Microsoft Endpoint Manager Announced</title>
            <link>https://www.kelvinpapp.com/microsoft-endpoint-manager-announced/</link>
            <pubDate>Tue, 05 Nov 2019 04:25:41 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/microsoft-endpoint-manager-announced/</guid>
            <description>I write this at the end of the first &amp;ldquo;proper&amp;rdquo; day of Microsoft Ignite 2019. Quite an amazing day for a whole bunch of reasons, but not least the announcement of several big news items. Front and centre for me was the converging of Microsoft Intune, and System Centre Configuration Manager (SCCM) into Microsoft Endpoint Manager. Two big names in the device management space. What does this actually mean though?</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/11/Microsoft-Endpoint-Manager.jpg"
         alt="Microsoft Endpoint Manager"/>
</figure>

<p>I write this at the end of the first &ldquo;proper&rdquo; day of Microsoft Ignite 2019. Quite an amazing day for a whole bunch of reasons, but not least the announcement of several big news items. Front and centre for me was the converging of Microsoft Intune, and System Centre Configuration Manager (SCCM) into Microsoft Endpoint Manager. Two big names in the device management space. What does this <em>actually</em> mean though? Is SCCM dead? Is Intune no more? Does this spell the end of co-management? The short answer is no, to all three of those questions. Notwithstanding, this is a big deal, and one that needs a little more explanation than the headline gives away.</p>
<p>I was fortunate enough to hear <a href="https://twitter.com/anderson">Brad Anderson</a> discussing the rationale behind this change live, in his Modern Management session this afternoon (<a href="https://myignite.techcommunity.microsoft.com/sessions/81268">BRK008</a>). The stream is already available, the associated slides will be shortly. I&rsquo;d suggest you take a listen if you haven&rsquo;t already. I&rsquo;d also suggest you read his <a href="https://www.microsoft.com/en-us/microsoft-365/blog/2019/11/04/use-the-power-of-cloud-intelligence-to-simplify-and-accelerate-it-and-the-move-to-a-modern-workplace">accompanying blog post</a> which also went live today.</p>
<h2 id="why">Why?</h2>
<p>The thinking behind the change is entirely logical. The basis lies in the fact that for a long time now, Intune and SCCM have been perceived as competing (or at the very least, disjointed) products. In a lot of respects, this is true. Intune has long been seen as the modern / cloud counterpart of SCCM (with some feature gaps). SCCM has been seen as the lumbering on-premises solution with a limited shelf life. Neither of these statements is necessarily true. Each of the products has positive and negative attributes, and together they are a formidable force. Today&rsquo;s announcement cements that.</p>
<p>Not helping the matter has been co-management. As Brad indicates in his post, this has often been seen as a tool. A bridge. The means to get from A (on-premises) to B (Cloud). The destination analogy is far more accurate - not in the sense of <em>getting</em> to Cloud, but in the sense of <em>getting</em> to a far better management position. Co-Management is something you should use if you are able to - not just to migrate, but to add value to your device management operations.</p>
<h2 id="the-future-of-endpoint-management">The Future of Endpoint Management</h2>
<p>So what&rsquo;s actually happened? Is it just a re-brand? The answer, again, is no. In tandem with the branding references, there were also some significant feature announcements included today. Visibility of MDM, MAM, SCCM, and co-managed devices in the Microsoft Endpoint Manager (formerly Intune) portal has been improved - it&rsquo;s now a true single pane of glass. Interoperability is also enhanced. A number of SCCM activities can now be executed directly from the Endpoint Manager portal (e.g. Application distribution). On the face of it these are small things, but again - watch the session recording. These are a big deal, and will lead to significant time-savings and efficiencies for IT teams once the power of this partnership is realised. They are also just the beginning.</p>
<p>Coupled with the operational changes, were some licensing simplifications.</p>
<p>Historically licensed users of Intune have been able to deploy SCCM through &ldquo;equivalent use rights&rdquo;. This entitlement has often been used as a temporary step - covering existing SCCM instances and aiding the transition to Intune. This now also works in reverse, with SCCM licensing now providing <em>full</em> access to Intune (for Windows devices). Either way around, you now have the full power of both SCCM, and Intune at your disposal.</p>
<h2 id="summary">Summary</h2>
<p>This was a really interesting, unexpected announcement and changed some of the opinions I held on the future of SCCM. It&rsquo;s clear to see that Microsoft see huge value in the retention of both products, but that public opinion / speculation has tainted the adoption and usage of SCCM to its detriment.</p>
<p>SCCM remains a top-tier management solution. Intune is a hugely powerful modern management solution. Combined, there&rsquo;s huge potential for a &ldquo;best of both worlds&rdquo; approach which is clearly Microsoft&rsquo;s aspiration for the enterprise. Modern Management doesn&rsquo;t have to mean clearing out all that&rsquo;s been before. By harnessing the power of the cloud, and overlaying it elegantly on the trusted, enterprise-ready architecture of SCCM they might have just convinced me that there&rsquo;s life in the old dog yet!</p>
<p>RIP SCCM. RIP Intune. Long live Microsoft Endpoint Manager!</p>
]]></content>
        </item>
        
        <item>
            <title>Microsoft Ignite: Coming Up</title>
            <link>https://www.kelvinpapp.com/microsoft-ignite-coming-up/</link>
            <pubDate>Sat, 02 Nov 2019 22:36:17 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/microsoft-ignite-coming-up/</guid>
            <description>Microsoft Ignite has finally arrived! After months of build-up, the week is finally here&amp;hellip; and what a week it&amp;rsquo;s going to be! I&amp;rsquo;m planning on posting throughout the week on social media. I&amp;rsquo;ll also be doing my best to post regular updates on here covering my thoughts, and the key things I pick up from the sessions I attend. As a pre-cursor , I thought I&amp;rsquo;d take 30 minutes to provide a handful of the sessions (and things!</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/11/Microsoft-Ignite.png"
         alt="The feature graphic from Microsoft Ignite 2019"/>
</figure>

<p>Microsoft Ignite has finally arrived! After months of build-up, the week is finally here&hellip; and what a week it&rsquo;s going to be! I&rsquo;m planning on posting throughout the week on <a href="https://twitter.com/kelvinpapp">social media</a>. I&rsquo;ll also be doing my best to post regular updates on here covering my thoughts, and the key things I pick up from the sessions I attend. As a pre-cursor , I thought I&rsquo;d take 30 minutes to provide a handful of the sessions (and things!) I&rsquo;m most looking forward to&hellip;</p>
<h2 id="session-1-microsoft-cybersecurity-summit">Session 1: Microsoft Cybersecurity Summit</h2>
<p>The Security Summit is one of this year&rsquo;s pre-day workshops (<a href="https://myignite.techcommunity.microsoft.com/sessions/77828?source=sessions">PRE28</a>). Unsurprisingly for regular visitors of this blog, this is right up my street. The agenda took my fancy from the outset, more so having received the full breakdown:</p>
<ul>
<li>08:00-09:00: Pre-Day Workshop Breakfast</li>
<li>09:00-10:00: Opening Keynote</li>
<li>10:00-12:00: Cybersecurity Industry Talks</li>
<li>12:00-13:00: Pre-Day Workshop Lunch</li>
<li>13:00-14:45: Afternoon Breakout Sessions</li>
<li>15:00-18:00: Afternoon Breakout Sessions</li>
<li>18:30-21:00: Cybersecurity Summit Dinner</li>
</ul>
<p>For the first afternoon sessions, I&rsquo;ve elected for one on learnings / approaches from Microsoft’s Cyber Defense Operations Center, and another on the removal of passwords. For the second part, I&rsquo;ve chosen a hands-on session: &ldquo;Into the Breach: A Microsoft Cyber Defence Experience&rdquo;. I&rsquo;m hoping to learn a huge amount from these sessions, in addition to putting some faces to the names of many of the people I interact with on Twitter (and some more, no doubt!).</p>
<p>I particularly like the &ldquo;conference&rdquo; nature of this pre-day. Nice and varied with a good mix of context, opinion, and technical content. There are also some fantastic speakers lined up. I&rsquo;m confident there will be more to follow on this session&hellip;</p>
<h2 id="session-2-microsofts-roadmap-for-security-compliance-and-identity">Session 2: Microsoft&rsquo;s Roadmap for Security, Compliance, and Identity</h2>
<p>Perhaps three of the most used words on this blog, and the name given to the Technical keynote for Security. Who&rsquo;d have thought?! There&rsquo;s very little background detail on the Ignite session page (<a href="https://myignite.techcommunity.microsoft.com/sessions/79780?source=schedule">TK03</a>), but I have high expectations! The likelihood is that this session will provide context to the various security announcements that will take place during the rest of Microsoft Ignite. It will also play a huge part in setting the focus areas I take forward when it comes to security over the next 12 months or so.</p>
<p>Much like the Security Pre-Day workshop, my attendance at this session shouldn&rsquo;t come as much of a surprise 🙂 As I&rsquo;ve alluded to previously <a href="https://www.kelvinpapp.com/new-blog-first-post">on this blog</a>, Security has been a real area of interest for me throughout my IT career. It&rsquo;s also representative of many of the concerns that organisations have when it comes to adoption (or lack of!) of Microsoft Cloud. Microsoft have made huge strides in this area over the last couple of years. I see no sign of that letting up, and I&rsquo;m hugely excited to see and hear about what Microsoft has for 2020 and beyond.</p>
<h2 id="session-3-modern-management">Session 3: Modern Management</h2>
<p>This session is two-fold for me (<a href="https://myignite.techcommunity.microsoft.com/sessions/81268?source=schedule">BRK008</a>). For one, I&rsquo;ve always followed the work of <a href="https://twitter.com/Anderson">Brad Anderson</a>, but I&rsquo;ve never had the opportunity of hearing him speak &ldquo;live&rdquo; (as it were!)&hellip; cue awkward fanboy moment! 😉 I also have a genuine interest in device management. My colleague <a href="https://twitter.com/colin_macandrew">Colin Macandrew</a> and I delivered a session on the concept of Modern Management at Future Decoded just a few weeks ago.</p>
<p>For me, there&rsquo;s an intrinsic link between legitimate &ldquo;modern&rdquo; management, and data / organisational security. The way that organisations can now leverage solutions like Intune to manage devices irrespective of type or location is truly incredible. Certainly in contrast to options available just a few years ago. Coupled with increasingly tight integration across the identity and data security stack, Modern Management of devices is every bit as important as anything else you might be focussed on when it comes to infrastructure.</p>
<p>When you layer other advantages; mobility, device freedom, and end user perception, a modern management strategy can be game changing. I&rsquo;m really looking forward to hearing the Microsoft story on Modern Management. I&rsquo;m also hopeful there will be a nod (or two, or three!) to some new capabilities coming to M365 soon. Depending on the content in this session I sense I might be making some changes to my schedule for the rest of the week!</p>
<h2 id="session-4-investigate-and-respond-to-events-with-azure-sentinel">Session 4: Investigate and respond to events with Azure Sentinel</h2>
<p>This session (<a href="https://myignite.techcommunity.microsoft.com/sessions/84466?source=schedule">WRK033</a> is particularly close to my heart. One of my <a href="https://www.kelvinpapp.com/azure-sentinel-siem-for-all">first posts</a> on this site related to the (preview) launch of Sentinel. It&rsquo;s since come of age, exited preview, and is the subject of a bunch of sessions at this years Microsoft Ignite. This is one of the earlier sessions of the week.</p>
<p>From a personal perspective, I&rsquo;m keen to hear Microsoft talk about the product. Much of my opinion and commentary has been based on personal interpretation. Listening to the product team discuss the approach they <em>expect</em> people to take when it comes to threat investigation will be really insightful.</p>
<p>I&rsquo;m hopeful the session will touch on some of what&rsquo;s coming. Alert response through automation in particular. I&rsquo;m also looking forward to learning more about investigation using some of the in-built capability, and picking up some best practices around real-world the use of Sentinel. Again, I anticipate this session may lead to some schedule changes as the week progresses!</p>
<h2 id="session-5-azure-active-directory-new-features-and-roadmap">Session 5: Azure Active Directory: New features and Roadmap</h2>
<p>Another key theme of this blog is Identity. I&rsquo;ve posted on multiple occasions about the importance of Identity driven security, and no doubt will again in the future. This session (<a href="https://myignite.techcommunity.microsoft.com/sessions/81713?source=schedule">BRK2130</a>) should inform some of those posts, setting the agenda for Azure AD through 2020.</p>
<p>As an <a href="https://www.transparity.com">organisation</a>, we like to think we&rsquo;re at the forefront of the drive to secure Identity. We work closely with the product team at Microsoft, and drive an identity-first approach in all the M365 work we do.</p>
<p>Notwithstanding, many organisations fail to grasp the importance of &ldquo;doing identity right&rdquo;. Part of that is a lack of awareness / knowledge, but as much a factor is perceived complexity and impact to users. Microsoft have made huge strides towards minimising this, but there is evidently still work to do. Azure AD is one of the most underrated products in the Microsoft Cloud portfolio. I&rsquo;m really looking forward to taking some of the outputs from this session forward to our customers. Expect further blog posts on this topic. It&rsquo;s not going away&hellip; 😉</p>
<p>Oh, that, and I&rsquo;m also super excited to hear <a href="https://twitter.com/Alex_A_Simons">Alex Simons</a> speak! 😀</p>
<hr>
<p>There are so many other sessions I could write about in this post. My session scheduler looks like an impending car crash, but the reality is that I plan (and intend) to get as much out of this week as I possibly can. There is so much to learn, and so much innovation happening in this space - much of which remains a mystery to those organisations who should be using it.</p>
<p>I&rsquo;ll be posting as regularly as I can this week. Expect some further blog posts, and a barrage of content from my colleagues at #TeamTransparity.</p>
<p>Microsoft Ignite. Bring it on! 🙂</p>
]]></content>
        </item>
        
        <item>
            <title>Snippet #02: Staged Authentication Rollout</title>
            <link>https://www.kelvinpapp.com/snippet-02-staged-authentication-rollout/</link>
            <pubDate>Thu, 31 Oct 2019 11:39:50 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/snippet-02-staged-authentication-rollout/</guid>
            <description>I thought the day would never come! Since it&amp;rsquo;s announcement at Microsoft Ignite last year, I&amp;rsquo;ve been waiting patiently for this feature to make a pubic appearance. The initial indications we by the end of last year, then Q1, then Q3&amp;hellip; finally this week, Staged Authentication Rollout made its way to Public Preview.
I thought I&amp;rsquo;d post a brief introduction to the feature, following the theme of my previous &amp;ldquo;Snippet&amp;rdquo; on the GA of Windows Virtual Desktop.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/10/Usability-Test.jpg"
         alt="A hand holding a note making reference to running a usability test"/>
</figure>

<p>I thought the day would never come! Since it&rsquo;s announcement at Microsoft Ignite last year, I&rsquo;ve been waiting patiently for this feature to make a pubic appearance. The initial indications we by the end of last year, then Q1, then Q3&hellip; <em>finally</em> this week, Staged Authentication Rollout made its way to <a href="https://techcommunity.microsoft.com/t5/Azure-Active-Directory-Identity/Staged-rollout-to-cloud-authentication-now-in-public-preview/ba-p/827830">Public Preview</a>.</p>
<p>I thought I&rsquo;d post a brief introduction to the feature, following the theme of my previous &ldquo;Snippet&rdquo; on the <a href="https://www.kelvinpapp.com/snippet-01-windows-virtual-desktop-ga">GA of Windows Virtual Desktop</a>.</p>
<h2 id="why-the-hype">Why the Hype?</h2>
<p>For those that aren&rsquo;t aware, I highly recommend you have a look at <a href="https://www.youtube.com/watch?v=qQruArbu2Ew&amp;feature=youtu.be&amp;t=1">this session</a> from Ignite last year. Skip to the 16 minute mark for an overview of the feature. In essence, Staged Authentication allows you to migrate users from federated to cloud authentication in a phased manner. To date, this transition has been a global one, set at the domain level using either Azure AD Connect, or PowerShell. Whilst it&rsquo;s a low-impact change if everything goes to plan, the &ldquo;big-bang&rdquo; nature (naturally) introduces concern for larger organisations. This is exacerbated when you consider associated features that might be enabled at the same time; Conditional Access, MFA, Self-Service Password Reset etc. The prospect of thousands of users needing to enrol into these services simultaneously is a daunting one for Service Desk teams.</p>
<h2 id="how-does-staged-authentication-rollout-work">How Does Staged Authentication Rollout Work?</h2>
<p>Once enabled, Staged Rollout appears in your Azure AD portal under the <a href="https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/AzureADConnect">Azure AD Connect blade</a>:</p>
<figure class="center"><img src="/img/2019/10/Staged-Authenticaion-Rollout-in-AAD-Portal.jpg"
         alt="A screenshot showing the Staged Authentication Rollout section of the Azure AD portal"/>
</figure>

<p>If you navigate to the feature, you&rsquo;ll see a handful of options you can enable. Staged Rollout supports a transition to either Password Hash Sync (PHS), or Pass-Through Authentication (PTA). You <em>can&rsquo;t</em> use the tool to implement a mix of both (for testing or otherwise). Microsoft&rsquo;s guidance is to pick one, migrate, and then cut-over fully once all users are staged. The process of doing so is simple:</p>
<ul>
<li>Configure Azure AD Connect for PHS / SSSO <strong>or</strong></li>
<li>Deploy PTA Authentication Agents / SSSO</li>
<li>Enable the relevant service option (PHS, or PTA)</li>
<li>Add Users to a corresponding group, and assign this to the policy</li>
<li>Test Sign-In using a staged account</li>
</ul>
<p>The change should take place immediately, with any associated MFA / SSPR activity triggered at next logon for your test / migrated users. On completion (or when the bulk of your users are transitioned), you can make the global change to disable federation for your chosen domain.</p>
<p>Fuller documentation is available on the Microsoft Docs site <a href="https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-staged-rollout">here</a>.</p>
<p>Obviously the feature is in Preview, and with that come the usual caveats. Support will be limited, and the experience may well change before this becomes Generally Available. All of that said, we&rsquo;ve been involved in several projects recently that have leveraged this feature in a Private Preview capacity. In each case, it&rsquo;s use has been flawless.</p>
<h2 id="in-summary">In Summary</h2>
<p>There&rsquo;s a broader question around whether you <em>should</em> transition away from ADFS. I hold some fairly strong views on that which I&rsquo;ll put into a dedicated post when I get a moment. Regardless of your opinion this is a much-desired feature that&rsquo;s <em>hugely</em> advantageous for larger organisations. If you federate today and are considering moving to Cloud authentication you <strong>need</strong> to take a look at this feature&hellip; I <em>guarantee</em> it will remove some of the nerves you might have around the change!</p>
<p>Happy playing! 🙂</p>
]]></content>
        </item>
        
        <item>
            <title>Configuring Azure CDN for App Service</title>
            <link>https://www.kelvinpapp.com/configuring-azure-cdn-for-app-service/</link>
            <pubDate>Sat, 26 Oct 2019 22:50:49 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/configuring-azure-cdn-for-app-service/</guid>
            <description>A Content Delivery Network (CDN) is a sure-fire way to improve the performance of content accessed globally. For a while now I&amp;rsquo;ve contemplated using one; both to improve the performance of this site, and as an opportunity to experiment with Azure CDN. On the back of a Twitter conversation with a colleague Dale / @blackforce, I decided today was the day I&amp;rsquo;d take a look at configuring Azure CDN 🙂</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/10/Azure-CDN.png"
         alt="The Azure CDN logo"/>
</figure>

<p>A Content Delivery Network (CDN) is a sure-fire way to improve the performance of content accessed globally. For a while now I&rsquo;ve contemplated using one; both to improve the performance of this site, and as an opportunity to experiment with <a href="https://azure.microsoft.com/en-gb/services/cdn">Azure CDN</a>. On the back of a Twitter conversation with a colleague <a href="https://twitter.com/blackforce">Dale / @blackforce</a>, I decided today was the day I&rsquo;d take a look at configuring Azure CDN 🙂</p>
<h2 id="why-now">Why now?</h2>
<p>The back-story to this is a minor tale of woe. When I set up this site, I did so (being a &ldquo;Microsoft guy&rdquo;) using <a href="https://azure.microsoft.com/en-gb/services/app-service/">Azure Ap Service</a>. Simple, reliable, and nicely scalable as things grow. In doing so I also used <a href="https://letsencrypt.org/">Let&rsquo;s Encrypt</a> to provide the site&rsquo;s SSL certificate. The obvious advantage of Let&rsquo;s Encrypt is the fact that they allow you to generate certificates for free&hellip; The caveat is a short life-time of 90 days. This would be a pain if they didn&rsquo;t provide mechanisms for automating the request / renewal of site certificates. Fortunately they do, and in the case of Azure App Service this takes the form of an extension.</p>
<p>For the last 6 months or so this has worked like a charm. Come renewal time the extension pings a request off to Let&rsquo;s Encrypt, renews the certificate, and then applies it to my site. In the most recent case, this didn&rsquo;t happen, resulting in my site reporting an SSL error to visitors for a few days before I noticed 🙁 The fix was simple. The extension needed an update and I just needed to apply the update before  triggering a manual renewal. Job done, certificate goodness restored! 🙂</p>
<p>When I posted about this on <a href="https://twitter.com/kelvinpapp/status/1187828086596952064?s=20">Twitter</a> Dale pointed me at <a href="https://www.cloudflare.com/">Cloudflare</a> as an alternative, with the added benefit of them providing CDN services. Now, I do use Cloudflare on another site I&rsquo;m involved with for just that. For the most part it&rsquo;s fantastic, but I do have some mild gripes with the way they implement their free SSL service. The CDN point is valid though, and prompted me to get on and take a proper look at Microsoft&rsquo;s offering. I went through the motions of configuring Azure CDN today and figured I&rsquo;d jot some thoughts down into a post on it&rsquo;s implementation&hellip;</p>
<h2 id="enabling-cdn-for-app-service">Enabling CDN for App Service</h2>
<p>Unsurprisingly, Microsoft make the process of adding CDN capabilities to sites hosted in App Service super simple. Equally unsurprisingly, there are some caveats and things to be aware of in the process&hellip;</p>
<p>As a starting point, it&rsquo;s possible to configure the CDN independently of the App Service. Triggering creation from inside the App provides some advantage though, in that some settings are pre-configured. You can find the option to enable CDN within the Networking section of your App:</p>
<figure class="center"><img src="/img/2019/10/Configure-Azure-CDN.png"
         alt="A screenshot of the setting for configuring Azure CDN, within the App Service settings"/>
</figure>

<p>Selecting the &ldquo;configure Azure CDN for your app&rdquo; link leads on to a simple wizard with a handful of fields to complete. If you already publish your site externally and have configured SSL there are additional steps to consider. I&rsquo;ll cover those later on in this post. Initially though you will need to provide:</p>
<ul>
<li>The name for the CDN profile</li>
<li>Your choice of pricing tier (Microsoft, Akami, Verizon, or Premium Verizon - see below for further information on this)</li>
<li>The public CDN endpoint name (this presents on &ldquo;azureedge.net”, but we can assign a custom name later on)</li>
<li>The &ldquo;Origin Hostname&rdquo;. This is the host that provides the content to the CDN, and will be pre-populated if you&rsquo;ve initiated creation within the App Service</li>
</ul>
<p>In the case of the &ldquo;Origin&rdquo;, the &ldquo;azurewebsites.net&rdquo; address assigned to your App Service will be used by default. This will be invisible to users accessing your site, who will interact with a hostname that resolves to the CDN. Using this default configuration SSL is maintained end-to-end should users need to communicate with the App Service directly <em>after</em> CDN is enabled. You can change this address later should you wish, but be conscious of maintaining end-to-end SSL if you do.</p>
<h2 id="configuring-azure-cdn">Configuring Azure CDN</h2>
<p>Once the CDN has been created you will fairly quickly be able to access your site using the new &ldquo;azureedge.net&rdquo; address. This isn&rsquo;t immediate and can take up to a couple of hours according to documentation. In my case, it was around 30 minutes before things kicked into life.</p>
<p>A point I said I would come to relates to the tiers of service. Azure CDN isn&rsquo;t as simple as on / off. There are considerations around the type(s) of content you will be distributing which will have a bearing on which of the options is best for you. I highly recommend reviewing <a href="https://docs.microsoft.com/en-us/azure/cdn/cdn-features">this link</a> which provides a detailed overview of the functionality within each &ldquo;flavour&rdquo; of Azure CDN. In my case, I opted for &ldquo;Standard Verizon&rdquo;. This provides the best mix of features for the content I&rsquo;m likely to be hosting, whilst also supporting an upgrade to Premium should additional rule customisation, or reporting become a requirement. I won&rsquo;t go into detail on the different editions within this post, but would be happy to provide some additional commentary / feedback on each if needed - just contact me via the comments.</p>
<p>As far as configuration is concerned, there are a handful of things you will want (and are able) to do once you&rsquo;re up and running. Initially, review caching rules. <a href="https://docs.microsoft.com/en-us/azure/cdn/cdn-caching-rules-tutorial">Caching rules</a> allow you define exceptions for content that is best served directly from the host. In my case, I&rsquo;ve excluded paths relating to sign-in and administration by specifying that they should bypass the cache:</p>
<figure class="center"><img src="/img/2019/10/CDN-Caching-Rules.png"
         alt="The CDN Caching Rules configuration screen"/>
</figure>

<p>You&rsquo;ll also want to review &ldquo;Custom domains&rdquo;. This section allows you to bind hostnames that you own to the CDN service. To do this, you need to add each domain name, validating ownership as through the creation of CNAME records. These resolve to the azureedge.net CDN address, and will remain in place on completion:</p>
<figure class="center"><img src="/img/2019/10/CDN-Custom-Domain-Configuration.png"
         alt="Custom Domain Name additions to the Azure CDN service"/>
</figure>

<h2 id="a-word-on-ssl">A word on SSL</h2>
<p>Much like Cloudflare, Microsoft allow you to enable SSL on custom domains. This is an inclusive service (in the context of paying for CDN), with certificates issued by DigiCert. Subsequent processing and renewal of certificates is managed by the CDN service.</p>
<p>The astute of you will have noticed the &ldquo;pending&rdquo; nature of my HTTPS status in the above screenshot. Where you elect to use Microsoft issued SSL certificates, expect a wait. Potentially a long one (up to 24 hours, assuming no issues based on my reading). In the case of a live site this is obviously disruptive and needs to coincide with a maintenance window. The CNAME records for your custom domains need to resolve to the CDN for the validation to succeed.</p>
<p>As I write this, I&rsquo;m awaiting validation of my domain certificates. I can access my site using an alternative SSL secured custom domain (which I&rsquo;ve chosen to use for my &ldquo;Origin&rdquo; address). I can also access using my App Service’s &ldquo;azurewebsites.net&rdquo; domain. Those visiting my site on my usual URL&rsquo;s in the meantime will be seeing a certificate error&hellip; which isn&rsquo;t ideal. <em>Update: This process took around 14 hours to complete in my case&hellip;</em></p>
<p>Obviously this is a one-time thing, but is a nuisance none the less. You can avoid this by using / uploading your own SSL certificates, but that obviously carries a cost vs. using the integrated service from Microsoft. A minor complaint in an otherwise straightforward setup.</p>
<h2 id="in-conclusion">In conclusion&hellip;</h2>
<p>I was surprised at the simplicity of CDN configuration within Azure. My experience has been focussed on App Service integration, but the steps and points mentioned are universally applicable. Azure CDN is a really straightforward service, as it should be to compete effectively with others.</p>
<p>The shine has been removed slightly for me with the delay in SSL validation. That aside, it&rsquo;s doing what it should do. Page load times are reduced (based on some initial testing), performance for those accessing overseas should be improved, I have enhanced DDoS protection, and I (almost) have a free SSL solution to boot. Great success!</p>
<p>I haven&rsquo;t made reference to pricing. Obviously Azure CDN isn&rsquo;t a free service, but it is a comprehensive one. For those interested, pricing is available <a href="https://azure.microsoft.com/en-gb/pricing/details/cdn/">here</a>. For all &ldquo;standard&rdquo; options, a tiered pricing structure based on data served is used. This is also true of the &ldquo;premium&rdquo; offering, albeit at an inflated cost. I&rsquo;ll be continuing to use CDN for at least a few months, if not permanently, to gauge it&rsquo;s effectiveness. Feel free to contact me for an update if / when you read this if interested.</p>
<p>I hope you&rsquo;ve found this post useful. As always, feel free to contact on <a href="https://www.twitter.com/kelvinpapp">Twitter</a> if you have any questions or feedback. It&rsquo;s always welcome!</p>
]]></content>
        </item>
        
        <item>
            <title>Snippet #01: Windows Virtual Desktop GA</title>
            <link>https://www.kelvinpapp.com/snippet-01-windows-virtual-desktop-ga/</link>
            <pubDate>Mon, 07 Oct 2019 19:10:03 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/snippet-01-windows-virtual-desktop-ga/</guid>
            <description>This is going to be slightly different in nature to my regular posts. A format I’ve been toying with adopting for a while now is a “quick take” on key news, announcements, and events. I really enjoy writing my regular posts, but they take a while to pull together. It’s not always feasible to provide timely commentary in the way I’d like. It’s also not always necessary to provide lengthy opinion pieces, or extensive technical detail&amp;hellip;</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/10/Snipping.jpg"
         alt="A woman holding a pair of scissors"/>
</figure>

<p>This is going to be slightly different in nature to my regular posts. A format I’ve been toying with adopting for a while now is a “quick take” on key news, announcements, and events. I really enjoy writing my regular posts, but they take a while to pull together. It’s not always feasible to provide timely commentary in the way I’d like. It’s also not always necessary to provide lengthy opinion pieces, or extensive technical detail&hellip;</p>
<p>I hope to address that with “Snippets”. These will be focused, brief (ish!?) posts on topical subjects that I want to respond to quickly. They won’t replace my usual posts, but I hope they will be more regular, and responsive to key industry news.</p>
<p>Welcome to Snippet #01, covering the General Availability of Windows Virtual Desktop (WVD) which was <a href="https://www.microsoft.com/en-us/microsoft-365/blog/2019/09/30/windows-virtual-desktop-generally-available-worldwide">announced this last Monday.</a>.</p>
<hr>
<h2 id="wvd-the-good--the-bad">WVD: The Good &amp; The Bad</h2>
<p>I’ve written about WVD <a href="https://www.kelvinpapp.com/getting-to-grips-with-wvd/">previously</a>, Microsoft&rsquo;s response to the managed desktop. Having waited fairly patiently for its release, I was surprised to see it exit preview without warning last week. This was made all the worse given it was a day before <a href="https://futuredecoded.microsoft.com/">Future Decoded</a>, where we had a session planned on WVD&hellip; none the less, now that it&rsquo;s out what&rsquo;s new? What&rsquo;s changed? Here&rsquo;s a quick take of the highlights, and low-lights from my perspective&hellip;</p>
<h3 id="the-good">The Good</h3>
<ul>
<li>WVD launched alongside AppAttach. This supports real-time attachment of applications to a managed desktop, minimising the need for custom images.</li>
<li>FSLogix technology is integrated into the WVD experience and licensing model. This provides full support for Office 365 in a virtualised desktop, and dramatically simplifies profile management.</li>
<li>AV Redirection was simultaneously announced, with support for WVD. This reduces voice and video encoding through the use of <a href="https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API">WebRTC</a> to enhance VDI performance.</li>
<li>The &ldquo;<a href="https://azure.microsoft.com/en-us/services/virtual-desktop/assessment/">Windows Virtual Desktop Experience Estimator</a>&rdquo; provides a real-time view of the round trip time to each WVD supported region, aiding resource placement.</li>
<li>The service attracts an SLA of 99.5%</li>
</ul>
<h3 id="the-not-so-good-ill-refrain-from-using-the-word-bad">The not so good&hellip; (I&rsquo;ll refrain from using the word bad!):</h3>
<ul>
<li>A management UI is still lacking. All administration tasks are completed via (RDS) PowerShell. A <a href="https://docs.microsoft.com/en-gb/azure/virtual-desktop/manage-resources-using-ui">&ldquo;sample management interface&rdquo;</a> built on an Azure Web App can be deployed for those itching for a GUI.</li>
<li>Resources still need to be assigned to individual users. Active Directory Groups are not yet supported.</li>
<li>Automatic scaling of host pools isn&rsquo;t yet available. Azure automation routines can go some way to mitigating this, but a truly elastic WVD environment continues to be a desire&hellip; Microsoft are not (yet) financially backing the stated SLA</li>
</ul>
<p><em>Obviously</em> Microsoft will continue to mature the WVD offering. It&rsquo;s very evidently going to be a central part of the application delivery story, and will go a long way to mitigating the constraints some organisations face with publishing legacy applications. In spite of its limitations though, WVD is a very solid v1 and well worth a look.</p>
<p>I&rsquo;ll provide further detail on some of the new WVD functionality in due course, and will continue to monitor its progress. In the meantime though, feel free to get in touch via the comments selection below, or via <a href="https://www.twitter.com/kelvinpapp">Twitter</a> with any questions.</p>
]]></content>
        </item>
        
        <item>
            <title>Passwordless with YubiKey</title>
            <link>https://www.kelvinpapp.com/passwordless-with-yubikey/</link>
            <pubDate>Sat, 05 Oct 2019 17:56:02 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/passwordless-with-yubikey/</guid>
            <description>Passwordless Authentication is a topic I&amp;rsquo;ve been keen to write about for a while now. Last weekend I finally managed to grab some time to get to grips with one piece of the passwordless puzzle I hadn&amp;rsquo;t had a chance to play with: YubiKey.
The concept of &amp;ldquo;passwordless&amp;rdquo; doesn&amp;rsquo;t really need explaining&amp;hellip; the clue is in the name 🙂 It is something that&amp;rsquo;s had a lot of press in recent months though as it&amp;rsquo;s matured to the point of being near GA for Azure AD.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/10/AAD-Passwordless.gif"
         alt="An animated GIF showing the use of a security key"/>
</figure>

<p>Passwordless Authentication is a topic I&rsquo;ve been keen to write about for a while now. Last weekend I finally managed to grab some time to get to grips with one piece of the passwordless puzzle I hadn&rsquo;t had a chance to play with: <a href="https://www.yubico.com/passwordless/">YubiKey</a>.</p>
<p>The concept of &ldquo;passwordless&rdquo; doesn&rsquo;t really need explaining&hellip; the clue is in the name 🙂 It is something that&rsquo;s had a lot of press in recent months though as it&rsquo;s matured to the point of being near GA for Azure AD. When exactly it will exit preview is anyone&rsquo;s guess&hellip; but I&rsquo;d speculate an upcoming industry event may yield some news! Irrespective, it&rsquo;s highly relevant and exciting functionality that has the potential to siginificantly reduce the risk of data breach through poor password practice.</p>
<p>Before we get into some detail, why is passwordless such a big deal? I spent a bit of time covering the concept in a theatre session I ran this last week at <a href="https://futuredecoded.microsoft.com/">Future Decoded</a>. A &ldquo;problem&rdquo; I think we all accept relates to use of (specifically bad practice with) passwords. Regardless of how much education goes into encouraging good password practice, the reality is that:</p>
<ul>
<li>People will often re-use passwords between different services.</li>
<li>Variants of the same password are frequently used to get around password age or complexity requirements.</li>
<li>Weak or default passwords are regularly exploited by attackers.</li>
<li>Passwords are frequently exposed through data breaches, stolen / leaked credentials, or phishing attacks.</li>
</ul>
<p>In 2019, passwords simply aren&rsquo;t enough. They <em>need</em> to be supplemented by solutions like multi-factor authentication, or biometric verification. Ideally access via password alone should be eradicated altogether. Here&rsquo;s where passwordless authentication steps in, replacing traditional passwords with a modern alternative to verify identity.</p>
<h2 id="what-are-the-options">What are the Options?</h2>
<p>There are several routes to implementing passwordless sign-in available already:</p>
<figure class="center"><img src="/img/2019/10/Passwordless-Options.png"
         alt="A graphic showing three passwordless options: Windows Hello, Microsoft Authenticator, and FIDO2 Security Keys"/>
</figure>

<p>Whilst these don&rsquo;t (yet) lead to a state where users are <em>truly</em> passwordless, it does mean that use of the password can be minimised. This can, in turn, lead to a place where much more robust password policies can be implemented without upsetting end users.</p>
<p>Many of you will be familiar with <a href="https://www.microsoft.com/en-gb/windows/windows-hello">Windows Hello</a> which uses device hardware to identify and verify a user login attempt. The issue with Hello is the need for specific (and often expensive) hardware to ensure the appropriate level of security. Integrated cameras with near infrared (IR) imaging capability, or high-quality fingerprint readers aren&rsquo;t always incorporated into company procurement strategies&hellip;</p>
<p>An alternative is Microsoft Authenticator based passwordless sign-in. This has been in public preview for <a href="https://techcommunity.microsoft.com/t5/Azure-Active-Directory-Identity/Announcing-password-less-login-identity-governance-and-more-for/ba-p/262472">some time now</a>. When deployed via the authenticator app, a passwordless policy prompts users to verify one of three numbers in place of supplying a password during sign-in. Coupled with biometric authentication on the authenticator app itself (e.g. TouchID, or FaceID on access), this provides a trusted mechanism for verifying the user identity without the need for password entry. It also satisfies MFA is this forms part of your Conditional Access strategy. This is a simple, low-cost solution to passwordless, but has the potential to be resisted in some organisations by users who object to installing a work application on a personal phone. In organisations where company devices aren&rsquo;t issued routinely, this can be a barrier to it&rsquo;s use. It surprises me to this day that individuals take issue with this&hellip; but there you go&hellip;</p>
<p>This brings me on to YubiKey.</p>
<h2 id="yubikey-passwordless-authentication">YubiKey Passwordless Authentication</h2>
<p>YubiKey is built upon Azure AD&rsquo;s support for FIDO2 security keys (<a href="https://techcommunity.microsoft.com/t5/Azure-Active-Directory-Identity/Announcing-the-public-preview-of-Azure-AD-support-for-FIDO2/ba-p/746362">also in Public Preview</a>). These devices allow sign-in using a physical device assigned to a user profile in tandem with a PIN number. When configured, Azure AD users can sign-in to both devices, and web portals without needing to specify a username or a password. Crucially for businesses, this also provides a mechanism for passwordless without expensive hardware, or the imposing of a mandatory mobile app.</p>
<p>So how does it work in practice? Let&rsquo;s take a look through a typical example using the Office 365 web portal. When accessing portal.office.com, you will notice a new &ldquo;Sign-in options&rdquo; link below the username prompt. Clicking this link will present the following screen:</p>
<figure class="center"><img src="/img/2019/10/Security-Key-Sign-In.png"
         alt="The sign-in options screen, with options for sign-in via Security Key, and sign-in via GitHub"/>
</figure>

<p>Selecting the &ldquo;Sign in with a security key&rdquo; prompt will trigger a request for the user to insert their security key:</p>
<figure class="center"><img src="/img/2019/10/Insert-Security-Key.png"
         alt="A prompt requesting that the user inserts their security key into the USB port"/>
</figure>

<p>Once inserted, a PIN number known to the user (and configured during key registration) is also required to verify the user identity:</p>
<figure class="center"><img src="/img/2019/10/Insert-Security-Key-PIN.png"
         alt="A prompt requesting that the user enters the PIN associated with the Security Key"/>
</figure>

<p>Finally, we are prompted to touch the key to continue. This completes the sign-in process and we&rsquo;re in&hellip; no username, and no password. A joy!</p>
<h2 id="pre-requisites-for-fido2-passwordless-authentication">Pre-requisites for FIDO2 Passwordless Authentication</h2>
<p>So how do we achieve password-less sign-in with a YubiKey? Let&rsquo;s start with the pre-requisites. You need to have a supported FIDO2 key. I&rsquo;ve based this post on YubiKey (from <a href="https://www.yubico.com/">Yubico</a>) who are perhaps the most well known, but there are others. A list of supported vendors is available on the <a href="https://docs.microsoft.com/en-us/azure/active-directory/authentication/concept-authentication-passwordless#fido2-security-keys">Microsoft Docs Passwordless authentication page</a>. You also need to ensure:</p>
<ul>
<li>Users in-scope are registered for Azure MFA</li>
<li>Users are assigned to the combined MFA / SSPR registration preview</li>
<li>Windows 10 1809 or higher is installed (1903+ preferred)</li>
</ul>
<p>The latter point is applicable to both Windows sign-in, and web sign-in where Microsoft Edge on Windows 10 1809 (or higher) is required. It&rsquo;s worth noting that the new Chromium based Edge browser is also supported.</p>
<p>Your tenant will need to have the &ldquo;Use security keys for sign-in&rdquo; setting enabled within <em>Microsoft Intune &gt; Device enrollment &gt; Windows enrollment &gt; Windows Hello for Business &gt; Properties</em> (Windows Hello for Business is not a pre-requisite however).</p>
<p>The combined MFA / SSPR experience can be found under <em>User Settings &gt; User feature previews</em> within the Azure AD portal. It can be enabled for all users, or a subset of test users within an Azure AD Security Group:</p>
<figure class="center"><img src="/img/2019/10/Combined-Registration-Settings.png"
         alt="A screenshot from the Azure AD portal depicting the enabling of the combined MFA / SSPR experience"/>
</figure>

<h2 id="configuring-fido2-security-key-sign-in">Configuring FIDO2 Security Key Sign-In</h2>
<p>Once the pre-requisites are in place, you can enable your Windows devices for FIDO2 security key sign-in. <em>Note, this step enables Windows sign-in, and is not required for web authentication via security key.</em> The easiest way to configure this is via Intune:</p>
<ol>
<li>Sign in to the <a href="https://portal.azure.com/">Azure Portal</a></li>
<li>Browse to <em>Microsoft Intune &gt; Device configuration &gt; Profiles &gt; Create profile</em></li>
<li>Configure the new profile with the following settings
<ol>
<li>Name: Security Keys for Windows Sign-In</li>
<li>Description: Enables FIDO Security Keys to be used during Windows Sign In</li>
<li>Platform: Windows 10 and later</li>
<li>Profile type: Custom</li>
<li>Custom OMA-URI Settings:
<ol>
<li>Name: <em>Turn on FIDO Security Keys for Windows Sign-In</em></li>
<li>OMA-URI: <em>./Device/Vendor/MSFT/PassportForWork/SecurityKey/UseSecurityKeyForSignin</em></li>
<li>Data Type: <em>Integer</em></li>
<li>Value: <em>1</em></li>
</ol>
</li>
</ol>
</li>
<li>This policy can be assigned to specific users, devices, or groups</li>
</ol>
<p>We then need to enable our test users for FIDO2 security key sign-in. Navigate to <em>Azure Active Directory &gt; Security &gt; Authentication methods &gt; Authentication method policy (Preview)</em>. In here, modify the properties of <em>FIDO2 Security Key</em> to target your test accounts:</p>
<figure class="center"><img src="/img/2019/10/Enable-Security-Key-Sign-In.png"
         alt="A creenshot from the Azure AD portal depicting the available passwordless sign-in options, and associated users"/>
</figure>

<p>The final step is to register a Security Key against the user. This is completed using the new &ldquo;<a href="https://myprofile.microsoft.com/">My Profile</a>&rdquo; administration portal under the context of the user. Click through to &ldquo;Security Info&rdquo; and select the option to add a method. In the resulting prompt, select &ldquo;Security key&rdquo; and follow the registration wizard through to enable the key against the account. This will include the creation of a security PIN for the device.</p>
<p>On completion, you&rsquo;re done! You should be able to successfully authenticate using your security key via a browser. You will also be able to choose the &ldquo;FIDO2 Security key&rdquo; option at the Windows login screen once your Intune policy has applied.</p>
<hr>
<h2 id="conclusion">Conclusion</h2>
<p>Passwordless sign-in, irrespective of your chosen route is a huge step forward in securing authentication for your users and data. Whilst the underlying password is still present on the user object today, I foresee a time where its only purpose is to provide initial validation ahead of strong authentication setup. I&rsquo;ve been using passwordless (in all three of its forms) for the last year or so now and I wouldn&rsquo;t dream of going back&hellip; Do I know my password? I think so&hellip;(!) Do I want to have to enter it at every logon vs. pushing a button, or staring at a camera? Not a chance.</p>
<p>I suspect for most, Windows Hello or Microsoft Authenticator will be the preferred route for passwordless. The addition of FIDO2 to the stable is a nice touch for those organisations struggling to accomodate specialist hardware, or user on-boarding via BYOD MFA. Whatever your preference, I&rsquo;d encourage you to take a look at passwordless. It&rsquo;s a revelation for the end user&hellip; 🙂</p>
]]></content>
        </item>
        
        <item>
            <title>Goodye Basic Authentication!</title>
            <link>https://www.kelvinpapp.com/goodye-basic-authentication/</link>
            <pubDate>Sat, 21 Sep 2019 18:05:58 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/goodye-basic-authentication/</guid>
            <description>I saw a tweet earlier today from Alex Weinert (Director of Identity Security at Microsoft), drawing attention to a post that was published yesterday on the Exchange Team Blog. The post highlights some changes being made to the authentication model for Exchange Online, building on a previous announcement from last year. To repeat Alex&amp;rsquo;s words, it&amp;rsquo;s a huge deal. It&amp;rsquo;s also very good news from a security perspective.
Back at the beginning of last year Microsoft announced that they were going to deprecate Basic Authentication for Exchange Web Services as of October 2020.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/09/Working-on-a-Laptop.jpg"
         alt="A picture of someone&#39;s hands on a laptop keyboard"/>
</figure>

<p>I saw a tweet earlier today from <a href="https://twitter.com/Alex_T_Weinert">Alex Weinert</a> (Director of Identity Security at Microsoft), drawing attention to a post that was published yesterday on the <a href="https://techcommunity.microsoft.com/t5/Exchange-Team-Blog/Improving-Security-Together/ba-p/805892">Exchange Team Blog</a>. The post highlights some changes being made to the authentication model for Exchange Online, building on a previous announcement from last year. To repeat Alex&rsquo;s words, it&rsquo;s a huge deal. It&rsquo;s also very good news from a security perspective.</p>
<p>Back at the <a href="https://techcommunity.microsoft.com/t5/Exchange-Team-Blog/Upcoming-changes-to-Exchange-Web-Services-EWS-API-for-Office-365/ba-p/608055">beginning of last year</a> Microsoft announced that they were going to deprecate Basic Authentication for Exchange Web Services as of October 2020. This will actively block connections from legacy clients that don&rsquo;t support Modern Authentication. Yesterday&rsquo;s post extends that deprecation to other Exchange services including ActiveSync, POP, IMAP, and Remote PowerShell.</p>
<h2 id="whats-basic-authentication">What&rsquo;s Basic Authentication?</h2>
<p>Basic Auth (also referred to as Legacy Authentication) has been around for years. In simple terms it requires that a username and password combination be transmitted to an application with each request. This renders a users credentials vulnerable to interception (when not transmitted securely), and leaves services open to brute force or password spray attacks. You can read more about these types of attacks <a href="https://techcommunity.microsoft.com/t5/Azure-Active-Directory-Identity/Your-Pa-word-doesn-t-matter/ba-p/731984">here</a>.</p>
<p>By contrast, Modern Authentication is based on OAuth 2.0. Rather than sending credentials with each request, the authentication process results in the issuing of an access token. This token can be time limited and granted to specific applications or services. It&rsquo;s also easily integrated with other security measures such as Conditional Access and Multi-Factor Authentication. It&rsquo;s <em>significantly</em> more secure, and a key element in the step towards intelligent security that enables context aware decisions to be made on devices and users accessing company information.</p>
<p>Great, you might say&hellip; why don&rsquo;t I (or Microsoft) enforce it everywhere already? Well, there&rsquo;s a catch. Not all clients are supported. You need to take steps to ensure you are prepared.</p>
<h2 id="what-should-you-do">What should you do?</h2>
<p>You could wait for next October. The 13th to be precise. Hope for the best, and assume nothing will break. For obvious reasons, that&rsquo;s not a stance I&rsquo;d advocate&hellip;</p>
<p>There&rsquo;s a good chance you&rsquo;ll know if you have a significant problem when it comes to your client estate. Obvious concerns aside, you&rsquo;ll need to consider applications that authenticate directly against Exchange Online to ensure compatibility. Additional tools will be made available in the near future to aid the identification of users still utilising Basic Auth.</p>
<p>If you <em>know</em> you&rsquo;re in a good place you can take steps today to block Legacy Authentication, ahead of time. This is advantageous in terms of readiness, but more importantly will enhance your security posture <em>immediately</em>. With Basic Auth disabled you ensure that Conditional Access policies designed to enforce MFA cannot be circumvented. You also reduce the risk of compromise through some of the password attacks referenced previously.</p>
<p>You can enforce Modern Authentication in a couple of ways. One option is to adopt custom Authentication Policies in Exchange Online. These can be applied to specific users to support testing, and also provide the flexibility to block Basic Authentication against <em>specific</em> protocols. Useful if you have a short-term need to retain it for certain systems. Microsoft have published an excellent <a href="https://docs.microsoft.com/en-us/exchange/clients-and-mobile-in-exchange-online/disable-basic-authentication-in-exchange-online">guide for disabling Basic Authentication in Exchange Online</a> which covers this approach in detail.</p>
<p>An alternative approach is to block via Conditional Access. I made reference to a number of <a href="https://www.kelvinpapp.com/ca-new-baseline-policies/">new baseline policies</a> in a recent blog post, one of which is aimed specifically at this problem. By enabling the &ldquo;Baseline Policy: Block Legacy Authentication&amp;&rdquo; policy, you can enforce Modern Authentication for all users:</p>
<figure class="center"><img src="/img/2019/06CA-Baseline-Policies-Enabled.jpg"
         alt="A screenshot showing the new baseline Conditional Access policies enabled"/>
</figure>

<p>Custom policies can achieve the same thing, with a little more flexibility.</p>
<h2 id="smtp-authentication">SMTP Authentication</h2>
<p>An exception to Basic Authentication which I haven&rsquo;t addressed (that may have been ringing some mental alarm bells), relates to SMTP. Many peripheral devices (scanners, monitoring devices etc.) rely on Basic Authentication for mail transition. This will continue to be supported for SMTP, with further updates on this due soon from Microsoft.</p>
<hr>
<p>Hopefully this has proved a useful read. The move away from Basic Authentication for these protocols is a significant one, but <em>is</em> a positive move from a security perspective. Whilst there&rsquo;s the potential for some disruption, there&rsquo;s also ample time to prepare and transition to Modern Auth over the next year. The end result will be a dramatic reduction in the likelihood of authentication based compromise.</p>
<p>Feel free to get in touch if you have questions, or want to know more. Good luck with your own implementations!</p>
]]></content>
        </item>
        
        <item>
            <title>Securing Twitter with Microsoft Authenticator</title>
            <link>https://www.kelvinpapp.com/securing-twitter-with-microsoft-authenticator/</link>
            <pubDate>Sat, 31 Aug 2019 15:35:37 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/securing-twitter-with-microsoft-authenticator/</guid>
            <description>A fairly topical post today in response to yesterday&amp;rsquo;s news that Twitter CEO Jack Dorsey&amp;rsquo;s account was &amp;ldquo;hacked&amp;rdquo;. I use that term loosely as it&amp;rsquo;s since transpired the method used was actually the SIM swap scam (explained further below). None the less, it serves to highlight the importance of account security and should be a reminder to us all of the lengths that &amp;ldquo;hackers&amp;rdquo; will go to. Particularly for those in the public eye.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/08/Microsoft-Authenticator.png"
         alt="The Microsoft Authenticator logo"/>
</figure>

<p>A fairly topical post today in response to yesterday&rsquo;s news that Twitter CEO <a href="https://twitter.com/jack">Jack Dorsey&rsquo;s</a> account was &ldquo;<a href="https://www.bbc.co.uk/news/technology-49532244">hacked</a>&rdquo;. I use that term loosely as it&rsquo;s since transpired the method used was <em>actually</em> the <a href="https://en.wikipedia.org/wiki/SIM*swap*scam">SIM swap scam</a> (explained further below). None the less, it serves to highlight the importance of account security and should be a reminder to us all of the lengths that &ldquo;hackers&rdquo; will go to. Particularly for those in the public eye. I thought I&rsquo;d take a moment to run through some simple steps you can take to enable the Microsoft Authenticator app to be used for securing Twitter.</p>
<h2 id="a-caveat">A caveat&hellip;</h2>
<p>It&rsquo;s important to note that in this example the &ldquo;weakness&rdquo; exploited was the text update system Twitter uses, not the account. Whilst most of us are used to app / web based consumption of Twitter, the text system is still widely used in developing countries. Using this method you can tweet by sending an SMS from your registered mobile number - no sign in required. Here Jack&rsquo;s number was ported to a new SIM and intercepted, allowing the perpetrators to circumvent traditional security measures. Crude, but actually quite simple - and clearly effective 🙂 Whilst the steps outlined in this post don&rsquo;t prevent this form of exploit, they&rsquo;re every bit as important. They&rsquo;re also simple, and dramatically reduce your likelihood of becoming a victim.</p>
<h2 id="what-can-you-do">What can you do?</h2>
<p>As you&rsquo;ll have noted by now, a recurring theme of this blog is security. I&rsquo;ve talked in various posts about features in Azure AD like <a href="https://www.kelvinpapp.com/more-ca-microsoft-365-business">Conditional Access</a> to enforce multi-factor authentication (MFA) on sign-ins to Azure AD. This is all well and good for business applications, but what about personal accounts or services? We increasingly see MFA recommended everywhere. Email accounts, banking, social media applications, websites. What few realise though, is that it&rsquo;s possible to condense the number of methods used.</p>
<p>Do you really need 5+ mobile apps to prove who you say you are? I did, not too long ago. I now have 2&hellip; (and only then because HMRC insist on using their own application 😬).</p>
<p>In this post I want to focus on securing Twitter using the Microsoft Authenticator - for two reasons:</p>
<ul>
<li>Lots of people are vulnerable to account compromise due to not having MFA enabled for Twitter</li>
<li>Where MFA <em>is</em> turned on it defaults to SMS validation&hellip; which just feels a bit 00s 😉</li>
</ul>
<h2 id="configuring-twitter-mfa-to-use-microsoft-authenticator">Configuring Twitter MFA to use Microsoft Authenticator</h2>
<p>Configuring Twitter to use MFA via the Microsoft Authenticator is really simple. As a pre-requisite you need to have verified your mobile number and email address. I&rsquo;m also going to assume that you have the Authenticator app installed on your mobile. Screenshots below are taken from an iOS device, but will look similar on Android for those of you on the dark side 🙂</p>
<p>In the Twitter app, navigate to Settings and Privacy &gt; Account. Assuming you&rsquo;ve verified your Phone / Email details both will be populated. Select &ldquo;Security&rdquo;, and then &ldquo;Login Verification&rdquo;. Your app will most likely look like this:</p>
<figure class="center"><img src="/img/2019/08/Twitter-Login-Verification-None.png"
         alt="Login Verification with no services enabled"/>
</figure>

<p>Toggle &ldquo;Login Verification&rdquo; to on and you&rsquo;ll be asked to confirm acceptance that you&rsquo;ll need your phone to sign in to Twitter. You&rsquo;ll then be walked through a short wizard to enable SMS codes (initially) during which you&rsquo;ll need to verify your current Twitter password and mobile (via SMS). On completion I <em>strongly</em> suggest you generate a Backup Code when prompted. This will be your <em>only</em> route in should you lose your phone, or access to your Authenticator app&hellip; you have been warned!</p>
<p>Once finished, Login Verification should look as follows:</p>
<figure class="center"><img src="/img/2019/08/Twitter-Login-Verification-SMS.jpg"
         alt="Twitter Login Verification screen with SMS enabled"/>
</figure>

<p>Here&rsquo;s where we&rsquo;re going to integrate Microsoft Authenticator, and optionally disable SMS. Toggle &ldquo;Mobile Security App&rdquo; to on. Another wizard will launch to walk you through activating your Authenticator app for Twitter. After clicking &ldquo;Set up Now&rdquo; you&rsquo;ll be redirected into Microsoft Authenticator. You should now see a Twitter entry and corresponding code:</p>
<figure class="center"><img src="/img/2019/08/Twitter-in-Authenticator-App.jpg"
         alt="Twitter listed int he Microsoft Authenticator app"/>
</figure>

<p>To complete setup, verify that the code functions by entering the current digits back into the setup wizard. On redirection back into the Twitter app you should see that &ldquo;Mobile Security App&rdquo; is enabled. You can choose to disable SMS notifications if you wish, at this point:</p>
<figure class="center"><img src="/img/2019/08/Twitter-Login-Verification-Enabled.png"
         alt="Login Verification Screen with SMS and Mobile Security App enabled"/>
</figure>

<p>From this point onwards, whenever you login to Twitter you&rsquo;ll be asked to verify your identity using the code from your Authenticator app. Sadly this doesn&rsquo;t extend to push notifications (at this point in time).</p>
<h2 id="summary">Summary</h2>
<p>Obviously securing Twitter is one example of many. There are multiple services that let you use your own authenticator app(s) in place of SMS or default code generators. For me, securing as many of my online services as possible via MFA is a no-brainer. If I can then consolidate them into a single (or a handful) of apps in lieu of text messages / phone calls / proprietary applications, then so much the better ?</p>
<p>The bottom line is simple. Whilst the majority of us aren&rsquo;t targets in the way that individuals like Jack Dorsey are, we bear our own responsibility for securing our online identities. In most cases this can be done simply, and using tools / devices that are already at your disposal.</p>
<p>Don&rsquo;t become a victim!</p>
]]></content>
        </item>
        
        <item>
            <title>An Update / An Apology</title>
            <link>https://www.kelvinpapp.com/an-update-an-apology/</link>
            <pubDate>Sun, 25 Aug 2019 17:09:47 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/an-update-an-apology/</guid>
            <description>I&amp;rsquo;d forgive you if you thought that I&amp;rsquo;d shut up shop and abandoned this blog altogether&amp;hellip; it&amp;rsquo;s been a while since I last posted. I&amp;rsquo;ll be honest, I hadn&amp;rsquo;t realised quite how long it had been until I reviewed the date of my most recent post this week. Two weeks without any content is bad enough. Nearly two months is quite unforgivable ? So, time for an update.
First, an apology.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/08/Abandoned.jpg"
         alt="A derelict building, symbolising the blog of late!"/>
</figure>

<p>I&rsquo;d forgive you if you thought that I&rsquo;d shut up shop and abandoned this blog altogether&hellip; it&rsquo;s been a while since I last posted. I&rsquo;ll be honest, I hadn&rsquo;t realised <em>quite</em> how long it had been until I reviewed the date of my <a href="https://www.kelvinpapp.com/how-to-deploy-azure-bastion/">most recent post</a> this week. Two weeks without any content is bad enough. Nearly two months is quite unforgivable ? So, time for an update.</p>
<p>First, an apology. Second, an (attempted) explanation.</p>
<figure class="center"><img src="https://media.giphy.com/media/3ohA2ZD9EkeK2AyfdK/giphy.gif"/>
</figure>

<h2 id="an-apology">An Apology&hellip;</h2>
<p>It was always my intention for this blog to be a steady stream of information, news, and experience from my day-to-day encounters with Microsoft Cloud. I&rsquo;m at the (relative) bleeding edge of all things Microsoft, it seems a shame to waste that by not shouting about the things I love, and get involved with, as much as possible. Naturally though, that &ldquo;day-to-day&rdquo; gets in the way on occasion(!). Balance is a fine thing, but it&rsquo;s not always difficult to juggle the demands of work / home / family / rest / play&hellip;</p>
<p>The reality is that I just haven&rsquo;t had the time (or motivation) in recent weeks to get content finished and up. Yes&hellip; I can hear that violin too! ?</p>
<p>On a personal level, I enjoy the challenges of time-management, self-discipline, continuous development etc. I spend a portion of my time reading books and articles that focus on &quot; bettering&quot; myself. With hindsight, I&rsquo;ve considered this site a side-project more than a priority to date. This is something I want to remedy moving forwards, putting some of those principles into practice here. I&rsquo;d welcome anyone reading to direct me back to this paragraph if I slip again&hellip; 😉</p>
<h2 id="an-explanation">An Explanation&hellip;</h2>
<p>Life has been <em>crazy</em> busy - both at home, and at work. Some of you will know that I had an update in my work life recently. Having previously worked in a Pre-Sales / Technical Lead capacity at <a href="https://www.transparity.com">Transparity</a>, I&rsquo;ve now take on the role of Head of Technology. Whilst that&rsquo;s <em>hugely</em> exciting, managing old and new responsibilities during the ongoing transition has led to some long days. It&rsquo;s also put pressure on time that would otherwise have been spent curating content for here.</p>
<p>We&rsquo;ve also entered silly season for holidays, of which I include my own 🙂 We (the family and I) have just returned from a week in Portugal which led to some much needed rest. I didn&rsquo;t give a thought to blogging, very little to tweeting, and took the opportunity to reset&hellip;</p>
<div align="center"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">I’ve had a few weeks of self-imposed <a href="https://twitter.com/hashtag/Twitter?src=hash&amp;ref_src=twsrc%5Etfw">#Twitter</a> downtime while on holiday. Much needed, and much enjoyed 😎 Things in perspective, batteries recharged, attitude reset. Time to get back to it... <br><br>BUT. Oh for another night like this... 😍 <a href="https://t.co/FkcPZqdM0Z">pic.twitter.com/FkcPZqdM0Z</a></p>&mdash; Kelvin Papp (@kelvinpapp) <a href="https://twitter.com/kelvinpapp/status/1162466859796586496?ref_src=twsrc%5Etfw">August 16, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div>
<p>So&hellip; where are we now? Well, I&rsquo;m hopeful that the peak of &ldquo;crazy busy&rdquo; is over. I&rsquo;m also hopeful that the half-dozen or so part-written blog posts I have in my drafts folder will see the light of day soon. Next month (ish!) is <a href="https://futuredecoded.microsoft.com/">Future Decoded</a> here in the UK - I will be presenting at least a couple of sessions at that event. I&rsquo;m also very much looking forward to attending <a href="https://www.microsoft.com/en-us/ignite">Microsoft Ignite</a> in November.</p>
<p>In short, I expect normal service to resume - at least soon. I have some great pending content, and more will follow post-Ignite. Thank you to those who have been visiting / reading posts - there&rsquo;s been a consistent volume of visitors to the site. For those returning hoping to see new posts&hellip; stay tuned!</p>
<figure class="center"><img src="https://media.giphy.com/media/1ken0zzzL79NPy3QZj/giphy.gif"/>
</figure>

]]></content>
        </item>
        
        <item>
            <title>How to Deploy Azure Bastion</title>
            <link>https://www.kelvinpapp.com/how-to-deploy-azure-bastion/</link>
            <pubDate>Sun, 23 Jun 2019 21:45:33 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/how-to-deploy-azure-bastion/</guid>
            <description>In my previous post on Azure Bastion I covered some of the basics around it&amp;rsquo;s addition to Azure. I touched on some of the reasons you might look to deploy Azure Bastion, and some of the advantages it brings in comparison to traditional solutions like RD Gateway, and jump-boxes. In this post, I want to build on that initial overview with a walk through of the deployment process. Azure Bastion is super simple to get up and running with.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/06/Padlock-on-Blue.jpg"
         alt="An image of a padlock being used to secure a blue metal door"/>
</figure>

<p>In my <a href="https://www.kelvinpapp.com/azure-bastion-public-preview/">previous post on Azure Bastion</a> I covered some of the basics around it&rsquo;s addition to Azure. I touched on some of the reasons you might look to deploy Azure Bastion, and some of the advantages it brings in comparison to traditional solutions like RD Gateway, and jump-boxes. In this post, I want to build on that initial overview with a walk through of the deployment process. Azure Bastion is <em>super</em> simple to get up and running with. It&rsquo;ll inevitably become another of those &ldquo;must-have&rsquo;s&rdquo; for organisations as it matures&hellip;</p>
<p>Initially; some caveats. I referenced these in my overview of Bastion but for clarity they&rsquo;re worth repeating here. At this point in time, the service is in Preview. All that really means is no SLA. Bearing in mind the ease with which you could work around it&rsquo;s unavailability, it&rsquo;s likely to be a non-issue&hellip; but it would be remiss of me not to highlight that &ldquo;minor&rdquo; technicality 🙂 It&rsquo;s also only available in a handful of regions:</p>
<ul>
<li>West US</li>
<li>East US</li>
<li>West Europe</li>
<li>South Central US</li>
<li>Australia East</li>
<li>Japan East</li>
</ul>
<p>The above said, and on a positive note, Bastion is subject to a 50% discount during the Preview (see the <a href="https://azure.microsoft.com/en-us/services/azure-bastion/">Product page</a> for more details on pricing). Even at full price it’s likely to be cheaper than alternatives, and <em>significantly</em> more secure than internet facing access.</p>
<h2 id="preparation">Preparation</h2>
<p>Before you can deploy Azure Bastion, you need to onboard the preview into your tenant. To do this, run the following commands in Azure Cloud Shell.</p>
<p>Register the feature:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>Register-AzProviderFeature -FeatureName AllowBastionHost -ProviderNamespace Microsoft.Network
</span></span></code></pre></div><p>Re-register your subscription with the Microsoft.Network provider namespace:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>Register-AzResourceProvider -ProviderNamespace Microsoft.Network
</span></span></code></pre></div><p>Verify that Azure Bastion is enabled for your subscription:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>Get-AzProviderFeature -ProviderNamespace Microsoft.Network
</span></span></code></pre></div><p>It takes a few minutes for registration to take place. After running the first command you’ll note that &ldquo;AllowBastionHost&rdquo; will show a registration state of &ldquo;Registering&rdquo; (as opposed to &ldquo;Registered&rdquo;). Be patient. The documentation indicates that it will take &ldquo;a few minutes&rdquo;. In my case it took around 10 before the Microsoft.Namespace updated:</p>
<figure class="center"><img src="/img/2019/06/Verify-Bastion-Enablement.jpg"
         alt="A screenshot showing the PowerShell output once Bastion has been enabled"/>
</figure>

<h2 id="deploy-bastion">Deploy Bastion</h2>
<p>Once enabled, you can deploy Bastion from the <a href="http://aka.ms/BastionHost">preview portal</a>. Search in “All Services” for “Bastions”:</p>
<figure class="center"><img src="/img/2019/06/Bastion-Service.jpg"
         alt="A screenshot showing the Bastion Service option within the Azure Portal"/>
</figure>

<p>Click <strong>Create</strong> to launch the “Create a Bastion” wizard:</p>
<figure class="center"><img src="/img/2019/06/Create-Bastion-Wizard.jpg"
         alt="The Azure Bastion Deployment Wizard"/>
</figure>

<p>A point needing some explanation here is the subnet attribute (which appears once a Virtual Network has been selected). Much like a VPN Gateway, a dedicated subnet with a specific name is required. Create a subnet in your Bastion enabled VNet with the value <strong>AzureBastionSubnet</strong>. Microsoft&rsquo;s recommendation is a /27 or larger address space, without assigned NSG&rsquo;s, route tables, or delegations.</p>
<p>Once you&rsquo;ve reviewed, and completed the required variables, click <strong>Review + Create</strong> to initiate the deployment. After 5 minutes or so, you should have a functioning Bastion instance! 🙂</p>
<h2 id="using-azure-bastion">Using Azure Bastion</h2>
<p>Once the Bastion is deployed, you&rsquo;ll be able to use it to access Virtual Machines in the associated VNet. Supported protocols are RDP (3389) and SSH (22) - both via browser over SSL. What this means in practice is that you don&rsquo;t need (and actually, can&rsquo;t use) client software on your local machine. This point is referenced in the <a href="https://docs.microsoft.com/en-us/azure/bastion/bastion-faq">Bastion FAQ</a>, along with a list of supported browsers. These are (at the time of writing):</p>
<ul>
<li>Microsoft Edge</li>
<li>Google Chrome (Windows)</li>
<li>Google Chrome (MacOS)</li>
<li>Microsoft Edge Chromium (Windows)</li>
<li>Microsoft Edge Chromium (MacOS)</li>
</ul>
<p>To establish the connection, click &ldquo;<strong>Connect</strong>&rdquo; icon in the properties of any Virtual Machine. Alongside the traditional RDP and SSH tabs, you&rsquo;ll now see a &ldquo;Bastion&rdquo; option. Based on the VM Operating System (Windows, or Linux) RDP or SSH is assumed. For a Windows machine, enter RDP credentials. For a Linux host, you can enter traditional username / password values, or authenticate using a Private Key. The latter can be manually inserted, or uploaded via a local file.</p>
<p>Once initiated, the session will open in a new window (if selected), or inside of the Azure Portal. The experience is similar to that of browser based RDS, and performs surprisingly well:</p>
<figure class="center"><img src="/img/2019/06/Browser-RDP-via-Bastion.jpg"
         alt="RDP to a Server via Bastion (in a browser)"/>
</figure>

<p>Obviously there are constraints at this stage. Copy / Paste functionality is rudimentary, and the browser-based nature means that you don&rsquo;t get feature parity equivalent to a network level connection. That said, support for local clients has been hinted at, which will address some feature gaps. We should also remember that it&rsquo;s early days for the development of Bastion. I&rsquo;m hopeful, and expectant, for some fairly significant progress in the coming months 🙂</p>
<hr>
<h2 id="summary">Summary</h2>
<p>I hope (if you&rsquo;ve made it this far) that this post has been useful. I&rsquo;d encourage you again to read through my <a href="https://www.kelvinpapp.com/azure-bastion-public-preview/">previous post</a> if you haven&rsquo;t already, which provides some commentary and additional background to Bastion more generally. Also take a look through the <a href="https://docs.microsoft.com/en-us/azure/bastion/">Microsoft documentation</a> which, in spite of it&rsquo;s Preview status, is reasonably comprehensive 🙂</p>
<p>At the risk of repeating myself, I think this is a great addition to the Azure portfolio. It&rsquo;s simple to deploy, low cost, and addresses a notable gap that existed when comparing Azure with other Public Cloud providers. Best practice isn&rsquo;t always obvious or easy to achieve, but PaaS based services that promote a good security baseline are an excellent step forward in helping customers to do the right thing from the outset!</p>
]]></content>
        </item>
        
        <item>
            <title>Azure Bastion Public Preview</title>
            <link>https://www.kelvinpapp.com/azure-bastion-public-preview/</link>
            <pubDate>Sat, 22 Jun 2019 14:11:05 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/azure-bastion-public-preview/</guid>
            <description>I&amp;rsquo;ve been waiting patiently for news on Azure Bastion since hearing it was in development a short while back. I wasn&amp;rsquo;t able to access the Private Preview, so news that it had entered Public Preview was a pleasant surprise!
Securely accessing IaaS workloads in Azure has always been cumbersome. If you have VPN access into your Azure environment(s) it&amp;rsquo;s a non-issue, but for isolated, or test and development workloads it represents more of a challenge.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/06/Padlocked-Gate.jpg"
         alt="An image showing a padlock being used to secure a gate"/>
</figure>

<p>I&rsquo;ve been waiting patiently for news on Azure Bastion since hearing it was in development a short while back. I wasn&rsquo;t able to access the Private Preview, so news that it had <a href="https://azure.microsoft.com/en-us/blog/announcing-the-preview-of-microsoft-azure-bastion/">entered Public Preview</a> was a pleasant surprise!</p>
<p>Securely accessing IaaS workloads in Azure has always been cumbersome. If you have VPN access into your Azure environment(s) it&rsquo;s a non-issue, but for isolated, or test and development workloads it represents more of a challenge. Mitigating the concern of public access via RDP / SSH with solutions like <a href="https://docs.microsoft.com/en-us/azure/security-center/security-center-just-in-time">just-in-time (JIT)</a> access is one option, but many resort to jump-box solutions which add administrative overhead and complexity.</p>
<p>There&rsquo;s an array of good-practice documentation out there which can assist with securing administrative connections into Azure. Some of these focus on the notion of a hardened jump-box, others look at access management solutions like RD Gateway integrated with Network Access Protection (NAP). The common pitfall with these solutions is the human factor when it comes to setup. Coupled with the ongoing need to patch, update, and maintain&hellip;</p>
<h2 id="enter-azure-bastion">Enter: Azure Bastion</h2>
<p>The concept of a bastion host is a simple one. It focuses on the idea that a system can be designed to support specific internet-facing functions in a way which is secure. The principle is applicable to lots of workloads, but is particularly relevant to the jump-box concept (notably <a href="https://aws.amazon.com/quickstart/architecture/linux-bastion/">in AWS</a> where the terminology has applied for a long time).</p>
<p>Azure Bastion is a PaaS service designed to support access to IaaS workloads via RDP and SSH; without a VPN or the assignment of public IP addresses 🙂 Deployed directly into your Azure virtual network, it supports web-based access over SSL. This negates the need for clients, and ensures access where firewalls might be blocking required ports&hellip; simplifying access in addition to being straightforward to deploy and administer:</p>
<figure class="center"><img src="/img/2019/06/Azure-Bastion-Architecture.png"
         alt="Image showing the Azure Bastion architecture and traffic flow(s)"/>
</figure>

<p>I&rsquo;d planned to include a &ldquo;how-to&rdquo; guide on deployment and configuration in this post, but time has escaped me today and I was keen to get this up while the news is fresh. I&rsquo;ll post this soon, along with some &ldquo;real-world&rdquo; twists. In the meantime the folks in the Product Team have put an excellent deployment guide together. You can find this within the <a href="https://docs.microsoft.com/en-us/azure/bastion/">release documentation</a>, specifically the &ldquo;Create a bastion host&rdquo; section <a href="https://docs.microsoft.com/en-us/azure/bastion/bastion-create-host-portal">here</a> 🙂</p>
<h2 id="limitations">Limitations</h2>
<p>There are some short-term limitations to be aware of. Preview status means no SLA, and availability is currently limited to a handful of regions:</p>
<ul>
<li>West US</li>
<li>East US</li>
<li>West Europe</li>
<li>South Central US</li>
<li>Australia East</li>
<li>Japan East</li>
</ul>
<p>&hellip;on the plus side, Preview status also means cheaper, with 50% off until it enters general release 🙂</p>
<p>It&rsquo;s also worth noting that single-sign on capability via Azure AD identities is coming soon. I&rsquo;m <em>super</em> excited about this on the basis that this will extend support to include Azure MFA and, presumably, Conditional Access. Those of you that have read my previous posts (e.g. <a href="https://www.kelvinpapp.com/ca-new-baseline-policies/">Conditional Access: New Baseline Policies</a>) will know that Azure AD is a firm favourites of mine!</p>
<hr>
<p>I&rsquo;ve been excited for Azure Bastion since I first got wind that it was coming. At face value it&rsquo;s a minor addition, but web-based RDP / SSL is a significant new capability, and the future integrations with Azure AD will unlock more opportunities for addressing a variety of use cases. I&rsquo;m particularly keen to see whether it can be paired with B2B guest access. This could be game changing for MSP&rsquo;s who need secure and simple remote management of customer infrastructure.</p>
<p>Time will tell&hellip; in the meantime, happy playing! Feel free to comment below with your thoughts – I&rsquo;d welcome your feedback. Alternatively get in touch with me on <a href="https://twitter.com/kelvinpapp">Twitter</a> 🙂</p>
]]></content>
        </item>
        
        <item>
            <title>More CA: Microsoft 365 Business</title>
            <link>https://www.kelvinpapp.com/more-ca-microsoft-365-business/</link>
            <pubDate>Thu, 13 Jun 2019 08:03:34 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/more-ca-microsoft-365-business/</guid>
            <description>I seem to write an awful lot on here about Conditional Access&amp;hellip; not that that&amp;rsquo;s a bad thing 🙂 As I&amp;rsquo;ve referenced before, it&amp;rsquo;s possibly one of my favourite Azure AD features and is a key part of the puzzle when it comes to securing, enforcing, and controlling authentication.
To date Conditional Access has been a notable gap in the small(er) business variant of Microsoft 365: M365 Business. Yesterday (at long last!</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/06/Conditional-Access.jpg"
         alt="An overview of the Conditional Access flow and capability"/>
</figure>

<p>I seem to write an awful lot on here about Conditional Access&hellip; not that that&rsquo;s a bad thing 🙂 As I&rsquo;ve referenced before, it&rsquo;s <em>possibly</em> one of my favourite Azure AD features and is a key part of the puzzle when it comes to securing, enforcing, and controlling authentication.</p>
<p>To date Conditional Access has been a notable gap in the small(er) business variant of Microsoft 365: <a href="https://www.microsoft.com/en-us/microsoft-365/business">M365 Business</a>. Yesterday (at long last!), that changed so you can now take advantage across the M365 stack!</p>
<h2 id="conditional-access-in-m365-business">Conditional Access in M365 Business</h2>
<p>In a <a href="https://techcommunity.microsoft.com/t5/Microsoft-365-Business-Blog/Conditional-Access-is-now-part-of-Microsoft-365-Business/ba-p/684063">blog post</a> on the Microsoft Tech Community forums yesterday, <a href="https://twitter.com/aiddya">Ashanka Iddya</a> announced that effective immediately Conditional Access will be provided as part of Microsoft 365 Business. From a feature perspective, it will be equivalent to that in Azure AD P1. This is a <em>HUGELY</em> advantageous for those organisations that are serious about securing access, but don&rsquo;t want (or can&rsquo;t justify) the uplift to M365 E3. If it applies to you, take a look today&hellip; you&rsquo;ve just been gifted a fantastic set of functionality that was sorely missing before!</p>
<hr>
<p>I provided the below overview in a previous post on Conditional Access (<a href="https://www.kelvinpapp.com/ca-new-baseline-policies/">CA: New Baseline Policies</a>) which I&rsquo;ve repeated here for those that are unfamiliar. Happy reading, and happy playing!</p>
<h2 id="a-bit-about-conditional-access">A bit about Conditional Access&hellip;</h2>
<p>In my opinion, Conditional Access is one of those fantastic Azure AD features that almost single-handedly justifies the purchase of Premium licensing. For the uninitiated, it allows us to control authentication behaviour based on a selection of things&hellip;</p>
<p>At a base level, we can use Conditional Access to approve, block, or limit sessions based on different criteria. For Azure AD P1 these attributes are based on static conditions such as who / what / where. Azure AD P2 extends this to include risk-based policies – a component of Identity Protection. These advanced policies use automated intelligence to classify the risk of an authentication request; enforcing dynamic controls based on the result. As an example, a request from an anonymous IP address on an unknown device can trigger a high-risk condition; blocking access or mandating MFA before the request is allowed. Clever stuff.</p>
<hr>
<p>Have a read of Ashanka&rsquo;s post, and pay particular attention to the FAQ section at the base of the article. In there you&rsquo;ll find extra detail, the limitations, and applicability.</p>
<p>Where it applies to you, I guarantee you won&rsquo;t be disappointed!</p>
<p>Feel free to make contact in the comments below, or to contact me on <a href="https://twitter.com/kelvinpapp">Twitter</a> if you have any questions 🙂</p>
]]></content>
        </item>
        
        <item>
            <title>CA: New Baseline Policies</title>
            <link>https://www.kelvinpapp.com/ca-new-baseline-policies/</link>
            <pubDate>Sat, 08 Jun 2019 11:04:47 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/ca-new-baseline-policies/</guid>
            <description>I&amp;rsquo;ve been particularly busy these last couple of weeks and struggled to find time to post on here. I do have several things saved up that I&amp;rsquo;m keen to get posted though&amp;hellip; this being the first in a series of planned entries. For now, the Identity theme continues 🙂 I wrote about the Security Registration updates in Conditional Access a while back. Since then Microsoft have further improved CA - adding some new baseline policies that can benefit all environments.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/06/CA-Baseline-Policies-Enabled.jpg"
         alt="A screenshot showing the available baseline Conditional Access policies enabled"/>
</figure>

<p>I&rsquo;ve been particularly busy these last couple of weeks and struggled to find time to post on here. I do have several things saved up that I&rsquo;m keen to get posted though&hellip; this being the first in a series of planned entries. For now, the Identity theme continues 🙂 I wrote about the <a href="https://kelvinpapp.com/security-registration-ca/">Security Registration updates in Conditional Access</a> a while back. Since then Microsoft have further improved CA - adding some new baseline policies that can benefit all environments.</p>
<p>I was keen to provide some commentary around these changes, hopefully encouraging you to take a look and enable them within your own tenants. Others have covered this already, so I&rsquo;m a little late to the party. In my opinion though, you can&rsquo;t shout loudly enough about some of these new security oriented additions.</p>
<p>So here goes&hellip;</p>
<h2 id="a-bit-about-conditional-access">A bit about Conditional Access&hellip;</h2>
<p>Conditional Access is one of those fantastic features in Azure AD that almost single-handedly justifies the purchase of Premium licensing. For the uninitiated, it allows us to control authentication behaviour based on a selection of things:</p>
<figure class="center"><img src="/img/2019/06/Conditional-Access.jpg"
         alt="An overview of the Conditional Access flow and capability"/>
</figure>

<p>At a base level, we can use Conditional Access to approve, block, or limit sessions based on different criteria. For Azure AD P1 these attributes are based on static conditions such as who / what / where. Azure AD P2 extends this to include risk-based policies – a component of Identity Protection. These advanced policies use automated intelligence to classify the risk of an authentication request; enforcing dynamic controls based on the result. As an example, a request from an anonymous IP address on an unknown device can trigger a high-risk condition; blocking access or mandating MFA before the request is allowed. Clever stuff.</p>
<h2 id="so-whats-new">So What&rsquo;s New?</h2>
<p>Conditional Access policies are a powerful weapon in ensuring your organisation&rsquo;s security, but they can be unwieldy and confusing. What&rsquo;s good? What <em>should</em> you be enabling? What&rsquo;s best practice? Baseline policies are Microsoft&rsquo;s way of highlighting the answers to some of these questions, the first of which was the &ldquo;Require MFA for Admins&rdquo; policy introduced last year. These have been added to in the last few weeks with a handful of new (Preview) additions:</p>
<ul>
<li>End User Protection</li>
<li>Block Legacy Authentication</li>
<li>Require MFA for Service Management</li>
</ul>
<h2 id="end-user-protection-preview">End User Protection (Preview)</h2>
<p>The End User Protection entry takes some of the complexity out of configuring a (friendly) policy for MFA; drawing on some of the more advanced risk-based capabilities of Azure AD P2. In simple terms this policy invokes MFA where the user session is deemed to be a potential risk. It also ensures compromised accounts (where credentials have been detected via Microsoft’s leaked credential service) are proactively blocked. In this latter case access isn&rsquo;t reinstated until the user resets their password via self-service password reset, or an administrator clears the risk alert by assigning a new (temporary) password.</p>
<p>I really like this addition. Aside from lending access to some of the more premium capabilities of P2, it simplifies the creation and maintenance of Conditional Access policies relating to MFA. Many policies I&rsquo;ve seen errr on the side of caution, triggering unnecessary prompts for users that lead to irritation. At the opposite end of the scale, lots of organisations don&rsquo;t leverage MFA enough to secure authentication. Why not let Microsoft do the work for you?!</p>
<p>As with most policies, you should exclude break-glass accounts to ensure access in case of any MFA / CA related outage (no references to recent events!).</p>
<h2 id="block-legacy-authentication-preview">Block Legacy Authentication (Preview)</h2>
<p>The Block Legacy Authentication policy does exactly what it says on the tin. It&rsquo;s no secret that most bad sign-in attempts come via legacy authentication requests. Given that this method provides no support for MFA it&rsquo;s hardly surprising, but does mean that even <em>with</em> an MFA policy you are exposed to risk if legacy protocols are enabled.</p>
<p>The recommendation for some time now has been to disable these using existing Conditional Access controls. This new policy makes it that bit easier to do so 🙂 There are some prerequisites to be aware of though:</p>
<ul>
<li>Review Azure AD sign-in logs to understand the potential impact <a href="https://docs.microsoft.com/en-us/azure/active-directory/conditional-access/block-legacy-authentication">see here</a> for a guide).</li>
<li>If there&rsquo;s evidence of legacy authentication in use, ensure your directory is <a href="https://docs.microsoft.com/en-us/azure/active-directory/conditional-access/block-legacy-authentication">enabled for modern authentication</a>.</li>
<li>Verify that connecting clients (Office, Mobile Apps / Devices etc.) in addition to Office 365 services are modern authentication enabled.</li>
</ul>
<p>Once you&rsquo;ve satisfied those requirements and confirmed that legacy authentication isn&rsquo;t (widely) used, enable this policy to automatically block legacy authentication requests. Job done! 🙂</p>
<h2 id="require-mfa-for-service-management-preview">Require MFA for Service Management (Preview)</h2>
<p>Last, but not least, we have the new &ldquo;require MFA for service management&rdquo; policy. This isn&rsquo;t quite as obvious as the previous two in title, but is a useful and sensible policy to enable - irrespective of whether you <em>extensively</em> use services homed in the world of Azure.</p>
<p>An increasing number of organisations are turning to Azure to deliver services back to the organisation. Interaction takes many forms ranging from simple portal based activity, to programmatic integration via Azure PowerShell or the Azure CLI. In all cases the default sign-in experience is devoid of MFA - leaving your environment exposed to a variety of potential attacks.</p>
<p>This policy enforces MFA for <em>all</em> attempts to sign-in to these services - administrative or otherwise. For this reason, again ensure that break-glass or Service Accounts / Principals are excluded where you need emergency or programmatic access that can&rsquo;t respond to MFA challenges.</p>
<hr>
<p>These are excellent new baselines for what remains one of my favourite features of Azure AD. Whilst Conditional Access is fairly intuitive, it&rsquo;s not easy for everyone to grasp, or to get &ldquo;right&rdquo;. Microsoft&rsquo;s decision to start including these best practices out of the box is going to do wonders for the security of those organisations who want to &ldquo;set and forget&rdquo; - without the worry of whether they&rsquo;ve adopted the multitude of options in the right way.</p>
<p>Here&rsquo;s hoping for more of these as time goes by, and (dare I say it) automatic enablement as they mature&hellip;</p>
<p>Do heed the / my warnings around exclusions, and prerequisites if you haven&rsquo;t done so already&hellip; That aside, enjoy spending 5 minutes turning these on to get yourselves (and your organisations) into a better place!</p>
]]></content>
        </item>
        
        <item>
            <title>WVD PowerShell Reference</title>
            <link>https://www.kelvinpapp.com/wvd-powershell-reference/</link>
            <pubDate>Sun, 19 May 2019 20:28:37 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/wvd-powershell-reference/</guid>
            <description>Edit (1st September 2020): This article relates to the original release of WVD. The Windows Virtual Desktop Spring Update saw WVD PowerShell support integrated into the (existing) AzWvd module in place of the RDS. Please refer to Set up the PowerShell module for Windows Virtual Desktop for details.
In my recent “Getting to grips with WVD” post, I made reference to the emphasis on PowerShell for administration. I had a few questions in response and was keen to follow that post up with this; a WVD PowerShell reference.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/05/PowerShell-Graphic.jpg"
         alt="The PowerShell logo"/>
</figure>

<p><em><strong>Edit (1st September 2020): This article relates to the original release of WVD. The <a href="https://techcommunity.microsoft.com/t5/itops-talk-blog/windows-virtual-desktop-spring-update-enters-public-preview/ba-p/1340245">Windows Virtual Desktop Spring Update</a> saw WVD PowerShell support integrated into the (existing) AzWvd module in place of the RDS. Please refer to <a href="https://docs.microsoft.com/en-us/azure/virtual-desktop/powershell-module">Set up the PowerShell module for Windows Virtual Desktop</a> for details.</strong></em></p>
<hr>
<p>In my recent “<a href="https://www.kelvinpapp.com/getting-to-grips-with-wvd/">Getting to grips with WVD</a>” post, I made reference to the emphasis on PowerShell for administration. I had a few questions in response and was keen to follow that post up with this; a WVD PowerShell reference. Hopefully it helps those of you out there who are looking to deploy <a href="https://azure.microsoft.com/en-in/services/virtual-desktop/">Windows Virtual Desktop</a> (WVD).</p>
<p>I don’t intend to include a lot of commentary around this post. It’s not an overview of WVD, or a deployment guide, but should help those of you who have taken the plunge with WVD at this early stage. By way of background, Microsoft have committed to a management console in time for its GA release. In the meantime, the only interface available is PowerShell - useful to learn, but not overly friendly for WVD specifically. The good news is that those familiar with RDS administration via PowerShell will feel right at home&hellip; 🙂</p>
<h2 id="connecting-to-the-service">Connecting to the Service</h2>
<p>Use the following command to <strong>connect</strong> to the WVD service, entering credentials when prompted (work or school account):</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>Add-RdsAccount -DeploymentUrl <span style="color:#e6db74">&#34;https://rdbroker.wvd.microsoft.com&#34;</span>
</span></span></code></pre></div><p>A one time activity will be the creation of your WVD Tenant which is achieved by running::</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>New-RdsTenant -Name &lt;TenantName&gt; -AadTenantId &lt;DirectoryID&gt; -AzureSubscriptionId &lt;SubscriptionID&gt;
</span></span></code></pre></div><h2 id="working-with-a-service-principal">Working with a Service Principal</h2>
<p>A Virtual Desktop Tenant &ldquo;RDS Owner&rdquo; account is needed for each Host Pool - this account is used to authenticate the pool to the WVD service. It&rsquo;s likely you have MFA enabled for privileged accounts, in which case a Service Principal will be required.</p>
<p>The following commands are used to <strong>create the Service Principal</strong>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>Install-Module AzureAD
</span></span><span style="display:flex;"><span>Import-Module AzureAD
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$TenantGroupName = <span style="color:#e6db74">&#34;Default Tenant Group&#34;</span>
</span></span><span style="display:flex;"><span>$TenantName = <span style="color:#e6db74">&#34;&lt;Tenant Name&gt;&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$aadContext = Connect-AzureAD
</span></span><span style="display:flex;"><span>$svcPrincipal = New-AzureADApplication -AvailableToOtherTenants $true -DisplayName <span style="color:#e6db74">&#34;Windows Virtual Desktop Service Principal&#34;</span>
</span></span><span style="display:flex;"><span>$svcPrincipalCreds = New-AzureADApplicationPasswordCredential -ObjectId $svcPrincipal.ObjectId
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Install-Module -Name Microsoft.RDInfra.RDPowerShell
</span></span><span style="display:flex;"><span>Import-Module -Name Microsoft.RDInfra.RDPowerShell
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Add-RdsAccount -DeploymentUrl <span style="color:#e6db74">&#34;https://rdbroker.wvd.microsoft.com&#34;</span>
</span></span><span style="display:flex;"><span>Set-RdsContext -TenantGroupName $TenantGroupName
</span></span><span style="display:flex;"><span>New-RdsRoleAssignment -RoleDefinitionName <span style="color:#e6db74">&#34;RDS Owner&#34;</span> -ApplicationId $svcPrincipal.AppId -TenantGroupName $TenantGroupName -TenantName $TenantName
</span></span></code></pre></div><p>Extract (and store securely) the Service Principal credentials for use in your Host Pool deployment by executing the command:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>($svcPrincipalCreds.Value)
</span></span></code></pre></div><p>To <strong>validate</strong> the Service Principal can connect and access your WVD instance, use:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>$svcPrincipalCredentials = New-Object System.Management.Automation.PSCredential($svcPrincipal.AppId, (ConvertTo-SecureString $svcPrincipalCreds.Value -AsPlainText -Force))
</span></span><span style="display:flex;"><span>Add-RdsAccount -DeploymentUrl <span style="color:#e6db74">&#34;https://rdbroker.wvd.microsoft.com&#34;</span> -Credential $svcPrincipalCredentials -ServicePrincipal -AadTenantId $aadContext.TenantId.Guid
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Get-RdsHostPool -TenantName &lt;Tenant Name&gt;
</span></span></code></pre></div><h2 id="creating--managing-host-pools">Creating &amp; Managing Host Pools</h2>
<p>Host Pools house the Virtual Machines that deliver resources, along with Desktop and RemoteApp Application Groups. Whilst provisioning is far better addressed through the Azure Marketplace (“Windows Virtual Desktop - Provision a host pool”), there are some useful cmdlets available for Host Pool management.</p>
<p><strong>Create</strong> a new <em>pooled</em> WVD Host Pool:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>New-RdsHostPool -TenantName &lt;Tenant Name&gt; -Name &lt;Host Pool Name&gt;
</span></span></code></pre></div><p><strong>Create</strong> a new <em>persistent</em> WVD Host Pool:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>New-RdsHostPool -TenantName &lt;Tenant Name&gt; -Name &lt;Host Pool Name&gt; -Persistent
</span></span></code></pre></div><p><strong>Retrieve details</strong> for a specific Host Pool:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>Get-RdsHostPool -TenantName &lt;Tenant Name&gt;
</span></span></code></pre></div><p><strong>Modify</strong> the properties of a Host Pool to specify <em>breadth-first</em> load balancing:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>Set-RdsHostPool -TenantName &lt;Tenant Name&gt; -Name &lt;Host Pool Name&gt; -BreadthFirstLoadBalancer
</span></span></code></pre></div><p><strong>Modify</strong> the properties of a Host Pool to specify <em>depth-first</em> load balancing:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>Set-RdsHostPool -TenantName &lt;Tenant Name&gt; -Name &lt;Host Pool Name&gt; -DepthFirstLoadBalancer
</span></span></code></pre></div><h2 id="creating--managing-app-groups">Creating &amp; Managing App Groups</h2>
<p>Application Groups determine the type, and detail of resources published to assigned users. They have a Resource Type designation of <em>either</em> Desktop, or RemoteApp, but not both. A default “Desktop” App Group will be created as part of Host Pool creation via Azure.</p>
<p><strong>Create</strong> a new <em>Desktop</em> App Group:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>New-RdsAppGroup -TenantName &lt;Tenant Name&gt; -HostPoolName &lt;Host Pool Name&gt; -Name &lt;App Group Name&gt; -ResourceType Desktop
</span></span></code></pre></div><p><strong>Create</strong> a new <em>RemoteApp</em> App Group:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>New-RdsAppGroup -TenantName &lt;Tenant Name&gt; -HostPoolName &lt;Host Pool Name&gt; -Name &lt;App Group Name&gt; -ResourceType RemoteApp
</span></span></code></pre></div><p><strong>Retrieve the properties</strong> of an App Group:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>Get-RdsAppGroup -TenantName &lt;Tenant Name&gt; -HostPoolName &lt;Host Pool Name&gt; -Name &lt;App Group Name&gt;
</span></span></code></pre></div><h2 id="publishing--managing-remoteapp-applications">Publishing &amp; Managing RemoteApp Applications</h2>
<p>In the case of a RemoteApp designation, Application Groups need to be populated with RemoteApp applications.</p>
<p><strong>Retrieve available apps</strong> from your RemoteApp App host virtual machine(s). WVD will interrogate your image and list the available Start Menu items:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>Get-RdsStartMenuApp &lt;Tenant Name&gt; &lt;Host Pool Name&gt; &lt;Application Group Name&gt; | Select FriendlyName,AppAlias
</span></span></code></pre></div><p>An example of the output from the default Windows 10 multi-user gallery image is as follows:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>FriendlyName                   AppAlias
</span></span><span style="display:flex;"><span>------------                   --------
</span></span><span style="display:flex;"><span>Access                         access
</span></span><span style="display:flex;"><span>Character Map                  charactermap
</span></span><span style="display:flex;"><span>Database Compare               databasecompare
</span></span><span style="display:flex;"><span>dfrgui                         dfrgui
</span></span><span style="display:flex;"><span>Disk Cleanup                   diskcleanup
</span></span><span style="display:flex;"><span>Excel                          excel
</span></span><span style="display:flex;"><span>Internet Explorer              internetexplorer
</span></span><span style="display:flex;"><span>iSCSI Initiator                iscsiinitiator
</span></span><span style="display:flex;"><span>Math Input Panel               mathinputpanel
</span></span><span style="display:flex;"><span>Memory Diagnostics Tool        memorydiagnosticstool
</span></span><span style="display:flex;"><span>ODBC Data Sources (<span style="color:#ae81ff">32</span>-bit)     odbcdatasources32bit
</span></span><span style="display:flex;"><span>ODBC Data Sources (<span style="color:#ae81ff">64</span>-bit)     odbcdatasources64bit
</span></span><span style="display:flex;"><span>Office Language Preferences    officelanguagepreferences
</span></span><span style="display:flex;"><span>Office Upload Center           officeuploadcenter
</span></span><span style="display:flex;"><span>OneDrive                       onedrive
</span></span><span style="display:flex;"><span>OneNote <span style="color:#ae81ff">2016</span>                   onenote2016
</span></span><span style="display:flex;"><span>Outlook                        outlook
</span></span><span style="display:flex;"><span>Paint                          paint
</span></span><span style="display:flex;"><span>PowerPoint                     powerpoint
</span></span><span style="display:flex;"><span>Project Server Accounts        projectserveraccounts
</span></span><span style="display:flex;"><span>Project                        project
</span></span><span style="display:flex;"><span>Publisher                      publisher
</span></span><span style="display:flex;"><span>Quick Assist                   quickassist
</span></span><span style="display:flex;"><span>RecoveryDrive                  recoverydrive
</span></span><span style="display:flex;"><span>Registry Editor                registryeditor
</span></span><span style="display:flex;"><span>Remote Desktop Connection      remotedesktopconnection
</span></span><span style="display:flex;"><span>Resource Monitor               resourcemonitor
</span></span><span style="display:flex;"><span>Snipping Tool                  snippingtool
</span></span><span style="display:flex;"><span>Spreadsheet Compare            spreadsheetcompare
</span></span><span style="display:flex;"><span>Steps Recorder                 stepsrecorder
</span></span><span style="display:flex;"><span>System <span style="color:#66d9ef">Configuration</span>           systemconfiguration
</span></span><span style="display:flex;"><span>System Information             systeminformation
</span></span><span style="display:flex;"><span>Task Manager                   taskmanager
</span></span><span style="display:flex;"><span>Telemetry Dashboard <span style="color:#66d9ef">for</span> Office telemetrydashboardforoffice
</span></span><span style="display:flex;"><span>Telemetry Log <span style="color:#66d9ef">for</span> Office       telemetrylogforoffice
</span></span><span style="display:flex;"><span>Visio                          visio
</span></span><span style="display:flex;"><span>Windows Fax and Scan           windowsfaxandscan
</span></span><span style="display:flex;"><span>Windows Media Player           windowsmediaplayer
</span></span><span style="display:flex;"><span>Windows Speech Recognition     windowsspeechrecognition
</span></span><span style="display:flex;"><span>Word                           word
</span></span><span style="display:flex;"><span>Wordpad                        wordpad
</span></span></code></pre></div><p>To <strong>create a RemoteApp</strong> based on an installed application:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>New-RdsRemoteApp &lt;Tenant Name&gt; &lt;Host Pool Name&gt; &lt;Application Group Name&gt; -Name &lt;Friendly Name&gt; -AppAlias &lt;App Alias&gt;
</span></span></code></pre></div><p>By way of example, the following commands apply to the creation of the standard Office applications (Word, Excel, PowerPoint, and Outlook):</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>New-RdsRemoteApp &lt;Tenant Name&gt; &lt;Host Pool Name&gt; &lt;Application Group Name&gt; -Name <span style="color:#e6db74">&#34;Word&#34;</span> -AppAlias word
</span></span><span style="display:flex;"><span>New-RdsRemoteApp &lt;Tenant Name&gt; &lt;Host Pool Name&gt; &lt;Application Group Name&gt; -Name <span style="color:#e6db74">&#34;Excel&#34;</span> -AppAlias excel
</span></span><span style="display:flex;"><span>New-RdsRemoteApp &lt;Tenant Name&gt; &lt;Host Pool Name&gt; &lt;Application Group Name&gt; -Name <span style="color:#e6db74">&#34;PowerPoint&#34;</span> -AppAlias powerpoint
</span></span><span style="display:flex;"><span>New-RdsRemoteApp &lt;Tenant Name&gt; &lt;Host Pool Name&gt; &lt;Application Group Name&gt; -Name <span style="color:#e6db74">&#34;Outlook&#34;</span> -AppAlias outlook
</span></span></code></pre></div><p>It&rsquo;s possible to <strong>customise</strong> the command line parameters associated with a given application. For example, the passing of a command line argument to a web browser to launch a specific web page. This is achieved by specifying the &ldquo;RequiredCommandLine&rdquo; parameter of a published RemoteApp:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>Set-RdsRemoteApp -TenantName &lt;Tenant Name&gt;  -HostPoolName &lt;Host Pool Name&gt; -AppGroupName &lt;Application Group Name&gt; -Name &lt;Friendly Name&gt; -CommandLineSetting Require -RequiredCommandLine &lt;Additional Arguments&gt; 
</span></span></code></pre></div><p>To <strong>list RemoteApp applications</strong> associated with a specific Application Group:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>Get-RdsRemoteApp &lt;Tenant Name&gt; &lt;Host Pool Name&gt; &lt;Application Group Name&gt;
</span></span></code></pre></div><p>There will also be occasions where you want to <strong>remove RemoteApp&rsquo;s</strong> from an Application Group. To do this, run:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>Remove-RdsRemoteApp &lt;Tenant Name&gt; &lt;Host Pool Name&gt; &lt;Application Group Name&gt; -Name &lt;Friendly Name&gt;
</span></span></code></pre></div><h2 id="managing-user-permissions-to-wvd-resources">Managing User Permissions to WVD Resources</h2>
<p>Users need to be assigned to Application Groups within WVD. At present these need to be assigned explicitly using the following commands. The ability to assign permissions to <em>groups</em> is anticipated in time.</p>
<p>Permissions are applied to the Application Group, as opposed to specific resources (e.g. individual RemoteApp&rsquo;s). To present different combinations of Applications to different users, multiple Application Groups are necessary.</p>
<p><strong>Adding a user</strong> to an Application Group:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>Add-RdsAppGroupUser &lt;Tenant Name&gt; &lt;Host Pool Name&gt; &lt;Application Group Name&gt; -UserPrincipalName &lt;user@domain.com&gt;
</span></span></code></pre></div><p><strong>Removing a user</strong> from an Application Group:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>Remove-RdsAppGroupUser &lt;Tenant Name&gt; &lt;Host Pool Name&gt; &lt;Application Group Name&gt; -UserPrincipalName &lt;user@domain.com&gt;
</span></span></code></pre></div><h2 id="managing-user-sessions">Managing User Sessions</h2>
<p>As with more traditional RDS deployments, there will be occasions where the management of User Sessions is a requirement. We have a number of options available to us within WVD - many of which hinge off of the following command to <strong>list User Sessions</strong> running within a host pool:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>Get-RdsUserSession &lt;Tenant Name&gt; &lt;Host Pool Name&gt;
</span></span></code></pre></div><p>Using the resulting Session Host, and Session ID information, we can invoke the following actions.</p>
<p><strong>Disconnect</strong> a session:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>Disconnect-RdsUserSession &lt;Tenant Name&gt; &lt;Host Pool Name&gt; -SessionHostName &lt;Session Host Name&gt; -SessionId &lt;Session ID&gt;
</span></span></code></pre></div><p><strong>Log Off</strong> a user session:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>Invoke-RdsUserSessionLogoff &lt;Tenant Name&gt; &lt;Host Pool Name&gt; -SessionHostName &lt;Session Host Name&gt; -SessionId &lt;Session ID&gt;
</span></span></code></pre></div><p><strong>Send a notification</strong> to the user session:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>Send-RdsUserSessionMessage &lt;Tenant Name&gt; &lt;Host Pool Name&gt; -SessionHostName &lt;Session Host Name&gt; -SessionId &lt;Session ID&gt; -MessageTitle &lt;Title&gt; -MessageBody &lt;Message&gt;
</span></span></code></pre></div><hr>
<p>I hope you&rsquo;ve found this WVD PowerShell reference useful. I&rsquo;ll do my best to maintain it as Windows Virtual Desktop matures, and no doubt much of this functionality will make its way into the forthcoming Management Console.</p>
<p>If you haven&rsquo;t already, I&rsquo;d urge you to <a href="https://kelvinpapp.com/getting-to-grips-with-wvd/">read my previous post</a> which included some of the information in this post, along with a broader commentary on the features and functionality within WVD as a whole.</p>
]]></content>
        </item>
        
        <item>
            <title>Group Naming Policies: Updated!</title>
            <link>https://www.kelvinpapp.com/group-naming-policies-updated/</link>
            <pubDate>Sat, 18 May 2019 16:59:53 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/group-naming-policies-updated/</guid>
            <description>A phrase (perhaps) overly used in recent months / years is that of &amp;ldquo;User Empowerment&amp;rdquo;; that slightly cheesy phrase attached to services that hand flexibility and choice to end users in how they&amp;rsquo;re used. It&amp;rsquo;s also particularly true of Office 365, where features and services are released almost weekly that focus on user experience first, and administrators second. In many respects this shouldn&amp;rsquo;t be a surprise - it&amp;rsquo;s an intrinsic part of Microsoft&amp;rsquo;s mission statement after all - but that stance doesn&amp;rsquo;t come without issue&amp;hellip;</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/05/Naming-Policy-Blocked-Words.jpg"
         alt="A screenshot showing the blocked words interface in the Naming Policy interface"/>
</figure>

<p>A phrase (perhaps) overly used in recent months / years is that of &ldquo;User Empowerment&rdquo;; that slightly cheesy phrase attached to services that hand flexibility and choice to end users in how they&rsquo;re used. It&rsquo;s also <em>particularly</em> true of Office 365, where features and services are released almost weekly that focus on user experience first, and administrators second. In many respects this shouldn&rsquo;t be a surprise - it&rsquo;s an intrinsic part of <a href="https://www.microsoft.com/en-gb/about/">Microsoft&rsquo;s mission statement</a> after all - but that stance doesn&rsquo;t come without issue&hellip;</p>
<p>An increasing challenge for many IT Departments is the proliferation of Groups that results from use of Microsoft Teams (in particular). Many accept just how fantastic Teams is at fostering collaboration, but the appearance of &ldquo;Dave&rsquo;s Test Group&rdquo;, &ldquo;Jane Personal&rdquo;, and &ldquo;Project Potato&rdquo; in our Azure AD tenants doesn&rsquo;t sit well with most. It&rsquo;s also counter productive for those looking for useful Groups and Teams to join. <a href="https://techcommunity.microsoft.com/t5/Azure-Active-Directory-Identity/Azure-AD-Naming-Policy-for-Office-365-Groups-is-now-generally/ba-p/369641">Enter Azure AD Naming Policies</a> - in existence for a while, but subject to some recent enhancements.</p>
<h2 id="group-naming-policies">Group Naming Policies</h2>
<p>For quite some time now we&rsquo;ve been able to enforce a Naming Policy for Office 365 Groups. This extends to the implementation of blocked word lists for Group names&hellip; but it&rsquo;s never been <em>that</em> straightforward. To date, configuration of these policies has been achieved <a href="https://docs.microsoft.com/en-us/office365/admin/create-groups/groups-naming-policy?view=o365-worldwide#how-to-set-up-the-naming-policy-in-azure-ad-powershell">using the PowerShell script below</a>. Not complicated in itself, but unfriendly for monitoring and updating:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>$BlockedWords = <span style="color:#e6db74">&#34;&amp;lt;WordList&gt;&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$PrefixSuffix = <span style="color:#e6db74">&#34;&amp;lt;PrefixSuffixNaming&gt;&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Connect-AzureAD
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">try</span>
</span></span><span style="display:flex;"><span>    {
</span></span><span style="display:flex;"><span>        $template = Get-AzureADDirectorySettingTemplate | ? {$*.displayname <span style="color:#f92672">-eq</span> <span style="color:#e6db74">&#34;group.unified&#34;</span>}
</span></span><span style="display:flex;"><span>        $settingsCopy = $template.CreateDirectorySetting()
</span></span><span style="display:flex;"><span>        New-AzureADDirectorySetting -DirectorySetting $settingsCopy
</span></span><span style="display:flex;"><span>        $settingsObjectID = (Get-AzureADDirectorySetting | Where-object -Property Displayname -Value <span style="color:#e6db74">&#34;Group.Unified&#34;</span> <span style="color:#f92672">-EQ</span>).id
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">catch</span>
</span></span><span style="display:flex;"><span>    {
</span></span><span style="display:flex;"><span>        $settingsObjectID = (Get-AzureADDirectorySetting | Where-object -Property Displayname -Value <span style="color:#e6db74">&#34;Group.Unified&#34;</span> <span style="color:#f92672">-EQ</span>).id       
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$settingsCopy = Get-AzureADDirectorySetting -Id $settingsObjectID
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$SettingsCopy[<span style="color:#e6db74">&#34;PrefixSuffixNamingRequirement&#34;</span>] = $PrefixSuffix
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$SettingsCopy[<span style="color:#e6db74">&#34;CustomBlockedWordsList&#34;</span>] = $BlockedWords
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Set-AzureADDirectorySetting -Id $settingsObjectID -DirectorySetting $settingsCopy
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(Get-AzureADDirectorySetting -Id $settingsObjectID).Values
</span></span></code></pre></div><p>Words defined in the $BlockedWords variable are prohibited from use, and the $PrefixSuffix is applied automatically. This latter object can be a static string, one of the following Azure AD attributes, or a combination of the two:</p>
<ul>
<li>Company</li>
<li>CountryOrRegion</li>
<li>Department</li>
<li>Office</li>
<li>StateOrProvince</li>
<li>Title</li>
</ul>
<h2 id="so-whats-changed">So what&rsquo;s changed?</h2>
<p>Group Naming Policies are now available to configure in the Azure AD portal (albeit Preview)! 🙂 In the Groups node of the Azure Active Directory Portal we have a new Setting available: Naming Policy (Preview) containing two tabs; Blocked words, and Group naming policy:</p>
<figure class="center"><img src="/img/2019/05/Naming-Policy-Blocked-Words.jpg"
         alt="A screenshot showing the blocked words interface in the Naming Policy interface"/>
</figure>

<figure class="center"><img src="/img/2019/05/Naming-Policy-Naming-Policy.jpg"
         alt="A screenshot showing the Group Naming policy interface in the Naming Policy interface"/>
</figure>

<p>These two new sections allow us to define the policy, and see at a glance what settings are configured. Infinitely more user friendly than PowerShell, and far, far easier to see what&rsquo;s policies are being enforced on our users. We can also more easily view the prefixes being applied, and the supported attributes <em>(a list I hope will grow in time, and extend to custom attributes)</em>:</p>
<figure class="center"><img src="/img/2019/05/Naming-Policy-Prefix.jpg"
         alt="A screenshot showing the available prefix and suffix selection options"/>
</figure>

<p>The end user experience hasn&rsquo;t changed. Naming Policies apply across the board in Azure AD and are invoked as soon as users type a new group name. Prefixes applied to Groups are shown in a preview, and blocked words are highlight to inform removal. For a summary of the experience across Office 365 apps, <a href="https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/groups-naming-policy#experience-across-office-365-apps">refer here</a>.</p>
<hr>
<p>From my perspective, this is a fantastic new addition. It simplifies the experience for administrators, and highlights the feature to those that possibly didn&rsquo;t know it existed. It also delivers some much needed control, while retaining the freedom for users to consume services as they want to&hellip; win win!</p>
<p>The inclusion in the Azure AD portal might be a minor tweak, but it&rsquo;s likely to make some incredibly happy. Thank you Azure AD team!</p>
]]></content>
        </item>
        
        <item>
            <title>Security Registration &amp; CA</title>
            <link>https://www.kelvinpapp.com/security-registration-ca/</link>
            <pubDate>Sat, 11 May 2019 18:18:24 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/security-registration-ca/</guid>
            <description>A brief post from me today to highlight something I stumbled across this week. I&amp;rsquo;ve not seen any formal communication from Microsoft on this change (although I&amp;rsquo;m sure it&amp;rsquo;s lurking somewhere), but it strikes me as a key new feature many will want to enable&amp;hellip;
The process for registering Security Information is one which should be ultra secure. Control of this information allows the account password to be reset, or MFA challenges to be accepted.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/05/CA-Security-Information-Registration.jpg"
         alt="A screenshot showing the option to apply Conditional Access to the Security Registration experience"/>
</figure>

<p>A brief post from me today to highlight something I stumbled across this week. I&rsquo;ve not seen any formal communication from Microsoft on this change (although I&rsquo;m sure it&rsquo;s lurking somewhere), but it strikes me as a key new feature many will want to enable&hellip;</p>
<p>The process for registering Security Information is one which should be ultra secure. Control of this information allows the account password to be reset, or MFA challenges to be accepted. In theory it is; triggered as soon as it applies and subject to continual prompts (or blocked access) until complete. In practice it&rsquo;s always unnerved me that any user, anywhere in the world can gain access and (theoretical) control of an account before registration takes place. Of course we can reset fraudulent or erroneous registrations, but minimising the chance is surely better. Now you can!</p>
<h2 id="security-information-registration-update">Security Information Registration Update</h2>
<p>The control in question is a new setting within <a href="https://docs.microsoft.com/en-us/azure/active-directory/conditional-access/overview">Azure AD Conditional Access</a>. Under &ldquo;Cloud apps or actions&rdquo; we have a new &ldquo;User Action&rdquo; we can apply policy to: &ldquo;Register security information (preview)&rdquo;. Using this in tandem with conditions that specify locations or approved devices allows us to block registrations that don&rsquo;t match criteria we set. For example those from users off of the corporate network, or those initiated from devices that are non-compliant.</p>
<figure class="center"><img src="/img/2019/05/CA-Register-Security-Information-Focus.jpg"
         alt="A screenshot of the new Security Information Conditional Access controls"/>
</figure>

<p>Once enabled users who satisfy the username / password challenge but are required to enrol Security Information (or provide MFA) will receive a message. This states that whilst the sign-in was successful, the criteria for access wasn&rsquo;t met ?</p>
<hr>
<p>If you&rsquo;re in a position where you can limit registration to trusted scenarios this is a great way of further securing your users. It&rsquo;s not for everyone, but will accommodate a good proportion who onboard users locally. Go and have a play!</p>
<p>For those interested in other Azure AD recommendations, I discussed the <a href="https://www.kelvinpapp.com/5-things-you-should-be-doing-with-azure-ad/">5 Things You Should Be Doing With Azure AD</a> in a recent post. If I was writing it again this feature would get a mention. For those that haven’t read it already, why not spare 5 minutes to find out why I think many are missing out!</p>
]]></content>
        </item>
        
        <item>
            <title>Getting to grips with WVD</title>
            <link>https://www.kelvinpapp.com/getting-to-grips-with-wvd/</link>
            <pubDate>Sat, 04 May 2019 10:27:14 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/getting-to-grips-with-wvd/</guid>
            <description>After much anticipation I finally had some proper time this last week to spend tinkering with Windows Virtual Desktop (WVD). For those unfamiliar, think of WVD as Remote Desktop Services (RDS) &amp;ldquo;as a service&amp;rdquo;. Microsoft manage and maintain common elements of the (shared) service infrastructure, removing the need for you to administer the underlying elements of RDS. It also supports a new &amp;ldquo;Enterprise for Virtual Desktops&amp;rdquo; edition of Windows 10 - providing multi-user, desktop operating system RDS for the first time.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/05/Windows-Virtual-Desktop.jpg"
         alt="An overview image showing multiple users accessing a shared Cloud desktop"/>
</figure>

<p>After much anticipation I finally had some proper time this last week to spend tinkering with <a href="https://www.microsoft.com/en-us/microsoft-365/modern-desktop/enterprise/windows-virtual-desktop%22">Windows Virtual Desktop (WVD)</a>. For those unfamiliar, think of WVD as Remote Desktop Services (RDS) &ldquo;as a service&rdquo;. Microsoft manage and maintain common elements of the (shared) service infrastructure, removing the need for you to administer the underlying elements of RDS. It also supports a new &ldquo;Enterprise for Virtual Desktops&rdquo; edition of Windows 10 - providing multi-user, <em>desktop</em> operating system RDS for the first time.</p>
<p>I&rsquo;ve been excited for the release since it was announced last year. As an organisation we ran sessions on WVD at Future Decoded, and I&rsquo;ve been hinting at it&rsquo;s potential for various use cases for the last 6 months or so. The challenge - as is always the case with &ldquo;new&rdquo; things - is whether it proves to be all it can be&hellip;</p>
<h2 id="first-things-first">First Things First</h2>
<p>Taking a step back, I&rsquo;ve worked with Remote Desktop solutions of various sorts for a lot of years now. Traditional RDS (and Terminal Services back in the day!), Citrix XenApp, and VDI solutions like XenDesktop / Horizon View. Common to all of those is an increasing movement <em>away</em> from them in recent years, favouring more modern ways of working. Software as a Service adoption, advancements in MDM / MAM, and user expectations around how and when they should work have all played a part in shifting the focus from centralisation of data, to security of data beyond the LAN.</p>
<p>Some have speculated that Microsoft have missed the boat when it comes to Desktop as a Service, but I disagree&hellip;In spite of advancements, many organisations still have a need for a centrally administered user desktop experience. That&rsquo;s unlikely to change in the short-medium term. For some this is driven by legacy application requirements, for others there are legitimate security constraints. Whatever the rationale, the introduction of a simple, low overhead desktop solution is a welcome addition - especially if it&rsquo;s executed by Microsoft in the which we all hope it will be 🙂</p>
<h2 id="prerequisites">Prerequisites</h2>
<p>Before you get cracking with rolling out WVD, there are some things you need to consider:</p>
<p><strong>Licensing:</strong> To date if you wanted to connect remotely to desktop operating systems you needed to subscribe to Windows 10 Virtual Desktop Access (VDA) licenses. Alternatively you needed to have purchased Windows 10 with Software Assurance. The approach to licensing WVD is considerably more flexible; extending eligible licenses to Windows 10 / Microsoft 365 subscription SKU&rsquo;s.</p>
<p><strong>Active Directory:</strong> Traditional Active Directory is a requirement for WVD - either full-blown AD in Azure, or <a href="https://azure.microsoft.com/en-gb/services/active-directory-ds/">Azure AD Domain Services</a>. Native support for Azure AD isn&rsquo;t available; unsurprising in many respects, but disappointing none the less for &ldquo;Cloud First&rdquo; organisations.</p>
<p><strong>Profile Strategy:</strong> As you would in the &ldquo;real world&rdquo;, you need to plan a strategy for user profiles. This will be dictated in part by your choice of desktop approach (pooled, or personal). In any case, there&rsquo;s a strong chance you&rsquo;ll want to consider the use of <a href="https://fslogix.com/products/profile-containers">FSLogix Profile Containers</a> and <a href="https://fslogix.com/products/office-365-container">Office 365 Containers</a>. It&rsquo;s been announced that both of these solutions will be included in the imminent FSLogix / Microsoft re-brand. Even more excitingly, these will be free for all subscribers of:</p>
<ul>
<li>Microsoft 365 E3 / A3</li>
<li>Microsoft 365 E5 / A5</li>
<li>Windows 10 Enterprise E3 / E5</li>
<li>Windows 10 Education A3 / A5</li>
<li>Remote Desktop Services (RDS) CAL (Purchased, or via CSP Subscription)</li>
<li>Windows 10 VDA</li>
</ul>
<h2 id="deployment">Deployment</h2>
<p>Microsoft have published a pretty comprehensive tutorial on how to get up and running on the <a href="https://docs.microsoft.com/en-us/azure/virtual-desktop/overview">WVD section of Microsoft Docs</a>. For those interested, the high-level steps you need to take are as follows - interjected with a few of my own thoughts along the way.</p>
<h3 id="prepare-the-infrastrucutre">Prepare the Infrastrucutre</h3>
<ul>
<li>Consent to, and trigger the creation of the Server / Client App&rsquo;s for Windows Virtual Desktop in Azure AD. You complete this at the <a href="https://rdweb.wvd.microsoft.com/">WVD Consent Page</a> and will need your Azure AD Tenant GUID. Don&rsquo;t forget to repeat this for both the Server App and Client App registrations. On completion you should see two new Enterprise Applications registered in Azure AD: &ldquo;Windows Virtual Desktop&rdquo;, and &ldquo;Windows Virtual Desktop Client&rdquo;.</li>
<li>Assign TenantCreator permissions on the new &ldquo;Windows Virtual Desktop&rdquo; Enterprise Application to the user who will establish the WVD tenant.</li>
<li>Install and import the Windows Virtual Desktop PowerShell module on the machine(s) you will administer WVD from. Note that at the time I write this, much of the administration of WVD is PowerShell based. A new WVD management portal is in the works, but is unlikely to be released during the preview period.</li>
<li>Create a WVD Tenant - this only needs to be done once using the following command(s):</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span><span style="color:#75715e"># Connect to the WVD Service</span>
</span></span><span style="display:flex;"><span>Add-RdsAccount -DeploymentUrl <span style="color:#e6db74">&#34;https://rdbroker.wvd.microsoft.com&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Provision the Tenant</span>
</span></span><span style="display:flex;"><span>New-RdsTenant -Name &lt;TenantName&gt; -AadTenantId &lt;DirectoryID&gt; -AzureSubscriptionId &lt;SubscriptionID&gt;
</span></span></code></pre></div><ul>
<li>Create a Service Principal to use during the creation of the host pool. This step is optional, but recommended. Without defining a Service Principal, username / password credentials need to be used for Host Pool authentication to the WVD service. To create a Service Principal, ensure you have the Azure AD cmdlets installed and then run the following command(s):</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span><span style="color:#75715e"># Define Variables:</span>
</span></span><span style="display:flex;"><span>$TenantGroupName = <span style="color:#e6db74">&#34;Default Tenant Group&#34;</span>
</span></span><span style="display:flex;"><span>$TenantName = &lt;Tenant Name&gt;
</span></span><span style="display:flex;"><span>$aadContext = Connect-AzureAD
</span></span><span style="display:flex;"><span>$svcPrincipal = New-AzureADApplication -AvailableToOtherTenants $true -DisplayName <span style="color:#e6db74">&#34;Windows Virtual Desktop Service Principal&#34;</span>
</span></span><span style="display:flex;"><span>$svcPrincipalCreds = New-AzureADApplicationPasswordCredential -ObjectId $svcPrincipal.ObjectId
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Connect to the WVD Service:</span>
</span></span><span style="display:flex;"><span>Add-RdsAccount -DeploymentUrl <span style="color:#e6db74">&#34;https://rdbroker.wvd.microsoft.com&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Define the Service Principal &amp; Permissions:</span>
</span></span><span style="display:flex;"><span>New-RdsRoleAssignment -RoleDefinitionName <span style="color:#e6db74">&#34;RDS Owner&#34;</span> -ApplicationId $svcPrincipal.AppId -TenantGroupName $TenantGroupName -TenantName $TenantName
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>$creds = New-Object System.Management.Automation.PSCredential($svcPrincipal.AppId, (ConvertTo-SecureString $svcPrincipalCreds.Value -AsPlainText -Force))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Connect as the new SPO:</span>
</span></span><span style="display:flex;"><span>Add-RdsAccount -DeploymentUrl <span style="color:#e6db74">&#34;https://rdbroker.wvd.microsoft.com&#34;</span> -Credential $creds -ServicePrincipal -AadTenantId $aadContext.TenantId.Guid
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#Verify Service Principal Access:</span>
</span></span><span style="display:flex;"><span>Get-RDSRoleAssignment -TenantGroupName $TenantGroupName -TenantName $TenantName
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Output the SPO Password &amp; Application ID - Save these for Later Use</span>
</span></span><span style="display:flex;"><span>$svcPrincipalCreds.Value
</span></span><span style="display:flex;"><span>$svcPrincipal.AppId
</span></span></code></pre></div><h3 id="create-the-desktop-environment">Create the Desktop Environment</h3>
<ul>
<li>Deploy a Host Pool using the &ldquo;Windows Virtual Desktop - Provision a host pool&rdquo; entry from the Azure Marketplace. Most of the steps in this wizard will be self-explanatory and unique to your environment.</li>
<li>When prompted for the usage profile and number of users, the template will make an assessment on the best instance type and volume of VM&rsquo;s required. This can be tailored, and also influenced by the load balancing method chosen (Breadth First, or Depth First). I won&rsquo;t be going into the detail of these aspects in this post, but know that there is significant capability within WVD to automate the scale up, scale down, and placement of users based on various performance metrics.</li>
<li>For the purpose of testing I elected to use the gallery Windows 10 image. You are able to prepare and register your own if you prefer - additional steps apply in this case. Again, I won&rsquo;t be covering these elements in this post, but I&rsquo;m happy to address questions in the comments and may focus a future post on this aspect of WVD.</li>
<li>On the &ldquo;Authenticate to Windows Virtual Desktop&rdquo; section of the Host Pool creation wizard, choose whether the username / password, or Service Principal authentication method is to be used and populate the relevant fields. If you are enforcing MFA on all user accounts, a service principal is required.</li>
<li>On completion, you will be able to confirm the successful creation of your host pool through the presence of Virtual Machines in the Resource Group you defined, and via the creation of a Host Pool object. To view details, run the following command from a PowerShell session connected to your WVD Tenant:</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span>Get-RDSHostPool -TenantName &lt;tenantname&gt;
</span></span></code></pre></div><h3 id="connect-to-the-service">Connect to the Service</h3>
<p>At a basic level, your WVD Deployment is complete. You should be able to connect to your desktop(s) with the accounts specified in the Host Pool creation wizard. This can be done with the Web Client (<a href="https://rdweb.wvd.microsoft.com/webclient/index.html">accessible here</a>), or by installing the preview version of the Remote Desktop Client, <a href="https://docs.microsoft.com/en-us/azure/virtual-desktop/connect-windows-7-and-10">available here</a>.</p>
<figure class="center"><img src="/img/2019/05/WVD-Web-Client.png"
         alt="A screenshot of the Windows Virtual Desktop Web Client"/>
</figure>

<p>To add or remove users to the Virtual Desktop, use the following commands:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span><span style="color:#75715e"># Connect to the WVD Service:</span>
</span></span><span style="display:flex;"><span>Add-RdsAccount -DeploymentUrl <span style="color:#e6db74">&#34;https://rdbroker.wvd.microsoft.com&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Assigning User(s) to the Published Desktop:</span>
</span></span><span style="display:flex;"><span>Add-RdsAppGroupUser &lt;Tenant Name&gt; &lt;Host Pool Name&gt; <span style="color:#e6db74">&#34;Desktop Application Group&#34;</span> -UserPrincipalName user@domain.com
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Removing User(s) from the Published Desktop:</span>
</span></span><span style="display:flex;"><span>Remove-RdsAppGroupUser &lt;Tenant Name&gt; &lt;Host Pool Name&gt; <span style="color:#e6db74">&#34;Desktop Application Group&#34;</span> -UserPrincipalName user@domain.com
</span></span></code></pre></div><p>It&rsquo;s not possible to use Active Directory Groups for the assignment of permissions (at the moment).</p>
<h3 id="application-publishing">Application Publishing</h3>
<p>You&rsquo;ll notice from the above screenshot that it&rsquo;s also possible to publish <em>applications</em> to users, not just full desktops (RemoteApp). There&rsquo;s an important thing to highlight on this front when it comes to WVD. Before I explain, I&rsquo;ll provide a brief overview of the terminology used to assist:</p>
<p>The basic elements of WVD are:</p>
<ul>
<li><strong>Host Pools:</strong> Containers that house Virtual Machines to deliver desktop / application resources, and Application Groups. Load Balancing attributes and session limits are defined at the Host Pool level.</li>
<li><strong>Application Groups:</strong> Determine the type, and detail of resources published to assigned users. They have a Resource Type designation of <em>either</em> Desktop, or RemoteApp, but not both.</li>
</ul>
<p>&ldquo;Now what&rsquo;s that important thing&rdquo;, I hear you cry? Well&hellip;it&rsquo;s this. Users need to be assigned to the Application Groups that host the resources we want to give them access to. There will be scenarios where you want to provide flexibility around the user experience - enabling the choice of accessing either desktops <em>or</em> applications. At the time of writing, a user can only be assigned to one Application Group in any single Host Group. To accommodate this flexibility then, you need multiple Host Groups to support a mix of RemoteApp and Desktop assignments for users.</p>
<p>This isn&rsquo;t a show stopper by any stretch. It does require you to double up on session host infrastructure though, and makes the overall experience that little bit more complex.</p>
<h3 id="remoteapp-configuration">RemoteApp Configuration</h3>
<p>To publish applications to those users who will also be accessing desktops, we first need to create a second Host Pool. If this doesn&rsquo;t apply, then the below steps can be run on same pool you will be using for Desktop access.</p>
<p>Run the following commands to create a new Application Group, and to assign users:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span><span style="color:#75715e"># Create the Application Group:</span>
</span></span><span style="display:flex;"><span>New-RdsAppGroup &lt;Tenant Name&gt; &lt;Host Pool Name&gt; &lt;Application Group Name&gt; -ResourceType <span style="color:#e6db74">&#34;RemoteApp&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Verify Creation:</span>
</span></span><span style="display:flex;"><span>Get-RDSAppGroup &lt;Tenant Name&gt; &lt;Host Pool Name&gt; &lt;Application Group Name&gt;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Assign User(s) to the Application Group:</span>
</span></span><span style="display:flex;"><span>Add-RdsAppGroupUser &lt;Tenant Name&gt; &lt;Host Pool Name&gt; &lt;Application Group Name&gt; -UserPrincipalName user@domain.com
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Verify User Assignment:</span>
</span></span><span style="display:flex;"><span>Get-RdsAppGroupUser &lt;Tenant Name&gt; &lt;Host Pool Name&gt; &lt;Application Group Name&gt;
</span></span></code></pre></div><p>Once the Application Group is created, you need to define the individual applications for publishing. Run the following to retrieve the available application aliases from the Session Host Start Menu. We use these to define the RemoteApp objects within the Application Group:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-PowerShell" data-lang="PowerShell"><span style="display:flex;"><span><span style="color:#75715e"># List Available Applications:</span>
</span></span><span style="display:flex;"><span>Get-RdsStartMenuApp &lt;Tenant Name&gt; &lt;Host Pool Name&gt; &lt;Application Group Name&gt; | Select FriendlyName,AppAlias
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Define RemoteApp Applications (Examples):</span>
</span></span><span style="display:flex;"><span>New-RdsRemoteApp  &lt;Tenant Name&gt; &lt;Host Pool Name&gt; &lt;Application Group Name&gt; -Name <span style="color:#e6db74">&#34;Word&#34;</span> -AppAlias word
</span></span><span style="display:flex;"><span>New-RdsRemoteApp  &lt;Tenant Name&gt; &lt;Host Pool Name&gt; &lt;Application Group Name&gt; -Name <span style="color:#e6db74">&#34;Excel&#34;</span> -AppAlias excel
</span></span><span style="display:flex;"><span>New-RdsRemoteApp &lt;Tenant Name&gt; &lt;Host Pool Name&gt; &lt;Application Group Name&gt; -Name <span style="color:#e6db74">&#34;Paint&#34;</span> -AppAlias paint
</span></span><span style="display:flex;"><span>New-RdsRemoteApp &lt;Tenant Name&gt; &lt;Host Pool Name&gt; &lt;Application Group Name&gt; -Name <span style="color:#e6db74">&#34;Google Chrome&#34;</span> -AppAlias googlechrome
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Verify RemoteApp Creation</span>
</span></span><span style="display:flex;"><span>Get-RdsRemoteApp  &lt;Tenant Name&gt; &lt;Host Pool Name&gt; &lt;Application Group Name&gt;
</span></span></code></pre></div><h3 id="summary">Summary</h3>
<p>That&rsquo;s a wrap for this post 🙂</p>
<p>There&rsquo;s a whole lot more I could dive into on Windows Virtual Desktop. Some things I&rsquo;ve referenced in this post, others may crop up as you start to spend time with the product. Needless to say though, this post is plenty long enough already, and if you&rsquo;ve made it this far you&rsquo;ve done well 🙂</p>
<p>I plan to put some other more specific posts together on some of the more involved functionality of WVD. Some PowerShell tips and tricks covering deployment and administration, in addition to some deep-dives on specific functional areas like Profile Management and Scaling. Irrespective, I&rsquo;d welcome comments and feedback from anyone else who&rsquo;s dabbled with it to date - feel free to get in touch.</p>
]]></content>
        </item>
        
        <item>
            <title>MS-500 Exam: Initial Thoughts</title>
            <link>https://www.kelvinpapp.com/ms-500-exam-initial-thoughts/</link>
            <pubDate>Thu, 25 Apr 2019 20:00:39 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/ms-500-exam-initial-thoughts/</guid>
            <description>This is a slightly left-field post in comparison to other recent entries, but hopefully useful to others preparing for Microsoft&amp;rsquo;s MS-500 Security Administration Exam. For those not in the know, MS-500 is the exam in the &amp;ldquo;MS&amp;rdquo; series focussed on the security centric features of the (Microsoft) 365 suite. A full list of skills measured is detailed on the exam page, but suffice to say there&amp;rsquo;s a plethora of features covered including Identity, ATP (Defender, Azure, and Office 365), Azure Information Protection, Intune, [Cloud App Security] (https://www.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/04/M365-Certified-Security-Administrator.jpg"
         alt="The M365 Certified Security Administrator Certification Logo"/>
</figure>

<p>This is a slightly left-field post in comparison to other recent entries, but hopefully useful to others preparing for Microsoft&rsquo;s MS-500 Security Administration Exam. For those not in the know, MS-500 is the exam in the &ldquo;MS&rdquo; series focussed on the security centric features of the (Microsoft) 365 suite. A full list of skills measured is detailed on the <a href="https://www.microsoft.com/en-us/learning/exam-MS-500.aspx">exam page</a>, but suffice to say there&rsquo;s a plethora of features covered including Identity, ATP (Defender, Azure, and Office 365), <a href="https://azure.microsoft.com/en-gb/services/information-protection/">Azure Information Protection</a>, <a href="https://www.microsoft.com/en-gb/cloud-platform/microsoft-intune">Intune</a>, [Cloud App Security]
(<a href="https://www.microsoft.com/en-gb/cloud-platform/cloud-app-security)">https://www.microsoft.com/en-gb/cloud-platform/cloud-app-security)</a>, and the various approaches available with respect to ensuring compliance with various regulatory and legislative frameworks&hellip;</p>
<p>It&rsquo;s a bit of a beast.</p>
<p>This wasn&rsquo;t an exam that was on my radar until a week or so ago. I was inspired (or arguably egged on!) by <a href="https://twitter.com/Microsoft365Pro">@Microsoft365Pro</a> on Twitter who had recently completed the exam. Given my interests and focus (which this blog is becoming something of a testament to), it seemed like a natural exam to slot into my roadmap - expedited and made slightly easier by the fact that I had a free exam voucher burning a hole in my pocket following the recent AZ-100 / AZ-101 retirement debacle ?</p>
<p>I was home slightly earlier than I expected to be today and thought I&rsquo;d see what exam slots were available over the next week or so&hellip;as luck (or not!) would have it, there was an immediate slot available. I bit the bullet, and here we are a few hours later with my initial feedback and thoughts (having passed, you&rsquo;ll be pleased to hear!)&hellip;</p>
<h2 id="so-how-was-it-and-what-are-the-key-things-you-need-to-know-to-help-you-prepare-for-the-ms-500-exam">So how was it, and what are the key things you need to know to help you prepare for the MS-500 Exam?</h2>
<p>If you&rsquo;re here for the inside scoop / gossip in the form of exam content, you&rsquo;ve come to the wrong place. That&rsquo;s very much not my style, and I&rsquo;d suggest you [have a read of this link(https://www.microsoft.com/en-us/learning/certification-exam-policies.aspx) in place. I will give you some pointers based on my experience though - and hopefully send you in the direction of some useful content that will help you on your way&hellip;</p>
<p><strong>Know your content.</strong> In case it wasn&rsquo;t obvious, you absolutely <em>need</em> to have real world experience on the topics covered in this exam. The questions assume you know your way around the security tools available in the M365 suite, know how to find and configure settings, and know where to go to troubleshoot and monitor the various metrics available.</p>
<p><strong>Have access to a tenant with M365 E5 Licensing.</strong> Like most Microsoft exams, the questions assume the presence of top-tier licensing, which introduces a whole range of additional functionality that you may not have had much exposure to. Expect questions on Azure AD P2 functionality like <a href="https://docs.microsoft.com/en-us/azure/active-directory/governance/access-reviews-overview">Access Reviews</a> and <a href="https://docs.microsoft.com/en-us/azure/active-directory/privileged-identity-management/pim-configure">Privileged Identity Management</a>, have experience of <a href="https://www.microsoft.com/en-gb/cloud-platform/cloud-app-security">Cloud App Security</a>, and understand features like automatic labelling in Azure Information Protection. If you don&rsquo;t have access to a live tenant, then sign up to one of the Microsoft Demos at <a href="demos.microsoft.com">demos.microsoft.com</a>.</p>
<p><strong>Be comfortable addressing scenario based questions.</strong> I&rsquo;m not sure how much I can say publicly about the structure of the exam, but being able to apply Security tools within the M365 stack to real world scenarios and challenges is <em>essential</em>. Expect case studies, and expect questions that force you to apply logic to situations to work out the answer (as opposed to a simple right / wrong response).</p>
<p><strong>Read the literature.</strong> Microsoft Docs is a <em>fantastic</em> resource for getting to grips with features, caveats, and configuration detail relating of some of the more niche elements of the services in scope . If you don&rsquo;t have the time or inclination to trawl through yourself, then refer to one of the fantastic study guides <em>(as a part of your wider learning!)</em> that <a href="https://twitter.com/Microsoft365Pro">@Microsoft365Pro</a> and <a href="https://twitter.com/intunedin">@intunedin</a> have put together - both call out the specific articles that relate to each of the exam objectives:</p>
<ul>
<li><a href="https://microsoft365pro.co.uk/2019/04/15/microsoft-365-security-administration-ms-500-exam-prep-guide/">Microsoft 365: Security Administration (MS-500) Exam Prep Guide (@Microsft365Pro)</a></li>
<li><a href="https://intunedin.net/2019/01/21/preparing-for-the-ms-500-microsoft-365-security-administration-exam-beta/">Preparing for the MS-500 Microsoft 365 Security Administration Exam (@intunedin)</a></li>
</ul>
<p><strong>Take some of the foundational MS Exams first.</strong> If you haven&rsquo;t already, I&rsquo;d encourage you to look at taking <a href="https://www.microsoft.com/en-us/learning/exam-ms-100.aspx">MS-100</a> and <a href="https://www.microsoft.com/en-us/learning/exam-ms-101.aspx">MS-101</a> before you sit this one. There&rsquo;s some natural overlap of content, but MS-500 builds quite significantly on the security concepts that are touched on within these two exams. More Conditional Access, more Cloud App Security, and more Intune. You have been warned!</p>
<hr>
<h2 id="in-summary">In Summary&hellip;</h2>
<p>This was an enjoyable exam for me. I didn&rsquo;t do a huge amount of preparation, but I do deal and enjoy working with with the technologies covered on a near daily basis. It builds nicely on some of the more entry level M365 based exams, and felt like a really well structured (albeit broad) exam that pulled together the (quite fantastic) security and compliance tools available from Microsoft. Is it one of those staple exams that everyone should do? Likely not, but if you have more than a passing interest in security the MS-500 Exam is one I&rsquo;d highly recommend&hellip;</p>
<p>Happy learning, and good luck!</p>
]]></content>
        </item>
        
        <item>
            <title>5 Things You Should Be Doing With Azure AD</title>
            <link>https://www.kelvinpapp.com/5-things-you-should-be-doing-with-azure-ad/</link>
            <pubDate>Thu, 18 Apr 2019 20:17:42 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/5-things-you-should-be-doing-with-azure-ad/</guid>
            <description>I have a lot of meetings where identity (the Azure AD variety&amp;hellip;! :)) is a central theme. These usually start out as broader conversations on Office 365 or Cloud Security in general, but more and more frequently Azure AD is front and centre. Increasingly it&amp;rsquo;s the only topic of conversation from beginning to end&amp;hellip;
Why? There are a host of technically exciting features - some have a basic understanding of what those are and simply want to know more.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/04/Azure-AD.jpg"
         alt="The Azure Active Directory Logo"/>
</figure>

<p>I have a lot of meetings where identity (the Azure AD variety&hellip;! :)) is a central theme. These usually start out as broader conversations on Office 365 or Cloud Security in general, but more and more frequently Azure AD is front and centre. Increasingly it&rsquo;s the <em>only</em> topic of conversation from beginning to end&hellip;</p>
<p><em>Why?</em> There are a host of technically exciting features - some have a basic understanding of what those are and simply want to know more. More often than not though, there are those lightbulb moments during conversation where the significance and value that Azure AD can bring becomes apparent.</p>
<p>So, where do you start with Azure AD? Why <em>should</em> you be looking at it as more than just the &ldquo;authentication back end&rdquo; to Office 365? I thought I&rsquo;d take a moment to highlight a handful of the things I think are key to it&rsquo;s success right now and which are worthy of consideration for those who want to understand how it can be used more extensively today (<em>note: some of these features assume Azure AD Premium licensing</em>)&hellip;</p>
<h2 id="1-authenticating-users-in-the-cloud">1. Authenticating Users in the Cloud</h2>
<p>This is a key factor in the ability to drive maximum value from all that Azure AD can offer, and represents a significant shift in thinking when compared to best practices of just a few years ago. Many IT Professionals assume (with good justification in a lot of cases) that Active Directory should be king in its role as &ldquo;gatekeeper&rdquo; of corporate resources - even those homed in the Cloud. This has driven the design of hybrid identity solutions that incorporate technologies like ADFS or Pass-Through Authentication (PTA) in tandem with Azure AD Connect. Recent improvements to the capabilities of Azure AD, the significant security benefits that come from authenticating directly in the Cloud, and the increased desire to reduce the dependency on on-premises infrastructure have all played a part in changing this view in the last year or so though - to the extent where you can be hard pushed to justify any solution now that delegates authentication (and as a result a dependency) to the local AD.</p>
<p>Microsoft have published some excellent guidance on how to choose the correct authentication model for your organisation, together with some of the rationale behind the change in guidance and best practices. This can be found at <a href="https://aka.ms/auth-options">aka.ms/auth-options</a>, and includes the decision tree below which covers the available options for handling authentication:</p>
<figure class="center"><img src="/img/2019/04/Authentication-Options.png"
         alt="Microsoft&#39;s recommended decision flow for determining which AAD authentication option to use"/>
</figure>

<p>Without wanting to spoil the surprise (and in case it isn&rsquo;t already evident!), there are very few <em>standard</em> scenarios where it doesn&rsquo;t make sense to do away with ADFS / PTA in favour of Password Hash Synchronisation (PHS) and Seamless Single Sign-On (SSSO). This enables the adoption of a whole range of advanced security tools and controls; Identity Protection, native Conditional Access, the ability to take advantage of the significant Threat Intelligence Microsoft has access to through it&rsquo;s processing of millions of authentication transactions each day etc&hellip; It also reduces your risk profile - removing any dependency on your on-premises Active Directory for authentication altogether. Win win 🙂</p>
<h2 id="2-integrating-applications">2. Integrating Applications</h2>
<p>Azure AD has been assumed by some as being &ldquo;AD in the Cloud for Office 365&rdquo;. Whilst there are a host of things wrong with that statement, the sentiment also does a huge disservice to the ability of Azure AD to become the primary authentication provider for your organisation; covering a huge array of applications ranging from third-party Software as a Service applications like SAP and Salesforce, to published (on-premises) line of business applications and other Microsoft Cloud services.</p>
<p>The real advantage of embracing Azure AD in this way is the ability to centralise authentication - aiding the administrative overhead of dealing with starters, leavers, and general access management - and also to further secure SaaS (and other) applications through some of the advanced security controls I mentioned above, such as Conditional Access. All of this happens in a way which is friendly to the user - centralising the applications available to them using the &ldquo;My Apps&rdquo; portal, and taking advantage of Single Sign-On capabilities built into Azure AD to minimise the need to authenticate against each individual application.</p>
<p>From a governance perspective, integrating applications with Azure AD provides much needed visibility and control over third party services that may be in use - reducing the likelihood and impact of &ldquo;shadow IT&rdquo;, whilst simplifying the user experience where services are fully integrated through automatic user provisioning and SSO.</p>
<h2 id="3-using-privileged-identity-management-pim">3. Using Privileged Identity Management (PIM)</h2>
<p>Privileged Identity Management (PIM) is one of the hidden gems within Azure AD - arguably &ldquo;hidden&rdquo; due to its inclusion in only the P2 version of Azure AD Premium, but a fantastic security addition to any organisation serious about adopting the principle of least-privilege.</p>
<p>The premise of PIM is that access to (and exposure of) high privilege accounts should be minimised wherever possible. In practice many organisations aim to do this by leveraging dedicated administration accounts with high levels of associated security, but the fact remains that these accounts are viable targets for as long as they hold administrative rights, and also introduce internal risk through misuse (deliberate or accidental).</p>
<p>PIM mitigates these risks by changing the model of applying administrative permissions from one of <em>assignment</em>, to <em>eligibility</em>. In place of high numbers of permanent administrators, users can be made eligible for administrative roles - requesting and receiving access on a &ldquo;just in time&rdquo; basis as is needed, and subject to automatic revocation after a defined period of time.</p>
<figure class="center"><img src="/img/2019/04/PIM-Eligible-Roles.png"
         alt="A portal view showing the option to elevate permissions using PIM"/>
</figure>

<p>The elevation process is user initiated from the Azure portal and can be subject to administrator approval - ensuring that rights are assigned only when needed, with justification, and only for as long as is needed. Activities are recorded and can be reviewed using the Audit History view at any time. PIM is a hugely powerful capability and justifies the cost of P2 licensing in its own right (in my opinion 🙂)</p>
<h2 id="4-configuring-azure-password-protection">4. Configuring Azure Password Protection</h2>
<p>I dedicated a <a href="https://kelvinpapp.com/azure-password-protection-overview/">previous entry</a> to an overview of the Azure Password Protection (APP) feature of Azure AD. You can read about it in some detail in that post if you wish, but for the uninitiated APP extends traditional password complexity requirements (in both Azure AD and Hybrid scenarios) by allowing you to determine specific words or phrases that should be banned from use in user passwords. This customised list is supplemented with the &ldquo;global banned password list&rdquo; - a managed database of frequently used and compromised passwords based on behaviour and attack detections across the Microsoft Cloud.</p>
<p>APP requires Azure AD P1 or P2 licensing in order that you can benefit fully from its capabilities, but is a fantastic way of improving the security baseline of your organisation through policing of one of the few things you can&rsquo;t easily &ldquo;control&rdquo; as administrators. I&rsquo;d always advocate the use of other controls in the authentication process to bolster security - MFA, Conditional Access etc. - but the fact remains that right now passwords are an intrinsic part of the user experience and will be for at least the short-medium term future.</p>
<h2 id="5-using-azure-ad-b2b-collaboration">5. Using Azure AD B2B Collaboration</h2>
<p>Azure AD B2B (business-to-business) is another one of those golden, somewhat hidden (or at least not widely talked about) collaboration features, allowing you to share applications bound to your own Azure AD - such as those referred to in the &ldquo;Integrating Applications&rdquo; section above - with users homed in other organisations.</p>
<p>We&rsquo;ve gotten used - over the years - to assuming that in order to provide access to resources in environments we manage, we need to create and manage local identities for those guest users. This is problematic on a couple of fronts . For one, managing users external to the organisation is fraught with challenges around licensing, security, governance, and compliance. It also leads to a poor user experience for those assigned access; one service = one credential, another service = another credential&hellip; far from elegant. Imagine a world where your one corporate identity (ideally your Azure AD account) was your token into every corporate application you needed to do your job or access the data you need. This is essentially what B2B enables, albeit there&rsquo;s flexibility that doesn&rsquo;t mandate the invited account to be Azure AD aligned.</p>
<p>Is it perfect? No. The process associated with onboarding and managing guest accounts at scale (as is sometimes needed) is clunky, but it is a significant step forward from the days of creating remote user accounts in your own domain. This limitation in particular is due an overhaul at some point this year (hopefully!) through the introduction of &ldquo;Tenant Friending&rdquo; - something I&rsquo;ll post more about when details allow.</p>
<hr>
<p>So there you have it&hellip; 5 quick(ish!) things you can consider using today to dramatically enhance the service you provide to end users, improve your security, and get you well on the way to adopting Azure AD in a way which you possibly didn&rsquo;t imagine you could (or would). The future is bright when it comes to Azure AD with significant investment being poured into the platform and new - quite amazing - features being introduced month on month. Getting under the bonnet of what&rsquo;s possible when it comes to Cloud Identity is worthwhile investment - I have absolutely no doubt there will be more and more emphasis placed on Azure AD as we step through 2019 and beyond.</p>
]]></content>
        </item>
        
        <item>
            <title>Azure Password Protection Overview</title>
            <link>https://www.kelvinpapp.com/azure-password-protection-overview/</link>
            <pubDate>Tue, 09 Apr 2019 20:47:50 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/azure-password-protection-overview/</guid>
            <description>Last week saw Microsoft announce General Availability for Azure Password Protection (APP) following a fairly lengthy spell in preview. This is an exciting feature release; bringing an end to the days of bespoke password filter DLL’s and adding much needed security, simplicity, and flexibility to password standards - backed by the power and intelligence of the Cloud.
What is it, and why should you use it? Azure Password Protection extends the regular password complexity configuration of Azure AD, enhancing protection through the policing of user passwords and enforcement against a mix of automated and custom policies.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/04/Padlock-Security.jpg"
         alt="An image showing lots of padlocks on a metal bridge"/>
</figure>

<p>Last week saw Microsoft <a href="https://techcommunity.microsoft.com/t5/Azure-Active-Directory-Identity/Azure-AD-Password-Protection-is-now-generally-available/ba-p/377487">announce General Availability</a> for Azure Password Protection (APP) following a fairly lengthy spell in preview. This is an exciting feature release; bringing an end to the days of bespoke password filter DLL’s and adding much needed security, simplicity, and flexibility to password standards - backed by the power and intelligence of the Cloud.</p>
<h2 id="what-is-it-and-why-should-you-use-it">What is it, and why should you use it?</h2>
<p>Azure Password Protection extends the regular password complexity configuration of Azure AD, enhancing protection through the policing of user passwords and enforcement against a mix of automated and custom policies. It supports two main functions:</p>
<p><strong>Restricting the use of common, or poor passwords</strong> through validation against an administrator defined custom password list and the &ldquo;global banned password list&rdquo;. This latter &ldquo;thing&rdquo; is a dynamically generated and maintained database - managed by the Azure AD Identity Protection team - comprising commonly used and frequently compromised or breached passwords based on behaviour and attack detections across the Microsoft Cloud.</p>
<p><strong>Extending the protection afforded by Azure AD to on-premises environments,</strong> enabling customers to benefit from the security advantages introduced via APP in traditional Domain Services environments. This is achieved through the deployment of a combination of Domain Controller Agents (whose role it is to process password validation requests), and the Password Protection Proxy service (which supports communication with Azure AD - relaying the APP policy to each DC Agent when requested) - depicted (ever so helpfully) in the below diagram from the Microsoft APP documentation:</p>
<figure class="center"><img src="/img/2019/04/Password-Protection-On-Premises.png"
         alt="An overview of Password Protection on-premises integration"/>
</figure>

<h2 id="how-does-it-work">How does it work?</h2>
<p>The approach taken by Microsoft in enforcing banned passwords is a really interesting one&hellip; You might expect the service to apply a fairly crude <em>yes / no</em> approach when assessing user selected passwords, but there&rsquo;s actually a lot more that goes into the evaluation process than you’d imagine. The steps are explained in detail in the <a href="https://docs.microsoft.com/en-us/azure/active-directory/authentication/concept-password-ban-bad#how-are-passwords-evaluated">Microsoft documentation</a>, but by way of an overview, consist of the following:</p>
<p><strong>Normalisation:</strong> This stage focusses on performing common character substitution (0&gt;o, $&gt;s, 3&gt;e etc.) and removing upper case characters to support the matching of user selected passwords against entries in the global or custom blocklists. This (in Microsoft&rsquo;s words) “<em>allows a small set of banned passwords to be applied to a much larger set of potentially weak passwords</em>”.</p>
<p><strong>Fuzzy Matching:</strong> This is applied to the normalised password, ensuring that any proposed password is removed by more than one &ldquo;edit degree&rdquo; from a banned password. This step also verifies that the users first and last names, along with the Azure AD tenant name are not present in the proposed password (post normialisation and fuzzy matching).</p>
<p><strong>Score Calculation:</strong> This final step applies a score to the output of the first two steps. A single point is assigned to each banned password reference, along with a point for each additional unique character. If the resulting score exceeds 5 points (and aligns with any other policy requirements - e.g. password length), the password is accepted. If not, the password is rejected on the basis that it fails to match the required level of complexity.</p>
<h2 id="deployment--next-steps">Deployment &amp; Next Steps</h2>
<p>First things first, you should be aware that to benefit fully from APP you need to have Azure AD Premium licenses. For Cloud-only Azure AD accounts (i.e. those provisioned directly as opposed to those synchronised via AD Connect) you can evaluate the use of passwords from Microsoft&rsquo;s global list for free, but that aside you&rsquo;ll need an Azure AD P1 or P2 licenses.</p>
<p>Assuming you&rsquo;re correctly licensed, all of the settings you&rsquo;ll need are located in the Azure AD portal under Authentication Methods &gt; Password Protection. From here you can configure Smart Lockout thresholds, your custom banned password list, and integration with on-premises Domain Controllers if desired. Whilst I&rsquo;m not covering the steps associated with the latter element in this post, those that are should refer to the to the <a href="https://docs.microsoft.com/en-us/azure/active-directory/authentication/howto-password-ban-bad-on-premises-deploy">On-Premises Integration Deployment Guide</a> - paying particular attention to the pre-requisites. I&rsquo;d also suggest reviewing the steps for <a href="https://docs.microsoft.com/en-us/azure/active-directory/authentication/howto-password-ban-bad-on-premises-deploy#high-availability">High Availability</a>. Absolute uptime of the proxy servers isn&rsquo;t necessary, but an understanding of the interaction between DC Agents and the APP service is likely to serve you well&hellip;</p>
<figure class="center"><img src="/img/2019/04/Azure-AD-Password-Protection-Console.jpg"
         alt="A screenshot of the Azure AD Password Protection section of the portal"/>
</figure>

<p>&hellip;it really is as simple as those few settings 🙂</p>
<p>For me, this is one of those “no brainer” features that all organisations should consider where licensing permits. There will be many who want to consider integrating with on-premises domains - leveraging the additional control that this provides in helping to secure the use of poor passwords, but equally there’s huge value in being able to benefit from the intelligence that Microsoft bring to the table via the Identity Protection team.</p>
<p>Take a look, and feel free to respond with any comments or experiences you have. I’ll likely go into more depth on deployment and on-premises integration in a future post. In the meantime, happy playing 🙂</p>
]]></content>
        </item>
        
        <item>
            <title>FortiClient &amp; Certificates</title>
            <link>https://www.kelvinpapp.com/forticlient-certificates/</link>
            <pubDate>Sat, 06 Apr 2019 19:03:04 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/forticlient-certificates/</guid>
            <description>This is a slightly left-field post on the back of some testing / tinkering I&amp;rsquo;ve been involved in over the last week or so. It&amp;rsquo;s not quite the post I had planned, but since I&amp;rsquo;ve not quite achieved what I set out to (yet, more on that in a future post) and this was a useful by-product along the way, it seemed silly to waste the opportunity of writing up some findings that will hopefully prove useful to someone down the line&amp;hellip;</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/04/FortiClient-Certificates.jpg"
         alt="A screenshot showing the &#39;Require Client Certificate&#39; option enabled in the FortiGate GUI"/>
</figure>

<p>This is a slightly left-field post on the back of some testing / tinkering I&rsquo;ve been involved in over the last week or so. It&rsquo;s not quite the post I had planned, but since I&rsquo;ve not <em>quite</em> achieved what I set out to (yet, more on that in a future post) and this was a useful by-product along the way, it seemed silly to waste the opportunity of writing up some findings that will hopefully prove useful to someone down the line&hellip;</p>
<p>Fortinet&rsquo;s FortiClient based SSL-VPN implementation is one of the best and simplest out there and has been a fairly staple feature on pretty much every FortiGate I&rsquo;ve deployed since 2009 or so. One thing I haven&rsquo;t ever explored though is the use of certificates as part of the authentication process - deferring instead to the more traditional approach of using RADIUS for Active Directory integration, or third-party MFA support where there&rsquo;s more than a passing requirement.</p>
<p>Client VPN&rsquo;s seems to have had a bit of a resurgence for a number of the organisations I work with in recent months, but given our Azure focus and the limitations associated with native Microsoft options in the cloud (lack of RRAS support, administrative complexity of P2S VPN&rsquo;s etc.) we&rsquo;ve found ourselves exploring and building solutions based on more traditional appliance based VPN solutions in Azure - Fortinet, Cisco, Palo Alto etc. A question I&rsquo;ve been exploring is &ldquo;how can we make these better / slicker / more secure?&rdquo;.</p>
<p>The ideal world for me is the integration of <a href="https://docs.microsoft.com/en-us/windows-server/remote/remote-access/vpn/always-on-vpn/always-on-vpn-technology-overview">Microsoft Always On VPN</a> with a supported third-party appliance in Azure given the (theoretical) ability to do just that. One of the key advantages of Always On is it&rsquo;s support for non-Microsoft IKEv2 / SSTP / L2TP compatible VPN appliances - which can (again, in theory) mitigate some of the challenges associated with the aforementioned Azure limitations. The reality, as I&rsquo;ve experienced this week during testing, is that this isn&rsquo;t as straightforward as you would hope when it comes to Azure. Is it possible? I absolutely hope so. How do you do it? Well&hellip; that&rsquo;s the &ldquo;future post&rdquo; I&rsquo;ve alluded to above - all being well 🙂</p>
<p>Back to certs and SSL-VPN in FortiClient&hellip; the inclusion of certificates in the user authentication process brings with it some advantages:</p>
<p><strong>MFA:</strong> It introduces a level of multi-factor authentication that&rsquo;s transparent to the user. This happens via background presentation of a user certificate containing a subject name that&rsquo;s aligned to the authenticating user.</p>
<p><strong>Device Level Security:</strong> Through the requirement for a user certificate to be present on the device, access is limited to trusted devices that fall within the governance and scope of corporate / enterprise IT.</p>
<p><strong>Revocation:</strong> Linked with the above, certificates can be revoked / reissued at any time, ensuring the integrity of all connections to the corporate network.</p>
<h2 id="configuring-certificate-authentication-for-forticlient">Configuring Certificate Authentication for FortiClient</h2>
<p>The process for enabling Certificate Authentication for FortiClient is actually relatively straightforward and involves just a few minor tweaks to the firewall configuration and regular SSL-VPN profile. Of course this assumes that you have a working PKI infrastructure in place, with the ability to issue user certificates to the devices of users who need to connect.</p>
<figure class="center"><img src="/img/2019/04/FortiGate-Certificate-Authentication.png"/>
</figure>

<p><strong>Step 1:</strong> Download the root certificate of the CA that will be responsible for issuing client certificates (along with any intermediary / issuing CA&rsquo;s from your Certificate Authority) and upload as an External CA Certificate within the System &gt; Certificates section of your FortiGate.</p>
<figure class="center"><img src="/img/2019/04/CA-Certificate-Upload.png"/>
</figure>

<p><strong>Step 2:</strong> Toggle the &ldquo;Require Client Certificate&rdquo; to &ldquo;on&rdquo; within VPN &gt; SSL-VPN Settings. <em>Note that if you have working clients they will be unable to access until they are defined as PKI users once this is enabled.</em></p>
<figure class="center"><img src="/img/2019/04/Require-Client-Certificate.png"/>
</figure>

<p><strong>Step 3:</strong> Add users within User &amp; Device &gt; PKI, populating the &ldquo;subject&rdquo; field with the subject name from the certificate they will be using for authentication, and setting the &ldquo;CA&rdquo; field to reflect the External CA Certificate uploaded within Step 1. If the &ldquo;PKI&rdquo; section is not visible, create your first user via the CLI using the following commands as a template. Once the first user has been defined, the relevant views within FortiOS will be available:</p>
<pre tabindex="0"><code>config user peer
  edit kelvin-ca
    set ca CA*Cert*1
    set subject kelvin
  end
</code></pre><p>Once the user has been added, toggle the &ldquo;Two-factor authentication&rdquo; setting to on and specify the password you want to assign to the user for SSL-VPN access.</p>
<p><strong>Step 4:</strong> Within FortiClient, modify your VPN connection to include presentation of the relevant Client Certificate in place of &ldquo;none&rdquo;&hellip; and you&rsquo;re done!</p>
<figure class="center"><img src="/img/2019/04/Edit-VPN-Connection.png"/>
</figure>

<p>Certificate Authentication may not be for everyone, and it&rsquo;s fair to say that there are other mechanisms for limiting device access and enhancing the security of VPN connections, but I was pleasantly surprised at just how straightforward the configuration of certificate auth was for FortiGate SSL-VPN.</p>
<p>Again, it&rsquo;s not the blog I&rsquo;d intended to post&hellip; but I hope this proves useful for some 🙂 Keep your eyes peeled for something soon that will hopefully blow this out of the water as far as simplicity, security, and ease of remote access is concerned&hellip; watch this space!</p>
]]></content>
        </item>
        
        <item>
            <title>Azure Sentinel: SIEM for all?</title>
            <link>https://www.kelvinpapp.com/azure-sentinel-siem-for-all/</link>
            <pubDate>Wed, 27 Mar 2019 21:34:46 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/azure-sentinel-siem-for-all/</guid>
            <description>Every now and again I post something on Twitter that seems to resonate and prompt more of a reaction than I expect&amp;hellip; a recent example - and ironically the reason that I decided to bite the bullet with this blog - was the tweet below regarding the (now not so) new release of Azure Sentinel; Microsoft&amp;rsquo;s answer to SIEM for the modern Enterprise:
Spent some time configuring @Azure #Sentinel today.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/03/Sentinel-Overview.jpg"
         alt="A screenshot of the Azure Sentinel dashboard"/>
</figure>

<p>Every now and again I post something on Twitter that seems to resonate and prompt more of a reaction than I expect&hellip; a recent example - and ironically the reason that I decided to bite the bullet with this blog - was the tweet below regarding the (now not so) new release of Azure Sentinel; Microsoft&rsquo;s answer to SIEM for the modern Enterprise:</p>
<div align="center"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">Spent some time configuring <a href="https://twitter.com/Azure?ref_src=twsrc%5Etfw">@Azure</a> <a href="https://twitter.com/hashtag/Sentinel?src=hash&amp;ref_src=twsrc%5Etfw">#Sentinel</a> today... Previous experience of <a href="https://twitter.com/hashtag/SIEM?src=hash&amp;ref_src=twsrc%5Etfw">#SIEM</a> = painful deployment, immediate log fatigue, and questionable &quot;useful&quot; insights. <a href="https://twitter.com/hashtag/Sentinel?src=hash&amp;ref_src=twsrc%5Etfw">#Sentinel</a> was running in less than an hour and is adding immediate  value. What a tool! 😍 <a href="https://twitter.com/Microsoft?ref_src=twsrc%5Etfw">@Microsoft</a> <a href="https://twitter.com/hashtag/Security?src=hash&amp;ref_src=twsrc%5Etfw">#Security</a></p>&mdash; Kelvin Papp (@kelvinpapp) <a href="https://twitter.com/kelvinpapp/status/1101903484260102145?ref_src=twsrc%5Etfw">March 2, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div>
<p>Why does this excite me so much? I&rsquo;ve spent a good chunk of my career in security-centric roles for one reason or another. The first &ldquo;proper&rdquo; IT role I had was with an Aerospace &amp; Defence organisation who (naturally) placed a significant emphasis on security. My progress at that company culminated in a role as a security lead for a major integration project, which in turn played a significant part in allowing me to develop a range of skills that have held me in good stead for the last 10+ years. More recently I held a position as a Security Product Manager for a large MSP, and right now an element of my role involves ensuring we remain technically compliant with our obligations under Cyber Essentials and ISO 27001&hellip;</p>
<p>In short, I seem to gravitate towards the murky, yet fascinating world of IT security and announcements like this get me far more excited than perhaps they should do&hellip;!</p>
<h2 id="the-problem">The Problem&hellip;</h2>
<p>The problem with &ldquo;IT security&rdquo;, as I&rsquo;ve come to learn over the years, is that it&rsquo;s shrouded in so much complexity and jargon that it&rsquo;s seen as a burden to most organisations - particularly those that lack the in-house resource to be able to give it the focus it needs. Most understand the concept and need for a firewall, for decent antivirus, perhaps even going as far as adopting MDM / MAM solutions or cloud filtering services, but few proactively monitor or manage the activity in their environment to the extent where they can detect not just clear-cut attacks or violations, but suspicious or preparatory activity by &ldquo;bad actors&rdquo;. The calm before the storm!</p>
<p>Doing security &ldquo;properly&rdquo; is typically the domain of the enterprise - specialist tool-sets and dedicated, expensive expertise to monitor and decipher all of the underlying (often hidden) &ldquo;noise&rdquo; that provides the real view of what&rsquo;s going on. One of the biggest contributions to this analysis usually comes in the form of SIEM (<a href="https://en.wikipedia.org/wiki/Security_information_and_event_management">Security Information and Event Management</a>) software which collates and analyses signals from across the infrastructure and network, providing insights based on predefined or automated logic. The biggest challenge with these tools is that by nature they surface noise. Lots of it.</p>
<h2 id="the-reality">The Reality&hellip;</h2>
<p>In spite of best intentions and significant progress in recent years, false-positives are part of the daily life of those that work in SecOps. Minimising these requires customisation and tuning, training systems to understand &ldquo;normal&rdquo;, and a constant battle to ensure legitimate concerns aren&rsquo;t buried. I&rsquo;ve had the &ldquo;joy&rdquo; (yes, that&rsquo;s serious <em>and</em> sarcastic!) of working with some of the leading tools in this space and not one has &ldquo;just worked&rdquo; in the way that many vendors tell you they will. The net result is time and effort - at great cost - for solutions that often end up being a significant drain on IT departments, or worse still, ignored until it&rsquo;s too late.</p>
<p>This shouldn&rsquo;t really be a surprise. Security <em>is</em> complex, and as a result <em>is</em> costly. But should it be? Should smaller organisations find themselves exposed to risks that could be avoided because they don&rsquo;t have deep pockets? Should organisations be forced into hiring security experts at great cost? (sorry, security friends!). Possibly not for much longer.</p>
<h2 id="a-solution">A Solution?</h2>
<p>Enter Azure Sentinel. I saw the announcement on launch day and I have to be honest - I wasn&rsquo;t overly hopeful. Microsoft have made significant strides into the Security space in the last couple of years, but a proper contender for Enterprise SIEM? I&rsquo;d heard rumours of a product in the works and expected something that would better accommodate Azure workloads, integrate with Platform Services, and potentially represent a step into the &ldquo;as a Service&rdquo; world . I didn&rsquo;t expect it to be all of those things and then some. I especially didn&rsquo;t expect it to trigger a change in my thinking towards SIEM through it&rsquo;s addressing of many of the challenges that I associate with products of old (as above).</p>
<p>So what&rsquo;s different? For one, it deploys in minutes (no exaggeration). I was able to stand up an Azure Sentinel instance, integrate it with half a dozen or so (Microsoft) cloud services, and started to see data flowing into my workspace within about 15 minutes. It also takes advantage of the platform it sits on, leveraging the significant scale of Azure to assist with event correlation, and Machine Learning to identify suspicious patterns or threats in the underlying data. You can augment this with your own alert rules (or those available in the <a href="https://github.com/Azure/Azure-Sentinel/">Sentinel GitHub repository</a>), and will be able to automate response actions within the alert definitions - triggering playbooks based on Logic Apps that can notify, or remediate threats based on predefined flows of actions.</p>
<figure class="center"><img src="/img/2019/03/Sentinel-Playbook.jpg"/>
</figure>

<p>I&rsquo;ve been playing with Azure Sentinel for the last 3 weeks or so, getting to grips with its capabilities and it&rsquo;s limitations. Is it perfect? No. In part this is down to limitations associated with the preview (some of the headline functionality such as automated playbook execution, and visual context maps aren&rsquo;t yet enabled). Is it good enough to rock the boats of some of the more established vendors though? Absolutely. What&rsquo;s exciting for me is the potential for (all) organisations to be able to benefit from some of the insights that have only been available to the select few. This is about &ldquo;proper&rdquo; security for the masses - a very real step forward that demonstrates the power that the Cloud can bring to organisations of all shapes and sizes.</p>
<h2 id="in-summary">In Summary</h2>
<p>There&rsquo;s a whole lot more I could cover&hellip; not least some more technical content showing the configuration and administration experience associated with Sentinel. I intend to cover both in the coming weeks, but needless to say, if you haven&rsquo;t taken a look at Sentinel just yet you really should. I&rsquo;m certainly excited to share more on it with you in future posts!</p>
]]></content>
        </item>
        
        <item>
            <title>New Blog. First Post.</title>
            <link>https://www.kelvinpapp.com/new-blog-first-post/</link>
            <pubDate>Sat, 23 Mar 2019 15:22:48 +0000</pubDate>
            
            <guid>https://www.kelvinpapp.com/new-blog-first-post/</guid>
            <description>I&amp;rsquo;m not a fan of these types of posts&amp;hellip; &amp;ldquo;Hi, this is me&amp;rdquo; seems super self-indulgent, but equally it doesn&amp;rsquo;t feel right to launch straight into content without setting context or expectation of what it is that I, and this blog, are about. So, &amp;ldquo;Hi, this is me&amp;rdquo;, I guess&amp;hellip;
I&amp;rsquo;m a little late to the party. I could have, and should have started blogging when it first crossed my mind 5 or 6 years ago.</description>
            <content type="html"><![CDATA[<figure class="center"><img src="/img/2019/03/Hello.gif"
         alt="An image of a hand holding a sticker saying Hello!"/>
</figure>

<p>I&rsquo;m not a fan of these types of posts&hellip; &ldquo;Hi, this is me&rdquo; seems super self-indulgent, but equally it doesn&rsquo;t feel right to launch straight into content without setting context or expectation of what it is that I, and this blog, are about. So, &ldquo;Hi, this is me&rdquo;, I guess&hellip;</p>
<p>I&rsquo;m a little late to the party. I could have, and should have started blogging when it first crossed my mind 5 or 6 years ago. As I suspect is the case with most though, the thought and motivation of getting going with it passed, and here we are several years down the line with that recurring &ldquo;should I do it&rdquo; thought coming back to mind. So here goes.</p>
<p>The ambition is simple. I want to document the thoughts and insights that I have as I go about my work. I&rsquo;m fortunate to be in a position where I&rsquo;m exposed to all sorts of new and exciting technology, including the opportunity to gain early insight and perspective on many of the developments taking place in and around the Microsoft Cloud. It&rsquo;s a hugely exciting time, and a tipping point in our industry in my opinion - as feeling and perception on where, how, and why &ldquo;the Cloud&rdquo; makes sense starts to take a hold.</p>
<p>My background is similar to many in this space - years of experience (I can say that now I&rsquo;ve been around for a while!) working with traditional on-premises infrastructure and systems, some &ldquo;dabbling&rdquo; with Cloud as it began to mature, to a position now where I work almost exclusively on Cloud based solutions for organisations of all shapes and sizes. I work as a Solutions Architect for a leading Microsoft partner; consulting on, designing, and positioning solutions that look to utilise (mainly Microsoft) based infrastructure and services. I&rsquo;m not interested in being a part of the latest bandwagon, I want to be seen as someone who influences and effects positive change through awareness and deployment of some of the truly staggering capabilities that exist today.</p>
<p>I have a particular interest in Security. That will be evident throughout my posts I&rsquo;m sure, but that&rsquo;s not to say it will be a sole focus by any stretch of the imagination&hellip; Expect to see all manner of things featured and discussed from the user and endpoint, to back end infrastructure and services, and everything in between. My world revolves around Modern Workplace and Azure at the moment; so expect a reasonable portion of Office 365, Intune, and Azure AD, sprinkled with some IaaS and PaaS along the way!</p>
<p>I have a couple of blog posts in the making which I&rsquo;ll be kicking off with soon&hellip; that aside I look forward to seeing what comes of this. No promises on regularity, but hopefully this proves to be as useful a resource to others as some of the blogs I follow have been to me.</p>
<p>Happy reading, by all means connect with me on <a href="https://twitter.com/kelvinpapp">Twitter</a> or <a href="https://www.linkedin.com/in/kelvinpapp/">LinkedIn</a> if you want to get in touch! That aside, I hope you enjoy this the blog!</p>
]]></content>
        </item>
        
    </channel>
</rss>
