<?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: Olumuyiwa Kolayemi </title>
    <description>The latest articles on DEV Community by Olumuyiwa Kolayemi  (@muyidevops).</description>
    <link>https://dev.to/muyidevops</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%2F939912%2Fb644cfc6-2ce5-475c-941e-dfa4c640d9f3.jpeg</url>
      <title>DEV Community: Olumuyiwa Kolayemi </title>
      <link>https://dev.to/muyidevops</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/muyidevops"/>
    <language>en</language>
    <item>
      <title>Certified Cloud Native Platform Engineering Associate Exam: Know Before You Go</title>
      <dc:creator>Olumuyiwa Kolayemi </dc:creator>
      <pubDate>Fri, 20 Jun 2025 12:16:30 +0000</pubDate>
      <link>https://dev.to/muyidevops/certified-cloud-native-platform-engineering-associate-exam-know-before-you-go-4nh2</link>
      <guid>https://dev.to/muyidevops/certified-cloud-native-platform-engineering-associate-exam-know-before-you-go-4nh2</guid>
      <description>&lt;p&gt;"My experience taking the Certified Cloud Native Platform Engineering Associate (CNPA) beta exam and how you can prepare effectively."&lt;/p&gt;




&lt;h2&gt;
  
  
  CNPA: Know Before You Go
&lt;/h2&gt;

&lt;p&gt;I recently had the opportunity to take the &lt;strong&gt;Certified Cloud Native Platform Engineering Associate (CNPA)&lt;/strong&gt; beta exam on May 11. It was a 3-hour, proctored exam with 185 questions, administered via PSI. I’m pleased to share that I passed the exam with a score of 94%, well above the 75% passing threshold.&lt;/p&gt;

&lt;p&gt;Now that the certification has been officially released, it's clear that CNPA is designed to validate your foundational knowledge of cloud-native technologies, covering core concepts like &lt;strong&gt;microservices&lt;/strong&gt;, &lt;strong&gt;containers&lt;/strong&gt;, &lt;strong&gt;CI/CD&lt;/strong&gt;, &lt;strong&gt;Infrastructure as Code (IaC)&lt;/strong&gt;, &lt;strong&gt;observability&lt;/strong&gt;, and &lt;strong&gt;platform security&lt;/strong&gt;. Whether you're a platform engineer, DevOps practitioner, SRE, or cloud-native enthusiast, this certification offers a practical entry point for those with 6–12 months of hands-on experience in a supporting role within &lt;strong&gt;platform engineering&lt;/strong&gt; teams.&lt;/p&gt;

&lt;p&gt;The official exam is &lt;strong&gt;90 minutes&lt;/strong&gt; long, consists of &lt;strong&gt;multiple-choice questions&lt;/strong&gt;, and includes &lt;strong&gt;one retake&lt;/strong&gt;. Certification is valid for two years, and candidates have a 12-month window of eligibility to schedule their exam.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Want to see the exam domains? &lt;a href="https://training.linuxfoundation.org/certification/certified-cloud-native-platform-engineering-associate-cnpa/" rel="noopener noreferrer"&gt;Check them out here&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  My Experience and Study Strategy
&lt;/h2&gt;

&lt;p&gt;While the CNPA is designed as an introductory certification, my previous experience with &lt;strong&gt;KCNA&lt;/strong&gt; (Kubernetes and Cloud Native Associate) proved incredibly valuable. KCNA laid the groundwork for many core concepts that appeared in the CNPA.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Tight Timeline
&lt;/h3&gt;

&lt;p&gt;Since this was a &lt;strong&gt;beta exam&lt;/strong&gt;, no official study materials were available when I got the invite. I had &lt;strong&gt;just one week&lt;/strong&gt; to prepare. Here's what worked for me:&lt;/p&gt;

&lt;h4&gt;
  
  
  1. &lt;strong&gt;ChatGPT Deep Search for Study Notes&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;I used ChatGPT’s Deep Search feature to generate &lt;strong&gt;detailed study notes&lt;/strong&gt; for each domain of the exam. These notes included key definitions, principles, tools, and best practices.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. &lt;strong&gt;NotebookLM + Podcast-Style Learning&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;A friend introduced me to &lt;strong&gt;NotebookLM by Google&lt;/strong&gt;, and it was a game-changer. I transformed my notes into a &lt;strong&gt;32-minute, two-host podcast&lt;/strong&gt;, which I could listen to while juggling chores and “dad duty” with my two daughters.&lt;/p&gt;

&lt;p&gt;You can find both my &lt;strong&gt;study notes&lt;/strong&gt; and the &lt;strong&gt;audio podcast&lt;/strong&gt; here: &lt;a href="https://notebooklm.google.com/notebook/1e907069-374f-401a-8052-fd0ea1fd7406/audio" rel="noopener noreferrer"&gt;audio podcast&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Note:
&lt;/h3&gt;

&lt;p&gt;The Linux Foundation Education team released official training content alongside the exam earlier this month. After reviewing the published domains and competencies on their platform, I can confidently say it covers everything you need to succeed in the exam. I’ve included a link to the course in the resources section of this article.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Topics You Should Master
&lt;/h2&gt;

&lt;p&gt;Here’s a high-level checklist of concepts you should understand before taking the CNPA exam:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Platform Engineering Principles
&lt;/li&gt;
&lt;li&gt;DevOps and Platform Engineering: Where they overlap
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DORA Metrics&lt;/strong&gt; for platform performance
&lt;/li&gt;
&lt;li&gt;Deep understanding of &lt;strong&gt;GitOps&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt; Understanding of &lt;strong&gt;operational models&lt;/strong&gt; in GitOps workflows &lt;/li&gt;
&lt;li&gt; Familiarity with synchronization and &lt;strong&gt;state management mechanisms&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Mechanisms for maintaining system consistency through &lt;strong&gt;state reconciliation&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt; Awareness of &lt;strong&gt;configuration management strategies&lt;/strong&gt; in modern delivery pipelines &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt; Selecting appropriate &lt;strong&gt;orchestration and provisioning frameworks&lt;/strong&gt; based on workload requirements
&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Policy engines&lt;/strong&gt; in the cloud-native stack&lt;/li&gt;

&lt;li&gt;Approaches to secure &lt;strong&gt;inter-service communication&lt;/strong&gt; within distributed systems &lt;/li&gt;

&lt;li&gt;Understanding service orchestration frameworks based on &lt;strong&gt;traffic management and policy enforcement&lt;/strong&gt; needs
&lt;/li&gt;

&lt;li&gt;Approaches to enforcing &lt;strong&gt;access control and traffic segmentation&lt;/strong&gt; in containerized environments &lt;/li&gt;

&lt;li&gt;Foundational knowledge of &lt;strong&gt;observability practices in cloud-native platforms&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Understanding core capabilities
&lt;/li&gt;
&lt;li&gt;Recognizing current limitations
&lt;/li&gt;
&lt;li&gt;Awareness of complementary ecosystem tools&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;The &lt;strong&gt;Kubernetes Reconciliation Loop&lt;/strong&gt;
&lt;/li&gt;

&lt;li&gt;What are &lt;strong&gt;Internal Developer Platforms (IDPs)&lt;/strong&gt;?

&lt;ul&gt;
&lt;li&gt;Building extensible, API-first systems
&lt;/li&gt;
&lt;li&gt;Facilitating self-service via developer portals
&lt;/li&gt;
&lt;li&gt;How to measure IDP success&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  Recommended Resources
&lt;/h2&gt;

&lt;p&gt;Review Important Exam information (including exam curriculum) here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://training.linuxfoundation.org/certification/certified-cloud-native-platform-engineering-associate-cnpa/" rel="noopener noreferrer"&gt;Domains &amp;amp; Competencies&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.linuxfoundation.org/tc-docs/certification/important-instructions-mc" rel="noopener noreferrer"&gt;Important Instructions&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.linuxfoundation.org/tc-docs/certification/lf-handbook2" rel="noopener noreferrer"&gt;Candidate Handbook&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://trainingportal.linuxfoundation.org/courses/cloud-native-platform-associate-cnpa" rel="noopener noreferrer"&gt;Official CNPA Training Course&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;If you can confidently tackle the topics listed above, you're in great shape for the CNPA. Whether you're new to platform engineering or looking to formalize your knowledge, this exam offers a meaningful credential for the cloud-native ecosystem.&lt;/p&gt;

&lt;p&gt;I'd love to hear your thoughts or answer questions if you're preparing for the exam!&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Connect with Me&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.linkedin.com/in/kolayemi-olumuyiwa/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://linktr.ee/muykol" rel="noopener noreferrer"&gt;Linktree&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.profile.muykol.com/" rel="noopener noreferrer"&gt;My Website&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Thanks for reading — and good luck on your CNPA journey!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>platformengineering</category>
      <category>devops</category>
      <category>cloudnative</category>
      <category>certification</category>
    </item>
    <item>
      <title>Cross-Account Parameter Sharing in AWS with RAM using Terraform: A Practical Guide</title>
      <dc:creator>Olumuyiwa Kolayemi </dc:creator>
      <pubDate>Wed, 26 Mar 2025 04:55:12 +0000</pubDate>
      <link>https://dev.to/aws-builders/cross-account-parameter-sharing-in-aws-with-ram-using-terraform-a-practical-guide-4blb</link>
      <guid>https://dev.to/aws-builders/cross-account-parameter-sharing-in-aws-with-ram-using-terraform-a-practical-guide-4blb</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Many organizations maintain common system configuration parameters that are stored centrally and shared across different cloud environments. For instance, an organization's security team might be tasked with creating a golden AMI that is compliant and certified for use across their AWS environments and accounts. While AMI IDs themselves are not inherently sensitive, they can become a concern in specific contexts—such as when they point to proprietary, internal, or specially configured images that reveal details about the organization's infrastructure. Managing multiple AWS accounts often involves securely sharing such sensitive configuration data—like AMI IDs in these contexts, along with API keys, database credentials, or application secrets—across accounts. If exposed, these configurations could compromise security or critical infrastructure. The key players for this implementation are SSM Parameter Store and RAM.&lt;/p&gt;

&lt;p&gt;AWS Resource Access Manager (RAM) allows for the secure sharing of AWS resources, such as subnets, transit gateways, and Systems Manager (SSM) parameters, across accounts in your organization or with specific AWS accounts. By enabling centralized access to shared resources, RAM reduces duplication and improves efficiency in multi-account setups. When integrated with SSM, RAM facilitates the secure sharing of advanced parameters, making it easier to manage sensitive configuration data across accounts while maintaining security and scalability.&lt;/p&gt;

&lt;p&gt;AWS Systems Manager (SSM) Parameter Store is a secure and scalable solution for managing configuration data and secrets. One of its standout features is the ability to organize parameters using a hierarchical naming structure (e.g., &lt;code&gt;/prod/app1/db-password&lt;/code&gt;), which makes it easier to logically group and retrieve related configurations. This structured approach simplifies parameter management across multiple environments and applications. Moreover, SSM Parameter Store supports cross-account sharing of parameters, enhancing collaboration in multi-account setups. Something to keep in mind for this use case is that the SSM parameter being shared must meet a few key requirements. Specifically, it must be an Advanced Tier SSM parameter and must be encrypted with a customer-managed key if you are sharing secured strings.&lt;/p&gt;

&lt;p&gt;If you are very familiar with AWS, I know you must be thinking that yes, you can use AWS Secrets Manager for this. To clarify your options, here’s a comparison of SSM Parameter Store (Advanced Tier) and AWS Secrets Manager, two services that can handle configuration data effectively in AWS:&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%2F852a3pj0kb2ffikuv43b.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%2F852a3pj0kb2ffikuv43b.png" alt="Comparison between SSM Parameter Store (Advanced Tier) &amp;amp; Secrets Manager " width="800" height="514"&gt;&lt;/a&gt;&lt;br&gt;
Fig 1: Comparison between SSM Parameter Store (Advanced Tier) &amp;amp; Secrets Manager&lt;/p&gt;

&lt;p&gt;With this comparison and requirements in mind, you can better understand which service aligns with your use case as we dive into implementing a solution for securely sharing AWS Systems Manager parameters.&lt;/p&gt;
&lt;h2&gt;
  
  
  Architecture Overview
&lt;/h2&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%2Fczisdag2kkjnabyn1f85.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%2Fczisdag2kkjnabyn1f85.png" alt="Cross-Account Parameter Sharing Architecture" width="780" height="612"&gt;&lt;/a&gt;&lt;br&gt;
Fig 2: Cross-Account Parameter Sharing Architecture&lt;/p&gt;

&lt;p&gt;The solution involves two AWS accounts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Security Account&lt;/strong&gt;: Acts as the source of truth for sensitive parameters. It stores and shares parameters securely using AWS SSM Parameter Store and AWS RAM.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Development Account&lt;/strong&gt;: Consumes the shared parameters to deploy resources, such as EC2 instances, using Terraform.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  Key AWS Services Used:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AWS Systems Manager Parameter Store&lt;/strong&gt;: For storing and managing parameters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Resource Access Manager (RAM)&lt;/strong&gt;: For securely sharing resources across accounts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Key Management Service (KMS)&lt;/strong&gt;: For encrypting sensitive parameters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS EC2&lt;/strong&gt;: For deploying resources that consume shared parameters.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Prerequisite set up:
&lt;/h3&gt;

&lt;p&gt;For my developer environment set up, I use VSCode with AWS CLI that is configured with an Admin User profile in the AWS Security account. I created two separate folders - security_account and dev_account to have separate terraform states for resources deployed to these different environments/accounts. See folder structure 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%2Fuploads%2Farticles%2F5gh6ifr6yrzprx9i6na6.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%2F5gh6ifr6yrzprx9i6na6.png" alt="Implementation Folder Structure" width="420" height="713"&gt;&lt;/a&gt;&lt;br&gt;
Fig 3: Implementation Folder Structure&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Provider configuration of the security account:&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;This file ensures that Terraform is properly authenticated and authorized to create and manage resources in the security account. &lt;br&gt;
Key details to note;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Profile&lt;/strong&gt;: Indicates the AWS CLI profile to use for authentication. In this case, the profile &lt;code&gt;Muyi-Admin&lt;/code&gt; is used, which corresponds to an IAM user with administrative privileges in the security account.&lt;/li&gt;
&lt;/ul&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%2Fq1fga3rsoyri5w4qmbmc.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%2Fq1fga3rsoyri5w4qmbmc.png" alt="Terraform User for Security Account Deployments" width="642" height="757"&gt;&lt;/a&gt;&lt;br&gt;
Fig 4: Terraform User for Security Account Deployments&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Provider configuration of the dev account:&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;For the dev account, I used the &lt;code&gt;AssumeRole&lt;/code&gt; method of authentication for terraform deployments.&lt;/p&gt;

&lt;p&gt;In this setup, the &lt;strong&gt;Development Account&lt;/strong&gt; does not have direct access to resources (e.g., SSM parameters) in the &lt;strong&gt;Security Account&lt;/strong&gt;. To securely retrieve these resources, the Development Account assumes an IAM role in the Security Account that has the necessary permissions. This is achieved using the &lt;code&gt;assume_role&lt;/code&gt; block in the AWS provider configuration. See image below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# AWS Provider configuration for dev account
provider "aws" {
  region = "us-west-2"
  assume_role {
    role_arn     = "arn:aws:iam::${dev_account_id}:role/TerraformAssumeRole"
    session_name = "dev-muykol"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AWS generates temporary security credentials (access key, secret key, and session token) for the assumed role, which Terraform uses to interact with resources in the Security Account. The Development Account does not need long-term credentials for the Security Account. Instead, it uses temporary credentials generated by the assumed role. See figure 6 below for details.&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%2Fptglmpmfp5f14uihzabk.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%2Fptglmpmfp5f14uihzabk.png" alt="STS Test Session for the Terraform AssumedRole" width="800" height="165"&gt;&lt;/a&gt;&lt;br&gt;
Fig 6: STS Test Session for the Terraform AssumedRole&lt;/p&gt;

&lt;p&gt;Now that we have our developer environment set up, let’s get to the implementation proper.&lt;/p&gt;

&lt;h4&gt;
  
  
  Part A: Configure the Security Account
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Set up a KMS Key&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;A KMS key is created in the security account to encrypt sensitive parameters stored in the SSM Parameter Store. This ensures that the parameters are protected at rest.&lt;/li&gt;
&lt;li&gt;Key rotation is enabled to enhance security by periodically updating the encryption key.&lt;/li&gt;
&lt;li&gt;The KMS key is configured to allow access only to authorized users and services, ensuring that only the intended accounts and roles can decrypt the parameters.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;resource "aws_kms_key" "shared_params_key" {
  description             = "KMS key for shared parameters"
  deletion_window_in_days = 30
  enable_key_rotation     = true
  multi_region            = true
}

resource "aws_kms_alias" "shared_params_alias" {
  name          = "alias/${var.key_alias}"
  target_key_id = aws_kms_key.shared_params_key.key_id
}

resource "aws_kms_key_policy" "shared_params_key_policy" {
  key_id     = aws_kms_key.shared_params_key.key_id
  policy     = data.aws_iam_policy_document.shared_params_key_policy.json
  depends_on = [aws_kms_key.shared_params_key]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fepe5bq3lrznjb9dpel7i.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%2Fepe5bq3lrznjb9dpel7i.png" alt="Terraform Plan for KMS Deployment" width="795" height="697"&gt;&lt;/a&gt;&lt;br&gt;
Fig 7: Terraform Plan for KMS Deployment&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create SSM Parameters&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Parameters are stored in the SSM Parameter Store using the &lt;code&gt;SecureString&lt;/code&gt; type, which ensures that the values are encrypted.&lt;/li&gt;
&lt;li&gt;The KMS key created earlier is associated with the parameters to provide encryption.&lt;/li&gt;
&lt;li&gt;Parameters are named using a consistent naming convention (e.g., &lt;code&gt;/golden-ami/latest&lt;/code&gt;) to make them easily identifiable and manageable.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;resource "random_string" "random_params" {
  length  = 8
  special = false
}

# Create SSM Parameter for AMI ID
resource "aws_ssm_parameter" "golden_ami" {
  name       = "/golden-ami/latest"
  tier       = "Advanced"
  type       = "SecureString"
  value      = "REPLACEPLEASE-${random_string.random_params.result}"
  key_id     = aws_kms_key.shared_params_key.key_id
  depends_on = [aws_kms_key.shared_params_key]

  lifecycle {
    ignore_changes = [value]
  }

  tags = {
    Environment = "shared"
    Purpose     = "Golden AMI Reference"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fhf9duf3w6u39lm34mqr6.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%2Fhf9duf3w6u39lm34mqr6.png" alt="Shared Parameter Deployed" width="800" height="446"&gt;&lt;/a&gt;&lt;br&gt;
Fig 8: Shared Parameter Deployed&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Set Up RAM Resource Sharing&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;AWS Resource Access Manager (RAM) is used to share the SSM parameters with the development account.&lt;/li&gt;
&lt;li&gt;A RAM resource share is created, and the SSM parameter is added as a shared resource.&lt;/li&gt;
&lt;li&gt;The development account is specified as the principal in the resource share, granting it access to the shared parameter.&lt;/li&gt;
&lt;li&gt;This setup ensures that the parameter is securely shared without duplicating it in the development account.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Create RAM Resource Share
resource "aws_ram_resource_share" "ssm_share" {
  name                      = "golden-ami-parameter-share"
  allow_external_principals = true

  tags = {
    Environment = "shared"
  }
}

# Associate SSM Parameter with RAM Share
resource "aws_ram_resource_association" "ssm_association" {
  resource_arn       = aws_ssm_parameter.golden_ami.arn
  resource_share_arn = aws_ram_resource_share.ssm_share.arn
}

# Share with Dev Account
resource "aws_ram_principal_association" "dev_shared_params" {
  principal          = var.dev_account_id
  resource_share_arn = aws_ram_resource_share.ssm_share.arn
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fwcom9cmjer27xvvp1uye.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%2Fwcom9cmjer27xvvp1uye.png" alt="Resource Shares Deployed" width="800" height="712"&gt;&lt;/a&gt;&lt;br&gt;
Fig 9: Resource Shares Deployed&lt;/p&gt;

&lt;h4&gt;
  
  
  Part B: Configure the Development Account
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Access the Shared Parameter&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Terraform AssumedRole was used to retrieve the shared parameter value dynamically using its ARN, ensuring that the latest version of the parameter is always used and necessary IAM permissions were granted to access the shared parameter through the RAM resource share.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&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%2Ffjfi4tpulxknlirbngxv.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%2Ffjfi4tpulxknlirbngxv.png" alt="Shared Parameter Policy" width="800" height="659"&gt;&lt;/a&gt;&lt;br&gt;
Fig 10: Shared Parameter Policy&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%2Fcfhkuj1uft9k4m58eegu.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%2Fcfhkuj1uft9k4m58eegu.png" alt="Dev Account Trust Policy Updated" width="800" height="364"&gt;&lt;/a&gt;&lt;br&gt;
Fig 11: Dev Account Trust Policy Updated&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Validate the Shared Parameter in AWS RAM on Dev Account&lt;/strong&gt;:
In the Shared with me Resource shares on Dev Account, you should be able to see the resource share arn that is pointing to the &lt;code&gt;/golden-ami/latest&lt;/code&gt; parameter stored in the RAM on Security Account.&lt;/li&gt;
&lt;/ol&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%2F0dfxvppsoydztyr4r33a.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%2F0dfxvppsoydztyr4r33a.png" alt="Successful Resource Shares" width="800" height="374"&gt;&lt;/a&gt;&lt;br&gt;
Fig 12: Resource share Validation on Dev Account &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Deploy Resources Using Shared Parameters&lt;/strong&gt;:
To test the retrieved parameter value, I updated the golden-ami value to one of the available AMI-ID in the US-West-2 region for demo purpose. This will correspond to the AMI-ID of the golden-image baked by the Security team in an enterprise setup. The retrieved parameter value was used by Terraform to deploy EC2 instances on Dev Account.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Retrieve the shared SSM parameter
data "aws_ssm_parameter" "shared_ami" {
  name = "arn:aws:ssm:us-west-2:${local.security_account_id}:parameter/golden-ami/latest"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;locals {
  security_account_id = "724604039557"
}
# Create EC2 instance using the shared AMI ID
resource "aws_instance" "web_instance" {
  ami           = data.aws_ssm_parameter.shared_ami.value
  instance_type = "t2.micro"

  tags = {
    Name        = "Fikol Instance"
    Environment = "dev"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fnqk6q7k6uhi7zjugf6kf.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%2Fnqk6q7k6uhi7zjugf6kf.png" alt="Shared Parameter Updated" width="790" height="831"&gt;&lt;/a&gt;&lt;br&gt;
Fig 13: Shared Parameter Updated&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%2Fsq6yqnu7n9dddcr8dzzs.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%2Fsq6yqnu7n9dddcr8dzzs.png" alt="Successful EC2 Instance Launched" width="800" height="390"&gt;&lt;/a&gt;&lt;br&gt;
Fig 14: Successful EC2 Instance Launched&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits of This Approach
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt;: Parameters are encrypted and securely shared using AWS RAM.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt;: Easily extend the solution to share parameters with additional accounts or regions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Centralized Management&lt;/strong&gt;: Simplifies parameter management by consolidating it in a single account.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automation&lt;/strong&gt;: Terraform ensures consistent and repeatable deployments across accounts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost Efficiency&lt;/strong&gt;: Reduces duplication of resources by sharing parameters instead of recreating them in each account.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Possible Improvement for this implementation;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Configure OIDC role and deploy using GitHub Action (deploy using an OIDC secured CICD Pipeline)&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;This implementation demonstrates a secure and scalable way to share sensitive configuration data across AWS accounts using Terraform. By leveraging AWS SSM Parameter Store, RAM, and KMS, you can centralize parameter management while maintaining strict security controls.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>security</category>
      <category>terraform</category>
    </item>
    <item>
      <title>5 Ways to maximize AWS re:invent as an ABW Grantee</title>
      <dc:creator>Olumuyiwa Kolayemi </dc:creator>
      <pubDate>Sun, 09 Oct 2022 21:53:13 +0000</pubDate>
      <link>https://dev.to/aws-builders/5-ways-to-maximize-reinvent-as-an-abw-grantee-4kk5</link>
      <guid>https://dev.to/aws-builders/5-ways-to-maximize-reinvent-as-an-abw-grantee-4kk5</guid>
      <description>&lt;p&gt;Congratulations to all the All Builders Welcome (ABW) grantees for this year’s AWS re:invent. Two of my mentees got the grant this year, and I’m super excited for them. For context, All Builders Welcome (ABW) grants is a  program developed by AWS to provide assistance to the underrepresented groups in tech who are less than 5 years into their tech career journey, with the aim of fostering diversity and inclusion. The grant covers free re:Invent entry ticket that is worth $1,799, Airfare to Las Vegas, accommodation during the conference, 1 free voucher for AWS certification exam, and access to over 100 re:Invent contents - Keynotes and Leadership sessions, Technical workshops, and many other fun activities. &lt;/p&gt;

&lt;p&gt;As a former ABW grantee, I can tell that this year grantees will have a lot of questions about how to make the most of this largest annual tech gathering. Well, I’ve got your back! I hope these few tips would be helpful to you as you plan ahead of your trip to Las Vegas in the last week of November. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Create re:Invent action plan. &lt;br&gt;
Before the event, take advantage of the power of LinkedIn. Be active on LinkedIn and Twitter to know who will be attending the event in your network. You can send them a DM If you would like to connect with them at the event. After you have reached out to some folks in your network, make a list of those people you’ve connected with and people you want to meet. Review your list. Categorise the people on your list in 2 groups: “Must Meet” and “Nice to Meet”.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Travel light. &lt;br&gt;
Yes, this is very important as you are packing your luggage. One thing to note is that Las Vegas is warm and not as cold as some other states in the US around this time of the year. So, you don’t need to pack a lot of bulky clothes. And remember to make room for swags. I’m sure the ABW team will emphasize this during their info session for the grantees.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When you arrive at the re:Invent, be your authentic self. Don't fake it. You might be standing in line for registration with your future hiring manager or CEO. So, be generous, and look for ways to strike up a conversation even while in line to grab your conference tag or food.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Show up early. This is the best time for you to connect with the organizers - ABW team, guests speakers and sponsors. Also, there might be some surprise gifts for people that get to those sessions early (keep it a secret 🤫)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Strategically position yourself for people to connect with you. You should ensure that you are standing next to the food and drinks table. People tend to be more relaxed and willing to connect when they have food or a drink in hand.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After all of this networking extravaganza, the only thing that will make the effort worth it is making sure that you follow up. I prefer LinkedIn messages because most people  are probably overwhelmed with the hundreds of emails in their inbox already. If the people you connected with make a post about their experience at the re:Invent, make sure to comment and engage with their content. This will help you build your personal brand as well. &lt;/p&gt;

&lt;p&gt;Finally, I would recommend that you try to register for Chalk Talk sessions and other reserved sessions that’s open to ABW grantees. I found Chalk Talk sessions the most educational. Overall, don’t try to do too much. Learn as much as you can, have as much fun as you can, and rest as much as you can.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>aws</category>
      <category>community</category>
    </item>
  </channel>
</rss>
