<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Raphael Bottino</title>
    <description>The latest articles on DEV Community by Raphael Bottino (@raphabot).</description>
    <link>https://dev.to/raphabot</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F374606%2F35b05fba-1ef1-4ba1-b4b0-b42d27c4a366.png</url>
      <title>DEV Community: Raphael Bottino</title>
      <link>https://dev.to/raphabot</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/raphabot"/>
    <language>en</language>
    <item>
      <title>Get to know your AWS Managed Policies</title>
      <dc:creator>Raphael Bottino</dc:creator>
      <pubDate>Tue, 04 Oct 2022 14:53:15 +0000</pubDate>
      <link>https://dev.to/aws-builders/get-to-know-your-aws-managed-policies-5g2e</link>
      <guid>https://dev.to/aws-builders/get-to-know-your-aws-managed-policies-5g2e</guid>
      <description>&lt;h2&gt;
  
  
  Understand what an AWS Managed Policy is and how a simple step can ensure you are using the appropriate one for your need
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp0gzuov44n4gd6i7t27w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp0gzuov44n4gd6i7t27w.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Have you ever googled &lt;em&gt;AWS managed policies list&lt;/em&gt;? What about &lt;em&gt;AWSLambdaExecute statements&lt;/em&gt;? Recently, once again, I found myself in a similar situation.&lt;/p&gt;

&lt;p&gt;But let's start from the beginning.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is an AWS Managed Policy?
&lt;/h2&gt;

&lt;p&gt;From its &lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;An &lt;em&gt;AWS managed policy&lt;/em&gt; is a standalone policy that is created and administered by AWS. &lt;em&gt;Standalone policy&lt;/em&gt; means that the policy has its own Amazon Resource Name (ARN) that includes the policy name. (…) AWS managed policies are designed to provide permissions for many common use cases. (…) AWS managed policies make it easier for you to assign appropriate permissions to users, groups, and roles than if you had to write the policies yourself.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In short, it is a special kind of IAM Policy that is curated and maintained by AWS and enables you to move faster, focusing more on your code and less about permission, leaving the latter to the pros at AWS.&lt;/p&gt;

&lt;p&gt;But how do you know if the service you are working with has a managed policy that you can use for your benefit?&lt;/p&gt;

&lt;h2&gt;
  
  
  Service Specific Managed Policies
&lt;/h2&gt;

&lt;p&gt;Reading the documentation, of course! Let's say the service in question here is AWS Lambda. A quick google search reveals the "Identity-based IAM policies for Lambda" &lt;a href="https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html" rel="noopener noreferrer"&gt;page&lt;/a&gt;. There, as you can see below, three different managed policies are suggested:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn094k3najhkwdvz69jib.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn094k3najhkwdvz69jib.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's say you now need to use Amazon Polly so your awesome bot can have an Alexa-like voice. Again, a quick search will take you to &lt;a href="https://docs.aws.amazon.com/polly/latest/dg/security_iam_id-based-policy-examples.html" rel="noopener noreferrer"&gt;its documentation&lt;/a&gt;, which lists two managed policies:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxj4sibtqm7pg0tm5qfru.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxj4sibtqm7pg0tm5qfru.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's move to something more complex and powerful, like theAWS Systems Manager, a service so comprehensive that it almost feels like multiple services in one. Googling will show you there are multiple SSM related AWS Managed Policies to use. What are the statements of &lt;strong&gt;AmazonSSMPatchAssociation&lt;/strong&gt; for instance?&lt;/p&gt;

&lt;h2&gt;
  
  
  You don't need to exercise your Google-fu
&lt;/h2&gt;

&lt;p&gt;If you know what managed policy you need more information on, you are good: an AWS CLI is all you need. And a bit of copying and paste.&lt;/p&gt;

&lt;p&gt;First you run &lt;code&gt;aws iam get-policy --policy-arn arn:aws:iam::aws:policy/AmazonSSMPatchAssociation&lt;/code&gt;. See the below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
aws iam get-policy &lt;span class="nt"&gt;--policy-arn&lt;/span&gt; arn:aws:iam::aws:policy/AmazonSSMPatchAssociation

&lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;"Policy"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"PolicyName"&lt;/span&gt;: &lt;span class="s2"&gt;"AmazonSSMPatchAssociation"&lt;/span&gt;,
        &lt;span class="s2"&gt;"PolicyId"&lt;/span&gt;: &lt;span class="s2"&gt;"ANPAZKAPJZG4EWLEL5ZX7"&lt;/span&gt;,
        &lt;span class="s2"&gt;"Arn"&lt;/span&gt;: &lt;span class="s2"&gt;"arn:aws:iam::aws:policy/AmazonSSMPatchAssociation"&lt;/span&gt;,
        &lt;span class="s2"&gt;"Path"&lt;/span&gt;: &lt;span class="s2"&gt;"/"&lt;/span&gt;,
        &lt;span class="s2"&gt;"DefaultVersionId"&lt;/span&gt;: &lt;span class="s2"&gt;"v1"&lt;/span&gt;,
        &lt;span class="s2"&gt;"AttachmentCount"&lt;/span&gt;: 1,
        &lt;span class="s2"&gt;"PermissionsBoundaryUsageCount"&lt;/span&gt;: 0,
        &lt;span class="s2"&gt;"IsAttachable"&lt;/span&gt;: &lt;span class="nb"&gt;true&lt;/span&gt;,
        &lt;span class="s2"&gt;"Description"&lt;/span&gt;: &lt;span class="s2"&gt;"Provide access to child instances for patch association operation."&lt;/span&gt;,
        &lt;span class="s2"&gt;"CreateDate"&lt;/span&gt;: &lt;span class="s2"&gt;"2020-05-13T16:00:42+00:00"&lt;/span&gt;,
        &lt;span class="s2"&gt;"UpdateDate"&lt;/span&gt;: &lt;span class="s2"&gt;"2020-05-13T16:00:42+00:00"&lt;/span&gt;,
        &lt;span class="s2"&gt;"Tags"&lt;/span&gt;: &lt;span class="o"&gt;[]&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Take note of the DefaultVersionId value, &lt;code&gt;v1&lt;/code&gt; in this example. Now, we run &lt;code&gt;aws iam get-policy-version --policy-arn arn:aws:iam::aws:policy/AmazonSSMPatchAssociation --version-id v1&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
aws iam get-policy-version &lt;span class="nt"&gt;--policy-arn&lt;/span&gt; arn:aws:iam::aws:policy/AmazonSSMPatchAssociation &lt;span class="nt"&gt;--version-id&lt;/span&gt; v1

&lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;"PolicyVersion"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"Document"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="s2"&gt;"Version"&lt;/span&gt;: &lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;,
            &lt;span class="s2"&gt;"Statement"&lt;/span&gt;: &lt;span class="o"&gt;[&lt;/span&gt;
                &lt;span class="o"&gt;{&lt;/span&gt;
                    &lt;span class="s2"&gt;"Effect"&lt;/span&gt;: &lt;span class="s2"&gt;"Allow"&lt;/span&gt;,
                    &lt;span class="s2"&gt;"Action"&lt;/span&gt;: &lt;span class="s2"&gt;"ssm:DescribeEffectivePatchesForPatchBaseline"&lt;/span&gt;,
                    &lt;span class="s2"&gt;"Resource"&lt;/span&gt;: &lt;span class="s2"&gt;"arn:aws:ssm:*:*:patchbaseline/*"&lt;/span&gt;
                &lt;span class="o"&gt;}&lt;/span&gt;,
                &lt;span class="o"&gt;{&lt;/span&gt;
                    &lt;span class="s2"&gt;"Effect"&lt;/span&gt;: &lt;span class="s2"&gt;"Allow"&lt;/span&gt;,
                    &lt;span class="s2"&gt;"Action"&lt;/span&gt;: &lt;span class="s2"&gt;"ssm:GetPatchBaseline"&lt;/span&gt;,
                    &lt;span class="s2"&gt;"Resource"&lt;/span&gt;: &lt;span class="s2"&gt;"arn:aws:ssm:*:*:patchbaseline/*"&lt;/span&gt;
                &lt;span class="o"&gt;}&lt;/span&gt;,
                &lt;span class="o"&gt;{&lt;/span&gt;
                    &lt;span class="s2"&gt;"Effect"&lt;/span&gt;: &lt;span class="s2"&gt;"Allow"&lt;/span&gt;,
                    &lt;span class="s2"&gt;"Action"&lt;/span&gt;: &lt;span class="s2"&gt;"tag:GetResources"&lt;/span&gt;,
                    &lt;span class="s2"&gt;"Resource"&lt;/span&gt;: &lt;span class="s2"&gt;"*"&lt;/span&gt;
                &lt;span class="o"&gt;}&lt;/span&gt;,
                &lt;span class="o"&gt;{&lt;/span&gt;
                    &lt;span class="s2"&gt;"Effect"&lt;/span&gt;: &lt;span class="s2"&gt;"Allow"&lt;/span&gt;,
                    &lt;span class="s2"&gt;"Action"&lt;/span&gt;: &lt;span class="s2"&gt;"ssm:DescribePatchBaselines"&lt;/span&gt;,
                    &lt;span class="s2"&gt;"Resource"&lt;/span&gt;: &lt;span class="s2"&gt;"*"&lt;/span&gt;
                &lt;span class="o"&gt;}&lt;/span&gt;
            &lt;span class="o"&gt;]&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;,
        &lt;span class="s2"&gt;"VersionId"&lt;/span&gt;: &lt;span class="s2"&gt;"v1"&lt;/span&gt;,
        &lt;span class="s2"&gt;"IsDefaultVersion"&lt;/span&gt;: &lt;span class="nb"&gt;true&lt;/span&gt;,
        &lt;span class="s2"&gt;"CreateDate"&lt;/span&gt;: &lt;span class="s2"&gt;"2020-05-13T16:00:42+00:00"&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we have what we were looking for, the Managed Policy statements. With that information in hand, we can make an informed decision aboutthis Policy matches the use case requirements.&lt;/p&gt;

&lt;h1&gt;
  
  
  Pro Tip
&lt;/h1&gt;

&lt;p&gt;If you do that enough, this can quickly become a tedious process. So let's fix that. Below you can find a Bash function that takes an AWS Managed Policy name as a parameter and outputs all the information that you might need.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;get-managed-policy&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;POLICY_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; aws iam get-policy-version &lt;span class="nt"&gt;--policy-arn&lt;/span&gt; arn:aws:iam::aws:policy/&lt;span class="nv"&gt;$POLICY_NAME&lt;/span&gt; &lt;span class="nt"&gt;--version-id&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;aws iam get-policy &lt;span class="nt"&gt;--policy-arn&lt;/span&gt; arn:aws:iam::aws:policy/&lt;span class="nv"&gt;$POLICY_NAME&lt;/span&gt; | jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.Policy.DefaultVersionId'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;

get-managed-policy AmazonSSMPatchAssociation

&lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;"PolicyVersion"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"Document"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="s2"&gt;"Version"&lt;/span&gt;: &lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;,
            &lt;span class="s2"&gt;"Statement"&lt;/span&gt;: &lt;span class="o"&gt;[&lt;/span&gt;
                &lt;span class="o"&gt;{&lt;/span&gt;
                    &lt;span class="s2"&gt;"Effect"&lt;/span&gt;: &lt;span class="s2"&gt;"Allow"&lt;/span&gt;,
                    &lt;span class="s2"&gt;"Action"&lt;/span&gt;: &lt;span class="s2"&gt;"ssm:DescribeEffectivePatchesForPatchBaseline"&lt;/span&gt;,
                    &lt;span class="s2"&gt;"Resource"&lt;/span&gt;: &lt;span class="s2"&gt;"arn:aws:ssm:*:*:patchbaseline/*"&lt;/span&gt;
                &lt;span class="o"&gt;}&lt;/span&gt;,
                &lt;span class="o"&gt;{&lt;/span&gt;
                    &lt;span class="s2"&gt;"Effect"&lt;/span&gt;: &lt;span class="s2"&gt;"Allow"&lt;/span&gt;,
                    &lt;span class="s2"&gt;"Action"&lt;/span&gt;: &lt;span class="s2"&gt;"ssm:GetPatchBaseline"&lt;/span&gt;,
                    &lt;span class="s2"&gt;"Resource"&lt;/span&gt;: &lt;span class="s2"&gt;"arn:aws:ssm:*:*:patchbaseline/*"&lt;/span&gt;
                &lt;span class="o"&gt;}&lt;/span&gt;,
                &lt;span class="o"&gt;{&lt;/span&gt;
                    &lt;span class="s2"&gt;"Effect"&lt;/span&gt;: &lt;span class="s2"&gt;"Allow"&lt;/span&gt;,
                    &lt;span class="s2"&gt;"Action"&lt;/span&gt;: &lt;span class="s2"&gt;"tag:GetResources"&lt;/span&gt;,
                    &lt;span class="s2"&gt;"Resource"&lt;/span&gt;: &lt;span class="s2"&gt;"*"&lt;/span&gt;
                &lt;span class="o"&gt;}&lt;/span&gt;,
                &lt;span class="o"&gt;{&lt;/span&gt;
                    &lt;span class="s2"&gt;"Effect"&lt;/span&gt;: &lt;span class="s2"&gt;"Allow"&lt;/span&gt;,
                    &lt;span class="s2"&gt;"Action"&lt;/span&gt;: &lt;span class="s2"&gt;"ssm:DescribePatchBaselines"&lt;/span&gt;,
                    &lt;span class="s2"&gt;"Resource"&lt;/span&gt;: &lt;span class="s2"&gt;"*"&lt;/span&gt;
                &lt;span class="o"&gt;}&lt;/span&gt;
            &lt;span class="o"&gt;]&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;,
        &lt;span class="s2"&gt;"VersionId"&lt;/span&gt;: &lt;span class="s2"&gt;"v1"&lt;/span&gt;,
        &lt;span class="s2"&gt;"IsDefaultVersion"&lt;/span&gt;: &lt;span class="nb"&gt;true&lt;/span&gt;,
        &lt;span class="s2"&gt;"CreateDate"&lt;/span&gt;: &lt;span class="s2"&gt;"2020-05-13T16:00:42+00:00"&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Another possible solution is to get access to all (currently) 973 AWS Managed Policies. The GitHub user &lt;a href="https://github.com/gene1wood" rel="noopener noreferrer"&gt;Gene Wood&lt;/a&gt; was nice enough to write a &lt;a href="https://gist.github.com/gene1wood/55b358748be3c314f956" rel="noopener noreferrer"&gt;gist&lt;/a&gt; with that list and the code he used to generate it. He also provided us with his code on how he generated it.&lt;/p&gt;

&lt;p&gt;There is a problem, though. AWS is always releasing new services and features and this list was last updated almost 3 years ago. How can one have an always up-to-date list of all AWS Managed Policies and all of its statements?&lt;/p&gt;

&lt;h2&gt;
  
  
  Search No More
&lt;/h2&gt;

&lt;p&gt;So I don't go over this pain again, and so others can also avoid it, I hacked together a simple website that, once a day, updates istself to make sure you have an accessible and updated list of all AWS Managed Policies right from your browser.&lt;/p&gt;

&lt;p&gt;Introducing… &lt;a href="https://awsmanagedpolicies.io" rel="noopener noreferrer"&gt;awsmanagedpolicies.io&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl33avyuzdifhy0im7knn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl33avyuzdifhy0im7knn.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://awsmanagedpolicies.io" rel="noopener noreferrer"&gt;awsmanagedpolicies.io&lt;/a&gt; is a simple-to-use, always up-to-date, accessible site that lists all of the AWS Managed Policies in a simple way, with a simple-but-it-works search bar to filter down the list&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft5mfn6w4bpmdmwn3hap2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft5mfn6w4bpmdmwn3hap2.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you click any of the entries, it expands to show you the definition of said AWS Managed Policy:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9vggzp9ntpvtp5aobfzo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9vggzp9ntpvtp5aobfzo.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you just need a JSON file that always has the most recent list of AWS Managed Policies and its definitions you can bookmark this &lt;a href="https://awsmanagedpolicies.io/aws-managed-policies.json" rel="noopener noreferrer"&gt;link&lt;/a&gt; instead!&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;

&lt;p&gt;Of course, this website is 100% built on top of AWS and 100% Serverless! Its infrastructure was defined using CDK (TypeScript), and it contains, among other things, a lambda to fetch the latest AWS Managed Policies, an S3 Bucket to host the files, and a CloudFront distribution to serve the content to you.&lt;/p&gt;

&lt;p&gt;As soon as I publish its code on GitHub and write an article on how was it to develop the site and how it works, I'll update this article with the links.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;AWS Managed Policies are a great way to kick start your newest project. However, always make sure you are using the appropriate one. The best way to do it is verifying its statements via CLI or through the website &lt;a href="https://awsmanagedpolicies.io" rel="noopener noreferrer"&gt;awsmangedpolicies.io&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Full Disclosure
&lt;/h2&gt;

&lt;p&gt;I decided to finally buy the domain, finalize the website, and write this article a few days ago. I started this project a year and half ago, give or take. Little did I know that today, there is an amazing solution to this problem, created by the AWS Hero &lt;a href="https://aws.amazon.com/developer/community/heroes/ian-mckay/" rel="noopener noreferrer"&gt;Ian Mckay&lt;/a&gt;, called &lt;a href="https://aws.permissions.cloud" rel="noopener noreferrer"&gt;aws.permissions.cloud&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I highly recommend going to his site if you need more information than just a list of the AWS Managed Policies and their definitions, but also metrics like how many AWS Managed Policies are there, if a policy might expose a resource to the public, etc.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>cli</category>
      <category>iam</category>
    </item>
    <item>
      <title>Kick Starting Your Cloud Career</title>
      <dc:creator>Raphael Bottino</dc:creator>
      <pubDate>Mon, 28 Jun 2021 19:15:55 +0000</pubDate>
      <link>https://dev.to/raphabot/kick-starting-your-cloud-career-5fn1</link>
      <guid>https://dev.to/raphabot/kick-starting-your-cloud-career-5fn1</guid>
      <description>&lt;p&gt;&lt;small&gt;&lt;em&gt;Originally published at:            &lt;a href="https://community.skycrafters.io/t/kick-starting-your-cloud-career/259"&gt;https://community.skycrafters.io/t/kick-starting-your-cloud-career/259&lt;/a&gt;&lt;/em&gt;&lt;/small&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;You might be new to the tech industry – or maybe you’ve been working in data centers for a while – but you decided it’s finally time to start you cloud career. What now?&lt;/span&gt;&lt;/p&gt;

&lt;h2&gt;
&lt;span&gt;Should you get certified?&lt;/span&gt;&lt;span&gt; &lt;/span&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;span&gt;There is a long debate in our forum about &lt;a href="https://community.skycrafters.io/t/certifications/87"&gt;whether or not you should pursue certification&lt;/a&gt; as part of your cloud career roadmap&lt;/span&gt;&lt;span&gt;. Some think that, in one hand, holding a certification doesn’t show content knowledge in itself, but in the other, it shows eagerness to learn. &lt;/span&gt;&lt;span&gt;It’s true that &lt;/span&gt;&lt;span&gt;certifications are no substitute to hands-on experience, but the goal of achieving &lt;/span&gt;&lt;span&gt;one &lt;/span&gt;&lt;span&gt;might be a great way to motivate yourself to learn a new skill&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;Keep in mind, that&lt;/span&gt;&lt;span&gt; a certification may not make your resume shine brighter than others, but it might be a requirement for the role&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;Watch out, though&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;Having too many certifications publicly, in a&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt; email signature or &lt;/span&gt;&lt;span&gt;LinkedIn&lt;/span&gt;&lt;span&gt;, might come off as bragging!&lt;/span&gt;&lt;/p&gt;

&lt;h2&gt;
&lt;span&gt;Exam Training&lt;/span&gt;&lt;span&gt; &lt;/span&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;span&gt;Once you decide to pursue a certification, you’ll have countless hours of study ahead of you. &lt;/span&gt;&lt;span&gt;The question now is, &lt;/span&gt;&lt;span&gt;should you do training in person or online? With some parts of the world slowly going back to business &lt;/span&gt;&lt;span&gt;as usual (as much as possible), in person learning is now, once again, a possibility. &lt;/span&gt;&lt;span&gt;Which one works best for you? This topic, also &lt;/span&gt;&lt;a href="https://community.skycrafters.io/t/is-online-training-a-good-option/225"&gt;&lt;span&gt;previously discussed by Skycrafters&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, is a really hot one!&lt;/span&gt;&lt;span&gt; Let’s go over the pros and cons of each.&lt;/span&gt;&lt;/p&gt;

&lt;h3&gt;
&lt;span&gt;Online&lt;/span&gt;&lt;span&gt; &lt;/span&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Pros: &lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;span&gt;Being able to playback content fas&lt;/span&gt;&lt;span&gt;ter or slower depending on familiarity with the topic&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;span&gt;Easier, since it can be done from anywhere&lt;/span&gt;&lt;span&gt; &lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Sometimes, free&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons: &lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;span&gt;Easy to have your mind &lt;/span&gt;&lt;span&gt;wandering to something else (after all, your Slack and phone are right there!)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;span&gt;The lon&lt;/span&gt;&lt;span&gt;eliness &lt;/span&gt;&lt;span&gt;of not having someone to discuss the coursework with on a daily basis&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
&lt;span&gt;In Person&lt;/span&gt;&lt;span&gt; &lt;/span&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Pros: &lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;span&gt;Closeness to other people to exchange &lt;/span&gt;&lt;span&gt;ideas and thoughts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;A live instructor to consult with in real time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons: &lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Harder to deal with boring topics/classes&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Usually more expensive&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;span&gt;So, which one is the best? This is a totally personal choice &lt;/span&gt;&lt;span&gt;based on how you value each of the bullet points above. I’d personally pick in person training anytime, &lt;/span&gt;&lt;span&gt;because I get easily &lt;/span&gt;&lt;span&gt;distrac&lt;/span&gt;&lt;span&gt;… Sorry, I was checking my phone. Where were we again?&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;

&lt;h2&gt;
&lt;span&gt;Vendor lock-in in the Cloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;span&gt;Cloud computing is great, there is no denying that. &lt;/span&gt;&lt;span&gt;As someone that is learning &lt;/span&gt;&lt;span&gt;a new technology, &lt;/span&gt;&lt;span&gt;especially&lt;/span&gt;&lt;span&gt; if you are aiming at a particular &lt;/span&gt;&lt;span&gt;certification, it’s easy to &lt;/span&gt;&lt;span&gt;get 100% &lt;/span&gt;&lt;span&gt;focused &lt;/span&gt;&lt;span&gt;on just one Cloud Service Provider for a while, like AWS for instance. &lt;/span&gt;&lt;span&gt;If you ever need to switch and learn more &lt;/span&gt;&lt;span&gt;about Azure, &lt;/span&gt;&lt;span&gt;it’s not that hard to pivot from one to the other. After all, the overall &lt;/span&gt;&lt;span&gt;concepts are so similar that even Azure itself &lt;/span&gt;&lt;span&gt;provides a really nice &lt;/span&gt;&lt;a href="https://docs.microsoft.com/en-us/azure/architecture/aws-professional/services"&gt;&lt;span&gt;guide on &lt;/span&gt;&lt;span&gt;how their services compare to AWS’&lt;/span&gt;&lt;/a&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;

&lt;h3&gt;The dream of cloud-agnostic&lt;/h3&gt;

&lt;p&gt;&lt;span&gt;However, the s&lt;/span&gt;&lt;span&gt;tory isn’t as simple as providers like to paint. Vendor lock-in is a true &lt;/span&gt;&lt;span&gt;challenge that the &lt;/span&gt;&lt;a href="https://community.skycrafters.io/t/vendor-lock-in-and-the-cloud/146"&gt;&lt;span&gt;Skycrafters community has been discussing&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;and many consider a pipe dream. A dream because&lt;/span&gt;&lt;span&gt;, a truly cloud-agnostic environment, would be able to run on any vendor environment, or even local. That allows the organization to pursue lower costs, whenever that is available from a competing vendor, but also a “get out of jail card” in case your current vendor becomes a &lt;/span&gt;&lt;span&gt;competitor with a &lt;/span&gt;&lt;span&gt;brand new&lt;/span&gt;&lt;span&gt; service release. It’s a dream, however, because &lt;/span&gt;&lt;span&gt;it can be expensive &lt;/span&gt;&lt;span&gt;– in different ways – &lt;/span&gt;&lt;span&gt;to run such a workload&lt;/span&gt;&lt;span&gt;. If you try to escape using Amazon SQS, for instance, you might want to leverage &lt;/span&gt;&lt;span&gt;open-source&lt;/span&gt;&lt;span&gt; solutions like RabbitMQ. But &lt;/span&gt;&lt;span&gt;now, you need to &lt;/span&gt;&lt;span&gt;deploy and &lt;/span&gt;&lt;span&gt;maintain a new stack of infra service that isn’t directly delivering value to your customers. &lt;/span&gt;&lt;span&gt;Cloud computing is all about &lt;/span&gt;&lt;span&gt;taking &lt;/span&gt;&lt;span&gt;the most&lt;/span&gt;&lt;span&gt; of the &lt;a href="https://aws.amazon.com/compliance/shared-responsibility-model/"&gt;Shared Responsibility Model&lt;/a&gt;, and running your own &lt;/span&gt;&lt;span&gt;infrastructure services &lt;/span&gt;&lt;span&gt;isn’t the way to maximize it.&lt;/span&gt;&lt;/p&gt;

&lt;h3&gt;Kubernetes to the rescue?&lt;/h3&gt;

&lt;p&gt;&lt;span&gt;Kubernetes is viewed as a way to minimize vendor lock in &lt;/span&gt;&lt;span&gt;through&lt;/span&gt;&lt;span&gt; its open &lt;/span&gt;&lt;span&gt;architecture&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;It can take servers&lt;/span&gt;&lt;span&gt;, no matter if running on AWS, Azure, GCP, on premises, etc&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;and transform them in &lt;/span&gt;&lt;span&gt;computing capacity for this big cluster running spread across all of them. But it isn’t &lt;/span&gt;&lt;span&gt;a bed of roses either, according to those that &lt;/span&gt;&lt;span&gt;have experience on it. &lt;/span&gt;&lt;span&gt;Running &lt;/span&gt;&lt;span&gt;it&lt;/span&gt;&lt;span&gt; yourself can be really painful, and exactly why most providers also offer their own flavor of Kubernetes-as-a-Service. But wouldn’t using it make you go back to the lock in stage?&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Don’t use it just because it’s a hot topic, as many do. If you ever learn and use it, make sure it makes sense to your challenge.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;The goal here is to make clear you understand you shouldn’t create a &lt;/span&gt;&lt;span&gt;vendor&lt;/span&gt;&lt;span&gt;–&lt;/span&gt;&lt;span&gt;lock-in&lt;/span&gt;&lt;span&gt; situation for y&lt;/span&gt;&lt;span&gt;ourself. Make sure you don’t just understand how to use your provider of choice services, but also the reasoning behind it and its concepts.&lt;/span&gt;&lt;/p&gt;

&lt;h2&gt;
&lt;span&gt;Infrastructure as Code&lt;/span&gt;&lt;span&gt; &lt;/span&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;span&gt;Now that you dominated &lt;/span&gt;&lt;span&gt;all the cloud knowledge you were seeking and learned all the cool stuff that your cloud provider of &lt;/span&gt;&lt;span&gt;choice has to offer, you also need to learn that you rarely are going to use its dashboard to build anyth&lt;/span&gt;&lt;span&gt;ing for real. The dashboard is great for labs, tests, demos or to learn something new, but not for production environment. Production environment requires &lt;/span&gt;&lt;span&gt;predictability&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;agility&lt;/span&gt;&lt;span&gt;, consistency&lt;/span&gt;&lt;span&gt;, minimization of risk&lt;/span&gt;&lt;span&gt; and reproducibility. &lt;/span&gt;&lt;span&gt;If you try a thousand times to create a simple S3 bucket in AWS via its dashboard, it’s almost guaranteed that you are going to make a mistake at least once&lt;/span&gt;&lt;span&gt; and, even if you nailed it,&lt;/span&gt;&lt;span&gt; it would &lt;/span&gt;&lt;span&gt;take you a lot of time. Hence, Infrastructure as &lt;/span&gt;&lt;span&gt;Code&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;IaC)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;IaC is a way to describe your infrastructure as, you guessed it, code. As much as software is defined in lines of code, so is the infrastructure. &lt;/span&gt;&lt;span&gt;You can write code that can define a thousand different S3 buckets and, as you execute it, you would reliable and &lt;/span&gt;&lt;span&gt;quickly have a thousand buckets. No mistakes made.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;To give you &lt;/span&gt;&lt;span&gt;an&lt;/span&gt;&lt;span&gt; better idea on what an IaC would look like, here’s a quick example:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;

&lt;pre&gt;&lt;span&gt;Resources:&lt;/span&gt; 
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;S3Bucket:&lt;/span&gt; 
&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Type:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;'&lt;/span&gt;&lt;span&gt;AWS::&lt;/span&gt;&lt;span&gt;S3::Bucket'&lt;/span&gt; 
&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Properties:&lt;/span&gt; 
&lt;span&gt;      &lt;/span&gt;&lt;span&gt;BucketName&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MY-REALLY-COOL-BUCKET&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;span&gt;As &lt;/span&gt;&lt;a href="https://community.skycrafters.io/t/the-state-of-azure-iac/163?u=raphabot"&gt;&lt;span&gt;our members previously discussed&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, there are &lt;/span&gt;&lt;span&gt;a lot of different IaC flavors, &lt;/span&gt;&lt;span&gt;some native, some &lt;/span&gt;&lt;span&gt;open-source&lt;/span&gt;&lt;span&gt;, some &lt;/span&gt;&lt;span&gt;multi-cloud&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;To name a few that you might want to check out, we have:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;span&gt;CloudFormation – AWS Native and YAML/JSON based&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;
&lt;span&gt;Azure Resource &lt;/span&gt;&lt;span&gt;Manager(&lt;/span&gt;&lt;span&gt;ARM) – Azure native and it has its own DSL (D&lt;/span&gt;&lt;span&gt;omain-Specific Language)&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;span&gt;Terraform – Open-source, &lt;/span&gt;&lt;span&gt;multi-cloud&lt;/span&gt;&lt;span&gt; and &lt;/span&gt;&lt;span&gt;it uses its own DSL&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;span&gt;CDK &lt;/span&gt;&lt;span&gt;–&lt;/span&gt;&lt;span&gt; Newer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AWS &lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;ative &lt;/span&gt;&lt;span&gt;offering that is &lt;/span&gt;&lt;span&gt;open-source&lt;/span&gt;&lt;span&gt; and &lt;/span&gt;&lt;span&gt;you can code using your &lt;/span&gt;&lt;span&gt;favorite &lt;/span&gt;&lt;span&gt;programming language&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;span&gt;Bicep&lt;/span&gt;&lt;span&gt;– Newer Azure native offering that is open-source and has its own DSL&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;span&gt;Pulumi&lt;/span&gt;&lt;span&gt; – New open-source &lt;/span&gt;&lt;span&gt;offering, that is &lt;/span&gt;&lt;span&gt;multi-cloud&lt;/span&gt;&lt;span&gt; and &lt;/span&gt;&lt;span&gt;can code &lt;/span&gt;&lt;span&gt;using&lt;/span&gt;&lt;span&gt; your favorite programming language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;span&gt;And since IaC is easily replicable, you can take your time to build one really &lt;/span&gt;&lt;span&gt;well &lt;/span&gt;&lt;span&gt;crafted&lt;/span&gt;&lt;span&gt; and documented template and reuse it across your projects, organization, and even publicly share with other members of the community! Which brings us &lt;/span&gt;&lt;span&gt;to…&lt;/span&gt;&lt;/p&gt;

&lt;h2&gt;
&lt;span&gt;Best practices in the cloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;span&gt;This is another great &lt;/span&gt;&lt;a href="https://community.skycrafters.io/t/understanding-best-practices-when-building-in-the-cloud/181"&gt;&lt;span&gt;topic our members are discussing&lt;/span&gt;&lt;/a&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Building confidently in the cloud can be challenging. Often, we use a technology and find out later that we could have been using it bette&lt;/span&gt;&lt;span&gt;r.&lt;/span&gt;&lt;span&gt; There are hund&lt;/span&gt;&lt;span&gt;reds &lt;/span&gt;&lt;span&gt;of different ways to build in the cloud using the providers’ services. &lt;/span&gt;&lt;span&gt;And, despite the default configuration for many of them being “good enough”, “good enough” often times doesn’t cut it.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;That’s exactly why many providers offer &lt;/span&gt;&lt;span&gt;their set of best practices&lt;/span&gt;&lt;span&gt;, usually called Well Architected Framework, or WAF for short. Taking AWS as example here, &lt;/span&gt;&lt;a href="https://aws.amazon.com/architecture/well-architected/"&gt;&lt;span&gt;their WAF&lt;/span&gt;&lt;/a&gt;&lt;span&gt; is divided in five pillars: Cost Optimization, &lt;/span&gt;&lt;span&gt;Operational Excellence, Security, Performance and &lt;/span&gt;&lt;span&gt;Reliability. &lt;/span&gt;&lt;span&gt;Each pillar &lt;/span&gt;&lt;span&gt;has their own set of white papers that explain &lt;/span&gt;&lt;span&gt;thoroughly how to achieve the state-of-the-art &lt;/span&gt;&lt;span&gt;usage of their services&lt;/span&gt;&lt;span&gt;, while understanding the balance between the five pillars.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;As it can take a while to build well-architected architectures for your projects, the combination of WAF with IaC is really powerful. &lt;/span&gt;&lt;span&gt;Whenever you &lt;/span&gt;&lt;span&gt;write your own IaC templates that build &lt;/span&gt;&lt;span&gt;well-&lt;/span&gt;&lt;span&gt;architected&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;architectures&lt;/span&gt;&lt;span&gt;, you can&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;reuse&lt;/span&gt;&lt;span&gt; them across your applications, saving time and bringing &lt;/span&gt;&lt;span&gt;your environment to the forefront of what the &lt;/span&gt;&lt;span&gt;cloud providers can offer.&lt;/span&gt;&lt;/p&gt;

&lt;h2&gt;
&lt;span&gt;Hybrid Cloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;span&gt;Hybrid cloud is a &lt;/span&gt;&lt;span&gt;really hot topic right next to m&lt;/span&gt;&lt;span&gt;ulti-cloud that our&lt;/span&gt; &lt;a href="https://community.skycrafters.io/t/hybrid-cloud-adoption/242?u=raphabot"&gt;&lt;span&gt;community is debating&lt;/span&gt;&lt;/a&gt;&lt;span&gt;. First, let’s take NIST’s &lt;/span&gt;&lt;span&gt;definition&lt;/span&gt;&lt;span&gt; for it:&lt;/span&gt;&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;span&gt;The cloud infrastructure is a composition of two or more distinct cloud infrastructures (private, community, or public) that remain unique entities, but are bound together by standardized or proprietary technology that enables data and application portability (e.g., cloud bursting for load balancing between clouds).&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;span&gt;Although NIST’s cloud computing definition is taken as the de facto way to describe&lt;/span&gt;&lt;span&gt; it, &lt;/span&gt;&lt;span&gt;the hybrid cloud &lt;/span&gt;&lt;span&gt;approach is mostly used when there is a combination of one or more public providers &lt;/span&gt;&lt;b&gt;&lt;span&gt;and&lt;/span&gt;&lt;/b&gt;&lt;span&gt; a private cloud to support a&lt;/span&gt;&lt;span&gt;n organization IT needs.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;This is particularly &lt;/span&gt;&lt;span&gt;interesting for organizations &lt;/span&gt;&lt;span&gt;that have restrictions on &lt;/span&gt;&lt;span&gt;how they process certain types of data, like banks&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; This allows them to leverage the public cloud to easily and cheaply scale as needed while maintaining the &lt;/span&gt;&lt;span&gt;costumer’s data local to their data center.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;It’s important to note, however, that being able to pull this kind of scenario off is really challenging, since &lt;/span&gt;&lt;span&gt;it can be &lt;/span&gt;&lt;span&gt;particularly&lt;/span&gt;&lt;span&gt; hard to &lt;/span&gt;&lt;span&gt;separate the data &lt;/span&gt;&lt;span&gt;access &lt;/span&gt;&lt;span&gt;through&lt;/span&gt;&lt;span&gt; Identity Access Management &lt;/span&gt;&lt;span&gt;across clouds. &lt;/span&gt;&lt;span&gt;Also, &lt;/span&gt;&lt;span&gt;dedicated links between the provider data center and your &lt;/span&gt;&lt;span&gt;organization can be necessary because of the latency introduced by internet access, and they can be quite expensive.&lt;/span&gt;&lt;/p&gt;

&lt;h2&gt;
&lt;span&gt;Com&lt;/span&gt;&lt;span&gt;plement your studies with Podcasts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;span&gt;You probably can’t spend the entire day studying. &lt;/span&gt;&lt;span&gt;At some point &lt;/span&gt;&lt;span&gt;you are going to find yourself &lt;/span&gt;&lt;span&gt;doing something manual and boring that doesn’t take much of your brain energy. Riding &lt;/span&gt;&lt;span&gt;the subway or driving a car to the office (remember those?) is a good example, but it might also be cleaning your place or mowing your lawn. This is the perfect time to expand your cloud skills by&lt;/span&gt;&lt;span&gt; listening to a good podcast. &lt;a href="https://community.skycrafters.io/t/what-podcasts-have-you-been-listening-to/235"&gt;Our members have compiled a good set of podcasts&lt;/a&gt; that I’m happy to share with you here:&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;span&gt;Screaming in the Cloud, by Corey Quinn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;span&gt;The &lt;/span&gt;&lt;span&gt;Idealcast&lt;/span&gt;&lt;span&gt; with Gene Kim&lt;/span&gt;&lt;span&gt; &lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;span&gt;Talking Serverless, by Ryan Jones&lt;/span&gt;&lt;span&gt; &lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;span&gt;The New Stack Makers, by The New Stack&lt;/span&gt;&lt;span&gt; &lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;span&gt;Mik&lt;/span&gt;&lt;span&gt; + One, by Dr. &lt;/span&gt;&lt;span&gt;Mik&lt;/span&gt;&lt;span&gt; Kersten&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Girls In Tech podcast&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Blinkist&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;
&lt;span&gt;Cloud Security Podcast&lt;/span&gt;&lt;span&gt; &lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;span&gt;Keep in mind that not all of them are &lt;/span&gt;&lt;span&gt;necessarily cloud related, but they might help you develop other skills and &lt;/span&gt;&lt;span&gt;ares&lt;/span&gt;&lt;span&gt; of expertise to help you in your cloud career. After all, &lt;/span&gt;&lt;span&gt;technical &lt;/span&gt;&lt;span&gt;ins’t&lt;/span&gt;&lt;span&gt; binary and &lt;/span&gt;&lt;span&gt;the cloud space isn’t just for those in the far&lt;/span&gt;&lt;span&gt;–&lt;/span&gt;&lt;span&gt;right spectrum of &lt;/span&gt;&lt;span&gt;it&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;

&lt;h2&gt;
&lt;span&gt;Closing Notes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;span&gt;Cloud computing can get &lt;/span&gt;&lt;span&gt;challenging&lt;/span&gt;&lt;span&gt; really quickly, but it can also be exciting and &lt;/span&gt;&lt;span&gt;fun. &lt;/span&gt;&lt;span&gt;Especially,&lt;/span&gt;&lt;span&gt; when you have a &lt;/span&gt;&lt;span&gt;number of peers to work and innovate with. It doesn’t matter if you are a seasoned cloud &lt;/span&gt;&lt;span&gt;practitioner&lt;/span&gt;&lt;span&gt;, or if you are just starting out, Skycrafters can be a place for you to network, find answers quickly and bounce ideas off &lt;/span&gt;&lt;span&gt;other members while learning in the process.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;Skycrafters is home of great curated content, &lt;/span&gt;&lt;span&gt;amazing open-source code to &lt;/span&gt;&lt;span&gt;use or contribute to, and &lt;/span&gt;&lt;span&gt;a safe place where I hope you can grow your cloud career and skills.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;What are you waiting for? Skycrafters is 100% free, no &lt;/span&gt;&lt;span&gt;gimmicks, and &lt;/span&gt;&lt;span&gt;joining it can be a &lt;/span&gt;&lt;span&gt;stepping stone&lt;/span&gt;&lt;span&gt; for your cloud career and those around you.&lt;/span&gt;&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>career</category>
      <category>cloudskills</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Extra! Extra! Amazon AppFlow is Released!</title>
      <dc:creator>Raphael Bottino</dc:creator>
      <pubDate>Thu, 30 Apr 2020 14:41:15 +0000</pubDate>
      <link>https://dev.to/raphabot/extra-extra-amazon-appflow-is-released-2lof</link>
      <guid>https://dev.to/raphabot/extra-extra-amazon-appflow-is-released-2lof</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Have you heard about Amazon AppFlow? It’s a brand new service from AWS that allows you to easily integrate SaaS applications such as SalesForce and Marketo to AWS services, such as S3 or Snowflake.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--70m2ioco--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/600/1%2AS2yFxapYZqnickjGrfXD7Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--70m2ioco--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/600/1%2AS2yFxapYZqnickjGrfXD7Q.png" alt="Look: Amazon AppFlow logo!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yet another day, yet another new AWS release. Even on challenging times with the current Covid-19 pandemic still slowing the global economy down, AWS shows that it is on full-throttle mode and released a new service last week called Amazon AppFlow.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is it?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--p8ahok_x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/0%2ALgc4OFMRg5BqTN9m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--p8ahok_x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/0%2ALgc4OFMRg5BqTN9m.png" alt="Quick summary on how Amazon AppFlow works."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pretty much paraphrasing the announcement, Amazon AppFlow is a fully managed integration service that enables you to securely transfer data between Software-as-a-Service (SaaS) applications and AWS services, in just a few clicks. As pretty much everything else on AWS, with AppFlow, you can run data flows at nearly any scale at the frequency you choose, paying just for flow run and data processed, with no upfront charges. For those that are security-aware (if you aren't, you should!), AppFlow automatically encrypts data in motion.&lt;/p&gt;

&lt;h2&gt;
  
  
  …and what does it mean?
&lt;/h2&gt;

&lt;p&gt;It means 0-time invested to learn both the source's and destination's API. With a few clicks you can, for instance, backup all customer support cases from SalesForce to S3 on a weekly basis or daily push a list of new Leads from Marketo to AWS SnowFlake, allowing your team to quickly understand your leads behavior, all with no coding required.&lt;/p&gt;

&lt;p&gt;But since I said that you should be security-aware, you might be thinking… "Can I leverage that for security purposes?" Yes! You can leverage this non-security related service to help you with your security.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using it for Security
&lt;/h2&gt;

&lt;p&gt;Trend Micro is the only Security vendor to be an AppFlow launch partner, which allows AWS and Trend Micro Cloud One customers to create AppFlow flows using Workload Security data as input, easily moving data from this security service to different destinations.&lt;/p&gt;

&lt;p&gt;OK. AppFlow looks cool. The SalesForce and Marketo examples look cool. Having a security vendor like Trend Micro being a launch partner also looks cool. But how to use it?&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's get our hands dirty
&lt;/h2&gt;

&lt;p&gt;Of course, being the technical-curious person that I am, reading the release notes and examples are definitely not enough. I need to get my hands dirty. So, feel free to follow me on this journey.&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating our First Flow
&lt;/h3&gt;

&lt;p&gt;First, of course, let's hit the AppFlow dashboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bUS75ZK7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2AW7Lct6J_4l4xUfIrUbFiNA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bUS75ZK7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2AW7Lct6J_4l4xUfIrUbFiNA.png" alt="Amazon AppFlow dashboard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we click the bright orange "Create flow" button, we will be taken to the first step on creating our first flow. For this flow, I decided the name would be "CloudOneWorkloadSecurity-Computers" and I moved to the next step, without setting any of the optional settings.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gjKtf8FN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2A0a80Ntq8OIP7JGroQXrHpA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gjKtf8FN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2A0a80Ntq8OIP7JGroQXrHpA.png" alt="Step 1. Really easy so far."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On Step 2 we can see exactly where AppFlow shines. I picked Trend Micro as Source and all it requires to be able to fetch data from Cloud One is an API secret. Again, no coding required.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HWEEQcVp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2AWtjGBBHdt2aTS96P8EE3mg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HWEEQcVp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2AWtjGBBHdt2aTS96P8EE3mg.png" alt="Did you expect to see my API secret here?"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As soon as I add my API secret, AppFlow presented me with the different object options that it can retrieve from Cloud One. For launch, only "Computers" and "Policies" are available, as you can see below, but we should expect to see more options later down the road.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RxyFjWqM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2AfucB4y8raJWNjD7I5BOkNw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RxyFjWqM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2AfucB4y8raJWNjD7I5BOkNw.png" alt="Object options"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then I picked "Amazon S3" as my destination, deciding on my bucket and a prefix to the objects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DiB6-Yct--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2AZAuVuWDIlne_F3FzYW0H3w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DiB6-Yct--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2AZAuVuWDIlne_F3FzYW0H3w.png" alt="Step 2. Still easy!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we move to Step 3. Clicking on the drop-down "Choose source fields", we can decide on which fields we care about for this flow. I clicked first on "Map all fields directly", but because Cloud One is so thorough, I quickly realized it had way more information than I needed for this use case. So I selected only the 9 fields that I care about.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eEGQh1WZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2ArJTxSohL4neg3P4tfGZiUQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eEGQh1WZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2ArJTxSohL4neg3P4tfGZiUQ.png" alt="1, 2, 3… 9 fields!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the following step, I could pick to run the flow on demand or to set a schedule for it. I decided, for this example, to run it daily.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zxhcv8sc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2A2_EHHbcp3F6L6C2BNZV3wQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zxhcv8sc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2A2_EHHbcp3F6L6C2BNZV3wQ.png" alt="Step 4. I can't believe it is that easy."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And that's it. The flow is ready to be used. And so I did.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4TqNkTzs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2AITEcY6ldkDXaIr02QH_pqA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4TqNkTzs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2AITEcY6ldkDXaIr02QH_pqA.png" alt="Done!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In a little bit over 10 seconds, AppFlow fetched my Computers info from Cloud One Workload Security and dumped to a S3 bucket.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rgL18aEA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2AC7etR9cd1_U-qJTNxIdmOQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rgL18aEA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2AC7etR9cd1_U-qJTNxIdmOQ.png" alt="Details on the flow execution."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clicking the "View data" link, it takes me straight to the bucket, where I can see the lonely file there. Downloading it shows me exactly what I expected, information taken straight from Cloud One.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fvw5R7MX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2ASWsX3LqAnZuk3b9gKPV7OQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fvw5R7MX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2ASWsX3LqAnZuk3b9gKPV7OQ.png" alt="Data straight from Cloud One"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Houston, we have a problem…
&lt;/h2&gt;

&lt;p&gt;There is a problem with that, though… There isn't a ton of value on this flow on itself, plus, my hands didn't get that dirty. If you just wanted to know what AppFlow is and how to use it, the article ends here for you. Thanks for stopping by! If you, like myself, like to get your hands dirty, let's move to the next stage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Working with the data
&lt;/h2&gt;

&lt;p&gt;After the daily run of this flow, I want to work with the generated data — automatically, as soon as it hits the S3 bucket. The idea is to go trough the generated data, process it and write to another bucket. For this example, I decided to daily generate a JSON compatible array of computers that the current state is different from "active", which means they probably have some kind of connectivity issues with the Cloud One manager. The final result is something similar to the diagram below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eTaiv2lM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2A2auubHKrE0cq0wsvnoIS3g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eTaiv2lM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2A2auubHKrE0cq0wsvnoIS3g.png" alt="The diagram below."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before we go any further, it's important to note that the project — which has its code available on my GitHub — has its infrastructure built using AWS CDK (Typescript), while the Lambda code was built using JavaScript. If you are not familiar with CDK, I highly recommend the CDK Workshop documentation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SlczVlhA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2A2yFZehxeYxr3SJcNtLkPzA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SlczVlhA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2A2yFZehxeYxr3SJcNtLkPzA.png" alt="CDK stack code."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The code above describes the project infrastructure, generating a CloudFormation stack with a destination S3 bucket, a Lambda function and the proper permissions. Since I wanted to trigger this Lambda as soon as the source bucket received the data, I tried for a while to add this trigger to the code with no success; until I remembered, of course, that I wouldn't be able to do it — CloudFormation doesn't support adding event triggers to existing buckets.&lt;/p&gt;

&lt;p&gt;After creating the infrastructure, I went ahead and coded the last missing piece: the Lambda itself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8gkrsA6Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2ANBjhm_Hjj2yBEMgCJ2T80g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8gkrsA6Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2ANBjhm_Hjj2yBEMgCJ2T80g.png" alt="The Lambda function code"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The code is pretty straight forward. First, it downloads the newly added data to the Lambda execution environment. Then, it works the data. Since the original file has a JSON-described computer per line instead of an array of objects, I trimmed the file (to remove any white spaces from the end of it) and split it into an array of strings. Since each string represents an object, I mapped the array to return the objects that each string represents and, then, filtered out all objects where the state is active, since they are not relevant for us. Finally, all the non-active computers were written to the destination bucket.&lt;/p&gt;

&lt;p&gt;After deploying the above stack, the last step is to manually connect the source bucket to it. Go to the bucket properties, click on Events and create a "All object create events" notification to it. Make sure to select the newly created Lambda to receive the notification. Now, for every AppFlow run, this lambda will also be triggered.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5L8ZVWWb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2ACdOu59rFyh6zVugmcQ_acw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5L8ZVWWb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2ACdOu59rFyh6zVugmcQ_acw.png" alt="Bucket Events."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you run the flow manually again to test the environment, you should see a new file on your new bucket, listing only the Cloud One computers that currently aren't on "active" state.&lt;br&gt;
Resources:&lt;/p&gt;

&lt;p&gt;[1] &lt;a href="https://aws.amazon.com/new/"&gt;https://aws.amazon.com/new/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[2] &lt;a href="https://aws.amazon.com/blogs/aws/new-announcing-amazon-appflow/"&gt;https://aws.amazon.com/blogs/aws/new-announcing-amazon-appflow/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[3] &lt;a href="https://docs.aws.amazon.com/appflow/latest/userguide/what-is-appflow.html"&gt;https://docs.aws.amazon.com/appflow/latest/userguide/what-is-appflow.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[4] &lt;a href="https://blog.trendmicro.com/trend-micro-integrates-with-amazon-appflow/"&gt;https://blog.trendmicro.com/trend-micro-integrates-with-amazon-appflow/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[5] &lt;a href="https://github.com/raphabot/AppFlowWorkloadSecurityDemo"&gt;https://github.com/raphabot/AppFlowWorkloadSecurityDemo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[6] &lt;a href="https://cdkworkshop.com"&gt;https://cdkworkshop.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally posted at &lt;a href="https://medium.com/@raphabot/amazon-appflow-how-to-leverage-it-e2b4555ce258"&gt;Medium&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>appflow</category>
      <category>aws</category>
      <category>cloudsecurity</category>
    </item>
  </channel>
</rss>
