<?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: George Rolston</title>
    <description>The latest articles on DEV Community by George Rolston (@grolston).</description>
    <link>https://dev.to/grolston</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%2F504071%2Fafc2541a-1600-4e6c-ae39-1d6f7a5a30ee.png</url>
      <title>DEV Community: George Rolston</title>
      <link>https://dev.to/grolston</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/grolston"/>
    <language>en</language>
    <item>
      <title>Shift-left with GitHub Amazon Q Developer Project Rules</title>
      <dc:creator>George Rolston</dc:creator>
      <pubDate>Fri, 09 Jan 2026 15:10:27 +0000</pubDate>
      <link>https://dev.to/aws-builders/shift-left-with-github-amazon-q-developer-project-rules-3dn8</link>
      <guid>https://dev.to/aws-builders/shift-left-with-github-amazon-q-developer-project-rules-3dn8</guid>
      <description>&lt;p&gt;Most would agree that shift-left is the right thing to do, but actually doing it has historically been painful. The not-so-favorably looked upon policy-as-code initiatives often come with new languages, new tools, and new places developers have to remember to look—so it’s no surprise it doesn’t always stick. In this post, I’ll walk through how GitHub Amazon Q Developer Project Rules make shift-left feel natural by bringing policy-as-context directly into pull requests using simple Markdown files, turning security and compliance into something developers engage with instead of work around.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: Policy-as-code has always been hard for most organizations, but for a long time it was the only real way to shift-left. With GitHub Amazon Q Developer Project Rules, we can now shift left using &lt;strong&gt;policy-as-context&lt;/strong&gt; instead—and honestly, life is much better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Amazon Q Developer Project rules is implemented on &lt;em&gt;best-effort&lt;/em&gt; basis. While Q strives to deliver accurate and relevant insights, its output is advisory in nature and does not guarantee completeness, correctness, or enforcement. Using Q for policy review should be done as one of many tools in your policy review and enforcement.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What is Shift-Left?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Shift-left&lt;/strong&gt; is the practice of moving security, compliance, and quality checks &lt;em&gt;earlier&lt;/em&gt; in the software development lifecycle—ideally as close to code creation as possible. Instead of discovering issues during late-stage reviews, audits, or post-deployment incidents, teams aim to catch problems during the coding phase.&lt;/p&gt;

&lt;p&gt;In theory, this sounds great…in reality, it’s been tough to pull off. &lt;em&gt;Shift-left&lt;/em&gt; might be a buzzword, but if security and compliance only show up to review what’s already deployed instead of what’s about to be, teams end up stuck in a loop of rework, delays, and frustratingly slow delivery.&lt;/p&gt;

&lt;p&gt;Most organizations that attempt shift-left eventually run into the same obstacles when adopting policy-as-code in their DevSecOps practices:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Steep learning curves with policy as code&lt;/strong&gt; (CloudFormation Guard, OPA, Rego, custom DSLs, framework-specific tooling)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fragmented tooling&lt;/strong&gt; across CI, security, and platform teams
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Technical debt&lt;/strong&gt; for maintaining policies
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limited participation&lt;/strong&gt; because policies have generally lived outside of the “everything as code” world&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Yet, shift-left &lt;em&gt;is still the right answer&lt;/em&gt; to modern security and compliance challenges. The problem hasn’t been the goal—it’s been the method of implementation.&lt;/p&gt;

&lt;p&gt;That’s where &lt;a href="https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/amazon-q-for-github.html" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub Amazon Q&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;with &lt;a href="https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/third-party-context-project-rules.html" rel="noopener noreferrer"&gt;Developer Project Rules&lt;/a&gt;&lt;/strong&gt; fundamentally changes the equation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter GitHub Amazon Q Developer
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Amazon Q Developer for GitHub&lt;/strong&gt; integrates generative AI directly into GitHub issues and pull requests. It acts as an AI-powered development and review agent that can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Perform automated code reviews
&lt;/li&gt;
&lt;li&gt;Provide contextual feedback directly in PR conversations via comments
&lt;/li&gt;
&lt;li&gt;Respect project-specific rules defined in your repository
&lt;/li&gt;
&lt;li&gt;Generate code from issues (additional permissions need to be granted)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We have used Amazon Q Developer at &lt;a href="https://platformr.cloud/" rel="noopener noreferrer"&gt;Platformr&lt;/a&gt; for all our products for the last six months. It has been a game changer in pull requests and code review. Our development team reviews all feedback from Q and engages via comments on the pull requests. The feedback and code summarization is only for the code changes which saves time and improves code quality. &lt;/p&gt;

&lt;p&gt;Don’t get me wrong, it doesn’t replace humans—but it dramatically improves signal, consistency, and speed. Additionally, it will not make a person who has no clue what they are doing suddenly brilliant..they still have no clue what they are doing. &lt;/p&gt;

&lt;h3&gt;
  
  
  Getting Set Up with GitHub Amazon Q Developer
&lt;/h3&gt;

&lt;p&gt;To get started, install the &lt;a href="https://github.com/apps/amazon-q-developer" rel="noopener noreferrer"&gt;&lt;strong&gt;Amazon Q Developer&lt;/strong&gt; GitHub App&lt;/a&gt; from the GitHub Marketplace and grant access to your GitHub organization or selected repositories within the GitHub organization.&lt;/p&gt;

&lt;p&gt;During installation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose which repos Q can access
&lt;/li&gt;
&lt;li&gt;Approve permissions for issues, pull requests, and comments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don’t even need an AWS account to get started during the preview. You &lt;em&gt;can&lt;/em&gt; register the app with an AWS account later if you want, but it’s totally optional for now. And if you only enable it on a few repositories to start, no worries—you can always jump back into your GitHub org settings and tweak the app’s access as you go.&lt;/p&gt;

&lt;p&gt;Once installed, any applicable repository that has a Pull Request opened on it will have Q automatically conduct a code review. Amazon Q Developer works primarily through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automatic PR reviews&lt;/strong&gt; (on new or reopened PRs)

&lt;ul&gt;
&lt;li&gt;Any existing PRs can have a review started by just commenting &lt;code&gt;/q review&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Slash commands&lt;/strong&gt; in comments:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/q review&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/q dev&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/q help&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Labels&lt;/strong&gt; (such as &lt;code&gt;Amazon Q development agent&lt;/code&gt;) on issues&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;When a PR is opened, Q can automatically review the code and leave inline comments—just like a human reviewer would. If you respond back to the inline comments, Q will engage you in dialogue. It is really handy to better understand any recommendation. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fx39lcmh668r1jlmoh0ul.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fx39lcmh668r1jlmoh0ul.png" alt="q running a review during pull request" width="627" height="230"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At &lt;a href="https://platformr.cloud/" rel="noopener noreferrer"&gt;Platformr&lt;/a&gt; we identified a best practice is to configure requiring all PR conversations to be resolved before merged. This can be set in the repository Settings&amp;gt;Rulesets Branch Rules section.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fz1ve7413ptzbptxpjrs8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fz1ve7413ptzbptxpjrs8.png" alt="Settings page to require conversation resolved" width="587" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Amazon Q Developer comments are part of the PR conversation. Requiring all conversations to be resolved ensures developers must &lt;strong&gt;explicitly acknowledge or address Q’s feedback&lt;/strong&gt;, which turns AI review into a real enforcement mechanism—not just suggestions developers ignore and mash the merge button. &lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon Q Project Rules: The Missing Link for Shift-Left
&lt;/h2&gt;

&lt;p&gt;Amazon Q Developer becomes truly powerful when combined with &lt;strong&gt;custom project rules&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What Are Amazon Q Project Rules?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Project rules are &lt;strong&gt;Markdown files&lt;/strong&gt; stored directly in your repository under:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.amazonq/rules/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These files provide &lt;strong&gt;explicit guidance&lt;/strong&gt; to Amazon Q Developer about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Coding standards
&lt;/li&gt;
&lt;li&gt;Security requirements
&lt;/li&gt;
&lt;li&gt;Compliance constraints
&lt;/li&gt;
&lt;li&gt;Architectural decisions
&lt;/li&gt;
&lt;li&gt;Organizational best practices
&lt;/li&gt;
&lt;li&gt;Basically anything you put in there…&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When present, Amazon Q automatically uses these rules as &lt;strong&gt;context&lt;/strong&gt; when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reviewing pull requests
&lt;/li&gt;
&lt;li&gt;Generating code
&lt;/li&gt;
&lt;li&gt;Suggesting changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No pipelines.&lt;br&gt;&lt;br&gt;
No custom DSLs.&lt;br&gt;&lt;br&gt;
No external policy engines.&lt;/p&gt;

&lt;p&gt;Just Markdown…&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Personal Note&lt;/strong&gt;: I did a lot of work on the &lt;a href="https://github.com/aws-cloudformation/aws-guard-rules-registry" rel="noopener noreferrer"&gt;Guard Rules registry&lt;/a&gt; creating rules for AWS CloudFormation Guard. If I had something like this at the time, I would not have done that work.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Why This Is a Breakthrough for Shift-Left
&lt;/h3&gt;

&lt;p&gt;The policy-as-context approach solves many historical policy-as-code problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Low Learning Curve:&lt;/strong&gt; Markdown is universal. Anyone can read it. Most can write it.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Policies Live with Code:&lt;/strong&gt; Rules are versioned, reviewed, and evolved &lt;strong&gt;in the same repository&lt;/strong&gt; as the application.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Organization-Wide Contribution:&lt;/strong&gt; Security, platform, and application teams can all contribute rules through normal pull requests. Pretty much you just have to be literate to potentially contribute.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Immediate Feedback:&lt;/strong&gt; Policies are enforced during &lt;strong&gt;PR review&lt;/strong&gt;, not hours after deployment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is shift-left &lt;strong&gt;without friction&lt;/strong&gt;. Basically if you can write out the rule in text, it can be applied.&lt;/p&gt;
&lt;h2&gt;
  
  
  Creating Custom Rules: A Practical Guide
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Step 1: Create the Rules Directory
&lt;/h3&gt;

&lt;p&gt;In your repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.amazonq/rules/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it. No configuration files or service registration required.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2: Organize Rules by Initiative or Policy Domain&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Instead of one massive policy file, break rules into &lt;strong&gt;focused Markdown documents&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.amazonq/rules/
├── security-baseline.md
├── cdk-typescript-rules.md
├── roberts-rules.md
├── general-coding-standards.md
└── compliance-soc2.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This keeps rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Easier to review
&lt;/li&gt;
&lt;li&gt;Easier to maintain
&lt;/li&gt;
&lt;li&gt;Easier for different teams to own&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 3: Write Clear, Directive Rules
&lt;/h3&gt;

&lt;p&gt;The example below shows how you can very easily create rules files. The file &lt;code&gt;roberts-rules.md&lt;/code&gt; contains a very specific naming convention tag rule stated in a simple sentence (no code needed). There is also a detailed rule for AWS SDK clients which demonstrates the flexibility of the rules context files.&lt;/p&gt;

&lt;p&gt;Example: &lt;code&gt;roberts-rules.md&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Roberts Rules

## Purpose

Follow best practices from Robert who has rules of order

### Naming conventions

- All AWS resources should include a tag with key "robert" and value "approved"

### AWS Service Clients

All AWS SDK service clients must be configured with retry settings:

- `maxAttempts: 10` - Set maximum retry attempts to 10
- `retryMode: "standard"` - Use standard retry mode for consistent behavior

Example:
const orgClient = new OrganizationsClient({
  ...clientCreds,
  maxAttempts: 10,
  retryMode: "standard"
});

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With these rules added, Amazon Q will now factor these rules into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PR reviews
&lt;/li&gt;
&lt;li&gt;Code suggestions
&lt;/li&gt;
&lt;li&gt;Feature generation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you open a PR, you will see your policies which you expressed as rules being evaluated and Q commenting on them. It is that simple.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fhmgzog2yf49udlvgc3it.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fhmgzog2yf49udlvgc3it.png" alt="pull request with comments from q about tagging" width="596" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Shift-left has always been the right goal—but it’s often failed due to complexity and poor user experience. &lt;strong&gt;GitHub Amazon Q Developer Project Rules finally make shift-left practical&lt;/strong&gt;, approachable, and collaborative. It is bringing the shift-left implementation from policy-as-code to policy-as-context which lowers the barrier of adoption.&lt;/p&gt;

&lt;p&gt;By combining:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI-assisted PR reviews
&lt;/li&gt;
&lt;li&gt;Repository-native Markdown rules
&lt;/li&gt;
&lt;li&gt;Enforced PR conversation resolution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You get a lightweight but powerful system for embedding security, compliance, and quality directly into everyday development workflows, which about any person can contribute.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If your teams are apprehensive about markdown, it is only because it is new to them. Reassure them that using the absolute basics of Microsoft Word is much harder than working with markdown. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is one of the most effective shift-left implementations I’ve seen—and it’s only getting better.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>security</category>
      <category>github</category>
      <category>tooling</category>
    </item>
    <item>
      <title>AWS Control Tower 4.0: A New Look at Landing Zones</title>
      <dc:creator>George Rolston</dc:creator>
      <pubDate>Tue, 23 Dec 2025 18:02:11 +0000</pubDate>
      <link>https://dev.to/aws-builders/aws-control-tower-40-a-new-look-at-landing-zones-1ap6</link>
      <guid>https://dev.to/aws-builders/aws-control-tower-40-a-new-look-at-landing-zones-1ap6</guid>
      <description>&lt;p&gt;AWS Control Tower has long been the preferred solution for implementing governance based on AWS best practices, though it can be a controversial topic among SREs and Platform Engineers. With the release of Landing Zone 4.0, Control Tower takes a step forward, giving more flexibility in managing accounts and Organizational Units (OUs). This makes both greenfield and brownfield deployments easier to adopt and operate. Overall, it’s a positive development for AWS Control Tower, even though some challenges and areas for improvement still remain.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; Landing Zone 4.0 requires that you separate your AWS Config and CloudTrail logging buckets across accounts. Previously, both services wrote to a single S3 bucket in the Log Archive account. &lt;strong&gt;With Landing Zone 4.0, you will split centralized logging across two S3 buckets in two separate accounts.&lt;/strong&gt; From my perspective, this change moves away from the intent of centralized logging, and the rationale and technical strategy behind this design decision are not yet clear.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I want to preface this by saying that this blog post focuses on the direction AWS Control Tower is heading, rather than the specifics of the 4.0 release. Ideally, I wish there would have been a longer period where both 3.3 and 4.0 were available for new deployments. From what I understand, AWS Control Tower aims to support deployments via APIs, but the rollout highlighted that a more structured release process isn’t fully in place yet, which caught many users by surprise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Native OU and Account Management
&lt;/h2&gt;

&lt;p&gt;One of the biggest enhancements in Control Tower 4.0 is the shift from a rigid, Control Tower-managed model to a more native AWS Organizations-centric approach. Previously, setting up Control Tower required specifying the name of the security OU during deployment, and Control Tower would create it and manage all accounts in it.&lt;/p&gt;

&lt;p&gt;Now, instead of being forced to have Control Tower create the security OU, you can leverage pre-existing OUs directly into Control Tower. This allows organizations to retain control over their OU structure, integrate existing organizational hierarchies, and better align with their naming conventions and internal governance practices.&lt;/p&gt;

&lt;p&gt;This change is particularly advantageous for brownfield deployments, where customers have already implemented multi-account best practices. Existing OUs and accounts can now be seamlessly integrated into Control Tower without the need to restructure everything around the traditional Control Tower manifest and Account Factory model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Auto-Enrollment: Flexibility Meets Automation
&lt;/h2&gt;

&lt;p&gt;Control Tower 4.0 also takes advantage of the relatively new auto-enrollment capabilities. With auto-enrollment, accounts moved into an OU registered with Control Tower using the Control Tower Baseline are automatically enrolled and provisioned with required resources. By automatically enrolling accounts into Control Tower as they are created or detected within AWS Organizations, teams no longer need to rely on manual workflows or one-off processes to apply guardrails. This ensures that baseline security, logging, and compliance controls are consistently enforced from day one, reducing the risk of configuration drift or unmanaged accounts operating outside of governance boundaries. All that is required is you move an AWS Account into a Control Towered registered OU. To unenroll, simply move the account into an OU that is not registered in AWS Control Tower.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Auto-enrollment is also available in Control Tower Landing Zone 3.3. You do not need to upgrade your Landing Zone to 4.0 to start using. Simply go into the setting of your Control Tower Landing Zone and enable it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Auto enrollment also helps organizations keep up as their environments grow. Whether adding new accounts through expansion, mergers, or acquisitions, auto enrollment makes it easier to maintain governance without piling on extra administrative work. Platform teams can spend less time managing account lifecycles, and security or compliance teams get better visibility into which accounts meet organizational standards. Overall, it helps make a multi-account AWS environment more consistent and easier to manage, even if it’s not a perfect solution.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Warning:&lt;/strong&gt; Auto enrollment is an asynchronous process. When moving accounts in the web console give time for Control Tower to successfully process the enrollment/unenrollment of the AWS account. It is not perfect, but it is getting better…be patient.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Account Factory Not Required
&lt;/h2&gt;

&lt;p&gt;These changes mark a continued shift in operational philosophy to account vending. With auto enrollment and ability to register/reregister entire OUs, Control Tower no longer requires for individual AWS accounts to be provisioned through Account Factory. In my opinion this is great as I no longer have to worry about Service Catalog products and all the troubles that can be associated with that.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; AWS Config is still required to be created by Control Tower. So if you are moving accounts into AWS Control Tower, you will need to ensure they do not have Config already set up.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead Control Tower appears to be embracing a more natural workflow via AWS Organizations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accounts can be created natively in AWS Organizations.&lt;/li&gt;
&lt;li&gt;They can be moved into the appropriate OUs registered in AWS Control Tower.&lt;/li&gt;
&lt;li&gt;Once in the OU, accounts are automatically enrolled and resources are provisioned according to Control Tower guardrails and baselines.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Automation teams still need to consider Service Catalog portfolio access during register/reregistering OUs. Even if Account Factory is not used for the AWS accounts in the OU, Control Tower still does a permission check on the IAM role/user to validate they have access to the Service Catalog portfolio.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This approach lets organizations use CloudFormation StackSets, EventBridge rules, and other services tied to AWS Organizations to deploy and manage resources across multiple accounts. It helps make multi-account setups a bit smoother and easier to keep in check, without all the manual work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Changes in Control Tower Setup with LZ 4.0
&lt;/h2&gt;

&lt;p&gt;While these enhancements bring greater flexibility, they do introduce some changes to the setup process:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pre-staging of Organization resources is now required prior to deployment.&lt;/li&gt;
&lt;li&gt;Logging architecture has changed: LZ 4.0 uses two separate buckets in the Log Archive account—one for CloudTrail and another for AWS Config. Earlier versions (3.3 and below) used a single bucket. Customers will need to ensure that tools and pipelines referencing logs are updated to account for this split. The original bucket continues to be used for CloudTrail, so existing operations can remain intact.&lt;/li&gt;
&lt;li&gt;The role &lt;code&gt;AWSControlTowerCloudTrailRole&lt;/code&gt; uses an IAM AWS managed policy now instead of an inline policy. Even if permissions are exactly the same, you will encounter issues with this role if the managed policy isn’t attached. &lt;/li&gt;
&lt;li&gt;Control Tower has an updated data structure for the manifest file

&lt;ul&gt;
&lt;li&gt;Logging is now broken out into two different objects in the manifest

&lt;ul&gt;
&lt;li&gt;CloudTrail will retain the old bucket in the log archive account if you are upgrading&lt;/li&gt;
&lt;li&gt;Config will get a new separate bucket in the &lt;strong&gt;Audit account&lt;/strong&gt;. &lt;code&gt;This should be considered heavily before upgrading your landing zone from 3.3 to 4.0.&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;li&gt;You no longer give the name of security Organization Unit to create; instead it is assumed that both the log archive and audit accounts will exist in one OU.&lt;/li&gt;

&lt;li&gt;AWS Config aggregator is setup and it uses trusted delegation for AWS Organizations&lt;/li&gt;

&lt;li&gt;The manifest is optional. &lt;/li&gt;

&lt;li&gt;After upgrading from 3.3 to 4.0, you may need to update your baselines. For most baseline versions, the version went from 4.0 to 5.0 which is confusing to say the least. &lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;More details on changes can be found &lt;a href="https://docs.aws.amazon.com/controltower/latest/userguide/lz-api-launch.html" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Upgrade Process
&lt;/h2&gt;

&lt;p&gt;Upgrading from Control Tower 3.3 to 4.0 is generally smooth if you consider all the changes from above. Though it can take time as several asynchronous operations complete. Planning for potential delays in provisioning and enrollment tasks is recommended. &lt;/p&gt;

&lt;p&gt;The upgrade process is fully supported through API, which can significantly reduce complexity and save time when orchestrating upgrades, enrollment, and provisioning tasks programmatically. However, when using the API to update, you will need to review the Control Tower manifest and remap some of the current configurations to the new structure. &lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Control Tower 4.0 seems to be heading in a better direction for managing multi-account governance, working more closely with the native features of AWS Organizations. By enabling pre-existing OU imports, auto-enrollment, and a more natural account provisioning workflow, organizations gain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Greater flexibility in OU and account structure&lt;/li&gt;
&lt;li&gt;Easier integration for brownfield deployments&lt;/li&gt;
&lt;li&gt;Alignment and enhanced operational and security automation through StackSets, EventBridge, Controls Catalog, and other organization-targeted services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don’t get me wrong—there were some issues with the rollout and a few bumps still need smoothing out, but overall, Control Tower 4.0 is heading in the right direction.&lt;/p&gt;

</description>
      <category>aws</category>
    </item>
    <item>
      <title>Configuring Security Services with AWS Organizations – Part 3: AWS Security Hub</title>
      <dc:creator>George Rolston</dc:creator>
      <pubDate>Mon, 08 Feb 2021 18:39:09 +0000</pubDate>
      <link>https://dev.to/aws-builders/configuring-security-services-with-aws-organizations-part-3-aws-security-hub-18am</link>
      <guid>https://dev.to/aws-builders/configuring-security-services-with-aws-organizations-part-3-aws-security-hub-18am</guid>
      <description>&lt;p&gt;Welcome back to the multi-part blog of deploying AWS security services with AWS Organizations. In &lt;a href="https://dev.to/aws-builders/configuring-security-services-with-aws-organizations-part-1-getting-started-3bce"&gt;Part 1&lt;/a&gt; I introduced you to AWS Organizations, its prerequisites, and then configured Organizational CloudFormation StackSets. In &lt;a href="https://dev.to/aws-builders/configuring-security-services-with-aws-organizations-part-2-aws-guardduty-4g5"&gt;Part 2&lt;/a&gt; of our series, we went through integrating AWS GuardDuty with our AWS Organization ensuring all our accounts automatically configure and enroll into our AWS GuardDuty delegated admin account. In Part 3, we will be configuring AWS Security Hub with our AWS Organization automating the configuration and enrollment of all accounts.&lt;/p&gt;

&lt;h1&gt;
  
  
  Overview
&lt;/h1&gt;

&lt;p&gt;Security Hub is an AWS service that delivers a comprehensive view of your security posture and gives you the ability to report, ingest, and remediate security &lt;code&gt;findings&lt;/code&gt; in your AWS account. With it you are given a single dashboard to view the overall security posture of your environment based on many common security frameworks (CIS, PCI, etc.). Security Hub not only enables this centralized dashboard in your account, but it also enables reporting &lt;em&gt;across all your AWS accounts&lt;/em&gt;, delivering critical security insight into your environment. &lt;/p&gt;

&lt;h1&gt;
  
  
  Prerequisites
&lt;/h1&gt;

&lt;p&gt;AWS Security Hub is built off many AWS services for reporting your security relative to industry standards and AWS best practices. Though you do not need to initially ensure these supporting AWS services are deployed, it is recommended to plan to deploy AWS GuardDuty, AWS Inspector, and AWS Config in the near future of your enterprise AWS roll-out.   &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you are wondering what is &lt;code&gt;CloudShell&lt;/code&gt;, read the &lt;a href="https://dev.to/aws-builders/configuring-security-services-with-aws-organizations-part-1-getting-started-3bce"&gt;first blog post&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The following prerequisites &lt;strong&gt;need&lt;/strong&gt; to be met for this blog post:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Full Features enabled on your AWS Organizations&lt;/li&gt;
&lt;li&gt;An AWS account deployed or set aside for specific use of security services&lt;/li&gt;
&lt;li&gt;Some basic understanding of AWS CLI&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;INFO:&lt;/strong&gt; If you are using AWS Control Tower, you should use the Audit account for you Security Operations functionality. AWS highly recommends this and using the account for this functionality will better enable you to take advantage of new features in the future. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What is a SOC account? A SOC account is merely an AWS account you have set aside to conduct all security operation services (and only security operations). &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;WARNING:&lt;/strong&gt; As I mentioned in &lt;a href="https://dev.to/aws-builders/configuring-security-services-with-aws-organizations-part-1-getting-started-3bce"&gt;Part 1&lt;/a&gt; of the series, DO NOT DEPLOY your security services to the Management account if you can avoid it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Enabling Security Hub - Management Account
&lt;/h1&gt;

&lt;p&gt;The first step is to go into your Management account and enabled AWS Security Hub. If you are wondering if someone already did this you can view the services already enabled by running&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws organizations list-aws-service-access-for-organization
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the output does not have anything about &lt;code&gt;securityhub.amazonaws.com&lt;/code&gt; you should enable it by running the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws organizations enable-aws-service-access &lt;span class="nt"&gt;--service-principal&lt;/span&gt; securityhub.amazonaws.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;INFO:&lt;/strong&gt; If you noticed that AWS Security Hub was listed as an enabled service, you should check and see if it already is setup as a delegated admin by running &lt;code&gt;aws organizations list-delegated-administrators&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can verify that Security Hub is enabled at the organizational level by re-running &lt;code&gt;aws organizations list-aws-service-access-for-organization&lt;/code&gt;. You should see output similar to the following screenshot with Security Hub listed:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fzeg7a0nylw0qakcvy40n.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fzeg7a0nylw0qakcvy40n.JPG" alt="Check Enabled ServicsAfterEnablingSH_Circled" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you have enabled the service and determined it is not already delegated, you quickly delegate to the account of your liking. As stated in &lt;a href="https://dev.to/aws-builders/configuring-security-services-with-aws-organizations-part-2-aws-guardduty-4g5"&gt;Part 2&lt;/a&gt;, you should delegate this service to your &lt;em&gt;Security Operations Center&lt;/em&gt; (SOC). If you are using AWS Control Tower, this account is the &lt;code&gt;Audit&lt;/code&gt; account which is automatically created when you setup Control Tower. To delegate your Security Hub master account run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;## Without specifying a region, the command will delegate the&lt;/span&gt;
&lt;span class="c"&gt;## master account in the current region of the CloudShell&lt;/span&gt;
aws securityhub enable-organization-admin-account &lt;span class="nt"&gt;--admin-account-id&lt;/span&gt; 123456789123 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you need any region outside of the current region you are in, run the following command replacing the &lt;code&gt;--region&lt;/code&gt; parameter. Example here would enable Security Hub master account on Account Id 123456789123 in us-west-2&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws securityhub enable-organization-admin-account &lt;span class="nt"&gt;--admin-account-id&lt;/span&gt; 123456789123 &lt;span class="nt"&gt;--region&lt;/span&gt; us-west-2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With delegation enabled you can verify by running &lt;code&gt;aws securityhub list-organization-admin-accounts&lt;/code&gt; which should return similar output:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Flrziqp2xp3nfg88qjlyr.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Flrziqp2xp3nfg88qjlyr.JPG" alt="ListDelegatedAdminsAfterMultiRegionRedacted" width="800" height="214"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After you delegate the admin account for Security Hub, you should  then enable AWS Security Hub in the Management account. &lt;strong&gt;You need to manually enable Security Hub within the Management account for it to automatically sync/send findings to your Security Hub administrator account.&lt;/strong&gt; The reason for this is that the Security Hub administrator account does not have ability to configure services in the Management account. Run the following command in the Management account CloudShell to enable.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws securityhub enable-security-hub &lt;span class="nt"&gt;--enable-default-standards&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Again, this will enable Security Hub in the current region you have your CloudShell open in. If you are running multiple regions, you need to enable Security Hub in the Management account per region by specifying the &lt;code&gt;--region&lt;/code&gt; parameter of the command. Once completed, you are now ready to move to configuring your Security Hub delegated administrator account.&lt;/p&gt;

&lt;h1&gt;
  
  
  Setting up Security Hub - Delegated Admin Account
&lt;/h1&gt;

&lt;p&gt;With Security Hub administration delegated, you will need to go into the delegated administrative account known as the Security Hub administrator account (this is the account you just delegated to from the Management account). When accessing the Security Hub administrator account, you should ensure your IAM role/user has admin permissions.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;INFO:&lt;/strong&gt; If you are using AWS Control Tower, you should use the Audit account for you Security Operations functionality.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When in the account change to the primary region and open the CloudShell. Within in the CloudShell make certain to first update you have updated your AWS CLI. Easy to do this is via the one-liner I setup a GitHub project I have: &lt;a href="https://github.com/grolston/AwsCloudShell" rel="noopener noreferrer"&gt;AwsCloudShell&lt;/a&gt;. With your CloudShell updated you can enable Security Hub&lt;/p&gt;

&lt;p&gt;With you CLI updated you can start by enabling Security Hub for the regions you want to enable. This process is identical to the last step we just did in the Management account:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws securityhub enable-security-hub &lt;span class="nt"&gt;--enable-default-standards&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now that Security Hub is enabled you can configure the AWS Organizations portion of it by enabling auto-enrollment for all account within your AWS Organizations. What this will do is force all &lt;em&gt;newly&lt;/em&gt; created accounts to enable AWS Security Hub in the region and report their findings into the Security Hub administrator account. Run the following command to enable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;## ensure you updated AWS CLI prior to running the command&lt;/span&gt;
aws securityhub update-organization-configuration &lt;span class="nt"&gt;--auto-enable&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With auto-enable set, you are ready to secure your environment going forward. But what about if you already have accounts that are either reporting in by invitation or are not yet configured? We will cover that next.&lt;/p&gt;

&lt;h1&gt;
  
  
  Post Deployment configurations
&lt;/h1&gt;

&lt;p&gt;With AWS Security Hub setup to deploy automatically leveraging AWS Organizations integration, we are all set going forward. However, for accounts deployed prior to the configuration we will need to go back in and manually &lt;code&gt;Add Member&lt;/code&gt; similar how AWS GuardDuty worked in &lt;a href="https://dev.to/aws-builders/configuring-security-services-with-aws-organizations-part-2-aws-guardduty-4g5"&gt;Part 2&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; Security Hub allows accounts to be managed outside of your AWS Organization though Invitation. Only AWS accounts that are part of the Organization can be converted from Invitation to Member accounts.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To view all the accounts for Security Hub you can see their status by going to the Security Hub web console and selecting the &lt;code&gt;Accounts&lt;/code&gt; tab in the Settings page. You can see the status as shown below circled in red.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fokqin7txkgwbba9qnp0t.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fokqin7txkgwbba9qnp0t.JPG" alt="SHAccountStatus" width="800" height="150"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the screenshot you see there are three accounts and zero of them are enrolled via Organizations or Invitation. This means I have three accounts in my Organization which &lt;em&gt;could&lt;/em&gt; be enrolled in Security Hub and none of them are by &lt;code&gt;Invitation&lt;/code&gt;. To add these pre-existing accounts or accounts that are of &lt;em&gt;Type&lt;/em&gt; &lt;code&gt;via Invitation&lt;/code&gt; you can select their checkboxes and click Add Member from the Actions menu located in the top right of the Accounts page. You will see their status turn from &lt;code&gt;Not a Member&lt;/code&gt; to &lt;code&gt;Enabling&lt;/code&gt; to &lt;code&gt;Enabled&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fxkht7zayi9kuwpg406j9.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fxkht7zayi9kuwpg406j9.JPG" alt="EnableingOldAccountsSH" width="800" height="177"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With that complete all your accounts are setup and reporting into your centralized Security Hub administration account. New AWS accounts will be automatically configured and enrolled in the future. &lt;/p&gt;

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

&lt;p&gt;As you can see the process was very similar to setting up AWS GuardDuty with Organizations regarding configurations within the Management account and within the delegated administrator account. In total you had to run about five to six commands to make this all work...and you will never need to run those commands again! AWS Security Hub is now setup for automated deployment within your Organization.&lt;/p&gt;

&lt;h1&gt;
  
  
  What's Next?
&lt;/h1&gt;

&lt;p&gt;In Part IV of the blog series I will go over configuring AWS Config Aggregator with AWS Organizations.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>security</category>
    </item>
    <item>
      <title>Configuring Security Services with AWS Organizations – Part 2: AWS GuardDuty</title>
      <dc:creator>George Rolston</dc:creator>
      <pubDate>Sun, 31 Jan 2021 18:44:50 +0000</pubDate>
      <link>https://dev.to/aws-builders/configuring-security-services-with-aws-organizations-part-2-aws-guardduty-4g5</link>
      <guid>https://dev.to/aws-builders/configuring-security-services-with-aws-organizations-part-2-aws-guardduty-4g5</guid>
      <description>&lt;h1&gt;
  
  
  Overview
&lt;/h1&gt;

&lt;p&gt;In the &lt;a href="https://dev.to/aws-builders/configuring-security-services-with-aws-organizations-part-1-getting-started-3bce"&gt;previous blog&lt;/a&gt; I showed how to setup AWS Organizations in &lt;code&gt;All Features&lt;/code&gt; mode and and prepare the AWS environment to run my Security Operations Center (SOC) AWS Account by delegating administrative functions through AWS Organizations. Additionally, we configured AWS Organizations CloudFormation StackSets and demonstrated how the AWS CloudShell can be used and configured to deploy our services. If you have not read the blog post please visit &lt;a href="https://dev.to/aws-builders/configuring-security-services-with-aws-organizations-part-1-getting-started-3bce"&gt;here&lt;/a&gt;. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you are wondering what is &lt;code&gt;CloudShell&lt;/code&gt;, read the &lt;a href="https://dev.to/aws-builders/configuring-security-services-with-aws-organizations-part-1-getting-started-3bce"&gt;first blog post&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In this blog post I will go over deploying AWS GuardDuty as an integrated AWS Organization service which will automatically enroll all new accounts reporting GuardDuty findings into the GuardDuty Delegated Administrative account. &lt;/p&gt;

&lt;h2&gt;
  
  
  What Is AWS GuardDuty
&lt;/h2&gt;

&lt;p&gt;AWS defines GuardDuty as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Amazon GuardDuty is a threat detection service that continuously monitors for malicious activity and unauthorized behavior to protect your AWS accounts, workloads, and data stored in Amazon S3.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In other words AWS GuardDuty is a service that monitors network traffic (VPC and S3) and analyzes it for malicious or suspicious behavior. &lt;code&gt;Finding&lt;/code&gt; are reported to the AWS GuardDuty web console within the account or reports back to a central account, also know as the Delegated Administrative account. It is best to deploy GuardDuty to every account as you are only billed for utilization (so if not network traffic or S3 activity, no utilization, no &lt;em&gt;noticeable&lt;/em&gt; cost).&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do I need to deploy GuardDuty via Organizations?
&lt;/h2&gt;

&lt;p&gt;This is a great question and many with experience of large implementations can answer it easily: technical debt. Prior to integration with AWS Organizations, AWS GuardDuty worked via &lt;em&gt;Invitations&lt;/em&gt; from the central GuardDuty Adminsitrative account to the member account. This was not too bad, but you were stuck running CloudFormation and Lambda functions that would enable the AWS GuardDuty service in a specific region, send out a request invite from the central GuardDuty account then accept GuardDuty invitation from the member account. At the end of the day you were stuck managing that automation. There have been some great solutions, but none as simple as the AWS Organizations integration I am going to show you here. Best way to put this: you will set it once and not worry about it at all going forward.&lt;/p&gt;

&lt;h1&gt;
  
  
  Prerequisites
&lt;/h1&gt;

&lt;p&gt;If you followed along with &lt;a href="https://dev.to/aws-builders/configuring-security-services-with-aws-organizations-part-1-getting-started-3bce"&gt;Part 1&lt;/a&gt; meeting all the prerequisites and deploying the necessary configurations, then you are doing great. If not please go back and review &lt;a href="https://dev.to/aws-builders/configuring-security-services-with-aws-organizations-part-1-getting-started-3bce"&gt;Configuring Security Services with AWS Organizations: Part 1&lt;/a&gt;. For this blog post, the only additional prerequisite here is to have deployed a SOC account. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If you are using AWS Control Tower, you should use the Audit account for you Security Operations functionality. AWS highly recommends this and using the account for this functionality will better enable you to take advantage of new features in the future. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What is a SOC account? A SOC account is merely an AWS account you have set aside to conduct all security operation services (and only security operations). &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;WARNING:&lt;/strong&gt; As I mentioned in &lt;a href="https://dev.to/aws-builders/configuring-security-services-with-aws-organizations-part-1-getting-started-3bce"&gt;Part 1&lt;/a&gt; of the series, DO NOT DEPLOY your security services to the Management account if you can avoid it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Enabling AWS GuardDuty via Organizations
&lt;/h1&gt;

&lt;p&gt;Regardless of you using AWS GuardDuty prior to configuring AWS Organizations integrated GuardDuty, the process is still the same. So starting out in the Management account, we can open the CloudShell and run a few commands to enable.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Info:&lt;/strong&gt; If you don't know what the CloudShell is and have not read &lt;a href="https://dev.to/aws-builders/configuring-security-services-with-aws-organizations-part-1-getting-started-3bce"&gt;Part 1&lt;/a&gt;, please go back and read &lt;a href="https://dev.to/aws-builders/configuring-security-services-with-aws-organizations-part-1-getting-started-3bce"&gt;Part 1&lt;/a&gt; of the blog series.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the CloudShell we will make a couple of simple one-liner commands to configure AWS GuardDuty for Organizations. To start off let's enable the service for the Organization by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws organizations enable-aws-service-access &lt;span class="nt"&gt;--service-principal&lt;/span&gt; guardduty.amazonaws.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you are looking for some status of AWS GuardDuty being configured in the AWS Organizations Settings web console, you will not find this. The AWS Organizations Settings currently only lists services that are enabled and managed out of the management account. It does not show delegated AWS Organization services at this time. To view the status of enabled AWS Organization services you can run &lt;code&gt;aws organizations list-aws-service-access-for-organization&lt;/code&gt;. The output should list GuardDuty as enabled:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fm2j340hhd15x19cyt0o3.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fm2j340hhd15x19cyt0o3.JPG" alt="EnableAwsGuardDuty" width="800" height="255"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That command will enable AWS GuardDuty for the Organization. Step one is done and now we can move on to step two, which is delegating the GuardDuty administrative account. This is not really a complex process here and it consists of one or more commands depending on how many regions you need to support.&lt;/p&gt;

&lt;p&gt;AWS GuardDuty is a regional service meaning that whatever region you are running your CloudShell in, is the region you will delegate the admin account unless specified otherwise. My recommendation is that you stick with the Audit/SOC account you identified and just enable it for the necessary regions you have workloads in. If concerned about monitoring, simply place an Service Control Policy (SCP) on all accounts restricting the regions they can run in. To enable AWS GuardDuty in the current region you are in run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws guardduty enable-organization-admin-account —admin-account-id 123456789 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you need any region outside of the current region you are in, run the following command replacing the &lt;code&gt;--region&lt;/code&gt; param. Example here would enable GuardDuty Admin account on Account Id 123456789 in us-west-2&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws guardduty enable-organization-admin-account —admin-account-id 123456789 &lt;span class="nt"&gt;--region&lt;/span&gt; us-west-2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You don't need to deploy GuardDuty to every region possible in AWS in an attempt to monitor. Use &lt;strong&gt;AWS Service Control Policies&lt;/strong&gt; to deny/allow regions you choose to operate in, then deploy GuardDuty to those regions. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The command will give AWS GuardDuty Administrative account permission to enroll and automate the configuration of AWS GuardDuty for the region for any account except the management account.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Your Management account can be a member of the AWS GuarDuty Organization, but will require you to enable AWS GuardDuty in the desired region. If not enabled, you will get an error in your GuardDuty Delegated Administrative account when you try to automate the enrollment. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Once you have completed those two simple tasks of enabling and delegating AWS GuardDuty, you are done in the Management account.&lt;/p&gt;

&lt;p&gt;The next step is to go to the AWS GuardDuty Delegated Administrative account and begin configuring the GuardDuty service.&lt;/p&gt;

&lt;h1&gt;
  
  
  Configuring the AWS GuardDuty Administrative Account
&lt;/h1&gt;

&lt;p&gt;After properly delegating the GuardDuty service in the AWS Organization you can login to the account you assigned as the GuardDuty Delegated Administrative account and begin configuring. If this is your first time setting up GuarDuty in the AWS account you can quickly change to the region you wish and run the following command in the CloudShell to enable and create an GuardDuty detector.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws guardduty create-detector &lt;span class="nt"&gt;--enable&lt;/span&gt; &lt;span class="nt"&gt;--finding-publishing-frequency&lt;/span&gt; FIFTEEN_MINUTES
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;create-detector&lt;/code&gt; command has some key points which I pulled from the AWS documentation: &lt;em&gt;&lt;a href="https://awscli.amazonaws.com/v2/documentation/api/latest/reference/guardduty/create-detector.html" rel="noopener noreferrer"&gt;To start using GuardDuty, you must create a detector in each Region where you enable the service. You can have only one detector per account per Region. All data sources are enabled in a new detector by default.&lt;/a&gt;&lt;/em&gt; Therefore, what we just did was setup AWS GuardDuty in the current region of the account and enabled all data sources. &lt;/p&gt;

&lt;p&gt;Next, we need to take note of the output returned from the previous command and copy the &lt;code&gt;detector-id&lt;/code&gt; value for our next command. In the following command we update our configuration for GuardDuty to &lt;code&gt;auto-enable&lt;/code&gt;. Auto-enable means that any &lt;strong&gt;new&lt;/strong&gt; AWS account created within the Organization will automatically have GuardDuty created in the region and reporting back to the GuardDuty Delegated Administrative account.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws guardduty update-organization-configuration &lt;span class="nt"&gt;--detector-id&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;whatever detector you just created ID] &lt;span class="nt"&gt;--auto-enable&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you just deployed your AWS Organization and immediately set this all up, your work is limited now. The only cleanup you will have is to go back to the management account and possibly enable GuardDuty as it is not impacted by Organization integrated services.&lt;/p&gt;

&lt;h1&gt;
  
  
  Post Deployment Actions
&lt;/h1&gt;

&lt;p&gt;If you already have AWS accounts deployed prior to configuring AWS Organization GuardDuty or that you were leveraging AWS GuardDuty by &lt;a href="https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_invitations.html" rel="noopener noreferrer"&gt;Invitation&lt;/a&gt;, you can convert these accounts to be managed by Organization as a Member account. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; GuardDuty allows accounts to be managed outside of your AWS Organization though &lt;a href="https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_invitations.html" rel="noopener noreferrer"&gt;Invitation&lt;/a&gt;. Only AWS accounts that are part of the Organization can be converted from Invitation to Member accounts.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To view all the accounts for AWS GuardDuty you can see their status by going to the AWS GuardDuty web console and selecting the &lt;em&gt;Accounts&lt;/em&gt; tab in the Settings page. You can see the status as shown below circled in red.&lt;/p&gt;

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

&lt;p&gt;In the screenshot you see there are 7 accounts and 0 of them are enrolled via Organizations or Invitation. This means I have 7 accounts in my Organization which could be enrolled in GuardDuty and none of them are by Invitation. To add these pre-existing accounts or accounts that are of &lt;em&gt;Type&lt;/em&gt; &lt;code&gt;via Invitation&lt;/code&gt; you can select their checkboxes and click &lt;code&gt;Add Member&lt;/code&gt; from the &lt;code&gt;Actions&lt;/code&gt; menu located in the top right of the Accounts page. &lt;/p&gt;

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

&lt;p&gt;Once added as member, AWS GuardDuty will be deployed and configured to the region of the pre-existing account if not already done. The only error you may receive is from the management account which requires you to go into the management account and enable GuardDuty prior.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Converting AWS GuardDuty member accounts from Invitation to Organization will have no noticeable impact to the member account. It is a simple conversion.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  What's Next
&lt;/h1&gt;

&lt;p&gt;In &lt;a href="https://dev.to/aws-builders/configuring-security-services-with-aws-organizations-part-3-aws-security-hub-18am"&gt;Part 3&lt;/a&gt; post we will continue configuring AWS Organization integrated security services by deploying AWS Security Hub.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>security</category>
    </item>
    <item>
      <title>Configuring Security Services with AWS Organizations – Part 1: Getting Started</title>
      <dc:creator>George Rolston</dc:creator>
      <pubDate>Sun, 31 Jan 2021 17:10:20 +0000</pubDate>
      <link>https://dev.to/aws-builders/configuring-security-services-with-aws-organizations-part-1-getting-started-3bce</link>
      <guid>https://dev.to/aws-builders/configuring-security-services-with-aws-organizations-part-1-getting-started-3bce</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;A big part of my work is cloud security automation and when I found out AWS integrated many of the AWS security services with AWS Organizations, I simply could not wait to get started. Yet, I found that there isn’t a dead-simple guide for cloud engineers in how to deploy these security services. There are a lot of references stating &lt;em&gt;you can now automate with AWS Organizations&lt;/em&gt;, but no one telling how. Thus, in this multi-part blog post/guide I will focus on giving the reader dead-simple one-liner commands which are to be run from the AWS CloudShell, a new feature of the AWS web console for command line access. &lt;/p&gt;

&lt;p&gt;The best part of this guide is that you will not be required to create any IAM users, API keys, nor EC2 roles/instance profiles to run the commands. All you will need to do is copy the commands, update the params and paste into your CloudShell to run (finally no mess deployments). Once configured, you are done and then let the automation take over!&lt;/p&gt;

&lt;h1&gt;
  
  
  Overview
&lt;/h1&gt;

&lt;p&gt;This is the first part of a series of blog posts focusing on deploying security services through AWS Organizations. In this blog post we will go over AWS Organizations prerequisites and additional configurations of your AWS Organization to enable the security services. Then we will enable AWS CloudFormation StackSets for the AWS Organization. In my opinion if you plan to automate security within your organization, you should be in some way leveraging CloudFormation StackSets as it facilitates enabling/enforcing compliance for current and future accounts. In subsequent blog posts we will deliver AWS services that are integrated with AWS Organizations.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If you are managing multiple AWS Accounts within your environment you should be managing them through AWS Organizations in some faculty. To get started, visit the AWS Documentation &lt;a href="https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_create.html" rel="noopener noreferrer"&gt;Creating an organization&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you are like me, you just want to see a GitHub repo to review the code for reference. You can find the code to deploy these services at &lt;a href="https://github.com/grolston/AwsOrganizations" rel="noopener noreferrer"&gt;https://github.com/grolston/AwsOrganizations&lt;/a&gt;. If wanting additional services to be automated, create an issue on the project and I will do my best to document, standardize and automate. &lt;/p&gt;

&lt;h1&gt;
  
  
  Prerequisites
&lt;/h1&gt;

&lt;p&gt;There are some assumptions here that the reader has knowledge of most of the AWS security services and working knowledge of the AWS CLI (version 2). Additionally, the following technical prerequisites need to be met:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html" rel="noopener noreferrer"&gt;AWS Organization setup with All Features enabled or able to be enabled&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A user account/role with Administrative access to your Management account (this is the account you have or will have your AWS Organization deployed in).&lt;/li&gt;
&lt;li&gt;An AWS Account deployed in your AWS Organization you have set aside for a Security Operations Center (not a requirement in this blog post, but required in upcoming posts).&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Getting Started with CloudShell
&lt;/h1&gt;

&lt;p&gt;All our configurations will done with the AWS CloudShell. As stated in the prerequisites you should already have logged in with an Admin permissions. I am sure if least privileges are a top concern, you could create a permission set to do exactly everything I describe below; however, for brevity and since this is a setup, just ensure the &lt;a href="https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AdministratorAccess" rel="noopener noreferrer"&gt;AWS Managed Policy AdministratorAccess&lt;/a&gt; is attached to the role/user you are using. Once that is verified, you can access the CloudShell and start your configurations. &lt;/p&gt;

&lt;h2&gt;
  
  
  Accessing the CloudShell
&lt;/h2&gt;

&lt;p&gt;Within the AWS web console at the top of the page located right of the search menu is the AWS CloudShell account. Click on it to open the CloudShell and give it time to start up. Also, if your first time take note of the great features you get with your CloudShell.&lt;/p&gt;

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

&lt;p&gt;AWS CloudShell comes with many pre-installed tools for you to use immediately. You can leverage AWS CLI v2, python, node.js, and even PowerShell (pwsh) is installed though not mentioned in the Welcome dialog box as referenced below.&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; With both Python and PowerShell you will need to install the specific AWS tools needed to access the AWS API. The CloudShell session is a regional service so ensure that you are logged into the right region prior to starting your CloudShell session. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;This part is important:&lt;/strong&gt; To avoid the frustration of having your commands not work, I recommend update your CloudShell environment to latest version of AWS CLI v2. By default, CloudShell comes with AWS CLI v2 but from my experience, it was not updated to latest and was missing some of the commands we will be doing our in our setup. To avoid this, I created as simple one-liner pulled in from a &lt;a href="https://github.com/grolston/AwsCloudShell" rel="noopener noreferrer"&gt;github repo I have&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsS&lt;/span&gt; https://raw.githubusercontent.com/grolston/AwsCloudShell/main/update.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you want to view the extremely simple update, you can check out the project or even contribute: &lt;a href="https://github.com/grolston/awscloudshell" rel="noopener noreferrer"&gt;https://github.com/grolston/awscloudshell&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The missing CLI options were noticed when configuring AWS Security Hub. AWS may have fixed this issue by updating their image they are using for the CloudShell; however, running the update can’t hurt.&lt;/p&gt;

&lt;p&gt;When running the update you may see the version change as such: &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fr395d9ryeumqpskhtzpt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fr395d9ryeumqpskhtzpt.png" alt="CloudShellAccessUpdate" width="624" height="171"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  AWS Organizations CLI
&lt;/h2&gt;

&lt;p&gt;With the CloudShell you don’t need to worry about configuring the AWS CLI v2 setting a profile. It is all set and ready to go for the commands. Try it out by running a read-only command to check your configurations for your AWS Organization:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws organizations describe-organization
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Running the command will output something similar to the following:&lt;/p&gt;

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

&lt;p&gt;In describing your AWS Organization, you should look for &lt;code&gt;FeatureSet: “ALL”&lt;/code&gt; being set. AWS Organizations can be configured for &lt;em&gt;Consolidated Billing&lt;/em&gt; or &lt;em&gt;All Features&lt;/em&gt;. You need to enable &lt;em&gt;All Features&lt;/em&gt; on your AWS Organization to allow you to configure the AWS Organization integrated security services we plan to use in this guide. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; If you already have accounts in your AWS Organization and &lt;code&gt;All Features&lt;/code&gt; is not enabled, you should review each account in your organization. When you enable &lt;code&gt;All Features&lt;/code&gt; on an AWS Organization with pre-existing accounts, any account that &lt;em&gt;joined&lt;/em&gt; the Organization will receive an email notification asking to approve the &lt;code&gt;All Features&lt;/code&gt;. Until all &lt;em&gt;joined&lt;/em&gt; accounts approve the &lt;code&gt;All Features&lt;/code&gt;, you cannot leverage these services nor add any transferred accounts. Thus it is important when setting up any new AWS Organization, &lt;strong&gt;enable &lt;code&gt;All Features&lt;/code&gt; immediately.&lt;/strong&gt; I say this from experience of managing many AWS Organizations over time. If a group within your AWS Organization has concerns about enabling &lt;code&gt;All Features&lt;/code&gt;, you may want to migrate them out to a new AWS Organizations so the rest can gain the additional security features we are discussing here. &lt;/p&gt;

&lt;p&gt;If you notice that your AWS Organization does not have all features enabled and maybe you just missed it, you can correct this by simply running the enable command (please note my aforementioned warning about enabling all features with an Organization that has pre-existing accounts and reference &lt;a href="https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html" rel="noopener noreferrer"&gt;All Features docs&lt;/a&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 organizations enable-all-features
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you are reading this and have not even created your AWS Organization, you can save yourself some hassle and just run this command from the CloudShell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws organizations create-organization &lt;span class="nt"&gt;--feature-set&lt;/span&gt; ALL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Running the command will produce similar output:&lt;/p&gt;

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

&lt;p&gt;After creation of your AWS Organization make  sure to verify your root email address when the organization is created. This one command will create the organization and enable all features. The account which you create the organization in identifies the account as the “Management Account”.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security and the AWS Management Account
&lt;/h2&gt;

&lt;p&gt;The account which you create your AWS Organization in is known as the management account. This account is also known as the master payer AWS account, payer account, or the root AWS account. The scope of this account has evolved over time from a simple AWS used to organize and consolidate billing into the Management account we know it as today.  The account you select as the AWS Management account is important as it can’t be switched unless you remove the AWS Organization and even doing that it is a horrible time. The AWS Management account is the only account that can delegate AWS Organization integrated services, deploy AWS Control Tower, created new AWS accounts (linked accounts), deploy Organizational CloudFormation StackSets, create and enforce policies, deploy AWS org trails, deploy/manage AWS SSO,  etc.&lt;/p&gt;

&lt;p&gt;The Management account is also unique in the fact that AWS Service Control policies cannot be enforced on it and Organization CloudFormation stack sets cannot be deployed to it even when targeting the root OU. The AWS account is basically set apart from the rest of the organization regarding management and guardrails.&lt;/p&gt;

&lt;p&gt;Taking all that into consideration, the AWS account should not have any end-user workloads or even compute workloads deployed to it. You should isolate your AWS Management account as much as possible and delegate every AWS Organization service to a separate account when you can. &lt;strong&gt;DO NOT RUN ALL YOUR AWS SECURITY SERVICES FROM THE MANAGEMENT ACCOUNT. ONLY RUN FROM THE MANAGEMENT ACCOUNT WHAT YOU ABSOLUTELY HAVE TO AND FOLLOW STRICT LEAST PRIVILEGE ROLE CREATION.&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Organization Service Configuration
&lt;/h1&gt;

&lt;p&gt;With &lt;code&gt;All Features&lt;/code&gt; enabled on your AWS Organization it is time to start configuring our security services. What we will be looking at is deploying some of the core security services most enterprises &lt;em&gt;should&lt;/em&gt; leverage. I can’t cover all the services; however, I will add additional blog posts as new services come up or requests are made to me (open an issue at the GitHub repo). For the last portion of this blog post I will cover reviewing AWS Organization Services and enabling AWS Organization CloudFormation StackSets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reviewing Configured AWS Organization Services
&lt;/h2&gt;

&lt;p&gt;To see what services that are already configured for your AWS Organization you can run the following command in the AWS CloudShell in your Management account.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws organizations list-aws-service-access-for-organization
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Running the command will produce similar output:&lt;/p&gt;

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

&lt;p&gt;As you can see from the screenshot my AWS Organization does not have any AWS Organization services setup yet though we have completed the prerequisite of enabling &lt;em&gt;All Features&lt;/em&gt; on the AWS Organization. Let’s change that by enabling AWS Organization CloudFormation StackSets.&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS Organizations CloudFormation StackSets
&lt;/h2&gt;

&lt;p&gt;Enabling AWS Organization CloudFormation StackSets is not necessarily a security tool; however, in my opinion, you cannot effectively manage your security of a large organization without it. AWS Organizations CloudFormation StackSets enables automated provisioning of CloudFormation templates to OU targeted accounts working across accounts and regions. Even a newly created account within a targeted OU will automatically have the template provisioned to it without any user intervention. Deleted or moved accounts immediately have the CloudFormation stacks removed from their AWS accounts (no user interaction!). &lt;/p&gt;

&lt;p&gt;To enable CloudFormation StackSets for AWS Organizations you need to use the AWS CloudFormation StackSet web console and not the AWS CloudShell. You could do this via the AWS Organizations web console under the setting, but again it is recommended by AWS at the time to do it in the AWS CloudFormation StackSet web console ( ref. &lt;a href="https://docs.aws.amazon.com/organizations/latest/userguide/services-that-can-integrate-cloudformation.html#integrate-enable-ta-cloudformation" rel="noopener noreferrer"&gt;Integrate Trusted Access CloudFormation&lt;/a&gt; ). &lt;/p&gt;

&lt;p&gt;Within your Management account after enabling AWS Organizations &lt;code&gt;All Features&lt;/code&gt; you will need to go to the CloudFormation web console and then go into the StackSets page. &lt;/p&gt;

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

&lt;p&gt;With the StackSets page open you will see an informational dialog box to click “Enable trusted access”. Note that you have to be in the AWS account which you created the AWS Organization in (aka the Management account). Simply click on the “Enable trusted access” button is the last step and you are greeted with success&lt;/p&gt;

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

&lt;p&gt;If you would like you can even bounce back into the AWS CloudShell and run the &lt;code&gt;aws organizations list-aws-service-access-for-organization&lt;/code&gt; command to view if the AWS Organizations Trusted service is deployed:&lt;/p&gt;

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

&lt;h1&gt;
  
  
  What’s Next?
&lt;/h1&gt;

&lt;p&gt;In the &lt;a href="https://dev.to/aws-builders/configuring-security-services-with-aws-organizations-part-2-aws-guardduty-4g5"&gt;Part Two&lt;/a&gt; we will enable AWS AWS Guard Duty and AWS Security Hub to be automatically deployed to all existing and new AWS Accounts within your Organization. Each account will report their findings into our SOC AWS Account enabling and ensuring all accounts have the security services up and running.&lt;/p&gt;

&lt;p&gt;Read the next blog post: &lt;a href="https://dev.to/aws-builders/configuring-security-services-with-aws-organizations-part-2-aws-guardduty-4g5"&gt;Configuring Security Services with AWS Organizations – Part 2 AWS GuardDuty&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>security</category>
      <category>architecture</category>
    </item>
    <item>
      <title>A Simple GitHub Action for securing CloudFormation</title>
      <dc:creator>George Rolston</dc:creator>
      <pubDate>Sat, 02 Jan 2021 04:29:05 +0000</pubDate>
      <link>https://dev.to/aws-builders/a-simple-github-action-for-securing-cloudformation-1id7</link>
      <guid>https://dev.to/aws-builders/a-simple-github-action-for-securing-cloudformation-1id7</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fyypclxwjwodpupvf0uzn.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fyypclxwjwodpupvf0uzn.JPG" alt="cfn-security" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you've ever wanted to get started with continuous integration (CI) with CloudFormation, it can sometimes appear rather daunting or time consuming. Many solutions are so overly complex you end up not even using them correctly...or sometimes not at all for your projects. You are faced with deploying some solution that you have to maintain or that it is so specific you can only use it in one or two projects, and good luck having your teammates adopt it. &lt;/p&gt;

&lt;p&gt;This all-too-common scenario drove me to create a very simple GitHub Action called &lt;a href="https://github.com/grolston/cfn-security" rel="noopener noreferrer"&gt;cfn-security&lt;/a&gt;, which uses some standard security analysis/linting tools for AWS CloudFormation. The purpose of the project was to encourage people to implement better security practices in their CloudFormation through CI and get started with GitHub Actions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The &lt;a href="https://github.com/marketplace/actions/cfn-security" rel="noopener noreferrer"&gt;cfn-security&lt;/a&gt; GitHub Action does not require an AWS Account, user credentials, or dedicated deployed agents.&lt;/strong&gt; I am hoping to lower the dependencies/prerequisites to encourage adoption of using such tools to promote cloud security. Additionally, to be kind to the GitHub user, cfn-security action does not conduct a full docker build at launch, which really reduces the minutes burned up for your GitHub Actions. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;GitHub Actions is free for a specified amount of minutes a month. Reference &lt;a href="https://docs.github.com/en/free-pro-team@latest/github/setting-up-and-managing-billing-and-payments-on-github/about-billing-for-github-actions" rel="noopener noreferrer"&gt;About billing for GitHub Actions&lt;/a&gt;. Due to this, make sure your actions are as efficient as possible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Currently &lt;a href="https://github.com/grolston/cfn-security" rel="noopener noreferrer"&gt;cfn-security&lt;/a&gt; includes scans leveraging &lt;a href="https://github.com/stelligent/cfn_nag" rel="noopener noreferrer"&gt;cfn-nag&lt;/a&gt; and &lt;a href="https://github.com/bridgecrewio/checkov" rel="noopener noreferrer"&gt;checkov&lt;/a&gt;. The scans run against a specified directory where your CloudFormation templates are stored. There are only two prerequisites: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You need to be developing CloudFormation&lt;/li&gt;
&lt;li&gt;You need your templates stored in one directory within your project&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;...that is it. The stars do not need to align nor do you need to provision a Jenkins server.&lt;/p&gt;

&lt;p&gt;The action is published on the GitHub Marketplace and can be found here: &lt;a href="https://github.com/marketplace/actions/cfn-security" rel="noopener noreferrer"&gt;https://github.com/marketplace/actions/cfn-security&lt;/a&gt; with further details/instructions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;To get started simply add a workflow &lt;code&gt;.yml&lt;/code&gt; file (name it whatever you would like) to your &lt;code&gt;.github/workflows/&lt;/code&gt; folder/directory in your root directory of your project. &lt;a href="https://help.github.com/en/articles/workflow-syntax-for-github-actions" rel="noopener noreferrer"&gt;Reference the docs on GitHub Workflow YAML syntax here&lt;/a&gt;. Make sure to update the &lt;code&gt;cloudformation_directory&lt;/code&gt; variable as this is the location where the scan will look for .yml or .json files to test.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; a good practice is to store all your CloudFormation templates in a single directory such as &lt;code&gt;./cloudformation&lt;/code&gt; at the root of your project.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For more examples of &lt;code&gt;cfn-security&lt;/code&gt; workflow files check out the project's &lt;a href="https://github.com/grolston/cfn-security/tree/master/workflow-examples" rel="noopener noreferrer"&gt;example workflow templates&lt;/a&gt;. If you still do not know where to start, just cut and paste the &lt;a href="https://github.com/grolston/cfn-security/blob/master/workflow-examples/all-security-scans.yml" rel="noopener noreferrer"&gt;all-security-scans.yml&lt;/a&gt; template which will create two security scan jobs. Just make sure to update the template input variables as necessary.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cfn-security Scan&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="c1"&gt;## cfn-nag security scan&lt;/span&gt;
  &lt;span class="na"&gt;security-scan-cfn-nag&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v2&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;grolston/cfn-security@master&lt;/span&gt;
      &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;cloudformation_directory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./cloudformation/"&lt;/span&gt; &lt;span class="c1"&gt;# be sure to update as necessary!&lt;/span&gt;
        &lt;span class="na"&gt;scanner&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cfn-nag"&lt;/span&gt;

  &lt;span class="c1"&gt;## checkov security scan&lt;/span&gt;
  &lt;span class="na"&gt;security-scan-checkov&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v2&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;grolston/cfn-security@master&lt;/span&gt;
      &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;cloudformation_directory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./cloudformation/"&lt;/span&gt; &lt;span class="c1"&gt;# be sure to update as necessary!&lt;/span&gt;
        &lt;span class="na"&gt;scanner&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;checkov"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The goal of this is to be as dead simple as possible to encourage adoption and understanding of static code analysis tools for CloudFormation. Security should be built into your DevOps practices at every stage and I hope this helps people get started. There are a lot of other great tools to secure your CloudFormation templates and some awesome IDE extensions that can do this locally.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloudformation</category>
      <category>github</category>
      <category>actions</category>
    </item>
  </channel>
</rss>
