<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Pauwel Rummens, Author at Cloudar</title>
	<atom:link href="https://cloudar.be/author/pauwelr/feed/" rel="self" type="application/rss+xml" />
	<link>https://cloudar.be/author/pauwelr/</link>
	<description>100% Focus On AWS // 100% Customer Obsession</description>
	<lastBuildDate>Fri, 06 Jul 2018 14:01:01 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Aws workspaces with multi-factor authentication</title>
		<link>https://cloudar.be/awsblog/aws-workspaces-with-multi-factor-authentication/</link>
					<comments>https://cloudar.be/awsblog/aws-workspaces-with-multi-factor-authentication/#comments</comments>
		
		<dc:creator><![CDATA[Pauwel Rummens]]></dc:creator>
		<pubDate>Fri, 06 Jul 2018 14:01:01 +0000</pubDate>
				<category><![CDATA[AWS Blog]]></category>
		<category><![CDATA[ad connector]]></category>
		<category><![CDATA[directory service]]></category>
		<category><![CDATA[mfa]]></category>
		<category><![CDATA[multi factor authentication]]></category>
		<category><![CDATA[multiotp]]></category>
		<category><![CDATA[radius]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[workspaces]]></category>
		<guid isPermaLink="false">https://cloudar.be/?p=6554</guid>

					<description><![CDATA[<p>If you want to have an extra layer of security on your workspaces environment, AWS allows you to configure multi factor authentication. There are however some prerequisites for this. This post will guide you through the steps needed to setup multi-factor authentication for your workspaces. &#160; We will be using the opensource version of Multiotp [&#8230;]</p>
<p>The post <a href="https://cloudar.be/awsblog/aws-workspaces-with-multi-factor-authentication/">Aws workspaces with multi-factor authentication</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>If you want to have an extra layer of security on your workspaces environment, AWS allows you to configure multi factor authentication.</p>
<p>There are however some prerequisites for this.</p>
<p>This post will guide you through the steps needed to setup multi-factor authentication for your workspaces.</p>
<p>&nbsp;</p>
<p>We will be using the opensource version of Multiotp for windows. ( <a href="https://github.com/multiOTP/multiotp/wiki">https://github.com/multiOTP/multiotp/wiki</a> )</p>
<p>This is a nice package which included, nginx as a webserver, the php based multiotp webservice, and a radius server based on freeradius.</p>
<p>The time of writing this article version 5.1.1.2 was release so this post is based on this version.</p>
<p>&nbsp;</p>
<p>For the purpose of this blog post i will be using a standard windows 2012R2 server promoted to a domain controller.</p>
<p>My test domain is called corp.example.com.</p>
<p>On this domain controller i will install Multiotp webservice and the Multiotp radius service through a powershell script.</p>
<p>&nbsp;</p>
<h1>Reference architecture</h1>
<p>&nbsp;</p>
<p><img fetchpriority="high" decoding="async" class="alignnone wp-image-6606" src="https://cloudar.be/wp-content/uploads/2018/07/opt-workspaces-achitecture.png" alt="" width="990" height="677" srcset="https://cloudar.be/wp-content/uploads/2018/07/opt-workspaces-achitecture.png 1828w, https://cloudar.be/wp-content/uploads/2018/07/opt-workspaces-achitecture-768x526.png 768w, https://cloudar.be/wp-content/uploads/2018/07/opt-workspaces-achitecture-1536x1051.png 1536w, https://cloudar.be/wp-content/uploads/2018/07/opt-workspaces-achitecture-1052x720.png 1052w" sizes="(max-width: 990px) 100vw, 990px" /></p>
<p>The authentication flow &#8216;high&#8221; level will be:</p>
<ol>
<li>Workspaces client will connect to a workspaces endpoint of amazon registered to his aws account.</li>
<li>User will authenticate with the ad connector</li>
<li>The ad connector will proxy all the user authentication details to active directory and multiotp radius</li>
<li>User is authenticated and allowed to login to his workspaces</li>
</ol>
<h1>Prerequisites</h1>
<p>Aws only has the multi factor authentication option for the directory service &#8220;AD Connector&#8221;.</p>
<p>This also implies that you have your own active directory domain to connect the AD connector to.</p>
<p>So the components you already need in place are:</p>
<ol>
<li>aws account</li>
<li>vpc with at least one subnet</li>
<li>a working domain controller ( in the extra&#8217;s below i have a cloudformation template that deploys a new domain controller in an new domain for testing purposes)</li>
<li>Powershell script included in this blog post -&gt; <a href="https://cloudar.be/wp-content/uploads/2018/07/multiotp-setup.zip">multiotp-setup</a></li>
</ol>
<p>&nbsp;</p>
<h1>Install and configure Multiotp</h1>
<p><em>For the purpose of this blog the script can only function on a domain controller.</em></p>
<p><em>(If you want to install it to a separate server, this is possible, but your need to change the $server_name in the script&#8230;)</em></p>
<p>&nbsp;</p>
<p>Copy the powershell script from this blog post to a folder on your domain controller.</p>
<p>Download and install powershell version 5.1 (https://www.microsoft.com/en-us/download/details.aspx?id=54616), else the included script will not work.</p>
<p>In the same folder of the powershell script download version 5.1.1.2 of the multiotp zip file. (https://download.multiotp.net/5.x/multiotp_5.1.1.2.zip)</p>
<p><img decoding="async" class="alignnone size-full wp-image-6578" src="https://cloudar.be/wp-content/uploads/2018/07/otp-needed-files.png" alt="" width="256" height="117" /></p>
<p>First we will need to create a multiotp service user in active directory, this user is used by multiotp to authenticate and sync the users from ad.</p>
<p>Just a normal domain users without any special rights or groups is fine!</p>
<p>I called it &#8220;otp-service&#8221;.</p>
<p><img decoding="async" class="alignnone size-full wp-image-6560" src="https://cloudar.be/wp-content/uploads/2018/07/otp-service-user.png" alt="" width="512" height="31" /></p>
<p>Next up is to create an active directory group for users that are allowed to authenticate against multiotp.</p>
<p>My group name is &#8220;OTP&#8221;.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-6561" src="https://cloudar.be/wp-content/uploads/2018/07/otp-ad-group.png" alt="" width="602" height="31" /></p>
<p>&nbsp;</p>
<p>Now we can kick off powershell, open up a powershell as Administrator go to the script directory and run it with .\multiotp-setup.ps1</p>
<p>The script will ask you for some input, depending on your own setup fill those in correctly.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6573" src="https://cloudar.be/wp-content/uploads/2018/07/otp-elevated.png" alt="" width="525" height="42" /></p>
<p>A pop-up will then show, here you can select the installation folder of multiotp, in my case this is c:\multiotp.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-6574" src="https://cloudar.be/wp-content/uploads/2018/07/otp-select-folder.png" alt="" width="352" height="425" /></p>
<p>Next input your users base_dn ( ou where all you users live), for this blog i just have everything under users ou.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-6563" src="https://cloudar.be/wp-content/uploads/2018/07/otp-base-dn.png" alt="" width="374" height="160" /></p>
<p>Now enter the dn for the multiotp service user you created earlier, my case otp-service.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-6564" src="https://cloudar.be/wp-content/uploads/2018/07/otp-multiotp-service-account.png" alt="" width="373" height="167" /></p>
<p>Input the multiotp service password.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-6565" src="https://cloudar.be/wp-content/uploads/2018/07/otp-service-password.png" alt="" width="374" height="158" /></p>
<p>Here select the multiotp ad group you created earlier, my case OTP.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-6566" src="https://cloudar.be/wp-content/uploads/2018/07/otp-ad-group-2.png" alt="" width="370" height="155" /></p>
<p>Now input the credentials for the scheduled task.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-6567" src="https://cloudar.be/wp-content/uploads/2018/07/otp-scheduled-task-creds.png" alt="" width="334" height="265" /></p>
<p>The script will now extract the multiotp zip to your preferred installation directory, my case c:\multiotp.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-6568" src="https://cloudar.be/wp-content/uploads/2018/07/otp-extract.png" alt="" width="831" height="63" srcset="https://cloudar.be/wp-content/uploads/2018/07/otp-extract.png 831w, https://cloudar.be/wp-content/uploads/2018/07/otp-extract-768x58.png 768w" sizes="auto, (max-width: 831px) 100vw, 831px" /></p>
<p>Now we will install the multiotp webservice, i just re-used their own installation scripts.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-6569" src="https://cloudar.be/wp-content/uploads/2018/07/otp-webservice-installation.png" alt="" width="847" height="162" srcset="https://cloudar.be/wp-content/uploads/2018/07/otp-webservice-installation.png 847w, https://cloudar.be/wp-content/uploads/2018/07/otp-webservice-installation-768x147.png 768w" sizes="auto, (max-width: 847px) 100vw, 847px" /></p>
<p>When the webservice is installed, a web page will open to https://127.0.0.1:8112/</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-6570" src="https://cloudar.be/wp-content/uploads/2018/07/otp-website.png" alt="" width="1095" height="396" srcset="https://cloudar.be/wp-content/uploads/2018/07/otp-website.png 1095w, https://cloudar.be/wp-content/uploads/2018/07/otp-website-768x278.png 768w" sizes="auto, (max-width: 1095px) 100vw, 1095px" /></p>
<p>Now the script will install the radius service, i just re-used their own installation scripts.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-6571" src="https://cloudar.be/wp-content/uploads/2018/07/otp-radius.png" alt="" width="819" height="334" srcset="https://cloudar.be/wp-content/uploads/2018/07/otp-radius.png 819w, https://cloudar.be/wp-content/uploads/2018/07/otp-radius-768x313.png 768w" sizes="auto, (max-width: 819px) 100vw, 819px" /></p>
<p>When that is done, multiotp will be configured to connect to your domain controller.</p>
<p>If the credentials are correct you will see that multiotp will sync all the users.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-6575" src="https://cloudar.be/wp-content/uploads/2018/07/otp-sync-and-sched-task.png" alt="" width="838" height="542" srcset="https://cloudar.be/wp-content/uploads/2018/07/otp-sync-and-sched-task.png 838w, https://cloudar.be/wp-content/uploads/2018/07/otp-sync-and-sched-task-768x497.png 768w" sizes="auto, (max-width: 838px) 100vw, 838px" /></p>
<p>Also a scheduled task is created to re-sync all users every hour. (if your need it more frequently, modify &#8220;RepetitionInterval (New-TimeSpan -Minutes 60)&#8221; )</p>
<p>&nbsp;</p>
<p>That is the basic configuration that is needed to make it work.</p>
<p>Of course for a production worthy environment, change:</p>
<ol>
<li>The default multiotp admin password</li>
<li>The radius secret to something else then &#8220;multiotpsecret&#8221; (C:\your-install-directory\windows\radius\etc\raddb\clients.conf )</li>
<li>Multiotp backend from flat files to a mysql based database.</li>
<li>!Configure BACKUPS!</li>
</ol>
<p>&nbsp;</p>
<h2>Workspaces users</h2>
<p>Add existing users to the ad group you created earlier, or create some testusers.</p>
<p>In my case i have created testuser1 and testuser2.</p>
<p>&nbsp;</p>
<p>Go to https://127.0.0.1:8112/ and login. Default credentials are admin with password 1234</p>
<p>Find a user and click on &#8220;print&#8221;, a new page will open, here you can find the QRcode for that user to add to his google authenticator (or similar like authy, etc ).</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-6605" src="https://cloudar.be/wp-content/uploads/2018/07/otp-qr.png" alt="" width="403" height="443" /></p>
<p>&nbsp;</p>
<h1>Ad-Connector</h1>
<p>Next up is configuring an ad-connector in aws.</p>
<p>For this to work the ad connector service will spin up some proxies in the background.</p>
<p>But they need to be able to resolve your domain.</p>
<p>If not already done, go to the VPC console (https://eu-west-1.console.aws.amazon.com/vpc/)</p>
<p>Select &#8220;DHCP options sets&#8221; menu from the left side and then create a new one.</p>
<p>For this blog i have only one domain controller on ip 172.31.28.38.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6581" src="https://cloudar.be/wp-content/uploads/2018/07/otp-dhcp-option-set.png" alt="" width="469" height="284" /></p>
<p>Now go to &#8220;Your VPC&#8217;s&#8221; and for the vpc you are using select &#8220;Edit DHCP Options Set&#8221; en select the just created set.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-6582" src="https://cloudar.be/wp-content/uploads/2018/07/otp-select-dhcp-set.png" alt="" width="300" height="254" /></p>
<p>&nbsp;</p>
<p>Now we are ready to deploy the actual ad connector proxies.</p>
<p>Open up the directory services console. (https://eu-west-1.console.aws.amazon.com/directoryservice/)</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6579" src="https://cloudar.be/wp-content/uploads/2018/07/otp-choose-ad-connector.png" alt="" width="374" height="420" /></p>
<p>Set up ad new AD Connector and fill in the details.</p>
<p>You will need to know your domain controllers ip and use an account that has the right to create and delete computer objects in your domain.</p>
<p>The this blog i&#8217;m just using the default domain administrator&#8230;</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6580" src="https://cloudar.be/wp-content/uploads/2018/07/otp-ad-details.png" alt="" width="737" height="735" srcset="https://cloudar.be/wp-content/uploads/2018/07/otp-ad-details.png 898w, https://cloudar.be/wp-content/uploads/2018/07/otp-ad-details-768x765.png 768w, https://cloudar.be/wp-content/uploads/2018/07/otp-ad-details-722x720.png 722w, https://cloudar.be/wp-content/uploads/2018/07/otp-ad-details-200x200.png 200w" sizes="auto, (max-width: 737px) 100vw, 737px" /></p>
<p>Review the data and click  &#8220;Create AD Connector&#8221;</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-6583" src="https://cloudar.be/wp-content/uploads/2018/07/opt-ad-conector-review.png" alt="" width="815" height="532" srcset="https://cloudar.be/wp-content/uploads/2018/07/opt-ad-conector-review.png 815w, https://cloudar.be/wp-content/uploads/2018/07/opt-ad-conector-review-768x501.png 768w" sizes="auto, (max-width: 815px) 100vw, 815px" /></p>
<p>After a few minutes your ad connector will be deployed and ready to use.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6585" src="https://cloudar.be/wp-content/uploads/2018/07/otp-ad-connector-deployed-without-mfa.png" alt="" width="1084" height="243" srcset="https://cloudar.be/wp-content/uploads/2018/07/otp-ad-connector-deployed-without-mfa.png 1462w, https://cloudar.be/wp-content/uploads/2018/07/otp-ad-connector-deployed-without-mfa-768x172.png 768w, https://cloudar.be/wp-content/uploads/2018/07/otp-ad-connector-deployed-without-mfa-1280x287.png 1280w" sizes="auto, (max-width: 1084px) 100vw, 1084px" /></p>
<p>As you can see the status of &#8220;Radius&#8221; is still &#8220;None&#8221;, lets go and configure it.</p>
<p>Click on your &#8220;Directory ID&#8221; and you to the &#8220;Multi-Factor authentication&#8221; tab.</p>
<p>Fill in you details, since for this blog everything is installed on my ad controller, i will use the same ip here.</p>
<p>Port 1812, the still default shared secret code is &#8220;multiotpsecret&#8221;, leave pap and fill in some timeout and retry values.</p>
<p>( you can also use MS-CHAPv2 as protocol if you want to be even more secure)</p>
<p>Click on &#8220;Update&#8221; and after a few seconds the &#8220;Radius Status&#8221; should change to &#8220;completed&#8221;.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6586" src="https://cloudar.be/wp-content/uploads/2018/07/otp-ad-connector-mfa-config.png" alt="" width="672" height="449" srcset="https://cloudar.be/wp-content/uploads/2018/07/otp-ad-connector-mfa-config.png 741w, https://cloudar.be/wp-content/uploads/2018/07/otp-ad-connector-mfa-config-650x433.png 650w, https://cloudar.be/wp-content/uploads/2018/07/otp-ad-connector-mfa-config-325x217.png 325w" sizes="auto, (max-width: 672px) 100vw, 672px" /></p>
<p>The overview page will now show the &#8220;Radius Status &#8221; as &#8220;completed&#8221;.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6584" src="https://cloudar.be/wp-content/uploads/2018/07/otp-ad-connector-deployed.png" alt="" width="1084" height="234" srcset="https://cloudar.be/wp-content/uploads/2018/07/otp-ad-connector-deployed.png 1526w, https://cloudar.be/wp-content/uploads/2018/07/otp-ad-connector-deployed-768x166.png 768w, https://cloudar.be/wp-content/uploads/2018/07/otp-ad-connector-deployed-1280x276.png 1280w" sizes="auto, (max-width: 1084px) 100vw, 1084px" /></p>
<p>&nbsp;</p>
<h1>Create Workspaces</h1>
<p>Go to the workspaces console (https://eu-west-1.console.aws.amazon.com/workspaces)</p>
<p>&nbsp;</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-6587" src="https://cloudar.be/wp-content/uploads/2018/07/otp-launch-workspace.png" alt="" width="425" height="172" /></p>
<p>Select your newly created ad connector.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6588" src="https://cloudar.be/wp-content/uploads/2018/07/otp-select-directory.png" alt="" width="917" height="266" srcset="https://cloudar.be/wp-content/uploads/2018/07/otp-select-directory.png 1224w, https://cloudar.be/wp-content/uploads/2018/07/otp-select-directory-768x223.png 768w" sizes="auto, (max-width: 917px) 100vw, 917px" /></p>
<p>Click on show all users or search for a specific user, select it and click on &#8220;add selected&#8221;.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6589" src="https://cloudar.be/wp-content/uploads/2018/07/otp-select-users.png" alt="" width="790" height="533" srcset="https://cloudar.be/wp-content/uploads/2018/07/otp-select-users.png 1222w, https://cloudar.be/wp-content/uploads/2018/07/otp-select-users-768x518.png 768w, https://cloudar.be/wp-content/uploads/2018/07/otp-select-users-1068x720.png 1068w" sizes="auto, (max-width: 790px) 100vw, 790px" /></p>
<p>Select the bundle you want to use, i just selected the free tier here.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6590" src="https://cloudar.be/wp-content/uploads/2018/07/otp-select-bundle.png" alt="" width="804" height="539" srcset="https://cloudar.be/wp-content/uploads/2018/07/otp-select-bundle.png 1218w, https://cloudar.be/wp-content/uploads/2018/07/otp-select-bundle-325x217.png 325w, https://cloudar.be/wp-content/uploads/2018/07/otp-select-bundle-768x515.png 768w, https://cloudar.be/wp-content/uploads/2018/07/otp-select-bundle-1073x720.png 1073w" sizes="auto, (max-width: 804px) 100vw, 804px" /></p>
<p>Configure the options you want, left the defaults for this blog.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6591" src="https://cloudar.be/wp-content/uploads/2018/07/otp-workspace-optiosn.png" alt="" width="698" height="481" srcset="https://cloudar.be/wp-content/uploads/2018/07/otp-workspace-optiosn.png 1242w, https://cloudar.be/wp-content/uploads/2018/07/otp-workspace-optiosn-768x529.png 768w, https://cloudar.be/wp-content/uploads/2018/07/otp-workspace-optiosn-1045x720.png 1045w" sizes="auto, (max-width: 698px) 100vw, 698px" /></p>
<p>Review and launch</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6592" src="https://cloudar.be/wp-content/uploads/2018/07/otp-workspace-review.png" alt="" width="684" height="372" srcset="https://cloudar.be/wp-content/uploads/2018/07/otp-workspace-review.png 1240w, https://cloudar.be/wp-content/uploads/2018/07/otp-workspace-review-768x417.png 768w" sizes="auto, (max-width: 684px) 100vw, 684px" /></p>
<p>After a few minutes your workspaces will be ready to use.</p>
<p>If your user has it&#8217;s email field filled in, he will get a mail when the workspaces is ready to use with some instructions inside.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-6594" src="https://cloudar.be/wp-content/uploads/2018/07/otp-being-launched.png" alt="" width="413" height="116" /></p>
<p>And the status will go from PENDING to AVAILABLE.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6595" src="https://cloudar.be/wp-content/uploads/2018/07/otp-pending.png" alt="" width="721" height="245" srcset="https://cloudar.be/wp-content/uploads/2018/07/otp-pending.png 1480w, https://cloudar.be/wp-content/uploads/2018/07/otp-pending-768x261.png 768w, https://cloudar.be/wp-content/uploads/2018/07/otp-pending-1280x435.png 1280w" sizes="auto, (max-width: 721px) 100vw, 721px" /></p>
<p>&nbsp;</p>
<h1>Workspace Client</h1>
<p>Now we are ready to login.</p>
<p>( please install the workspace client for your platform https://clients.amazonworkspaces.com/ )</p>
<p>&nbsp;</p>
<p>Enter the registration code you got and click register.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6598" src="https://cloudar.be/wp-content/uploads/2018/07/otp-registration.png" alt="" width="175" height="302" /></p>
<p>You will now see a login page, fill in your username and password and the mfa code from your google authenticator.</p>
<p>If all is setup correctly in a few seconds you will be taken to your workspace.</p>
<p>Fast en secured with mfa!</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6599" src="https://cloudar.be/wp-content/uploads/2018/07/otp-login.png" alt="" width="279" height="322" /></p>
<p>&nbsp;</p>
<p>Thanks for reading this rather long post. 🙂</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1>Extra</h1>
<p>As promised here is a cloudformation template to setup an active directory server with a new domain, for testing purposes.</p>
<p>!You will need to create a key pair first!</p>
<p>Download the template here -&gt; <a href="https://cloudar.be/wp-content/uploads/2018/07/cf-demo-ad-mfa.zip">cf-demo-ad-mfa</a></p>
<p>Deploy it through the cloudformation console (https://eu-west-1.console.aws.amazon.com/cloudformation)</p>
<p>Fill in the details.</p>
<p>For this post i used the below details&#8230;</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-6601" src="https://cloudar.be/wp-content/uploads/2018/07/otp-ad-cloudformation.png" alt="" width="1768" height="737" srcset="https://cloudar.be/wp-content/uploads/2018/07/otp-ad-cloudformation.png 1768w, https://cloudar.be/wp-content/uploads/2018/07/otp-ad-cloudformation-768x320.png 768w, https://cloudar.be/wp-content/uploads/2018/07/otp-ad-cloudformation-1536x640.png 1536w, https://cloudar.be/wp-content/uploads/2018/07/otp-ad-cloudformation-1280x534.png 1280w" sizes="auto, (max-width: 1768px) 100vw, 1768px" /></p>
<p>You will find your domain admin password when you go to the ec2 console (https://eu-west-1.console.aws.amazon.com/ec2/v2) and select your instance and click on connect.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6603" src="https://cloudar.be/wp-content/uploads/2018/07/otp-password.png" alt="" width="510" height="409" /></p>
<p>The post <a href="https://cloudar.be/awsblog/aws-workspaces-with-multi-factor-authentication/">Aws workspaces with multi-factor authentication</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cloudar.be/awsblog/aws-workspaces-with-multi-factor-authentication/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Automating Windows migrations to Aws with Double Take Move and Ansible</title>
		<link>https://cloudar.be/awsblog/automating-windows-migrations-to-aws-with-double-take-move-and-ansible/</link>
					<comments>https://cloudar.be/awsblog/automating-windows-migrations-to-aws-with-double-take-move-and-ansible/#respond</comments>
		
		<dc:creator><![CDATA[Pauwel Rummens]]></dc:creator>
		<pubDate>Thu, 14 Apr 2016 10:41:29 +0000</pubDate>
				<category><![CDATA[AWS Blog]]></category>
		<guid isPermaLink="false">https://cloudar.be/?p=3604</guid>

					<description><![CDATA[<p>Intro When you’re a cloud reseller/architect you often get contacted by customers who want to migrate their infra to Aws. Although I’m not really for the lift and shift way of working, sometimes there is no way around it. &#160; Instead of spending hours of work on installing and configuring, exporting, importing, etc&#8230; we can [&#8230;]</p>
<p>The post <a href="https://cloudar.be/awsblog/automating-windows-migrations-to-aws-with-double-take-move-and-ansible/">Automating Windows migrations to Aws with Double Take Move and Ansible</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Intro</h1>
<p>When you’re a cloud reseller/architect you often get contacted by customers who want to migrate their infra to Aws.</p>
<p>Although I’m not really for the lift and shift way of working, sometimes there is no way around it.</p>
<p>&nbsp;</p>
<p>Instead of spending hours of work on installing and configuring, exporting, importing, etc&#8230; we can now really get things going by using Double Take Move and Ansible.</p>
<p>For this article you need some basic knowledge of Ansible.</p>
<p>A good place to start is (<a href="http://docs.ansible.com/ansible/">http://docs.ansible.com/ansible/</a> )</p>
<p>&nbsp;</p>
<p>Double take move is really well made and very user friendly!</p>
<p>And the license cost to use this product is forgotten easily when you don&#8217;t have to spend hours in exporting-importing &#8211; troubleshooting these kind of moves.</p>
<p>(http://www.visionsolutions.com/products/windows/double-take-move/overview)</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1><a name="_Toc448393891"></a>Prep work</h1>
<p>Ah yes, there is always some prep work to do. (more if your not already using Ansible now)</p>
<h2><a name="_Toc448393892"></a>AWS</h2>
<p>Lets first configure the Aws environment, create the needed vpc, subnets,vpn&#8217;s, seurity groups, roles,etc&#8230;</p>
<h3><a name="_Toc448393893"></a>VPC</h3>
<p>Make sure that the vpc cidr block and subnets match your current setup exactly.</p>
<p>(And also create the target servers in the correct subnets)</p>
<h3><a name="_Toc448393894"></a>DHCP option set</h3>
<p>Make sure that you create a dhcp option set if the servers you are migrating are on dhcp.</p>
<p>Example:</p>
<p>&nbsp;</p>
<pre class="lang:default decode:true">DHCP options set ID: dopt-xxxxxx | NameHere

Options:

domain-name = fqdninlowercase
domain-name-servers = adserveriphere
ntp-servers = ntpserveriphere
netbios-name-servers = netbiosserveriphere</pre>
<h4></h4>
<h3>Public ip’s</h3>
<p>Maybe for connectivity to work you will need to attach some public ip’s to your source and target servers.</p>
<p>We used this mostly in Azure to Aws migrations.</p>
<p>&nbsp;</p>
<h2><a name="_Toc448393895"></a>Ansible Setup</h2>
<p>We have been using Ansible for quite some time now and we find that installing it on Centos or Ubuntu is the best way to go.</p>
<p>Below are the basic steps for Centos</p>
<ul>
<li>We mostly use at least Ansible version 2, therefore we need to enable the the epel-testing repository to install Ansible. Edit the file under /etc/yum.repos.d/epel-testing.repo to enable it. <span style="line-height: 1.5;">Then run the below commands</span></li>
</ul>
<p>&nbsp;</p>
<pre class="lang:default decode:true">rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

yum install ansible

useradd ansible

chown ansible.ansible /etc/ansible/ -R

sudo su - ansible

ssh-keygen</pre>
<p>Accept defaults for the keygen. Or change to your way of working (you can then push this key out to linux server, which are not in scope of this blog)</p>
<ul>
<li>Install pywinrm</li>
</ul>
<pre class="lang:default decode:true">pip install "pywinrm&gt;=0.1.1"</pre>
<ul>
<li><span style="line-height: 1.5;">If your windows systems are in a domain (most of them normally are) install the Kerberos dependencies</span></li>
</ul>
<pre class="lang:default decode:true">yum -y install python-devel krb5-devel krb5-libs krb5-workstation</pre>
<ul>
<li style="line-height: 1.5;">You will also need the python part to this</li>
</ul>
<pre class="lang:default decode:true">pip install kerberos</pre>
<p>&nbsp;</p>
<p>Please read the kerberos documentation carefully, as your really need this to be correct and working.</p>
<p>&nbsp;</p>
<h3><a name="_Toc448393896"></a>Kerberos</h3>
<p>Edit the /etc/krb5.conf file and change it to reflect your domain</p>
<p>&nbsp;</p>
<pre class="lang:default decode:true">[logging]

 default = FILE:/var/log/krb5libs.log

 kdc = FILE:/var/log/krb5kdc.log

 admin_server = FILE:/var/log/kadmind.log



[libdefaults]

 dns_lookup_realm = false

 ticket_lifetime = 24h

 renew_lifetime = 7d

 forwardable = true

 rdns = false

 default_realm = FQDN.IN.CAPITALS

 default_ccache_name = KEYRING:persistent:%{uid}



[realms]

 FQDN.IN.CAPITALS = {

  kdc = ip or fqdn.of.your.first.domain.controller

  kdc = ip or fqdn.of.your.second.domain.controller

  default_domain = fqdn.in.lower.case

  kpasswd_server = ip or fqdn.of.your.first.domain.controller

  kpasswd_server = ip or fqdn.of.your.second.domain.controller

 }



[domain_realm]

        .fqdninlowercase = FQDN.IN.CAPITALS</pre>
<p>&nbsp;</p>
<p>When that is done you can test the connection is working by running the below command</p>
<p>&nbsp;</p>
<pre class="lang:default decode:true ">kinit user@MY.DOMAIN.COM</pre>
<p>&nbsp;</p>
<p>If nothing is returned -&gt; don’t panic!!! Then it worked !</p>
<p>You can then check your Kerberos ticket with the command</p>
<pre class="lang:default decode:true ">klist</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3><a name="_Toc448393897"></a>Inventory</h3>
<p>Under your /etc/ansible directory there is a hosts file.</p>
<p>It contains some examples in how to use an Ansible Inventory file.</p>
<p>Create yours any way you like.</p>
<p>But for the these migration you can do something like this</p>
<p>&nbsp;</p>
<pre class="lang:default decode:true ">[sourceservers]

Thefirstserver.yourdomain.something

Thesecondserver.yourdomain.something

Thethirdserver.yourdomain.something



[targetservers]

Firsttargetip

Secondtargetip

Thirdtargetip</pre>
<p>&nbsp;</p>
<p>For each group you create here you can/must create a credential file with the same name.</p>
<p>So in this case a sourceservers.yml and targetservers.yml</p>
<p>Store these under the /etc/ansible/group_vars.</p>
<p>Content of these files for local users</p>
<p>&nbsp;</p>
<pre class="lang:default decode:true "># it is suggested that these be encrypted with ansible-vault:

# ansible-vault encrypt sourceservers.yml 

ansible_user: Administrator

ansible_password: SecretPasswordGoesHere

ansible_port: 5986

ansible_connection: winrm

# The following is necessary for Python 2.7.9+ when using default WinRM self-signed certificates:

ansible_winrm_server_cert_validation: ignore</pre>
<p>&nbsp;</p>
<p>Content of the file for domain users</p>
<p>&nbsp;</p>
<pre class="lang:default decode:true "># it is suggested that these be encrypted with ansible-vault:# ansible-vault encrypt sourceservers.yml

ansible_user: ansible@FQDNINCAPITALS

ansible_password: SecretPasswordGoesHere

ansible_connection: winrm

ansible_port: 5986

ansible_winrm_server_cert_validation: ignore</pre>
<p>&nbsp;</p>
<p>You can also add it in the hosts file like so</p>
<pre class="lang:default decode:true ">[sourceservers]

Thefirstserver.yourdomain.something

Thesecondserver.yourdomain.something

Thethirdserver.yourdomain.something



[sourceservers:vars]

ansible_ssh_user = ansible@FQDNINCAPITALS

nsible_password = secretpasswordhere

ansible_connection = winrm

ansible_ssh_port = 5986

ansible_winrm_server_cert_validation = ignore</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2><a name="_Toc448393898"></a>Windows Configuration</h2>
<p>Make sure your target servers are as identical as possible to your source servers.</p>
<p>So same os ,service pack,IP and disk layout and your good to go. (ooh and don’t rename your target server to the source server just yet, double take will complain and will not continue. But a usefull name is a good way to identify the target server)</p>
<p>You will need to do the below on all source and target servers, for the target servers you can maybe create an ami from which to deploy, depending in how many servers you need to migrate.</p>
<ul>
<li>Configure winrm on all windows machines that you need to migrate (script for this can be found here : <a href="http://docs.ansible.com/ansible/intro_windows.html">http://docs.ansible.com/ansible/intro_windows.html</a></li>
<li>Also make sure you have at least version 3 of powershell installed, so basically check all your servers that are below server 2012.</li>
<li>Preferably create an “ansible” user on those systems and allow it to connect through winrm (there is a local group called WinRMRemoteWMIUsers__, add it to this group. Also the local admin, else you will not be able to do everything that is needed here)</li>
<li>Because of Ansible’s way of spawning allot of connections I found that increasing the MaxShellsPerUser parameter for winrm to give less problems.</li>
</ul>
<p>Command :</p>
<pre class="lang:default decode:true">winrm set winrm/config/winrs '@{MaxShellsPerUser="50"}'</pre>
<p>Hint: You can combine the above in the ConfigureRemotingForAnsible.ps1 that you download from the ansible site, by added the following on the bottom of the script</p>
<pre class="lang:default decode:true ">winrm set winrm/config/winrs '@{MaxShellsPerUser="50"}'
NET USER ansible "secretpasswordhere" /ADD
NET LOCALGROUP "administrators" "ansible" /add
NET LOCALGROUP "WinRMRemoteWMIUsers__" "ansible" /add
shutdown /r</pre>
<p>I found that in most cases you will need to reboot the server in order for it all to work correctly.</p>
<p>&nbsp;</p>
<h2><a name="_Toc448393899"></a>Firewalls</h2>
<p>Ofcourse we need to modify some firewall rules here and there.</p>
<p>Make sure that ansible can reach your servers on 5986 tcp.</p>
<p>Also make sure that source and target servers can speak with each other directly over port 6320 and 6325 tcp and udp.</p>
<p>The double take console will also need to speak with all servers on these ports.</p>
<p>&nbsp;</p>
<p>Note: ofcourse make sure that all other needed rules,routes,vpn’s,etc are in place for your servers.</p>
<p>&nbsp;</p>
<h2><a name="_Toc448393900"></a>Test test test</h2>
<p>We can now test the connection to the windows servers.</p>
<p>(If you are using the domain credentials make sure you have a valid Kerberos ticket first.)</p>
<p>Run the following</p>
<pre class="lang:default decode:true ">Ansible sourceservers –m setup</pre>
<p>to verify the source server connections</p>
<pre class="lang:default decode:true">Ansible targetservers –m setup</pre>
<p>to verify the target server connections</p>
<p>&nbsp;</p>
<h2><a name="_Toc448393901"></a>Double take console</h2>
<p>I’m not going to go into details here but on the machine you have installed the double take console you add all the servers (source and target), attach the licenses to them and setup full server replication jobs with the parameters of your choice.</p>
<p>Wait before failing over, we will need some more playbooks depending on your server licensing.</p>
<p>&nbsp;</p>
<h1><a name="_Toc448393902"></a>Playbooks</h1>
<p>On to the interesting stuff, unless you want to manually install double take software on all servers then go do that now 🙂</p>
<h2><a name="_Toc448393903"></a>Doubletake</h2>
<p>I downloaded the doubletake software, and unzipped the following directory /setup/dt/x64 folder and placed it in a S3 bucket. If you have 32-bit servers extract also the 32bit folder. The below examples only use the 64bit installer&#8230; if the need arises we can create also the 32bit playbook.</p>
<p>Make sure the files are public else you will not be able to download it on the source servers, use a the readonly S3 policy attached to a role for the targetservers.</p>
<p>Before uploading also modifie the DTsetup.ini file to allow a quiet installation. (modify it anyway you want, make sure that the diskqueue folder has around 20gb of free space)</p>
<p>&nbsp;</p>
<pre class="lang:default decode:true ">[Config]

DTSETUPTYPE=DTSO

DTACTIVATIONCODE=1111222233334444

DOUBLETAKEFOLDER="C:\Program Files\Vision Solutions\Double-Take\"

QMEMORYBUFFERMAX=1024

DISKQUEUEFOLDER="C:\Program Files\Vision Solutions\Double-Take\"

DISKQUEUEMAXSIZE=UNLIMITED

DISKFREESPACEMIN=50

DTSERVICESTARTUP=1

PORT=6320

WINFW_CONFIG_OPTION=NOT_INUSE_ONLY

LICENSE_ACTIVATION_OPTION=1</pre>
<p>&nbsp;</p>
<p>When the above is done, we can continue to write our playbooks.</p>
<p>Write the following playbook, place it in the /etc/ansible directory.</p>
<p>&nbsp;</p>
<pre class="lang:default decode:true ">---

# doubletake.yml

# This playbook will silently install doubletake move.



-   name: Install doubletake move

    hosts: sourceservers:targetservers

    gather_facts: false

    roles:

        - doubletake
</pre>
<p>&nbsp;</p>
<p>Then create the following directory structure</p>
<p>/etc/ansible/roles/doubletake/tasks/</p>
<p>The create the following “role”, save it as main.yml</p>
<p>&nbsp;</p>
<pre class="lang:default decode:true"># Create a temp directory, if it does not exist then the below won’t work

-  name: create temp dir

   win_file: path=C:\temp state=directory

# To download from s3 using the aws command line, we need the aws cli installed

-  name: download aws cli

   win_get_url:

     url: 'https://s3.amazonaws.com/aws-cli/AWSCLI64.msi'

     dest: 'c:\temp\AWSCLI64.msi'

     force: no



-  name: install aws cli

   win_msi: path=C:\\temp\\AWSCLI64.msi wait=true



-  name: download from S3

   raw: aws s3 cp s3://double-take c:\temp\dt --recursive



-  name: Install doubletake

   raw: CMD /C "c:\temp\dt\setup.exe /s /v"DTSETUPINI=\"c:\temp\dt\DTSetup.ini\" /qn""



-  name: cleanup doubletake

   win_file: path=C:\temp\dt state=absent
</pre>
<p>Now we can test the doubletake installation like this</p>
<pre class="lang:default decode:true ">Ansible-playbook doubletake.yml</pre>
<p>Or if you encrypted the files with vault then</p>
<pre class="lang:default decode:true ">Ansible-playbook doubletake.yml --ask-vault-pass</pre>
<p>&nbsp;</p>
<p>If everything is working as it should then doubletake should be installed everywhere, nice and fast no?</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2><a name="_Toc448393904"></a>Windows Licensing</h2>
<p>&nbsp;</p>
<p>It all depends what you want to do, but this example will change the windows activation to the Aws kms servers, thus using the aws licencing instead of your own or&#8230;</p>
<p>Source : <a href="http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/troubleshooting-windows-instances.html#activate-windows" target="_blank" rel="noopener noreferrer">&#8220;Unable to activate Windows&#8221;</a></p>
<p>Ok that will be a lot of manual work, so let’s not do that.</p>
<p>&nbsp;</p>
<p>Since ansible is still a work in progress I found that the module win_unzip does not work all the time.</p>
<p>Therefore I chose to put the ec2install.exe also in an S3 bucket.</p>
<p>(wanted to do download the latest ec2config service from amazon and unzip it , then install it…if it works better in the future I’ll make an update)</p>
<p>&nbsp;</p>
<p>Write the following playbook</p>
<p>&nbsp;</p>
<pre class="lang:default decode:true ">---

# windowsactivation.yml

# This will configure the components needed for windows activation on aws



-   name: Windows Activation

    hosts: targetservers

    gather_facts: true

    roles:

        - windowsactivation</pre>
<p>&nbsp;</p>
<p>The create the following directory structure</p>
<p>/etc/ansible/roles/windowsactivation/tasks/</p>
<p>Then write the following main.yml and place it in the dir above</p>
<pre class="lang:default decode:true ">---

# This role configures the windows activation with aws kms servers

#download the ec2install from our s3 bucket, change the destination if needed

-  name: Download Ec2Install.exe

   win_get_url:

     url: 'https://s3-eu-west-1.amazonaws.com/double-take/Ec2Install.exe'

     dest: 'C:\Users\ansible\Downloads\Ec2Install.exe'

     force: no

# install the ec2config service

-  name: Install the ec2config service

   raw: C:\\Users\\ansible\\Downloads\\Ec2Install.exe /quiet

# set the kms license key silently - below example for 2012R2

-  name: set license key 2012R2

   raw: cscript //B C:\\Windows\\System32\\slmgr.vbs /ipk W3GGN-FT8W3-Y4M27-J84CP-Q3VJ9

#needed kms routes on windows

-  name: kmsroute1

   raw: route add 169.254.169.251 mask 255.255.255.255 10.41.0.1 -p

-  name: kmsroute2

   raw: route add 169.254.169.252 mask 255.255.255.255 10.41.0.1 -p

-  name: kmsroute3

   raw: route add 169.254.169.254 mask 255.255.255.255 10.41.0.1 -p

# reboot to activate the server (ec2config service activates machines at boot time)

-  name: Restart machine

   raw: shutdown /r /f /c "Ansible Activate Windows"

   async: 0

   poll: 0

   ignore_errors: true

#wait for the server to boot

-  name: Waiting for server to come back

   local_action: wait_for

                    host={{ inventory_hostname }}

                    state=started

                    timeout=60

   sudo: false</pre>
<p>&nbsp;</p>
<h2><a name="_Toc448393905"></a>DNS forwarder</h2>
<p>If you have a domain running you probably also have windows dns, because you now going to move to aws, we need to change to forwarder to aws.</p>
<p>!The below script will replace all your forwarders! If you don&#8217;t want this then there is also &#8216;add-dnsserverforwarder&#8217; and &#8216;Remove-DnsServerForwarder&#8217;.</p>
<p>&nbsp;</p>
<p>So maybe create a group in the ansible host file [activedirectory]</p>
<p>&nbsp;</p>
<p>To find the ip for the forwarder take your VPC cidr block and change the last digit to 2.</p>
<p>Example: 10.41.0.0/16 the dns forwarder is at 10.41.0.2</p>
<p>source : (<a href="http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html" target="_blank" rel="noopener noreferrer">VPC Subnets</a> &#8211;&gt; subnet sizing)</p>
<p>&nbsp;</p>
<p>Create the below playbook under /etc/ansible</p>
<p>&nbsp;</p>
<pre class="lang:default decode:true "># name : setdnsforwarder.yml

# playbook to reset the dns forwarders on a microsoft dns server



- name: Reset DNS forwarder

  hosts: activedirectory

  tasks:

    - name: Reset dns forwarders to aws forwarders

      raw: Set-DnsServerForwarder -IPAddress "awsforwarder" –PassThru</pre>
<p>&nbsp;</p>
<h1><a name="_Toc448393906"></a>Failover</h1>
<p>&nbsp;</p>
<p>Right we have the necessary components now, let do the failover to aws</p>
<p>In the double take console start failing over your servers, best to start with the core servers, like AD, then maybe SQL, exchange.</p>
<p>Then applications servers and webservers… it’s really up to you</p>
<p>&nbsp;</p>
<p>When everything is failed over, check to see if ansible is able to reach your servers.</p>
<p>(With Kerberos or local user)</p>
<p>Also it can get confusing now because your target servers are also your source servers now! 🙂</p>
<p>&nbsp;</p>
<p>Anyway, run the setdnsforwarder.yml first to make sure you have internet access.</p>
<p>Then run the windowsactivation.yml</p>
<p>&nbsp;</p>
<p>Everything should now reboot and come back online, activated with the aws kms server.</p>
<p>Since this is a repeatable process you can first do a testfailover, test this out, tune where needed, then do the actual failover.</p>
<p>&nbsp;</p>
<p>If you have questions or just don’t want do to this yourself, contact us by <a href="mailto:info@cloudar.be" target="_blank" rel="noopener noreferrer">email </a>or phone (+32 3 450 80 30).</p>
<p>&nbsp;</p>
<p>Go Automate Something!</p>
<p>Pauwel</p>
<p>The post <a href="https://cloudar.be/awsblog/automating-windows-migrations-to-aws-with-double-take-move-and-ansible/">Automating Windows migrations to Aws with Double Take Move and Ansible</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cloudar.be/awsblog/automating-windows-migrations-to-aws-with-double-take-move-and-ansible/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Enabling Federation to AWS Using Windows Active Directory, ADFS and SAML</title>
		<link>https://cloudar.be/awsblog/enabling-federation-to-aws-using-windows-active-directory-adfs-and-saml/</link>
					<comments>https://cloudar.be/awsblog/enabling-federation-to-aws-using-windows-active-directory-adfs-and-saml/#comments</comments>
		
		<dc:creator><![CDATA[Pauwel Rummens]]></dc:creator>
		<pubDate>Tue, 24 Nov 2015 07:51:06 +0000</pubDate>
				<category><![CDATA[AWS Blog]]></category>
		<guid isPermaLink="false">https://cloudar.be/?p=3352</guid>

					<description><![CDATA[<p>The post <a href="https://cloudar.be/awsblog/enabling-federation-to-aws-using-windows-active-directory-adfs-and-saml/">Enabling Federation to AWS Using Windows Active Directory, ADFS and SAML</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="wpb-content-wrapper"><div id="ut-row-69c019eb48962" data-vc-full-width="true" data-vc-full-width-init="false" class="vc_row wpb_row vc_row-fluid vc_column-gap-0 ut-row-69c019eb48977" ><div class="wpb_column vc_column_container vc_col-sm-12" ><div id="ut_inner_column_69c019eb5cbc3" class="vc_column-inner " ><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element" >
		<div class="wpb_wrapper">
			<h2>Introduction</h2>
<p><strong>UPDATE 04-2018: Updated the blog to be more up to date with current amazon configuration, also the default configuration is now multiple account support.</strong></p>
<p><strong>Jeff Wierer has written <a href="http://blogs.aws.amazon.com/security/post/Tx71TWXXJ3UI14/Enabling-Federation-to-AWS-using-Windows-Active-Directory-ADFS-and-SAML-2-0" target="_blank" rel="noopener noreferrer"><u>this</u></a> documentation in Oktober 2014. This is a 2015 update containing windows server 2012R2 and ADFS 3.x</strong></p>
<p>AWS added <a href="http://aws.typepad.com/aws/2013/11/aws-identity-and-access-management-using-saml.html" target="_blank" rel="noopener noreferrer"><u>support for SAML</u></a>, an open standard used by many identity providers. This new feature enables federated single sign-on (SSO), which lets users sign into the AWS Management Console or make programmatic calls to AWS APIs by using assertions from a SAML-compliant identity provider (IdP) like ADFS.</p>
<p>Many of you are using Windows AD for your corporate directory and since Windows Server includes ADFS, it makes sense that you might use ADFS as your IdP.<br />
To set up my domain, I used Amazon EC2 because that made it easy to access the domain from anywhere.<br />
My EC2 instance used Windows Server 2012 R2 running, AD, and ADFS. (Remember that the IIS dependency was removed in ADFS 2012 R2.)</p>
<p>If you want to do the same, I encourage you to use a nifty CloudFormation template that creates a Windows instance and sets up a domain for you.</p>
<p>&nbsp;</p>
<h2>How Integration Between AD FS and AWS Works</h2>
<p>Before we get too far into the configuration details, let’s walk through how this all works.<br />
<img loading="lazy" decoding="async" class="aligncenter size-large wp-image-3382" src="https://cloudar.be/wp-content/uploads/2015/11/AD1.png" alt="AD1" width="1024" height="516" /></p>
<ol>
<li>The flow is initiated when a user (let’s call him Bob) browses to the ADFS sample site inside his domain. When you install ADFS, you get a new virtual directory named adfs for your default website, which includes this page</li>
<li>The sign-on page authenticates Bob against AD. Depending on the browser Bob is using, he might be prompted for his AD username and password.</li>
<li>Bob’s browser receives a SAML assertion in the form of an authentication response from ADFS.</li>
<li>Bob’s browser posts the SAML assertion to the AWS sign-in endpoint for SAML (https://signin.aws.amazon.com/saml). Behind the scenes, sign-in uses the <a href="http://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html" target="_blank" rel="noopener noreferrer"><u>AssumeRoleWithSAML</u></a> API to request temporary security credentials and then constructs a sign-in URL for the AWS Management Console.</li>
<li>Bob’s browser receives the sign-in URL and is redirected to the console.</li>
</ol>
<p>From Bob’s perspective, the process happens transparently. He starts at an internal web site and ends up at the AWS Management Console, without ever having to supply any AWS credentials.<br />
Now that we understand how it works, let’s take a look at setting it all up.<br />
BTW this post is fairly long. The next couple sections cover installing and configuring ADFS.</p>
<p>If you already have ADFS in your environment, you may want to skip ahead to the <a href="#configuringAWS">Configuring AWS</a> section.</p>
<p>&nbsp;</p>
<h2>Configuring Active Directory</h2>
<p>If you want follow along with my description, you’re going to need a Windows domain.<br />
If you don’t already have one, I recommend that you take advantage of the CloudFormation <a href="https://console.aws.amazon.com/cloudformation/home?region=us-east-1#cstack=sn%7EActiveDirectory%7Cturl%7Ehttps://s3.amazonaws.com/cloudformation-templates-us-east-1/Windows_Single_Server_Active_Directory.template"><u>template</u></a> I mentioned earlier to quickly launch an Amazon EC2 Windows instance as a Windows AD domain controller.</p>
<p>For demonstration purposes, I used a single user (Bob) who is a member of two AD groups (AWS-awsaccountid-AWS-PROD-ADMIN and AWS-awsaccountid-AWS-PROD-DEV, replace awsaccountid with your actual account id, for example : AWS-123456789-AWS-PROD-ADMIN) and a service account (ADFSSVC) used by ADFS. Note that the names of the AD groups both start with AWS-. This is significant, because Bob&#8217;s permission to sign in to AWS will be based on a match of group names that start with AWS-, as I&#8217;ll explain later.</p>
<p><strong>If you follow along with the instructions, make sure you use exactly the same names we do for users, AD groups, and IAM roles, including uppercase and lowercase letters.</strong></p>
<p>Perform the following in your domain:</p>
<ol>
<li>Create two AD Groups named AWS-awsaccountid-AWS-PROD-ADMIN  and AWS-awsaccountid-AWS-PROD-DEV ( replace awsaccountid with your actual account id, for example : AWS-123456789-AWS-PROD-ADMIN)</li>
<li>Give Bob an email address (e.g., bob@example.com)</li>
<li>Add Bob to the AWS-awsaccountid-AWS-PROD-ADMIN  and AWS-awsaccountid-AWS-PROD-DEV groups</li>
<li>Create another user named ADFSSVC. This account will be used as the ADFS service account later on.</li>
</ol>
<p>&nbsp;</p>
<h2>Installing ADFS</h2>
<p>With my accounts and groups set up, I moved on to installing ADFS. On the Windows Server 2012 R2 i&#8217;m using we can install adfs 3.0 out of the box so i used this one. Open up the server manager and use the “install roles and features”.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-3369 size-medium" src="https://cloudar.be/wp-content/uploads/2015/11/AD2.png" alt="AD2" width="300" height="213" /></p>
<p>Select the ADFS role</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3370" src="https://cloudar.be/wp-content/uploads/2015/11/AD3.png" alt="AD3" width="300" height="197" /></p>
<p>Confirm the changes you are going to make and install ADFS, no reboot is needed</p>
<p>&nbsp;</p>
<h2>Configuring ADFS</h2>
<p>The next step is to configure ADFS.<br />
Launch the console by → <strong>Start &gt; All Programs &gt; Administration Tools &gt; AD FS Management</strong></p>
<p>To launch the configuration wizard, select <strong>AD FS Federation Server Configuration Wizard</strong></p>
<p>If you want to follow along with my configuration, do this:</p>
<p>1. Select <strong>Create a new Federation Server in a server farm</strong></p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3371" src="https://cloudar.be/wp-content/uploads/2015/11/AD4.png" alt="AD4" width="300" height="210" /></p>
<p>2. Select a domain admin account, i used the default administrator in this demo.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3372" src="https://cloudar.be/wp-content/uploads/2015/11/AD5.png" alt="AD5" width="300" height="205" /></p>
<p>3. Select a SSL certificate. On my instance, I had an existing certificate I could use. If you don’t have a certificate, you can <a href="http://technet.microsoft.com/en-us/library/cc753127%28v=ws.10%29.aspx" target="_blank" rel="noopener noreferrer"><u>create a self-signed certificate</u></a> using IIS. Self-signed certificates are convenient for testing and development. For production use, you’ll want to use a certificate from a trusted certificate authority (CA).</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3373" src="https://cloudar.be/wp-content/uploads/2015/11/AD6.png" alt="AD6" width="300" height="212" /></p>
<p>4. Remember the service account I mentioned earlier? This is where you use it.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3374" src="https://cloudar.be/wp-content/uploads/2015/11/AD7.png" alt="AD7" width="300" height="213" /></p>
<p>5. Select the internal database, or a sql server if you have one available</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3375" src="https://cloudar.be/wp-content/uploads/2015/11/AD8.png" alt="AD8" width="300" height="208" /></p>
<p>6. Review the options and then check the prereqs, click configure to begin the installation</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3376" src="https://cloudar.be/wp-content/uploads/2015/11/AD9.png" alt="AD9" width="300" height="211" /></p>
<p>7. When it&#8217;s done, the following will appear:</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3377" src="https://cloudar.be/wp-content/uploads/2015/11/AD10.png" alt="AD10" width="300" height="211" /></p>
<p>If so, skip ahead to the <a href="#configuringAWS">Configuring AWS section.</a></p>
<p>During my testing, I went through this wizard on several different Windows servers and didn’t always have 100% success. In some cases I encountered the following error message:</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3378" src="https://cloudar.be/wp-content/uploads/2015/11/AD11.png" alt="AD11" width="300" height="147" /></p>
<p>It turns out this is a known issue that can be fixed by running the following at the command line (Make sure you run the command window as an administrator):</p>
<pre><code>
setspn -a host/localhost adfssvc
</code></pre>
<p>Note that is the name of the service account I used.<br />
If the command is successful, you see output like this:</p>
<pre><code>
Registering ServicePrincipalNames for CN=ADFSSVC,CN=Users,DC=mydomain,DC=aws,DC=amazon,DC=com host/localhost
</code></pre>
<p>&nbsp;</p>
<h2 id="configuringAWS">Configuring AWS</h2>
<p>You&#8217;ve finished configuring AD FS. The next step is to configure the AWS end of things.</p>
<p>To do this, I used the <a href="https://console.aws.amazon.com/iam" target="_blank" rel="noopener noreferrer"><u>AWS Management Console</u></a></p>
<p>The first step is to create a SAML provider.If you’ve never done this, I recommend taking a look at the <a href="http://docs.aws.amazon.com/STS/latest/UsingSTS/STSMgmtConsole-SAML.html#configuring-IAMProvider" target="_blank" rel="noopener noreferrer"><u>IAM user guide</u></a>.</p>
<p>Before you create a SAML provider, you need to download the SAML metadata document for your ADFS federation server. By default, you can download it from following address:</p>
<p><a href="https://localhost/FederationMetadata/2007-06/FederationMetadata.xml">https://localhost/FederationMetadata/2007-06/FederationMetadata.xml</a></p>
<p>You can also use the following powershell script :</p>
<pre><code>
$source = &quot;https://localhost/FederationMetadata/2007-06/FederationMetadata.xml&quot;
$destination = &quot;C:\Users\Administrator\Documents\FederationMetadata.xml&quot;
add-type @&quot;
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}
}
&quot;@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
Invoke-WebRequest $source -OutFile $destination
</code></pre>
<p>I named my SAML provider <strong>Federation-Demo</strong>. When you have the SAML metadata document, you can create the SAML provider in AWS. As part of that process, you upload the metadata document.<br />
When I finished creating the SAML provider, I created two IAM roles. Once again the <a href="http://docs.aws.amazon.com/IAM/latest/UserGuide/create-role-saml.html" target="_blank" rel="noopener noreferrer">IAM documentation</a> has a great walkthrough of these steps, so I won’t repeat them here.</p>
<p>I created two roles using the <strong>Grant Web Single Sign-On (WebSSO) access to SAML providers</strong> role wizard template and specified the ADFS SAML provider that I just created.</p>
<p>I named the two roles AWS-PROD-ADMIN  and AWS-PROD-DEV. Do these names look familiar? They should.</p>
<p>They are the complement to the AD groups created earlier. During the SAML authentication process in AWS, these IAM roles will be matched by name to the AD groups (AWS-awsaccountid-AWS-PROD-ADMIN  and AWS-awsaccountid-AWS-PROD-DEV) via ADFS claim rules.</p>
<p><strong>Note</strong>: Remember that if you&#8217;re following along with this description, you need to use exactly the same names that we use. Make sure that you name the IAM roles AWS-PROD-ADMIN  and AWS-PROD-DEV.</p>
<p>Find the ARNs for the SAML provider and for the roles that you created and record them. You&#8217;ll need the ARNs later when you configure claims in the IdP.<br />
That&#8217;s it for the AWS configuration steps.</p>
<p>&nbsp;</p>
<h2>Configuring AWS as a Trusted Relying Party</h2>
<p>Federation using SAML requires setting up two-way trust.</p>
<p>In the preceding section I created a SAML provider and some IAM roles. This is one half of the trust relationship, where the ADFS server is trusted as an identity provider.<br />
Similarly, ADFS has to be configured to trust AWS as a relying party. I configured this by returning to the AD FS Management Console. To recreate my setup, perform the following:</p>
<p>1. From the ADFS Management Console, right-click <strong>ADFS </strong>and select <strong>Add Relying Party Trust</strong>.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3379" src="https://cloudar.be/wp-content/uploads/2015/11/AD12.png" alt="AD12" width="300" height="139" /></p>
<p>2. In the <strong>Add Relying Party Trust Wizard</strong>, click <strong>Start</strong>.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3380" src="https://cloudar.be/wp-content/uploads/2015/11/AD13.png" alt="AD13" width="300" height="241" /></p>
<p>3. Check<strong> Import data about the relying party published online or on a local network</strong>, enter <a href="https://signin.aws.amazon.com/static/saml-metadata.xml"><u>https://signin.aws.amazon.com/static/saml-metadata.xml</u></a>, and then click <strong>Next</strong>. The metadata XML file is a standard SAML metadata document that describes AWS as a relying party.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3381" src="https://cloudar.be/wp-content/uploads/2015/11/AD14.png" alt="AD14" width="300" height="233" /></p>
<p>4. Set the display name for the relying party and then click <strong>Next</strong>.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3355" src="https://cloudar.be/wp-content/uploads/2015/11/AD15.png" alt="AD15" width="300" height="233" /></p>
<p>5. We will ignore the MFA settings for now</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3356" src="https://cloudar.be/wp-content/uploads/2015/11/AD16.png" alt="AD16" width="300" height="241" /></p>
<p>6. Choose your authorization rules. For my scenario, I chose <strong>Permit all users to access this relying party</strong>. When you&#8217;re done, click <strong>Next</strong>.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3357" src="https://cloudar.be/wp-content/uploads/2015/11/AD17.png" alt="AD17" width="300" height="233" /></p>
<p>7. Review your settings and then click <strong>Next</strong>.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3358" src="https://cloudar.be/wp-content/uploads/2015/11/AD18.png" alt="AD18" width="300" height="233" /></p>
<p>You’re done configuring AWS as a relying party.</p>
<p>&nbsp;</p>
<h2>Configuring Claim Rules for the AWS Relying Party</h2>
<p>In these steps we’re going to add the claim rules so that the elements AWS requires and ADFS doesn&#8217;t provide by default (NameId, RoleSessionName, and Roles) are added to the SAML authentication response.</p>
<p>Right-click on the relying party (in this case Amazon Web Services) and then click <strong>Edit Claim Rules</strong>.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3359" src="https://cloudar.be/wp-content/uploads/2015/11/AD19.png" alt="AD19" width="300" height="101" /></p>
<p>Here are the steps I used to create the claim rules for NameId, RoleSessionName, and Roles.</p>
<h3><strong>Adding NameId</strong></h3>
<p>1. In the <strong>Edit Claim Rules for &lt;relying party&gt; </strong>dialog box, click <strong>Add Rule</strong>.</p>
<p>2. Select <strong>Transform an Incoming Claim </strong>and then click <strong>Next</strong>.</p>
<p>3. Use the following settings:<br />
a. <strong>Claim rule name</strong>: NameId<br />
b. <strong>Incoming claim type</strong>: Windows Account Name<br />
c. <strong>Outgoing claim type</strong>: Name ID<br />
d. <strong>Outgoing name ID format</strong>: Persistent Identifier<br />
e. <strong>Pass through all claim values:</strong>checked</p>
<p>4. Click<strong>Finish.</strong><br />
<img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3360" src="https://cloudar.be/wp-content/uploads/2015/11/AD20.png" alt="AD20" width="285" height="300" /></p>
<p>&nbsp;</p>
<h3><strong>Adding a RoleSessionName</strong></h3>
<p>1. Click <strong>Add Rule</strong></p>
<p>2. In the <strong>Claim rule template </strong>list, select <strong>Send LDAP Attributes as Claims</strong>.</p>
<p>3. Use the following settings:<br />
<strong>  Claim rule name</strong>: RoleSessionName<br />
<strong>  Attribute store</strong>: Active Directory<br />
<strong>  LDAP Attribute</strong>: E-Mail-Addresses<br />
<strong>  Outgoing Claim Type</strong>: https://aws.amazon.com/SAML/Attributes/RoleSessionName</p>
<p>4. Click <strong>Finish</strong><br />
<img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3361" src="https://cloudar.be/wp-content/uploads/2015/11/AD21.png" alt="AD21" width="285" height="300" /></p>
<p>&nbsp;</p>
<h3><strong>Adding Role Attributes</strong></h3>
<p>&nbsp;</p>
<p>1. Click <strong>Add Rule</strong>.</p>
<p>2. In the <strong>Claim rule template </strong>list, select <strong>Send Claims Using a Custom Rule </strong>and then click <strong>Next</strong>.</p>
<p>3. For <strong>Claim Rule Name</strong>, select <strong>Get AD Groups</strong>, and then in <strong>Custom rule</strong>, enter the following:</p>
<pre><code>
c:[Type == &quot;http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname&quot;, Issuer == &quot;AD AUTHORITY&quot;]
=&gt; add(store = &quot;Active Directory&quot;, types = (&quot;http://temp/variable&quot;), query = &quot;;tokenGroups;{0}&quot;, param = c.Value);
</code></pre>
<p>I use this in the next rule to transform the groups into IAM role ARNs.</p>
<p>4. Click <strong>OK</strong>.</p>
<p>5. Click <strong>Add Rule.</strong></p>
<p>This custom rule uses a script in the claim rule language that retrieves all the groups the authenticated user is a member of and places them into a temporary claim named http://temp/variable. (Think of this as a variable you can access later.)</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3362" src="https://cloudar.be/wp-content/uploads/2015/11/AD22.png" alt="AD22" width="290" height="300" /></p>
<p>6. Repeat the preceding steps, but this time enter <strong>Roles </strong>for <strong>Claim rule name </strong>and use the following script:</p>
<pre><code>
c:[Type == &quot;http://temp/variable&quot;, Value =~ &quot;(?i)^AWS-([\d]{12})&quot;] =&gt; issue(Type = &quot;https://aws.amazon.com/SAML/Attributes/Role&quot;, Value = RegExReplace(c.Value, &quot;AWS-([\d]{12})-&quot;, &quot;arn:aws:iam::$1:saml-provider/idp1,arn:aws:iam::$1:role/&quot;));
</code></pre>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3363" src="https://cloudar.be/wp-content/uploads/2015/11/AD23.png" alt="AD23" width="287" height="300" /></p>
<p>&nbsp;</p>
<p>7. Click <strong>OK.</strong></p>
<p>&nbsp;</p>
<h3><strong>Adjusting Session Duration</strong></h3>
<p>1. Click <strong>Add Rule</strong>.</p>
<p>2. In the <strong>Claim rule template </strong>list, select <strong>Send Claims Using a Custom Rule </strong>and then click <strong>Next</strong>.</p>
<p>3. For <strong>Claim Rule Name</strong>, select <strong>Session Duration</strong> and then in <strong>Custom rule</strong>, enter the following:</p>
<pre class="">=&gt; issue(Type = "https://aws.amazon.com/SAML/Attributes/SessionDuration", Value = "28800");</pre>
<p>(Adjust the value of 28800 seconds (8 hours) as appropriate.)</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium" src="https://d1.awsstatic.com/security-center/SecurityBlog/federated_auth_with_adfs_24.edae1e081bc5baeb1979fc2b398f29a81e35607c.png" width="807" height="514" /></p>
<h2>Testing the configuration</h2>
<p>1. In your adfs server, browse to the following address: <a href="https://localhost/adfs/ls/IdpInitiatedSignOn.aspx" target="_blank" rel="noopener noreferrer">https://localhost/adfs/ls/IdpInitiatedSignOn.aspx</a></p>
<p>If you&#8217;re using a locally signed certificate from IIS, you might get a certificate warning.<br />
On any other server/client, you need to replace localhost with the actual hostname of your adfs server.</p>
<p>2. Select <strong>Sign in to one of the following sites</strong>, select <strong>Amazon Web Services </strong>from the list, and then click <strong>Continue to Sign In</strong>.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3364" src="https://cloudar.be/wp-content/uploads/2015/11/AD24.png" alt="AD24" width="300" height="198" /></p>
<p>3. If prompted, enter in a username and password (remember to use Bob’s account).</p>
<p>You will be redirected to the <strong>Amazon Web Services Sign-In </strong>page.</p>
<p>4. Select a role and then click <strong>Sign In</strong>. (If you are mapped to only a single IAM role, you skip the role selection step and are automatically signed into the AWS Management Console.)</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3366" src="https://cloudar.be/wp-content/uploads/2015/11/AD26.png" alt="AD26" width="300" height="197" /></p>
<h2>ADDENDUM</h2>
<p>To give yourself a faster working demo download the below zip file.</p>
<p><a href="https://cloudar.be/wp-content/uploads/2015/11/demo-ad.zip">demo-ad</a></p>
<p>Give the cf-demo-ad-adfs.yaml to cloudformation.</p>
<p>It will create a 2012r2 server with a domain installed.</p>
<p>You can then login to the server(copy contents of zip file) and install the aws cli, and run the adfs.ps1 powershell script.</p>
<p>Steps the script will do:</p>
<ol>
<li>Prompt you for your aws account id</li>
<li>Install adfs feature</li>
<li>Add adfs service account</li>
<li>Create self-signed certificate</li>
<li>Counter adfs installation bug</li>
<li>Install adfs farm</li>
<li>Add Relying Party Trust</li>
<li>Create 2 active directory groups</li>
<li>Create test user bob -&gt; will ask for his password</li>
<li>Set emails for the domain</li>
<li>Disable IE security (else much popups)</li>
<li>Create saml provider</li>
<li>Create iam role&#8217;s</li>
</ol>
<p>Have fun!</p>
<blockquote><p>
Read Jeff Wierer&#8217;s original article here: <a href="http://blogs.aws.amazon.com/security/post/Tx71TWXXJ3UI14/Enabling-Federation-to-AWS-Using-Windows-Active-Directory-ADFS-and-SAML-2-0" target="_blank" rel="noopener noreferrer">http://blogs.aws.amazon.com/security/post/Tx71TWXXJ3UI14/Enabling-Federation-to-AWS-Using-Windows-Active-Directory-ADFS-and-SAML-2-0</a>
</p></blockquote>

		</div>
	</div>
</div></div></div></div><div class="vc_row-full-width vc_clearfix"></div>
</div><p>The post <a href="https://cloudar.be/awsblog/enabling-federation-to-aws-using-windows-active-directory-adfs-and-saml/">Enabling Federation to AWS Using Windows Active Directory, ADFS and SAML</a> appeared first on <a href="https://cloudar.be">Cloudar</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cloudar.be/awsblog/enabling-federation-to-aws-using-windows-active-directory-adfs-and-saml/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
