<?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: rowan</title>
    <description>The latest articles on DEV Community by rowan (@rowanu).</description>
    <link>https://dev.to/rowanu</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%2F110093%2Fcb42806d-47c4-404e-bdad-d8f051ffac9e.jpg</url>
      <title>DEV Community: rowan</title>
      <link>https://dev.to/rowanu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rowanu"/>
    <language>en</language>
    <item>
      <title>Passing the AWS Security Speciality in 2024 (SCS-C02)</title>
      <dc:creator>rowan</dc:creator>
      <pubDate>Mon, 11 Mar 2024 02:21:15 +0000</pubDate>
      <link>https://dev.to/aws-builders/passing-the-aws-security-speciality-in-2024-scs-c02-1aik</link>
      <guid>https://dev.to/aws-builders/passing-the-aws-security-speciality-in-2024-scs-c02-1aik</guid>
      <description>&lt;p&gt;Last week I passed the latest version of the AWS Security Speciality (SCS-C02). The &lt;a href="https://aws.amazon.com/certification/certified-security-specialty/?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;Security Speciality certification&lt;/a&gt; assesses your knowledge of the various AWS security services, and the security capabilities of more general services offered by AWS.&lt;/p&gt;

&lt;p&gt;I really like this exam, and have been taking it since it was announced in beta back in early 2018:&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%2Fo491lmmt9atxmo2qb3wf.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%2Fo491lmmt9atxmo2qb3wf.png" alt="My exam history at https://aws.amazon.com/certification/" width="800" height="244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It helps that I like AWS IAM &lt;a href="https://twitter.com/elrowan/status/1389685748312330242?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;more than most&lt;/a&gt;, and IAM is a big part of the exam. That being said, I think the new version of the exam (released in 2023) is a really good update that gives it more breadth, while still focusing on the most relevant security-related services in AWS - it helps that there are so many of them now!&lt;/p&gt;

&lt;p&gt;If you want to pass the Security Speciality, you need know &lt;a href="https://d1.awsstatic.com/training-and-certification/docs-security-spec/AWS-Certified-Security-Specialty_Exam-Guide.pdf?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;the official exam guide (PDF)&lt;/a&gt; intimately. All the exam questions are written with the guide in mind, so you can't be too familiar with it.&lt;/p&gt;

&lt;p&gt;Here are the high level observations from my experience with the exam, keeping in mind that the questions are pulled from a large pool and are continually updated (I know because &lt;a href="https://www.credly.com/badges/6193ac3e-56a0-4124-b2f8-113f2ecdeac9?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;I wrote a few of them&lt;/a&gt;), so your milage may vary!&lt;/p&gt;

&lt;h2&gt;
  
  
  Exam Impressions
&lt;/h2&gt;

&lt;p&gt;For all questions, even for other AWS certification exams, keep in mind the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Focus on the specific services mentioned in the question, as this will help you eliminate some of the distractor responses. Look specifically for services not mentioned by function rather than name, for example "global cache" is CloudFront, "object storage" is S3, "threat detection" is GuardDuty, etc.&lt;/li&gt;
&lt;li&gt;Be clear what the priority is: the common ones are &lt;strong&gt;operational overhead&lt;/strong&gt; or &lt;strong&gt;cost efficiency&lt;/strong&gt; , which will enable to you pick between two similar responses. In most cases, a question that asks "least operation overhead" generally wants you to pick the response(s) with more AWS services.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Specific Examples
&lt;/h3&gt;

&lt;p&gt;Systems Manager Parameter Store (specifically Secure String parameters) is often positioned as a cheaper (aka. "cost-effective") option to &lt;a href="https://aws.amazon.com/secrets-manager/?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;AWS Secrets Manager&lt;/a&gt;. Just remember that &lt;strong&gt;only&lt;/strong&gt; Secrets Manager can automatically rotate secrets, so some solutions will require it, regardless of cost.&lt;/p&gt;

&lt;p&gt;Know the differences between &lt;a href="https://aws.amazon.com/kms/?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;AWS KMS&lt;/a&gt; and &lt;a href="https://aws.amazon.com/cloudhsm/?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;AWS CloudHSM&lt;/a&gt;. This is particularly relevant when deleting keys: KMS has a mandatory waiting period, but CloudHSM can delete keys immediately. KMS also supports &lt;a href="https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html?ref=blog.rowanudell.com#key-origin" rel="noopener noreferrer"&gt;different types of key material&lt;/a&gt;, and there are limits to when you can/can't use them which you should know. Spend some time understanding &lt;a href="https://docs.aws.amazon.com/kms/latest/developerguide/grants.html?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;KMS key grants&lt;/a&gt; - they are like resource policies for KMS keys, and will definitely feature in your exam.&lt;/p&gt;

&lt;p&gt;IAM policy syntax and evaluation is a must! You will have multiple questions in this exam that will require you to read, understand, and choose between different policies. Of course if you need help with that, I got you 😉&lt;/p&gt;

&lt;p&gt;&lt;a href="https://awsiamguide.com/?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fembed.filekitcdn.com%2Fe%2FaphxaJC5ZK9XWa3SiGtt2X%2FsK6zgdxaLsw2bkn2MVr4pn" alt="The Practical AWS IAM Guide book" width="1500" height="1150"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This also includes &lt;a href="https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;SCPs&lt;/a&gt;, which are technically part of &lt;a href="https://aws.amazon.com/organizations/?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;AWS Organizations&lt;/a&gt; but follow the same policy syntax as IAM. You should also know some of the common &lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;AWS IAM Conditions&lt;/a&gt; like those for checking MFA is present, etc. I had a couple of questions which required &lt;code&gt;NotAction&lt;/code&gt;, which can be counterintuitive, but required to achieve some scenarios.&lt;/p&gt;

&lt;p&gt;Know the difference between &lt;a href="https://docs.aws.amazon.com/vpc/latest/privatelink/gateway-endpoints.html?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;gateway endpoints&lt;/a&gt; and &lt;a href="https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;interface endpoints&lt;/a&gt; for VPCs. Gateway endpoints are an older (pre-&lt;a href="https://aws.amazon.com/privatelink/?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;PrivateLink&lt;/a&gt; approach) only for S3 and DDB, and require routing updates; Interface endpoints support more services.&lt;/p&gt;

&lt;p&gt;Know the difference between services like &lt;a href="https://aws.amazon.com/guardduty/?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;Amazon GuardDuty&lt;/a&gt; (which detect anomalous behaviour and threats) and &lt;a href="https://aws.amazon.com/inspector/?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;Amazon Inspector&lt;/a&gt; (which is for vulnerability management).&lt;/p&gt;

&lt;p&gt;Any mention of &lt;a href="https://en.wikipedia.org/wiki/Personal_data?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;PII&lt;/a&gt; usually means &lt;a href="https://aws.amazon.com/macie/?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;Amazon Macie&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Encrypting data is a key strategy to prevent the accidental leakage of data. By controlling access to the decryption keys, you give yourself another layer of control to prevent unintended exposure of sensitive data, regardless of the services being used.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/security-hub/?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;Security Hub&lt;/a&gt; aggregates the result from other services (such as Config, Inspector, WAF, Macie, etc) to generate its reports and alerts, so make sure they're available.&lt;/p&gt;

&lt;p&gt;AWS Service Catalogue featured in multiple questions where it was used to limit deployments to approved resources and configurations.&lt;/p&gt;

&lt;p&gt;When quarantining a compromised instance, pay attention to the uptime requirements. You can quarantine by changing its security groups, or by moving the instance in to an isolated subnet; but changing an instance's subnet will require you to take it offline, but changing its SG won't.&lt;/p&gt;

&lt;p&gt;Knowing how to set up &lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;a SAML identity provider&lt;/a&gt; in IAM helped on a few different questions about federation and SAML metadata changes.&lt;/p&gt;

&lt;p&gt;Don't forget that &lt;a href="https://aws.amazon.com/certificate-manager/?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;AWS Certificate Manager&lt;/a&gt; certifications for &lt;a href="https://aws.amazon.com/cloudfront/?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;CloudFront&lt;/a&gt; &lt;a href="https://repost.aws/knowledge-center/install-ssl-cloudfront?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;need to be provisioned in the &lt;code&gt;us-east-1&lt;/code&gt; (N. Virginia) region&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There were quite a few questions including CloudWatch Log. Keep in mind that CW Logs's IAM actions are in the &lt;code&gt;logs:&lt;/code&gt; namespace, not &lt;code&gt;cloudwatch:&lt;/code&gt;, and log deliverability is usually handled by the &lt;a href="https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;SSM agent&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/iam/identity-center/?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;Amazon Identity Center&lt;/a&gt; has a built-in user directory that can be used as an &lt;a href="https://en.wikipedia.org/wiki/Identity_provider?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;IdP&lt;/a&gt; for AWS-only solutions.&lt;/p&gt;

&lt;p&gt;Know the difference between VPC &lt;a href="https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;NACLs&lt;/a&gt; (stateless, coarse) and &lt;a href="https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;Security Groups&lt;/a&gt; (stateful, fine-grained), as well as their defaults, features, and limitations. By default, Security Groups will allow all outbound traffic, and no inbound traffic.&lt;/p&gt;

&lt;p&gt;Both &lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;S3 lifecycle&lt;/a&gt; configuration and &lt;a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/TTL.html?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;DynamoDB item TTL&lt;/a&gt; provide a way to expire data for security reasons, limiting the potential for unintended exposure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/audit-manager/?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;AWS Audit Manager&lt;/a&gt; featured in multiple questions; keep in mind it can work with on-premises resources for hybrid reports.&lt;/p&gt;

&lt;p&gt;Know the various ways for delivering notifications: &lt;a href="https://aws.amazon.com/sns/?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;Amazon SNS&lt;/a&gt; can be used for low-cost email notifications  (aka. "cost-effective"), &lt;a href="https://aws.amazon.com/ses/?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;Amazon SES&lt;/a&gt; (preferred for scale and deliverability), and &lt;a href="https://aws.amazon.com/sqs/?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;Amazon SQS&lt;/a&gt; (used for messaging, but not email!)&lt;/p&gt;

&lt;h3&gt;
  
  
  Surprises
&lt;/h3&gt;

&lt;p&gt;Fortunately, there were only a few surprises for me on this exam:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I had a question about &lt;a href="https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-configure-dnssec.html?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;DNSSEC for Route53&lt;/a&gt; which caught me unawares.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://repost.aws/knowledge-center/cloudfront-http-security-headers?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;X-Frame-Options headers can be added to origin response policies&lt;/a&gt; in CloudFront distributions. &lt;/li&gt;
&lt;li&gt;Somehow I'd managed to skip &lt;a href="https://docs.aws.amazon.com/signer/latest/api/Welcome.html?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;AWS Signer&lt;/a&gt; in my review, but it only featured lightly and unlike a lot of other AWS services, the name actually tells you what it does (code signing for containers and functions) 🙃&lt;/li&gt;
&lt;li&gt;I haven't had a chance to use Glacier Vaults, so I wasn't sure if or when you could change them; it turns out &lt;a href="https://repost.aws/questions/QUdhDxPHLPS7aGjoUfya7PJA/glacier-vault-lock-and-policy-changes?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;you have a 24-hour window to abort the lock and update the policy&lt;/a&gt; before it become immutable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There were also a few omissions that surprised me, but this could have just been &lt;a href="https://dictionary.cambridge.org/dictionary/english/be-the-luck-of-the-draw?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;luck of the draw&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I didn't get any questions about session policies.&lt;/li&gt;
&lt;li&gt;I only saw &lt;a href="https://aws.amazon.com/codeartifact/?ref=blog.rowanudell.com" rel="noopener noreferrer"&gt;AWS CodeArtifact&lt;/a&gt; in distractor responses.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Having seen the exam evolve and change over time, I think this new version of the certification is an improvement over previous iterations, and would recommended it to people working with AWS seriously or on a daily basis - it's hard to overstate the importance of security in the cloud!&lt;/p&gt;

&lt;p&gt;Being able to build secure applications on AWS, or assess an existing solution for potential security issues or improvements is a valuable skill, and one that I think will only become more important in the future. I think this exam is a good measure of someone's understanding of the security offerings and features on AWS.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>security</category>
      <category>certification</category>
    </item>
    <item>
      <title>External ID policy review</title>
      <dc:creator>rowan</dc:creator>
      <pubDate>Tue, 14 Nov 2023 08:41:38 +0000</pubDate>
      <link>https://dev.to/rowanu/external-id-policy-review-1dn9</link>
      <guid>https://dev.to/rowanu/external-id-policy-review-1dn9</guid>
      <description>&lt;p&gt;Granting 3rd parties access to your AWS resources via roles should always use external ID condition. &lt;strong&gt;If a vendor asks you to provision an IAM user with access + secret key in 2023, they're doing it wrong.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;External IDs are used as part of the condition block on a role's trust policy, which is another name for an IAM role's &lt;em&gt;resource policy&lt;/em&gt;. It controls cross-account access to assume a role by principals in other zones of trust/AWS accounts.&lt;/p&gt;

&lt;p&gt;In this example, the role this trust policy is attached to will allow principals in the AWS account &lt;code&gt;123456789012&lt;/code&gt; to assume the role using the &lt;code&gt;sts:AssumeRole&lt;/code&gt; permission, as long as they include and match the external ID "94d44a42-eb49-4944-8a09-47fd68e2dbd5".&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "sts:ExternalId": "94d44a42-eb49-4944-8a09-47fd68e2dbd5"
        }
      }
    }
  ]
}

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

&lt;/div&gt;



&lt;p&gt;This external ID is just a &lt;a href="https://en.wikipedia.org/wiki/Universally_unique_identifier?ref=rowanudell.com" rel="noopener noreferrer"&gt;UUID&lt;/a&gt;, but it can be any string value. This role can be assumed programatically using the SDKs or via a CLI command with the appropriate parameters:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aws sts assume-role \
    --role-arn arn:aws:iam::111111111111:role/RoleName \
    --role-session-name SessionNameIsRequired \
    --external-id 94d44a42-eb49-4944-8a09-47fd68e2dbd5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As the example suggests, you &lt;strong&gt;must&lt;/strong&gt; include the role session name and it must be unique, even though it doesn't impact the session directly. The session name is used for logging purposes, and makes it easy to track in CloudTrail what was done by the assumed role, even if there are concurrent sessions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Buy Why?
&lt;/h2&gt;

&lt;p&gt;Using an external ID prevents the confused deputy problem, similar to what the &lt;code&gt;iam:PassRole&lt;/code&gt; permission does for AWS services: &lt;a href="https://rowanudell.com/iam-passrole-explained/" rel="noopener noreferrer"&gt;AWS IAM:PassRole explained&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This condition acts makes sure that the delegated/trusted party double-checks that they're using the right delegation when accessing your account. If the external ID supplied as part of the assume role command doesn't match what the resource policy condition the API call will fail, just like any other policy with a condition blog. Without the external ID, a malicious user of the vender could potentially use the service to access a different customers' AWS resources.&lt;/p&gt;

&lt;p&gt;You shouldn't be able to set the external ID. If you can, there's no point to having it! Even big security companies &lt;a href="https://cloudone.trendmicro.com/docs/workload-security/aws-account-external-id/?ref=rowanudell.com#What" rel="noopener noreferrer"&gt;like Trend Micro&lt;/a&gt; have gotten this wrong in the past:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you previously added an AWS account using a cross-account role, you might have specified a user-defined external ID. To better align with AWS best-practices, Trend Micro recommends switching to the Workload Security-defined external ID.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The external ID is not a secret, and is not treated as such by AWS. Similar to your AWS account number, it's not bad for external parties to know it (but I probably wouldn't be handing it out on the street either). Being able to re-generate the external ID is OK, as long as you can't actually set it, and it has a sufficient amount of randomness to it (e.g. a UUID or similar).&lt;/p&gt;

&lt;h2&gt;
  
  
  Relevant Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html?ref=rowanudell.com" rel="noopener noreferrer"&gt;The official AWS documentation for external ID&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/apn/securely-using-external-id-for-accessing-aws-accounts-owned-by-others/?ref=rowanudell.com" rel="noopener noreferrer"&gt;Another official example on the AWS APN blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>100policies</category>
    </item>
    <item>
      <title>CloudFormation Registry Cheatsheet</title>
      <dc:creator>rowan</dc:creator>
      <pubDate>Wed, 04 Aug 2021 09:01:00 +0000</pubDate>
      <link>https://dev.to/rowanu/cloudformation-registry-cheatsheet-4pco</link>
      <guid>https://dev.to/rowanu/cloudformation-registry-cheatsheet-4pco</guid>
      <description>&lt;p&gt;A few weeks ago the &lt;a href="https://aws.amazon.com/blogs/aws/introducing-a-public-registry-for-aws-cloudformation/" rel="noopener noreferrer"&gt;AWS CloudFormation Public Registry was announced&lt;/a&gt;. It makes it easier to distribute and consume CloudFormation &lt;strong&gt;&lt;a href="https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-types.html" rel="noopener noreferrer"&gt;resource types&lt;/a&gt;&lt;/strong&gt; (sometimes called &lt;em&gt;resource providers&lt;/em&gt;) and &lt;strong&gt;&lt;a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/modules.html" rel="noopener noreferrer"&gt;modules&lt;/a&gt;&lt;/strong&gt;, which are referred to as &lt;em&gt;extensions&lt;/em&gt; collectively. It doesn't support CloudFormation &lt;strong&gt;&lt;a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html" rel="noopener noreferrer"&gt;custom resources&lt;/a&gt;&lt;/strong&gt;, which seem to be legacy functionality these days. Resources that are missing CloudFormation coverages are tracked in &lt;a href="https://github.com/aws-cloudformation/cloudformation-coverage-roadmap/issues" rel="noopener noreferrer"&gt;the roadmap repo on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry.html" rel="noopener noreferrer"&gt;registry documentation&lt;/a&gt; is as extensive and detailed as you'd expect from the official documentation. This can be hard to get started with, so here's a quick summary...&lt;/p&gt;

&lt;h2&gt;
  
  
  Extensions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  CloudFormation Modules
&lt;/h3&gt;

&lt;p&gt;Modules are pre-configured snippets of CloudFormation. They let you define how resources should be created in CloudFormation, but they don’t let you do anything that CloudFormation doesn’t already support.&lt;/p&gt;

&lt;h3&gt;
  
  
  CloudFormation Resource Types
&lt;/h3&gt;

&lt;p&gt;Resource Types allow you to define resources that then can be created via native CloudFormation. They allow you to do things that CloudFormation cannot do e.g. create resources outside of AWS, managed via CloudFormation, or create AWS resource in a very specific/prescriptive way.&lt;/p&gt;

&lt;h2&gt;
  
  
  CloudFormation Registries
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Private Registry&lt;/strong&gt; extensions are a per-account registration of resource types and modules. This means you have to take care of provisioning, using, and updating the resource providers yourself. For me personally, this per-account limitation dramatically reduced the usefulness of resource providers, given the multi-account environments I usually work in, and that are encouraged by &lt;a href="https://aws.amazon.com/organizations/getting-started/best-practices/" rel="noopener noreferrer"&gt;AWS's own best practices&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Public Registry&lt;/strong&gt; extensions are published publicly for everyone on AWS to see and use. They can take advantage of &lt;a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html" rel="noopener noreferrer"&gt;drift detection&lt;/a&gt; (private types can't). They can also be integrated with &lt;a href="https://aws.amazon.com/config/" rel="noopener noreferrer"&gt;AWS Config&lt;/a&gt;, so that you can see a history of changes to your deployed resources.&lt;/p&gt;

&lt;p&gt;Public registry publishers &lt;em&gt;must&lt;/em&gt; be one of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Marketplace seller, which is probably not you unless you’re already in the marketplace&lt;/li&gt;
&lt;li&gt;A GitHub user&lt;/li&gt;
&lt;li&gt;A BitBucket user&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Publishing
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Register in a particular region&lt;/li&gt;
&lt;li&gt;Publish the resource provider in to private registry in that same region&lt;/li&gt;
&lt;li&gt;Test the extension meets requirements, specifically the &lt;a href="https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-test.html" rel="noopener noreferrer"&gt;resource type tests&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Consuming
&lt;/h2&gt;

&lt;p&gt;Public registry extensions come in two flavours:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Amazon extensions&lt;/strong&gt; are public and active by default, so you don't need to do anything to start using them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Third-party extensions&lt;/strong&gt; must be activated by account and region. When activating (only!) you can set an alias for the extension, and if you want automatic minor/patch version updates (extensions follow &lt;a href="https://semver.org/" rel="noopener noreferrer"&gt;semantic versioning&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Activated extensions are replicated to your account. Types can be activated across an &lt;a href="https://aws.amazon.com/organizations/" rel="noopener noreferrer"&gt;Organization&lt;/a&gt; using service-managed &lt;a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html" rel="noopener noreferrer"&gt;StackSets&lt;/a&gt;. Requires a &lt;a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry-public.html#registry-public-enable-execution-role" rel="noopener noreferrer"&gt;service role&lt;/a&gt; that allows &lt;code&gt;sts:AssumeRole&lt;/code&gt; by the service &lt;code&gt;resources.cloudformation.amazonaws.com&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cost
&lt;/h3&gt;

&lt;p&gt;There is no cost associated with the public or private registries, only the costs incurred by the resources created, and the resources used when running the extensions in your account.&lt;/p&gt;

</description>
      <category>cloudformation</category>
      <category>cheatsheet</category>
    </item>
    <item>
      <title>A Practical Guide to AWS IAM</title>
      <dc:creator>rowan</dc:creator>
      <pubDate>Wed, 23 Sep 2020 09:59:07 +0000</pubDate>
      <link>https://dev.to/rowanu/a-practical-guide-to-aws-iam-4ggo</link>
      <guid>https://dev.to/rowanu/a-practical-guide-to-aws-iam-4ggo</guid>
      <description>&lt;p&gt;Ever felt you didn't really know how to use AWS IAM?&lt;br&gt;
Confused where to start learning?&lt;br&gt;
Wonder no more, because I'm writing the guide for YOU!&lt;/p&gt;

&lt;p&gt;In all seriousness, I'm writing the &lt;a href="https://rowanudell.ck.page/practical-aws-iam-guide-book" rel="noopener noreferrer"&gt;Practical AWS IAM Guide&lt;/a&gt; because I would've loved to have it 5 years ago. Now that I've learnt about IAM the hard way, I want to save others the trouble and pain.&lt;/p&gt;

&lt;p&gt;I'm about 20k words in to the book, and still looking for &lt;em&gt;practical&lt;/em&gt; things about IAM to include.&lt;/p&gt;

&lt;p&gt;If you have any areas of IAM you'd like explained, please let me know in the comments! I'll be releasing plenty of content for free as part of the process.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>security</category>
      <category>writing</category>
      <category>books</category>
    </item>
  </channel>
</rss>
