<?xml version="1.0" encoding="UTF-8" standalone="yes"?><oembed><version><![CDATA[1.0]]></version><provider_name><![CDATA[CloudForms Now]]></provider_name><provider_url><![CDATA[http://cloudformsblog.redhat.com]]></provider_url><author_name><![CDATA[Victor Estival Lopez]]></author_name><author_url><![CDATA[https://cloudformsblog.redhat.com/author/vestival271017/]]></author_url><title><![CDATA[CloudForms in AWS part&nbsp;2]]></title><type><![CDATA[link]]></type><html><![CDATA[<p>This part of the CloudForms in AWS blog series will walk you through how to make sure that CloudForms reaches its full potential in AWS.</p>
<p><strong>IMPORTANT</strong>: If you want SmartState analysis to work you need to register your AWS account with the <strong>cloud access </strong>program. Use the link below to enable cloud access:</p>
<p><a class="jive-link-external-small" href="https://engage.redhat.com/forms/cloud-access-registration" target="_blank" rel="nofollow noopener">https://engage.redhat.com/forms/cloud-access-registration</a></p>
<p><!--more--></p>
<p>Once you’ve registered and got confirmation you will see the <strong>RHEL-Atomic_7.4_HVM_GA-20180104-x86_64-1-Access2-GP2</strong> AMI under the “Private images” tab</p>
<p><a href="http://blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-12-at-9.26.50-AM.png"><img class="image-2333" src="https://i1.wp.com/blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-12-at-9.26.50-AM.png" alt="" width="1175" height="412" /></a></p>
<p>Before we configure CloudForms we need go to the AWS console and perform some configurations. First create the<strong> SNS topic</strong> for <strong>AWSConfig</strong> so that CloudForms can subscribe to messages. SNS stands for simple notification service. It enables CloudForms to subscribe to a topic which contains information about configuration change of AWS resources.</p>
<p><a href="http://blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-11-at-9.31.22-PM.png"><img class="image-2300" src="https://i2.wp.com/blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-11-at-9.31.22-PM.png" alt="" width="902" height="316" /></a></p>
<p>Once created you will something similar to the below:</p>
<p><a href="http://blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-11-at-9.32.39-PM.png"><img class="image-2301" src="https://i1.wp.com/blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-11-at-9.32.39-PM.png" alt="" width="718" height="177" /></a></p>
<p>Next, create an AWS S3 bucket to store logs of AWS Config and CloudTrail (api logs).</p>
<p><a href="http://blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-20-at-9.25.38-AM.png"><img class="image-2347" src="https://i2.wp.com/blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-20-at-9.25.38-AM.png" alt="" width="695" height="665" /></a></p>
<p>Enable AWS Config and make sure to choose the created S3 bucket as well as the SNS topic we created above.</p>
<p><a href="http://blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-20-at-5.21.59-PM.png"><img class="image-2351" src="https://i0.wp.com/blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-20-at-5.21.59-PM.png" alt="" width="785" height="880" /></a></p>
<p>To get events via CloudWatch and CloudTrail we will need to configure a new trail in CloudTrail. In CloudTrail create a new Trail with the following information. As you can see we can also reuse the previously created S3 bucket to store the logs.</p>
<p><a href="http://blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-20-at-5.36.23-PM.png"><img class="image-2352" src="https://i0.wp.com/blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-20-at-5.36.23-PM.png" alt="" width="1159" height="869" /></a></p>
<p>The last step to get events properly delivered through SNS. Therefore we need to create a new CloudWatch event rule.</p>
<p><a href="http://blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-20-at-5.38.19-PM.png"><img class="image-2353" src="https://i1.wp.com/blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-20-at-5.38.19-PM.png" alt="" width="1505" height="773" /></a></p>
<p>If you’ve done everything correctly, CloudForms will automatically create a new SQS queue named manageiq-awsconfig-queue which pulls data from the SNS AWSConfig_topic:</p>
<div class="">
<pre><span class="">INFO</span><span class=""> </span><span class="">--</span><span class=""> </span><span class="">:</span><span class=""> </span><span class="">MIQ</span><span class="">(</span><span class="">ManageIQ</span><span class="">::</span><span class="">Providers</span><span class="">::</span><span class="">Amazon</span><span class="">::</span><span class="">CloudManager</span><span class="">::</span><span class="">EventCatcher</span><span class="">::</span><span class="">Stream</span><span class="">#) Amazon SQS Queue manageiq-awsconfig-queue-5f61a1e9-6555-4f06-9c37-f3e6b7539a86 does not exist; creating queue
</span>
<span class="">INFO</span><span class=""> </span><span class="">--</span><span class=""> </span><span class="">:</span><span class=""> </span><span class="">MIQ</span><span class="">(</span><span class="">ManageIQ</span><span class="">::</span><span class="">Providers</span><span class="">::</span><span class="">Amazon</span><span class="">::</span><span class="">CloudManager</span><span class="">::</span><span class="">EventCatcher</span><span class="">::</span><span class="">Stream</span><span class="">#) Subscribing Queue <a class="jive-link-external-small" href="https://mojo.redhat.com/external-link.jspa?url=https%3A%2F%2Fsqs.us-east-1.amazonaws.com%2FXXXXXXXXXXX%2Fmanageiq-awsconfig-queue-5f61a1e9-6555-4f06-9c37-f3e6b7539a86" target="_blank" rel="nofollow noopener">https://sqs.us-east-1.amazonaws.com/XXXXXXXXXXX/manageiq-awsconfig-queue-5f61a1e9-6555-4f06-9c37-f3e6b7539a86</a> to arn:aws:sns:us-east-1:XXXXXXXXX:AWSConfig_topic</span>

<span class="">INFO</span><span class=""> </span><span class="">--</span><span class=""> </span><span class="">:</span><span class=""> </span><span class="">MIQ</span><span class="">(</span><span class="">ManageIQ</span><span class="">::</span><span class="">Providers</span><span class="">::</span><span class="">Amazon</span><span class="">::</span><span class="">CloudManager</span><span class="">::</span><span class="">EventCatcher</span><span class="">::</span><span class="">Stream</span><span class="">#) Created Amazon SQS Queue manageiq-awsconfig-queue-5f61a1e9-6555-4f06-9c37-f3e6b7539a86 and subscribed to AWSConfig_topic</span></pre>
</div>
<p>Also, you can test the for incoming events by stopping and starting an instance. This should be caught by the event catcher</p>
<pre><span class="">INFO</span><span class=""> </span><span class="">--</span><span class=""> </span><span class="">:</span><span class=""> </span><span class="">MIQ</span><span class="">(</span><span class="">ManageIQ</span><span class="">::</span><span class="">Providers</span><span class="">::</span><span class="">Amazon</span><span class="">::</span><span class="">CloudManager</span><span class="">::</span><span class="">EventCatcher</span><span class="">::</span><span class="">Stream</span><span class="">#) Found SNS Message with message type AWS_API_CALL_StartInstances coming from</span>

<span class="">INFO</span><span class=""> </span><span class="">--</span><span class=""> </span><span class="">:</span><span class=""> </span><span class="">MIQ</span><span class="">(</span><span class="">ManageIQ</span><span class="">::</span><span class="">Providers</span><span class="">::</span><span class="">Amazon</span><span class="">::</span><span class="">CloudManager</span><span class="">::</span><span class="">EventCatcher</span><span class="">::</span><span class="">Stream</span><span class="">#) Parsed event from SNS Message AWS_API_CALL_StartInstances coming from</span></pre>
<p>Next and this is kind of optional. The new smart state analysis in CloudForms is supposed to create the correct roles, policies and instance profiles for you. I prefer to create the policy myself for two main reasons.</p>
<ol>
<li>I know exactly what is happening</li>
<li>When having CloudForms create the policies you might run into a race condition and CloudForms will complain about “No agent is set up to process requests: Value (smartstate) for parameter iamInstanceProfile.name is invalid. Invalid IAM Instance Profile name”</li>
</ol>
<p>Create a trust policy for the role smartstate. Name the file ec2trustpolicy.json</p>
<div class="">
<pre><span class="">
{</span>

 <span class="">"Version"</span><span class="">:</span><span class=""> </span><span class="">"2012-10-17"</span><span class="">,</span>

 <span class="">"Statement"</span><span class="">:</span><span class=""> </span><span class="">{</span>

   <span class="">"Effect"</span><span class="">:</span><span class=""> </span><span class="">"Allow"</span><span class="">,</span>

   <span class="">"Principal"</span><span class="">:</span><span class=""> </span><span class="">{</span><span class="">"Service"</span><span class="">:</span><span class=""> </span><span class="">"ec2.amazonaws.com"</span><span class="">}</span><span class="">,</span>

   <span class="">"Action"</span><span class="">:</span><span class=""> </span><span class="">"sts:AssumeRole"</span>

 <span class="">}</span>

<span class="">}</span></pre>
<div class="">
<div class="j-rte-table"></div>
</div>
</div>
<p>Go ahead and create the role smartstate</p>
<div class="">
<pre><span class="">[</span><span class="">ec2</span><span class="">-</span><span class="">user</span><span class="">@</span><span class="">ip</span><span class="">-</span><span class="">172</span><span class="">-</span><span class="">31</span><span class="">-</span><span class="">14</span><span class="">-</span><span class="">85</span><span class=""> </span><span class="">~</span><span class="">]</span><span class="">$</span><span class=""> </span><span class="">aws </span><span class="">iam </span><span class="">create</span><span class="">-</span><span class="">role</span><span class=""> </span><span class="">--</span><span class="">role</span><span class="">-</span><span class="">name </span><span class="">smartstate</span><span class=""> </span><span class="">--</span><span class="">assume</span><span class="">-</span><span class="">role</span><span class="">-</span><span class="">policy</span><span class="">-</span><span class="">document </span><span class="">file</span><span class="">:</span><span class="">//ec2trustpolicy.json</span></pre>
<div class="">
<div class="j-rte-table"></div>
</div>
</div>
<p>We now create a custom policy which we will assign to the smartstate role.</p>
<div class="">
<div class="">
<pre><span class="">[</span><span class="">ec2</span><span class="">-</span><span class="">user</span><span class="">@</span><span class="">ip</span><span class="">-</span><span class="">172</span><span class="">-</span><span class="">31</span><span class="">-</span><span class="">14</span><span class="">-</span><span class="">85</span><span class=""> </span><span class="">~</span><span class="">]</span><span class="">$</span><span class="">cat </span><span class="">ssa_cfme_policy</span><span class="">.</span><span class="">json</span>

<span class="">{</span>

   <span class="">"Version"</span><span class="">:</span><span class=""> </span><span class="">"2012-10-17"</span><span class="">,</span>

   <span class="">"Statement"</span><span class="">:</span><span class=""> </span><span class="">[</span>

       <span class="">{</span>

           <span class="">"Effect"</span><span class="">:</span><span class=""> </span><span class="">"Allow"</span><span class="">,</span>

           <span class="">"Action"</span><span class="">:</span><span class=""> </span><span class="">[</span>

               <span class="">"ec2:*"</span><span class="">,</span>

               <span class="">"s3:*"</span><span class="">,</span>

               <span class="">"sqs:*"</span>

           <span class="">]</span><span class="">,</span>

           <span class="">"Resource"</span><span class="">:</span><span class=""> </span><span class="">[</span>

               <span class="">"*"</span>

           <span class="">]</span>

       <span class="">}</span>

   <span class="">]</span>

<span class="">}</span></pre>
</div>
</div>
<p>Add the policy to the role smartstate</p>
<div class="">
<pre> <span class="">[</span><span class="">ec2</span><span class="">-</span><span class="">user</span><span class="">@</span><span class="">ip</span><span class="">-</span><span class="">172</span><span class="">-</span><span class="">31</span><span class="">-</span><span class="">14</span><span class="">-</span><span class="">85</span><span class=""> </span><span class="">~</span><span class="">]</span><span class="">$</span><span class=""> </span><span class="">aws </span><span class="">iam </span><span class="">put</span><span class="">-</span><span class="">role</span><span class="">-</span><span class="">policy</span><span class=""> </span><span class="">--</span><span class="">role</span><span class="">-</span><span class="">name </span><span class="">smartstate</span><span class=""> </span><span class="">--</span><span class="">policy</span><span class="">-</span><span class="">name </span><span class="">cfmepermissions</span><span class=""> </span><span class="">--</span><span class="">policy</span><span class="">-</span><span class="">document </span><span class="">file</span><span class="">:</span><span class="">//ssa_cfme_policy.json</span></pre>
<div class="">
<div class="j-rte-table"></div>
</div>
</div>
<p>The next step is to create the instance profile. This is needed that the smartstate instance is allowed to perform actions against s3,sqs and ec2</p>
<div class="">
<div class="">
<pre><span class="">[</span><span class="">ec2</span><span class="">-</span><span class="">user</span><span class="">@</span><span class="">ip</span><span class="">-</span><span class="">172</span><span class="">-</span><span class="">31</span><span class="">-</span><span class="">14</span><span class="">-</span><span class="">85</span><span class=""> </span><span class="">~</span><span class="">]</span><span class="">$</span><span class=""> </span><span class="">aws </span><span class="">iam </span><span class="">create</span><span class="">-</span><span class="">instance</span><span class="">-</span><span class="">profile</span><span class=""> </span><span class="">--</span><span class="">instance</span><span class="">-</span><span class="">profile</span><span class="">-</span><span class="">name </span><span class="">smartstate</span>

<span class="">[</span><span class="">ec2</span><span class="">-</span><span class="">user</span><span class="">@</span><span class="">ip</span><span class="">-</span><span class="">172</span><span class="">-</span><span class="">31</span><span class="">-</span><span class="">14</span><span class="">-</span><span class="">85</span><span class=""> </span><span class="">~</span><span class="">]</span><span class="">$</span><span class=""> </span><span class="">aws </span><span class="">iam </span><span class="">add</span><span class="">-</span><span class="">role</span><span class="">-</span><span class="">to</span><span class="">-</span><span class="">instance</span><span class="">-</span><span class="">profile</span><span class=""> </span><span class="">--</span><span class="">instance</span><span class="">-</span><span class="">profile</span><span class="">-</span><span class="">name </span><span class="">smartstate</span><span class=""> </span><span class="">--</span><span class="">role</span><span class="">-</span><span class="">name </span><span class="">smartstate</span></pre>
</div>
<div class="">
<div class="j-rte-table"></div>
</div>
</div>
<p>Finally, you can now login to CloudForms.</p>
<p>On the top right corner go and click configure:</p>
<p><a href="http://blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-11-at-9.49.33-PM.png"><img class="image-2304" src="https://i1.wp.com/blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-11-at-9.49.33-PM.png" alt="" width="267" height="243" /></a></p>
<p>Turn on the smartproxy under roles. We will need that for the smart state analysis</p>
<p><a href="http://blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-11-at-9.50.21-PM.png"><img class="image-2305" src="https://i2.wp.com/blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-11-at-9.50.21-PM.png" alt="" width="250" height="34" /></a></p>
<p>Next click on the advanced tab on the right. Now, this is <strong>SUPER important!</strong> The OOTB configuration is not going to work. Search for agent_ami_login_user and change the value from ec2-user to cloud-user. It should look like this:</p>
<p><a href="http://blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-11-at-9.53.38-PM.png"><img class="image-2306" src="https://i2.wp.com/blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-11-at-9.53.38-PM.png" alt="" width="615" height="235" /></a></p>
<p>This is the user CloudForms will login with when it will initiate a SmartState analysis.</p>
<p>Finally let’s add the AWS provider. You should be familiar with what access and secret keys you need to add. Important, CloudForms will need at least poweruser access.</p>
<p><a href="http://blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-11-at-9.57.24-PM.png"><img class="image-2307" src="https://i0.wp.com/blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-11-at-9.57.24-PM.png" alt="" width="1014" height="484" /></a></p>
<p>Next hit validate on save. Don’t bother filling out the “SmartState Docker” tab as it doesn’t do anything if you fill it out at the same time.</p>
<p>Once saved go edit the provider again. Now go to the SmartState Docker tab. I am wondering who named these fields and the comment below. Would have been better to say “<em>Use registry.access.redhat.com credentials or RHN credentials required to perform ….</em>“. What you need is your RHN credentials. These are needed so that you can pull the smartstate image from the redhat docker registry.</p>
<p><a href="http://blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-11-at-9.56.33-PM.png"><img class="image-2308" src="https://i0.wp.com/blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-11-at-9.56.33-PM.png" alt="" width="1301" height="231" /></a></p>
<p>Hit save and you´re done.</p>
<p>You have now configured everything to perform a SmartState analysis in AWS.</p>
<p>Go to your AWS provider and click on an instance. Under the instance configurations tab click</p>
<p><a href="http://blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-11-at-10.04.00-PM.png"><img class="image-2310" src="https://i2.wp.com/blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-11-at-10.04.00-PM.png" alt="" width="336" height="94" /></a></p>
<p>You can then go to the top right corner and click on Configuration -&gt; tasks. You should see something like this</p>
<p><a href="http://blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-11-at-10.09.48-PM.png"><img class="image-2314" src="https://i2.wp.com/blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-11-at-10.09.48-PM.png" alt="" width="1868" height="66" /></a></p>
<p><a href="http://blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-11-at-10.14.14-PM.png"><img class="image-2317" src="https://i2.wp.com/blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-11-at-10.14.14-PM.png" alt="" width="1871" height="59" /></a></p>
<p>When everything is finished you will see</p>
<p><a href="http://blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-11-at-10.07.17-PM.png"><img class="image-2311" src="https://i2.wp.com/blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-11-at-10.07.17-PM.png" alt="" width="1447" height="515" /></a></p>
<p>The next post is going to be for the geeks under us. It will explain what is going on under the hood when smart state happens.</p>
<p>You can check the previous one as well <a href="https://cloudformsblog.redhat.com/2018/03/22/cloudforms-on-aws-part-1-series/#more-2351">here</a></p>
]]></html><thumbnail_url><![CDATA[https://i1.wp.com/blog.domb.net/wp-content/uploads/Screen-Shot-2018-03-12-at-9.26.50-AM.png?fit=440%2C330]]></thumbnail_url><thumbnail_width><![CDATA[439]]></thumbnail_width><thumbnail_height><![CDATA[154]]></thumbnail_height></oembed>