<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Cloud Services - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Cloud Services - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Tue, 26 May 2026 22:47:50 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/tag/cloud-services/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ What is Firebase Remote Config? ]]>
                </title>
                <description>
                    <![CDATA[ Remote configurations are useful because they allow you to alter the behavior in your application without having to release a new version of the app. One prominent example is using remote configurations to decide if a feature should be turned on or o... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/firebase-remote-config/</link>
                <guid isPermaLink="false">66ba4ff0158e6c6a8cb8c79a</guid>
                
                    <category>
                        <![CDATA[ Cloud Services ]]>
                    </category>
                
                    <category>
                        <![CDATA[ configuration ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Firebase ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Tomer ]]>
                </dc:creator>
                <pubDate>Tue, 03 Oct 2023 15:44:31 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/09/rima-kruciene-gpKe3hmIawg-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Remote configurations are useful because they allow you to alter the behavior in your application without having to release a new version of the app. One prominent example is using remote configurations to decide if a feature should be turned on or off. That way, you can gradually roll it out to production or test it to see how users react.</p>
<p>If you want your application to have this functionality, you'd usually have to build your server and its logic. But we now live in an age of technological innovation, and tools have been created to help you minimize your development time.</p>
<p>This tool is called Firebase Remote Config — a cloud service that enables you change different functionalities of your app without releasing updates or asking users to update the app.</p>
<h2 id="heading-overview">Overview</h2>
<p>You can access the Remote Config feature in your project’s Firebase console. It is usually under the Release &amp; Monitor section on the left sidebar.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/09/1-6.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>There are two ways in which you can define your remote configurations:</p>
<ol>
<li>Using Firebase.</li>
<li>Using a template file that is in JSON format.</li>
</ol>
<p>We will focus on the first option, as the second option is a less intuitive approach.</p>
<p>Firebase Remote Config lets you define one or more keys during configuration. Keys can be of the following type:</p>
<ul>
<li>String</li>
<li>Number</li>
<li>Boolean</li>
<li>JSON</li>
</ul>
<p>These keys are used as the configurations for your application. For example, if you have a feature in your application that you would like to control through remote configurations, you  could define a Boolean key titled enableFeatureX.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/09/1-7.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Each key you set has a few other settings that may be useful to you. For example, you can define a default value for a key (for example, false can be the default value of a Boolean key) or make it use a value that you have defined in your application. </p>
<p>Another cool thing you can do, by clicking on the Add new button in the image above, is to set the value of a key based on certain factors. You'll see these options when you click on the button:</p>
<ul>
<li>Conditional value.</li>
<li>Experiment.</li>
<li>Personalization.</li>
</ul>
<p>Once you are done adding a key, make sure to publish your changes so they will be deployed.</p>
<h2 id="heading-the-conditional-value-option">The Conditional Value Option</h2>
<p>You can configure how a value will be set to specific users based on various conditions.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/09/1-8.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Here, you can decide on what you want to test and how. You will discover several options when you click on the “Applies if” dropdown. </p>
<p>To illustrate the use of this feature, let’s say that you want to target iOS users in the US. You can do that using the “Applies if” dropdown and choosing Platform and then iOS. </p>
<p>After that, you can press the "and" button to add a condition for Country/Region and choose United States.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/09/1-9.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Make sure to also name your condition, otherwise, the Create condition button won’t be enabled.</p>
<p>Notice how the last field in defining a new condition window tells you how many users will be affected by this condition? That's a pretty cool feature.</p>
<h2 id="heading-the-experiment-option">The Experiment Option</h2>
<p>This option lets you change the behavior of a value in your remote configurations before taking effect on all your users.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/09/1-10.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>You can follow these steps to configure the experiment option:</p>
<ul>
<li>In the first step, you have to fill in the name and description of your experiment.</li>
<li>Then, you have choose which application to target and how many users will be affected (percentage-wise) in the second step.</li>
<li>The third step is to set up the metrics to measure this experiment. There are two types — the primary metrics and additional metrics.</li>
<li>Lastly, you can decide on the number of A/B test groups for this experiment.</li>
</ul>
<h2 id="heading-the-personalization-option">The Personalization Option</h2>
<p>Last but not least is the option to tailor a specific value of your remote configurations to a user based on their own behavior.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/09/1-11.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>You can define values the algorithm may supply to the user based on their behavior. These will be chosen by an objective you define (Step 2). This objective can range from the engagement time of the user to the amount of clicks they perform. In Step 3, you define a condition that will target users so that they will become personalized. Lastly, in Step 4, you add the name and description of this personalization.</p>
<p>Each option has much more to offer than what I have described here, so if you want to learn more, you can use one of the reference links at the bottom. Now that we understand what Remote Config is, let’s see how we can add it to our application.</p>
<h2 id="heading-how-to-setup-firebase-remote-config">How to Setup Firebase Remote Config</h2>
<p>Before you can do anything related to applying remote configurations, you need to make sure you've added Firebase to your Android project. This has been documented <a target="_blank" href="https://firebase.google.com/docs/android/setup?authuser=0">here</a>. </p>
<p>After you have done that, follow these steps:</p>
<h3 id="heading-step-1-add-the-firebase-remote-configuration-library-to-your-project-inside-your-application-buildgradle-file">Step #1 - Add the Firebase remote configuration library to your project inside your application build.gradle file</h3>
<pre><code> implementation <span class="hljs-string">'com.google.firebase:firebase-config-ktx'</span>
</code></pre><p>There is an option to also import the Firebase Analytics module, but it is not required for remote configurations. It is used in other areas of remote configurations, such as defining a condition based on a specific event happening.</p>
<h3 id="heading-step-2-use-the-remoteconfig-object">Step #2 - Use the <code>RemoteConfig</code> Object</h3>
<p>After syncing your project, you can access the <code>RemoteConfig</code> object with this command:</p>
<pre><code class="lang-kotlin"><span class="hljs-keyword">val</span> remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig
</code></pre>
<h3 id="heading-step-3-define-fetch-interval">Step #3 - Define fetch interval</h3>
<p>You can define how often your remote configurations will be fetched and updated. When you are still developing your application, setting this number to be relatively low is more ideal.</p>
<pre><code class="lang-kotlin"><span class="hljs-keyword">val</span> remoteConfigSettings = remoteConfigSettings {                             minimumFetchIntervalInSeconds = <span class="hljs-number">2000</span>
}
</code></pre>
<p>If you set the <code>**minimumFetchIntervalInSeconds**</code> to be too low, Firebase will throw a <code>FirebaseRemoteConfigFetchThrottledException</code>, so use a low number only when you are testing things.</p>
<h3 id="heading-step-4-set-the-configuration-for-the-remote-configuration">Step #4 - Set the configuration for the remote configuration</h3>
<p>You can set the remote configuration using the code below:</p>
<pre><code class="lang-kotlin">remoteConfig.setConfigSettingsAsync(remoteConfigSettings)
</code></pre>
<h3 id="heading-step-5-set-default-values">Step #5 - Set default values</h3>
<p>You can have application default values for your remote configurations. These can be created as an XML file inside the XML directory inside the res folder. Here’s what the code looks like:</p>
<pre><code class="lang-kotlin">:remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
</code></pre>
<p>This XML file must have an underlying element of a map to wrap all your default values. For example, let’s imagine we have defined a key in remote configurations called <code>my_key</code>, whose value is <code>1</code>. The XML for the default values will look like this:</p>
<pre><code class="lang-xml"><span class="hljs-meta">&lt;?xml version="1.0" encoding="utf-8"?&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">defaultsMap</span>&gt;</span>
   <span class="hljs-tag">&lt;<span class="hljs-name">entry</span>&gt;</span>      
      <span class="hljs-tag">&lt;<span class="hljs-name">key</span>&gt;</span>my_key<span class="hljs-tag">&lt;/<span class="hljs-name">key</span>&gt;</span>     
      <span class="hljs-tag">&lt;<span class="hljs-name">value</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">value</span>&gt;</span>   
    <span class="hljs-tag">&lt;/<span class="hljs-name">entry</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">defaultsMap</span>&gt;</span>
</code></pre>
<p>Remote configurations need to be fetched and activated. The fetch action fetches and stores your Remote Configurations inside the Remote Config object. The activation part is to make these values available to your application. That’s why there are two API methods:</p>
<ul>
<li><code>fetch</code> (and later use activate)</li>
</ul>
<pre><code class="lang-kotlin">remoteConfig.fetch().addOnCompleteListener { task -&gt;               <span class="hljs-keyword">if</span>                <span class="hljs-keyword">if</span> (task.isSuccessful) {     
              <span class="hljs-comment">//Remote Configurations fetch successfully          </span>
           }         
        }.addOnFailureListener { error -&gt;             
                <span class="hljs-comment">//Remote Configurations fetch failure            </span>
       }
-------------------------
remoteConfig.activate().addOnCompleteListener { task -&gt;  
<span class="hljs-keyword">if</span> (task.isSuccessful) {
        <span class="hljs-comment">//Remote Configurations activation success   </span>
        }  
   }.addOnFailureListener { error -&gt; 
               <span class="hljs-comment">//Remote Configurations activation failure</span>
  }
</code></pre>
<ul>
<li><code>fetchAndActivate</code></li>
</ul>
<pre><code class="lang-kotlin">remoteConfig.fetchAndActivate().addOnCompleteListener { task -&gt;                                <span class="hljs-keyword">if</span> (task.isSuccessful) {     
                <span class="hljs-comment">//Remote Configurations fetched and activated successfully                }        </span>
       }.addOnFailureListener { error -&gt;           
       <span class="hljs-comment">//Remote Configurations fetched and activated failure    </span>
     }
</code></pre>
<h3 id="heading-step-6-access-configurations">Step #6 - Access configurations</h3>
<p>Now that our remote configurations have been fetched and activated, we can access and use them in our application. We can do so by accessing the <code>remoteConfig</code> object and using one of the getter methods per the type of the value we set:</p>
<pre><code class="lang-kotlin"><span class="hljs-keyword">val</span> myRemoteConfigValue: String = remoteConfig.getString(<span class="hljs-string">"my_key"</span>)
</code></pre>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Since your application will rely on remote configurations for its operation (or parts of it), it is crucial to decide how the application will behave if it does not arrive or takes too long to receive a response. </p>
<p>In essence, there are two ways to handle loading the remote configurations:</p>
<ol>
<li>Your application boots up and waits for the remote configurations to be activated.</li>
<li>Your application boots up and does not wait for the remote configuration to be activated. Opting instead to use the remote configurations on the second application run.</li>
</ol>
<p>It's important to understand that there is no option that is preferable over the other. It all depends on what your use case is and how you would like the user's experience to be when using your application. The first option guarantees that once your application is loaded, all the remote configurations that you have defined will be set and the user's experience will be smooth after the initial load time. If you have critical features that rely on the remote configurations, you will have to go with this option.</p>
<p>On the other hand, if your remote configurations concern a specific feature of your application that doesn't necessarily need to happen on the first initial launch, you might consider going for second option. That way, your application does not need to wait for the remote configurations to be received from Firebase and the logic inside your application can happen later.</p>
<p>There are good and bad implications for each of these methods, and it’s up to you to decide which is better suited for your application. If you choose the first option, you may add a loading screen that times out after a certain period. If you choose option two, it is recommended to create a default mechanism for features in your application and how they should work when the configuration has not yet been received.</p>
<p>There is more than we have discussed in this article, and I encourage you to investigate deeper things. I recently used Firebase Remote Configurations in an application I created that helps users schedule appointments.</p>
<p>You can check it out o<a target="_blank" href="https://play.google.com/store/apps/details?id=com.tomerpacific.scheduler">n the Google Play store</a>.</p>
<p>And you can see the source code here:</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://github.com/TomerPacific/scheduler">https://github.com/TomerPacific/scheduler</a></div>
<p>If you want to read other articles I have written, you can find them below:</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://github.com/TomerPacific/MediumArticles">https://github.com/TomerPacific/MediumArticles</a></div>
<h2 id="heading-references">References</h2>
<ul>
<li><a target="_blank" href="https://firebase.google.com/docs/remote-config/get-started?platform=android">Getting Started With Firebase For Android</a></li>
<li><a target="_blank" href="https://firebase.google.com/docs/remote-config/use-cases">Remote Config Use Cases</a></li>
<li><a target="_blank" href="https://firebase.google.com/docs/remote-config/loading">Remote Config Loading Strategies</a></li>
<li><a target="_blank" href="https://firebase.google.com/docs/remote-config/personalization">Remote Config Personalization</a></li>
</ul>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ AWS Cloud Practitioner Salary – Amazon Certification Guide ]]>
                </title>
                <description>
                    <![CDATA[ More and more companies are making a shift towards cloud services and cloud-based systems these days, resulting in cloud computing being one of the most in-demand tech skills. AWS is currently the most popular cloud service provider, as it owns aroun... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/aws-cloud-practitioner-salary-2023-amazon-certification-guide/</link>
                <guid isPermaLink="false">66b1e3c66f537a6f7e7212bb</guid>
                
                    <category>
                        <![CDATA[ AWS ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Cloud ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Cloud Services ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Dionysia Lemonaki ]]>
                </dc:creator>
                <pubDate>Wed, 03 May 2023 06:51:34 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/04/ethan-yrGn-av5WF8-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>More and more companies are making a shift towards cloud services and cloud-based systems these days, resulting in cloud computing being one of the most in-demand tech skills.</p>
<p>AWS is currently the most popular cloud service provider, as it owns around 33% of the cloud market.</p>
<p>Companies and organizations are looking for candidates with AWS skills. A way to showcase your AWS knowledge is by obtaining an AWS certification.</p>
<p>In this article, I will list the current AWS certifications and go into more detail about the Cloud Practitioner certification.</p>
<p>Let's get into it!</p>
<h2 id="heading-what-is-aws-amazon-web-services-explained">What Is AWS? Amazon Web Services Explained</h2>
<p>Amazon Web Services (or AWS for short) is a cloud computing platform offered by Amazon.</p>
<p>The platform provides on-demand cloud computing services such as hosting for servers, storage, database management, networking, and security, to name just a few of them.</p>
<p>Many businesses use AWS, including big companies such as Airbnb, Netflix, LinkedIn, and Twitter. With that said, it is also used for personal projects.</p>
<h2 id="heading-what-is-an-aws-certification">What Is an AWS Certification?</h2>
<p>An AWS certification is a credible way to demonstrate to an employer that you have the specific technical skills and competence to design, build, deploy, migrate, operate, and maintain well-architected AWS systems.</p>
<p>Obtaining an AWS certification and gaining cloud architecture expertise is a great way to kickstart a new career in tech and open doors in a fast-growing industry.</p>
<h2 id="heading-an-overview-of-the-different-aws-certification-types-levels-of-aws-certifications">An Overview of the Different AWS Certification Types – Levels of AWS Certifications</h2>
<p>Currently, there are four types of AWS certifications.</p>
<p>There is one <strong>foundational</strong> level certification – the <a target="_blank" href="https://aws.amazon.com/certification/certified-cloud-practitioner/?ch=sec&amp;sec=rmg&amp;d=1">Cloud Practitioner</a> certification.</p>
<p>There are three <strong>associate</strong> level certifications – the <a target="_blank" href="https://aws.amazon.com/certification/certified-solutions-architect-associate/?ch=sec&amp;sec=rmg&amp;d=1">Solutions Architect</a>, the <a target="_blank" href="https://aws.amazon.com/certification/certified-developer-associate/?ch=sec&amp;sec=rmg&amp;d=1">Developer</a> and the <a target="_blank" href="https://aws.amazon.com/certification/certified-sysops-admin-associate/?ch=sec&amp;sec=rmg&amp;d=1">SysOps Administrator</a> certifications.</p>
<p>There are also two <strong>professional</strong> level certifications – the <a target="_blank" href="https://aws.amazon.com/certification/certified-solutions-architect-professional/?ch=sec&amp;sec=rmg&amp;d=1">Solutions Architect</a> and <a target="_blank" href="https://aws.amazon.com/certification/certified-devops-engineer-professional/?ch=sec&amp;sec=rmg&amp;d=1">DevOps Engineer</a> certifications.</p>
<p>And lastly, there are six <strong>specialty</strong> level certifications – the <a target="_blank" href="https://aws.amazon.com/certification/certified-advanced-networking-specialty/?ch=sec&amp;sec=rmg&amp;d=1">Advanced Networking</a>, <a target="_blank" href="https://aws.amazon.com/certification/certified-data-analytics-specialty/?ch=sec&amp;sec=rmg&amp;d=1">Data Analytics</a>, <a target="_blank" href="https://aws.amazon.com/certification/certified-database-specialty/?ch=sec&amp;sec=rmg&amp;d=1">Database</a>, <a target="_blank" href="https://aws.amazon.com/certification/certified-machine-learning-specialty/?ch=sec&amp;sec=rmg&amp;d=1">Machine Learning</a>, <a target="_blank" href="https://aws.amazon.com/certification/certified-security-specialty/?ch=sec&amp;sec=rmg&amp;d=1">Security</a> and <a target="_blank" href="https://aws.amazon.com/certification/certified-sap-on-aws-specialty/?ch=sec&amp;sec=rmg&amp;d=1">SAP on AWS</a> certifications.</p>
<p>Choosing an AWS certification will depend on your experience level, professional goals, and interests.</p>
<p>Now, let's go into more detail on the fundamental AWS certification – the Cloud Practitioner certification.</p>
<h2 id="heading-what-does-an-aws-cloud-practitioner-do">What Does an AWS Cloud Practitioner Do?</h2>
<p>An AWS cloud practitioner is responsible for the organization's cloud computing architecture. They resolve scalability challenges and handle high-risk issues.</p>
<p>The practitioner understands AWS's core design principles and best practices for architecture.</p>
<p>They know how to design, build, deploy, and monitor applications on the cloud within AWS platforms.</p>
<p>They gather insights into end-users' problems and pain points, leverage software and hardware systems to address those problems, and come up with solutions.</p>
<h2 id="heading-what-is-the-average-salary-for-an-aws-cloud-practitioner">What Is the Average Salary for an AWS Cloud Practitioner?</h2>
<p>According to data from Glassdoor, the estimated total pay for a cloud practitioner in the USA for 2023 is around $91,038 per year, with an average salary of $83,679 per year.</p>
<p>With that said, compensation is relative and will depend on your field and chosen industry, demand, previous experience, skills, and location. The average salary for a cloud practitioner may be higher in different regions in the USA and lower in other countries.</p>
<h2 id="heading-aws-cloud-practitioner-certification-prerequisites">AWS Cloud Practitioner Certification Prerequisites</h2>
<p>The AWS Cloud Practitioner certification is a great place to start your cloud computing learning journey and a new career in the cloud.</p>
<p>It is an entry-level certification intended to provide fundamental knowledge and a general overview of AWS and its infrastructure. It doesn't require any previous experience or specific prerequisites.</p>
<p>With that said, having an understanding of the AWS platform and cloud computing terminology and concepts can be helpful during your learning process.</p>
<p>To understand the core concepts of cloud computing and AWS, you can read through the <a target="_blank" href="https://aws.amazon.com/getting-started/cloud-essentials/">AWS Cloud Essentials Guide</a> by AWS.</p>
<h2 id="heading-aws-cloud-practitioner-certification-curriculum">AWS Cloud Practitioner Certification Curriculum</h2>
<p>The four major topics you will learn while studying for the AWS Cloud Practitioner certification fall into the following categories:</p>
<ul>
<li><p><strong>Cloud concepts</strong> (26%), such as learning about cloud computing topics, how cloud-based applications work and scale, the AWS core infrastructure, and its architectural principles.</p>
</li>
<li><p><strong>Security and compliance</strong> (25%), such as learning security and compliance best practices for the AWS platform.</p>
</li>
<li><p><strong>Technology</strong> (33%), such as learning about AWS services and tools and their use cases.</p>
</li>
<li><p><strong>Billing and pricing</strong> (16%), such as learning about AWS billing, pricing models, support, and account management.</p>
</li>
</ul>
<p>To learn more about the curriculum, AWS provides a <a target="_blank" href="https://d1.awsstatic.com/training-and-certification/docs-cloud-practitioner/AWS-Certified-Cloud-Practitioner_Exam-Guide.pdf">complete exam guide</a>, which covers the key modules in detail.</p>
<h2 id="heading-aws-cloud-practitioner-certification-study-materials">AWS Cloud Practitioner Certification Study Materials</h2>
<p>You first need to create an <a target="_blank" href="https://aws.amazon.com/resources/create-account/">AWS account</a>.</p>
<p>AWS provides a <a target="_blank" href="https://aws.amazon.com/free/?all-free-tier&amp;all-free-tier.sort-by=item.additionalFields.SortRank&amp;all-free-tier.sort-order=asc&amp;awsf.Free%20Tier%20Types=*all&amp;awsf.Free%20Tier%20Categories=*all">free 12-month subscription</a> to become familiar with the AWS console and its services.</p>
<p>When it comes to courses, you can use the <a target="_blank" href="https://aws.amazon.com/training/learn-about/cloud-practitioner/">AWS cloud essentials learning plan</a> built by AWS, which goes over the recommended curriculum. This course covers AWS cloud, services, pricing, and security.</p>
<p>freeCodeCamp also offers an extensive <a target="_blank" href="https://www.freecodecamp.org/news/aws-certified-cloud-practitioner-certification-study-course-pass-the-exam/">13-hour study course</a>.</p>
<p>It's also a good idea to go through some <a target="_blank" href="https://d1.awsstatic.com/training-and-certification/docs-cloud-practitioner/AWS-Certified-Cloud-Practitioner_Sample-Questions.pdf">practice questions</a> and <a target="_blank" href="https://aws.amazon.com/certification/certification-prep/">practice exams</a> by the official page on Amazon to test whether you are prepared enough for the certification exam.</p>
<h2 id="heading-aws-cloud-practitioner-certification-exam-details">AWS Cloud Practitioner Certification Exam Details</h2>
<p>Once you've created your AWS certification account, to schedule the AWS Cloud Practitioner exam, sign in to <a target="_blank" href="https://www.aws.training/">aws.training</a> and click "Certification", where you can register and schedule the exam online or at a location near you.</p>
<p>The exam level is foundational, and the exam code is CLF-C01.</p>
<p>The exam costs $100 and is available in English, French, German, Indonesian, Italian, Japanese, Korean, Portuguese, Simplified Chinese, Spanish, and Traditional Chinese.</p>
<p>The exam is 90 minutes long and consists of 65 multiple-choice, multiple-response questions. The minimum passing score is 700 points.</p>
<p>Lastly, the AWS certifications are valid for three years, and you will need to renew them once they expire.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Hopefully, you found this article helpful and have a better understanding of what the AWS Cloud Practitioner certification entails.</p>
<p>Thank you for reading, and best of luck on your exam.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ AWS IAM – Policy, Access Roles, Resources Explained, and Why They're Useful ]]>
                </title>
                <description>
                    <![CDATA[ By Periklis Gkolias IAM, or Identity and Access Management, is one of the most common terms you'll hear in cloud-native environments. But what does it do? And if you're already familiar with IAM, how long did it take you to fully understand it? I wil... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/the-introduction-to-iam-i-wish-i-had/</link>
                <guid isPermaLink="false">66d4609df855545810e934c3</guid>
                
                    <category>
                        <![CDATA[ Cloud Services ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Cloud Solutions ]]>
                    </category>
                
                    <category>
                        <![CDATA[ IAM ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Thu, 07 Apr 2022 02:50:41 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/04/g7In5Xr-2.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Periklis Gkolias</p>
<p>IAM, or Identity and Access Management, is one of the most common terms you'll hear in cloud-native environments.</p>
<p>But what does it do? And if you're already familiar with IAM, how long did it take you to fully understand it?</p>
<p>I will explain the main concepts behind this massive family of software, with you, the busy engineer, in mind.</p>
<p>The fundamentals described here are vendor agnostic, though most of my experience is with AWS's implementation.</p>
<h2 id="heading-what-is-iam">What Is IAM?</h2>
<p>IAM is a complex system of entities (humans, applications, and so on) that request access to a system. It is also a hierarchical set of rules to grant or deny requested access.</p>
<p>Before we go any further, here are the main terms you'll encounter:</p>
<ul>
<li><strong>Resource</strong>: Anything worth protecting. A storage service, virtual machine, etc.</li>
<li><strong>Policy</strong>: A set of rules that dictate who can and can't do something on a single resource or group of resources.</li>
<li><strong>Action</strong>: Anything someone can do inside the cloud environment. For example, creating a virtual machine.</li>
<li><strong>User</strong>: Well... A user :)</li>
<li><strong>Group</strong>: A group of users with the same permissions applied.</li>
<li><strong>Principal</strong>: A user or an application requesting access.</li>
<li><strong>Role</strong>: A set of powers assigned to a principal, usually for a limited amount of time.</li>
</ul>
<h2 id="heading-why-iam-is-useful">Why IAM Is Useful</h2>
<p>IAM is mainly used for authentication, authorization, granular access, and governance.</p>
<p>Let's see what those all mean:</p>
<ul>
<li><strong>Authentication</strong>: The act over verifying who you are.</li>
<li><strong>Authorization</strong>: The act of identifiying if someone can perform the action they are requesting. This is usually combined with authentication, but not always.</li>
<li><strong>Granular access</strong>: Permissions that control each action that can happen on a resource. For example, a user might have permission to see firewall rules, but doesn't have permission to change them. This is implemented with <a target="_blank" href="https://en.wikipedia.org/wiki/Role-based_access_control">Role-Based Access Control</a>.</li>
<li><strong>Governance</strong>: The actions you take to know what is happening in your environment, mostly for reasons of budget, compliance, and proper access scope.</li>
</ul>
<p>If you're a company of 1-3 people, then setting up a full-blown IAM solution is probably overkill. Buf if your team is larger than that, or you're planning to scale up, then you should start considering it.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/04/WxyvyO4.jpg" alt="IAM pillars" width="600" height="400" loading="lazy"></p>
<h2 id="heading-common-problems-you-dont-use-iam">Common Problems You Don't Use IAM</h2>
<p>I believe you can see the benefits of an IAM solution.</p>
<p>Now let's take a look at some common problems organizations face in the absence of it.</p>
<h3 id="heading-its-hard-to-audit-and-administer-access">It's Hard to Audit and Administer Access</h3>
<p>Have you heard of cases where an employee had more access than they should? And additionally, no one knew?</p>
<p>This can be prevented with a properly set-up IAM solution.</p>
<h3 id="heading-setting-up-accounts-for-new-hires-is-a-pain">Setting Up Accounts for New Hires Is a Pain</h3>
<p>With an IAM solution in place, this would just be a matter of a few clicks. Namely, set up the users and add them to the IAM groups their teams use. That's it.</p>
<p>But without an IAM solution? You would need to set all the permissions for each account manually.</p>
<p>You might have a reference user to copy from, but does each new account need all the permissions the reference user has? Do you have special handling for user accounts that are less than 6 months old? Does the reference user have superuser permissions that should not be accidentally assigned to a new hire's account?</p>
<h3 id="heading-offboarding-people-is-time-consuming">Offboarding People Is Time Consuming</h3>
<p>Here you'll have similar problems to the new hire case above. But when a collegue is leaving, you'll need to change the password to all the accounts they <strong>potentially</strong> used.</p>
<p>This can turn ugly very fast, not to mention the side effects this has on other team memebers.</p>
<p>And you would have to do this for every script, application, and other resource whenever there's an offboarding. What if you have a team change 2-3 times per month? You and your team would have a hard time being productive.</p>
<h3 id="heading-simple-things-require-human-intervention">Simple Things Require Human Intervention</h3>
<p>Without an IAM solution, tasks like resetting a password or re-enabling an account that was locked need to be done manually.</p>
<p>Top-tier IAM solutions have a way to resolve such issues fast without much hassle.</p>
<h2 id="heading-best-practices">Best Practices</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/04/M7N8blv.jpg" alt="Best practices" width="600" height="400" loading="lazy"></p>
<p>If you've decided to set up IAM, here are some best practices. This is far from a full list, and is based on my personal experience. But I've seen these practices on more than one team, so they should work for you as well.</p>
<h3 id="heading-never-grant-full-access-ever">Never Grant Full Access... EVER</h3>
<p>In a real-world scenario, you wouldn't want every user to have unlimited access to an account. Ideally, no one should full access to anything (apart from the account owner).</p>
<p>For example, if an employee's responsibility is to monitor logs, they should have read access only to that tool. They should not be able to restart a service, or view billing information.</p>
<h3 id="heading-prefer-groups-to-multiple-users">Prefer Groups to Multiple Users</h3>
<p>It's better to use groups instead of multiple users when you have a choice. Groups make administration exponentially easier.</p>
<p>For example, if a new person joins your organization as a developer, they can be added to an IAM group for developers. That new person will then inherit all the powers of that IAM group.</p>
<p>The alternative, creating a user for each group (reader_susan, admin_susan) is considered obsolete.</p>
<h3 id="heading-prefer-roles-on-existing-users-to-creating-a-new-user">Prefer Roles on Existing Users to Creating a New User</h3>
<p>When given the option, prefer assigning a role to an existing user rather than creating a new user.</p>
<p>For example, don't create an admin user and share the password between 10 people. Create an admin role and assign it to whoever needs it for a limited amount of time.</p>
<h3 id="heading-audit-permissions-frequently">Audit Permissions Frequently</h3>
<p>It is easy to make mistakes or perform malicious actions. At the very least, a company should audit permissions regularly, and ensure that only the proper people have the minimum level of access necessary for their roles.</p>
<p>You could also send an email to a certain team when a suspicious action happens. For example, assigning an admin role to a new hire.</p>
<h3 id="heading-set-up-boundaries-beforehand">Set Up Boundaries Beforehand</h3>
<p>If an IAM solution allows for it, add boundaries to your ecosystem.</p>
<p>According to Amazon's documentation:</p>
<blockquote>
<p>A permissions boundary is an advanced feature for using a managed policy to set the maximum permissions that an identity-based policy can grant to an IAM entity. An entity's permissions boundary allows it to perform only the actions that are allowed by both its identity-based policies and its permissions boundaries.</p>
</blockquote>
<p>(I know, I know — I promised to be vendor-agnostic 🙂)</p>
<p>In layman's terms, you can define the "maximum" permissions that can be assigned to anyone.</p>
<p>For example, a user will at most be able to view the logs from the relevant tool and restart a service. If someone attempts to get a role to create a new virtual machine they will be disallowed.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Thank you for reading this far. I hoped you enjoyed this introduction to IAM.</p>
<p>If you have any questions, please reach out to me on Twitter.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ What is GitOps? Principles, Best Practices, and Kubernetes Workflow ]]>
                </title>
                <description>
                    <![CDATA[ In this talk, CTO Cornelia Davis will teach you what GitOps is and what its four main principles are.  What is GitOps? The first thing you need to know is that GitOps is a set of modern best practises for deploying and managing cloud native infrastru... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/gitops-principles-kubernetes-workflow/</link>
                <guid isPermaLink="false">66b0a8a9b30dd4d00547bbe8</guid>
                
                    <category>
                        <![CDATA[ Cloud Computing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Cloud Services ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Kubernetes ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ ania kubow ]]>
                </dc:creator>
                <pubDate>Tue, 23 Nov 2021 22:50:29 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2021/11/gitops.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>In this talk, CTO Cornelia Davis will teach you what GitOps is and what its four main principles are. </p>
<h2 id="heading-what-is-gitops">What is GitOps?</h2>
<p>The first thing you need to know is that GitOps is a set of modern best practises for deploying and managing cloud native infrastructure and applications. </p>
<p>And it can an be a hard thing to get your head around if you have never worked with cluster management or application delivery before. But thankfully Cornelia does a great job explaining it in this 30 minute presentation.</p>
<p>Give it a watch, and then you can find the recap below.</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/wdoLEA7U8_M" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<p>So now that we have covered the basics of what GitOps are, here is a recap of its 4 main principles. Hopefully you can use them to start managing your own cluster with GitOps workflows.</p>
<h2 id="heading-principles-of-gitops">Principles of GitOps</h2>
<h3 id="heading-describe-declaratively">Describe Declaratively</h3>
<p>By 'Declarative', all we mean is that we are writing our configuration as a set of facts directly in our source code on Git. This is now our single 'source of truth'. </p>
<p>For example I can declare my environments, such as a 'test environment', or a 'staging environment' or 'production' and so on, along with the application version that resides in that environment.</p>
<h3 id="heading-make-sure-state-is-versioned">Make Sure State is Versioned</h3>
<p>With our declarations now stored in a version controlled system and acting as our 'source of truth', we now have a single place from where everything is derived. We can spin up previous versions of the app easily, or perform rollbacks if we need.</p>
<h3 id="heading-automate-change-approvals">Automate Change Approvals</h3>
<p>We also need to allow any changes to our declared states to be automatically applied to our system. This is worth mentioning, because as we are now working in segregated environments, we no longer need cluster credentials to make changes in our system.</p>
<h3 id="heading-alert-on-differences">Alert on Differences</h3>
<p>So now that we have the state of our system declared and versioned, we can use agents to check if everything is working as it should. This is considered a 'Feedback and Control Loop'. If something 'looks' different and not right, we will get alerted on this.</p>
<p>For a more in-depth look into these 4 principles, you can watch the Talk by Cornelia Davis above.</p>
<p>This article was written by Ania Kubow in support of the conference talk made by Cornelia Davis.</p>
<figure><a class="kg-bookmark-container" href="https://www.youtube.com/channel/UC5DNytAJ6_FISueUfzZCVsw"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Code with Ania Kubów</div><div class="kg-bookmark-description">Hello everyone. This channel is run by Ania Kubow. In this channel, I will be teaching you JavaScript,React, HTML, CSS, React-native, Node.js and so much more! A little bit about me:My background is in the financial markets, where I worked as a derivates broker our of University. After starting m…</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://www.youtube.com/s/desktop/6b151e52/img/favicon_144.png" width="144" height="144" alt="favicon_144" loading="lazy"><span class="kg-bookmark-publisher">YouTube</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://yt3.ggpht.com/ytc/AAUvwnjSRt8sIbeM7P--pHoUDh67sDhaNTCMF_XiNOCvUw=s900-c-k-c0x00ffffff-no-rj" width="900" height="900" alt="AAUvwnjSRt8sIbeM7P--pHoUDh67sDhaNTCMF_XiNOCvUw=s900-c-k-c0x00ffffff-no-rj" loading="lazy"></div></a></figure>

 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ AWS Certified Cloud Practitioner Study Course – Pass the Exam With This Free 13-Hour Course ]]>
                </title>
                <description>
                    <![CDATA[ By Andrew Brown Passing the AWS Certified Cloud Practitioner Exam is one of the first steps to a career in cloud development. And freeCodeCamp just published my free 12-hour course that will help you prepare for the exam.  This exam mostly deals with... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/aws-certified-cloud-practitioner-certification-study-course-pass-the-exam/</link>
                <guid isPermaLink="false">66d45d97c17d4b8ace5b9eba</guid>
                
                    <category>
                        <![CDATA[ AWS ]]>
                    </category>
                
                    <category>
                        <![CDATA[ AWSCertified   ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Cloud Computing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Cloud Services ]]>
                    </category>
                
                    <category>
                        <![CDATA[ youtube ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 17 Nov 2021 14:13:55 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2021/11/aws-certified-cloud-prac-image.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Andrew Brown</p>
<p>Passing the AWS Certified Cloud Practitioner Exam is one of the first steps to a career in cloud development. And freeCodeCamp just published my free 12-hour course that will help you prepare for the exam. </p>
<p>This exam mostly deals with cloud computing concepts. Even if you are new to coding, you should be able to prepare for this exam and earn the AWS certification.</p>
<p>This entire free course is now live on YouTube, and linked below. Before you dive into it, read this guide to help you decide whether the AWS Certified Cloud Practitioner certification is for you.</p>
<h2 id="heading-what-is-the-aws-certified-cloud-practitioner">What is the AWS Certified Cloud Practitioner?</h2>
<p>The Certified Cloud Practitioner is the <strong>entry-level AWS certification</strong> that goes through:</p>
<ul>
<li>The cloud fundamentals, for example Cloud Concepts, Cloud Architecture, and Cloud Deployment Models</li>
<li>A close look at the AWS Core Services</li>
<li>A quick look at the vast amount of AWS services</li>
<li>Identity, Security, and Governance of the Cloud</li>
<li>Billing, Pricing, and Support of AWS Services</li>
</ul>
<p>The course code is <strong>CLF-C01</strong> but its commonly referred to as the <strong>CCP</strong>.</p>
<p>Amazon Web Services is the leading Cloud Service Provider (CSP) in the world and the AWS Certified Cloud Practitioner <strong>is the most common starting point</strong> for people breaking into the cloud industry.</p>
<p>Consider the AWS Certified Cloud Practitioner if:</p>
<ul>
<li>You are <strong>new to cloud</strong> and need to learn the fundamentals</li>
<li>You are in the <strong>executive, management, or sales level</strong> and need to acquire strategic information about cloud for adoption or migration</li>
<li>You are a Senior Cloud Engineer or Solutions Architect who needs to <strong>reset or refresh</strong> your AWS knowledge after working for multiple years</li>
</ul>
<p>No matter your path towards a cloud role, the AWS Certified Cloud Practitioner provides fundamental knowledge that you shouldn't skip.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/image-43.png" alt="Image" width="600" height="400" loading="lazy"></p>
<h2 id="heading-how-this-course-is-different-from-the-2019-aws-certified-cloud-practitioner-course">How this course is different from the 2019 AWS Certified Cloud Practitioner course</h2>
<p>This is the second edition of the AWS Certified Cloud Practitioner course released on freeCodeCamp. This edition has three times more content, and all previous content has been revised, expanded, and re-filmed. </p>
<p>I made these major updates because of some important changes that have been made to the AWS Certified Cloud Practitioner exam. In general AWS has increased the difficulty of this exam.</p>
<h2 id="heading-overview-of-the-aws-certified-cloud-practitioner">Overview of the AWS Certified Cloud Practitioner</h2>
<p>The AWS Certified Cloud Practitioner is divided into 3 domains, each with their own weighting. The weighting determine the number of questions about that domain that will appear on the exam.</p>
<ul>
<li>Domain 1: Cloud Concepts at 26%</li>
<li>Domain 2: Security and Compliance at 25%</li>
<li>Domain 3: Technology at 33%</li>
<li>Domain 4 Billing and Pricing at 16%</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/image-47.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>The official exam guide lists a very long list of possible services, technologies, and concepts that could appear on the exam. In actuality, only one third of the content that could appear will appear on the exam.</p>
<h2 id="heading-how-do-you-get-certified">How do you get Certified?</h2>
<p>Google uses Pearson Vue and PSI test centers to deliver the exam. You can take the exam in-person or online.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/image-45.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>If you want to schedule the exam with either testing method, you do that via <a target="_blank" href="https://aws.amazon.com/certification/certification-prep/testing/">AWS Trainings Account</a>.</p>
<p>There are <strong>6</strong>5 <strong>multiple-choice</strong> and <strong>multiple-select</strong> questions and you have to score <strong>70% to pass</strong>.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/image-46.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>The AWS Certified Cloud Practitioner costs <strong>$</strong>100 <strong>USD.</strong></p>
<h2 id="heading-can-i-simply-watch-the-videos-and-pass-the-exam">Can I simply watch the videos and pass the exam?</h2>
<p>AWS has increased the difficulty of this exam. And while watching lecture videos is critical to passing, having hands-on experience and utilizing practice exams are essential if you want to pass the exam.</p>
<p>How much you need to study will vary, but on average it will require about 24 hours over 2 weeks to be prepared to successfully pass this AWS Certified Cloud Practitioner. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/image-44.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>This course comes with a full free practice exam which you can redeem for free with no credit card by signing up on ExamPro.</p>
<p>ExamPro has multiple <a target="_blank" href="https://exampro.co/gcp-cdl">paid practice exams</a> along with other study materials to increase your chances of passing.</p>
<p>Head on over <a target="_blank" href="https://www.youtube.com/watch?v=SOTamWNgDKc">to freeCodeCamp's YouTube channel</a> to start working through the full 6-hour course.</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/SOTamWNgDKc" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ What is Cloud Native? The Cloud Computing Delivery Model Explained ]]>
                </title>
                <description>
                    <![CDATA[ By Edidiong Asikpo Whenever I heard of the term “Cloud native”, my thoughts would usually go to Kubernetes. I used to think “Cloud native” was a phrase used for describing just Kubernetes.  But as I delved more into it, I realized my assumption was w... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/get-started-with-cloud-native/</link>
                <guid isPermaLink="false">66d45e404a7504b7409c3384</guid>
                
                    <category>
                        <![CDATA[ Cloud Computing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Cloud Services ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Kubernetes ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 19 Jul 2021 18:12:13 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2021/07/GettingStartedWithCloudNative.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Edidiong Asikpo</p>
<p>Whenever I heard of the term “Cloud native”, my thoughts would usually go to Kubernetes. I used to think “Cloud native” was a phrase used for describing just Kubernetes. </p>
<p>But as I delved more into it, I realized my assumption was wrong. Cloud native isn't just about Kubernetes – it is so much more!</p>
<p>In this article, I will help you understand what Cloud native means, how the cloud computing delivery model works, its benefits, architectural principles, and more. Let's get started.</p>
<h2 id="heading-what-is-cloud-native">What is Cloud Native?</h2>
<p>Cloud native is an approach to building and running apps that use the <em>cloud computing delivery model.</em></p>
<p>The “cloud” is really just the internet, as cliché as it may sound. It is a network of servers where information, software, applications, and services are housed and accessed. </p>
<p>So what then is the <em>cloud computing delivery model</em>?</p>
<h2 id="heading-what-is-the-cloud-computing-delivery-model">What is the Cloud Computing Delivery Model?</h2>
<p>While the above definition of cloud native is great, you need to know what all the terms mean – like “cloud computing delivery model”. I certainly wondered what it was when I saw it on almost every cloud native definition on the internet. </p>
<p>First of all, it is helpful to know what cloud computing means to get a better understanding of the cloud computing delivery model.</p>
<h3 id="heading-what-is-cloud-computing">What is cloud computing?</h3>
<p>According to Techopedia, </p>
<blockquote>
<p><strong>Computing</strong> is the process of using computer resources (storage, networking, and computing power) to complete a given goal-oriented task.  </p>
<p><strong>Cloud computing</strong> offers on-demand availability of these computer resources (mentioned above) without direct active management by the user.   </p>
<p>The <strong>Cloud computing delivery model</strong> represents a specific, pre-packaged combination of IT resources offered by a cloud provider. </p>
</blockquote>
<p>There are a couple of cloud delivery models, but IaaS, PaaS, and SaaS are the most popular and widely used cloud delivery models.</p>
<h3 id="heading-what-is-infrastructure-as-a-service-iaas">What is Infrastructure as a Service (IaaS)?</h3>
<p>This cloud computing delivery model focuses on providing infrastructure like servers, networking technology, storage, and data center space as a service to users. </p>
<p>This gives users the autonomy to decide what infrastructure is provisioned based on the different needs of their application. Popular examples of IaaS providers are Microsoft Azure and AWS. </p>
<h3 id="heading-what-is-platform-as-a-service-paas">What is Platform as a Service (PaaS)?</h3>
<p>This is more focused on the development side of things by providing a <em>platform</em> for developers to deploy their apps to the cloud.</p>
<p>Some well-known examples of PaaS providers are Netlify and Heroku. </p>
<p>PaaS builds on top of IaaS, but unlike IaaS, it already handles the setup and configuration of the infrastructure your application needs. </p>
<p>In cases where users want more control of their infrastructure configurations, IaaS is a good choice.</p>
<h3 id="heading-what-is-software-as-a-service-saas">What is Software as a Service (SaaS)?</h3>
<p>This is the complete software product provided as a service to users that enables them to perform different activities. </p>
<p>For example, Gmail is a great SaaS cloud native application used by millions of people worldwide. As a user of Gmail, you will most likely not be concerned about how it was built or the underlying infrastructure, but you know for sure that you can use this software to send and receive emails.</p>
<h2 id="heading-whats-the-difference-between-cloud-native-apps-cloud-native-technologies-and-cloud-native-computing">What's the difference between Cloud Native Apps, Cloud Native Technologies, and Cloud Native Computing?</h2>
<p>While learning about “Cloud Native”, I struggled with understanding the differences between cloud native, cloud native apps, cloud native technologies, and cloud native computing. I felt like they were all using the prefix cloud native but meant the same thing. </p>
<p>In fact, if you search for “What is Cloud native” on Google, you will see over ten resources on the search result page. And out of these ten resources, 4 of them define or talk about Cloud native. The other 4 are either Cloud native applications, Cloud native technologies, or Cloud native computing. </p>
<p>And to my surprise, these resources all had interchangeable definitions of what Cloud native meant, which got me confused. Was there a difference? Did these terminologies all mean the same thing?</p>
<p>I asked a couple of people about it and eventually understood the differences. So, here are my findings. 👇🏽</p>
<ul>
<li><strong>Cloud native</strong> is an approach to building and running apps that exploits the advantages of the cloud computing delivery model.</li>
<li><strong>Cloud native applications</strong> are independent services, packaged as self-contained, lightweight containers that are portable and can be scaled rapidly based on the demand. They allow you to take advantage of the unique capabilities of the cloud.</li>
<li><strong>Cloud native technologies</strong> are the technologies used to build and scale cloud native applications, like Kubernetes, Helm, Docker, and others.</li>
<li><strong>Cloud native computing</strong> and cloud native mean the same thing. You can read the “Cloud native” definition above to understand better.  </li>
</ul>
<h2 id="heading-cloud-native-architecture">Cloud Native Architecture</h2>
<p>Cloud native follows four architectural principles that help businesses ship products faster, implement their customer’s needs quickly, create value faster, and aid collaboration between developers and IT specialists.</p>
<p>Here are the four main principles that make cloud native architecture work:</p>
<h3 id="heading-microservices">Microservices</h3>
<p>In microservices, you break the code down into independent modules. Each feature is a standalone service, and resources are assigned to the services only when you need them. Cloud native apps are built following this architecture.</p>
<h3 id="heading-containers">Containers</h3>
<p>Cloud native apps are packaged in containers. Containers provide isolation context for microservices making them highly accessible and easier to build, update, and scale.</p>
<h3 id="heading-cicd">CI/CD</h3>
<p>Cloud native applications run on a continuous delivery model. This fosters collaboration between developers and the Operations team to enables them to build, deploy, and release software faster without affecting end-users or developers in other teams.</p>
<h3 id="heading-devops">DevOps</h3>
<p>Cloud native adopts DevOps as a practice to make continuous delivery and continuous integration (CI/CD) possible.</p>
<h2 id="heading-benefits-of-building-cloud-native-apps">Benefits of building cloud native apps</h2>
<p>There are a number of benefits to building cloud native apps:</p>
<ul>
<li><strong>Independence:</strong> Because Cloud native apps use the Microservices architecture, it's possible to build cloud native apps independently of each other. This gives you the opportunity to build, manage, and deploy the different components of an application independently without affecting other components.</li>
<li><strong>Automation:</strong> Cloud native apps run on a continuous delivery model making it possible to ship software updates immediately.</li>
<li><strong>No downtime:</strong> Thanks to container orchestrators such as Kubernetes, you can deploy a software update with essentially zero downtime. If an instance of the application goes down, Kubernetes will automatically spin up another one for you immediately.</li>
<li><strong>Scalability:</strong> Cloud native apps enable flexible deployment options across the network making it easier to develop, deploy, and iterate on the application.</li>
<li><strong>Standards-based:</strong> Most cloud native services follow a set of standards championed by the <a target="_blank" href="https://www.cncf.io/">CNCF</a> Open Source organization. These standards have been vetted and approved by the community and are used by some of the biggest tech companies across the world. This helps reduce vendor lock-in and ensure that apps are built in the right way.</li>
</ul>
<h2 id="heading-summary">Summary</h2>
<p>I hope you enjoyed reading this article. If you want to learn more about Cloud native, here are some useful resources for further reading:</p>
<ul>
<li><a target="_blank" href="https://www.youtube.com/watch?v=9Ik96SBaIvs">Cloud Native 101</a>, VMware.</li>
<li><a target="_blank" href="https://blog.getambassador.io/how-to-start-your-cloud-native-kubernetes-journey-ee88585d9ff3">How to start your Cloud native Kubernetes journey</a>, Ambassador Labs.</li>
<li><a target="_blank" href="https://www.redhat.com/en/topics/cloud-native-apps">Understanding cloud-native apps</a>, Red Hat.</li>
<li><a target="_blank" href="https://www.papertrail.com/solution/tips/cloud-based-cloud-native-and-cloud-enabled-applications-whats-the-difference/">Cloud-Based, Cloud-Native, and Cloud-Enabled apps—What's the Difference?</a>, PaperTrail.</li>
<li><a target="_blank" href="https://www.oracle.com/cloud/cloud-native/what-is-cloud-native/">What is Cloud Native?</a>, Oracle.</li>
<li><a target="_blank" href="https://tanzu.vmware.com/cloud-native">What are Cloud Native applications?</a>, VMware. </li>
</ul>
<p>If you have any questions, you can ask me on <a target="_blank" href="https://twitter.com/Didicodes">Twitter</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Optimize your AWS Cloud Architecture Costs ]]>
                </title>
                <description>
                    <![CDATA[ By Sumeet Ninawe In this article, I'll highlight what I mean by optimizing your costs in AWS cloud architecture. Then I'll share how you can do it with respect to the AWS Well-Architected framework. The Problems of Maintaining IT Architecture The tra... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/cost-optimization-in-aws/</link>
                <guid isPermaLink="false">66d46012b6b7f664236cbe02</guid>
                
                    <category>
                        <![CDATA[ AWS ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Cloud Computing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Cloud Services ]]>
                    </category>
                
                    <category>
                        <![CDATA[ optimization ]]>
                    </category>
                
                    <category>
                        <![CDATA[ software architecture ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 15 Mar 2021 18:45:44 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2021/03/bram-naus-n8Qb1ZAkK88-unsplash-1.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Sumeet Ninawe</p>
<p>In this article, I'll highlight what I mean by optimizing your costs in AWS cloud architecture. Then I'll share how you can do it with respect to the AWS Well-Architected framework.</p>
<h2 id="heading-the-problems-of-maintaining-it-architecture">The Problems of Maintaining IT Architecture</h2>
<p>The traditional maintenance of IT infrastructure was not very, hmm, efficient? I don't really have the words to describe this issue, mostly because I'll never understand the pain of handling on-prem data centers. </p>
<p>But it involves provisioning the infrastructure, installing the OS and applications, configuring networking in a web of cables, constantly monitoring performance, and much more.</p>
<p>Imagine the effort required just to keep these data centers running – the procurement, the operations, building special facilities to keep the servers running, disaster recovery, and so on. It can take weeks if not months to scale this traditional infrastructure. </p>
<p>This kind of situation also influences the development of applications. Older applications were often built as monoliths and the overall risk of failure was high. What was your business again?</p>
<h2 id="heading-how-cloud-computing-helps">How Cloud Computing Helps</h2>
<p>The emergence of cloud providers like AWS has changed this equation altogether. Imagine not having to do all of the above by yourself. Instead, a team of experts does it for you at a cost. </p>
<p>Cloud computing does just that. It has also introduced new ways for applications to be built. Applications that are developed using cloud capabilities are called cloud-native applications.</p>
<p>As I mentioned earlier, all of this comes at a cost. But if you compare those costs with the way traditional infrastructure was handled, it's still cheaper. </p>
<p>Still, that’s not all – it could be even cheaper if you manage your cloud services wisely. Cost Optimization is one of the pillars of an AWS Well-Architected Framework. This describes ways the costs can be optimized, not just by building cloud-native applications, but also other organizational aspects.</p>
<p>Cloud resources are scalable, easily managed, advanced, reliable, secure, cost-effective, and highly available. You don’t need to provision and pay for high-performing virtual machines from the beginning to manage a few traffic surges early on. This would be a typical lift and shift scenario. </p>
<h2 id="heading-calculate-your-cloud-costs">Calculate Your Cloud Costs</h2>
<p>If you are new to the cloud or are planning to migrate your existing workloads to AWS, AWS provides a nice service to calculate Total Cost of Ownership (TCO). It compares on-prem deployment with the costs which you would have to pay in the cloud. </p>
<p>The TCO calculator considers aspects like storage costs, network costs, server costs, and operational costs. It also provides you with an estimate for a lift and shift arrangement.</p>
<p>Estimations provided by TCO calculators can be further reduced by implementing below cost optimization pillars in cloud architectures, like:</p>
<ol>
<li>Rightsizing</li>
<li>Increased elasticity</li>
<li>Choosing the right pricing model</li>
<li>Matching the demand</li>
<li>Measuring and monitoring</li>
</ol>
<h2 id="heading-cost-optimization-checklist">Cost Optimization Checklist</h2>
<h3 id="heading-rightsizing">Rightsizing</h3>
<p>It is very important to understand the capacity requirements of your application and its functions. Guessing the capacity usually results in a mismatch – we end up provisioning less which might cause us to lose customers, or we end up provisioning more where we end up paying for more than we need. </p>
<p>As a general rule, you should start small and monitor your usage for a while to establish a trend. Based on the trend you can scale out and purchase reserved instances or capacity which can help save computing costs up to 75%.</p>
<h3 id="heading-increased-elasticity">Increased elasticity</h3>
<p>To accommodate occasional traffic surges automatically, it is important to implement elastic cloud architecture. This allows auto-scaling groups to scale in and scale out based on your needs. This is where you match the capacity to the demand. </p>
<p>Of course, this is not possible without monitoring your current usage. Monitoring helps you understand the compute requirements over time and allows you to define thresholds. You can use events which are generated this way to take scaling action.</p>
<h3 id="heading-choosing-the-right-pricing-model">Choosing the right pricing model</h3>
<p>Every service offered by AWS comes with a pricing model. In the case of computing and storage, AWS offers various types of pricing models that, in essence, define the terms of managed services. </p>
<p>In the case of EC2 instances, the pricing model defines the availability and access at various levels. For example, on-demand instances can be created and destroyed anytime. On the other hand, reserved instances are fixed long-term instances that result in a cheaper expenditure. </p>
<p>There are other pricing models as well, like Spot instances, Dedicated instances, Dedicated hosts, and more.</p>
<h3 id="heading-matching-the-demand">Matching the demand</h3>
<p>AWS Auto Scaling can be used to match the demand so that you pay less for periods when you're not active and only pay for times when demand surges. Over that period, you can also use reserved instances to further reduce your costs by committing to the long term. This is one example of cost optimization.</p>
<p>Moving to the cloud also calls for a cultural change in organizations, especially when it concerns cost optimization. Teams should be made aware of how the cloud works and what managed resources should be used in various scenarios. </p>
<p>You can form a Cloud Centre of Excellence (CCoE) to work across verticals to monitor and suggest better ways of implementing the Cost Optimization principles below.</p>
<ol>
<li>Define and enforce tagging</li>
<li>Effective account structures</li>
<li>Design and use metrics</li>
<li>Design cost-based architectures</li>
</ol>
<h2 id="heading-the-importance-of-tagging">The Importance of Tagging</h2>
<p>To deal with costs and answer expenditure-related questions, you should perform tagging as a best practice. Tagging of resources allows us to have greater visibility and more granular control over our cloud expenditures.</p>
<p>Standard tagging formats should be defined and enforced for each organization while creating cloud resources. The format may define aspects like the project, portfolio units, teams, and so on at an organizational level.</p>
<p>Going deeper, project-based conventions can also be defined to represent services supported by various cloud resources. However, be aware of the number of tags you choose – there shouldn’t be too many or too few tags defined. In general, tags can be categorized into two groups:</p>
<ol>
<li><strong>Technical –</strong> representing technical details like automation, security, and so on.</li>
<li><strong>Strategic –</strong> representing organizational details like a cost center, access control, governance, and so on.</li>
</ol>
<h2 id="heading-how-to-track-your-cloud-computing-costs">How to Track Your Cloud Computing Costs</h2>
<p>There are a number of ways you can keep track of what you're spending on cloud computing. Let's look at the main ones now.</p>
<h3 id="heading-cost-explorer">Cost Explorer</h3>
<p>AWS provides a few highly useful services like <strong>Cost Explorer</strong> that gives you insight into your cloud spending over time. It offers a nice visual interface representing monthly or daily costs. It also gives you a default dashboard representing the monthly costs incurred per service.</p>
<p>AWS Cost Explorer helps you generate and export cost reports at a high level as well as granular and specific reports. You can build your reports and dashboard based on your interests and focus.</p>
<p>Cost Explorer helps you set budgets which helps monitor your costs. Budgets are a great way to keep your costs under control. Using budgets, you can define an expenditure baseline in AWS and set up threshold breach notifications.</p>
<p>For example, if the costs exceed more than 80% of the baseline budget, you can opt to get a notification which will then help you take action.</p>
<p>Cost Explorer also gives you rightsizing recommendations which help you identify where you might be provisioning more than the required infrastructure in terms of instance type, pricing model, and so on.</p>
<h3 id="heading-quicksight">QuickSight</h3>
<p>If you need a more detailed reporting tool, AWS offers its <strong>QuickSight</strong> service. It is a business analytic solution for cost reporting. It is fast and highly scalable and includes ML capabilities.</p>
<p>You can explore, analyze and collaborate on cost expenditure topics in a much better way. However, this is not a free service like Cost Explorer and it works on a pay-per-session basis.</p>
<h3 id="heading-aws-trusted-advisor">AWS Trusted Advisor</h3>
<p><strong>AWS Trusted Advisor</strong> is a service that embodies a virtual service from AWS that advises you about the framework. It performs a series of checks with AWS best practices and highlights them in the below format if any actions are required.</p>
<ol>
<li>no problem detected – meaning implementation is as per the required standards.</li>
<li>investigation recommended – for warnings.</li>
<li>action recommended – for any aspect which is totally out of place.</li>
</ol>
<p>AWS Trusted Advisor continuously monitors how many of your provisioned resources you've used and generates recommendations. In the case of Cost Optimization, it highlights if any resources are underutilized, if instances are idle, whether reserved instances are going to expire, and more.</p>
<h3 id="heading-aws-cloudfront">AWS CloudFront</h3>
<p>You don't always have to wait for AWS Trusted Advisor to advise on optimizations before you take action. <strong>AWS CloudFront</strong> is a service that provides resource metrics that we can use to monitor performance ourselves and identify underutilized resources.</p>
<p>AWS CloudWatch is the easiest way to collect metrics since it integrates with several AWS Services directly. By gaining operational visibility and insights, you can act on improvements and optimize costs.</p>
<h3 id="heading-ec2-instance-tenancy">EC2 instance tenancy</h3>
<p>AWS offers various options to provision a virtual machine on their infrastructure. These options are created to suit your need depending on how critical your service is.</p>
<p>In any given implementation, not all the services require dedicated high-performing nodes. Similarly, not everything can work on low compute and less available nodes.</p>
<p>This provides us with a gap to explore and define our compute infrastructure that is most suitable for the business and most cost-efficient. Let us take a look at some of the compute types (EC2) provided by AWS.</p>
<ol>
<li><strong>Reserved Instances –</strong> long-term commitment, low cost.</li>
<li><strong>Spot instances –</strong> very low cost, uses sparing EC2 capacity, released when capacity not available, good for fault-tolerant applications.</li>
<li><strong>On-Demand instances –</strong> no commitment, regular costs.</li>
<li><strong>Dedicated instances –</strong> instances created from resources that are not shared.</li>
<li><strong>Dedicated hosts –</strong> dedicated instance with access to hardware options like ports.</li>
<li><strong>Reserved capacity –</strong> Reserved capacity can be purchased and used within an instance family. Instances can be resized, based on the normalization factor. Helps reduce cost with flexibility.</li>
</ol>
<p>Based on your requirements, you can select the appropriate options from above to host your workload. For example, when you are sure that a certain node will exist for the long term, you can take advantage of reserved instances instead of on-demand instances and save up to 75% of the costs.</p>
<p>There is no point in provisioning an on-demand instance for loads that are ephemeral and non-critical. Spot instances can be used in this case that can help reduce costs up to 90%.</p>
<h3 id="heading-rightsizing-aws-storage">Rightsizing AWS Storage</h3>
<p>AWS provides various types of storage and you can use appropriate storage based on how hot or cold you want your data to be stored. Various types of storage offered by AWS are Object, Block, File, Hybrid, Edge, and Backup.</p>
<p>Let's look at an example of object storage. Below are storage classes offered by AWS S3. Which object storage class you choose will depend on how frequently the data is accessed and what retention period you require.</p>
<ol>
<li><strong>Standard Storage –</strong> standard storage, regular costs, immediate access.</li>
<li><strong>Standard Infrequent Access –</strong> reduced availability, reduced costs.</li>
<li><strong>One Zone Infrequent Access –</strong> reduced redundancy, reduced costs.</li>
<li><strong>Intelligent Tiering –</strong> for unknown access patterns, data is moved in and out of various classes based on file usage frequency.</li>
<li><strong>Glacier –</strong> Long term storage, cheap, minutes or hours to retrieve.</li>
<li><strong>Glacier Deep Archive –</strong> Longer-term storage, cheaper, hours to retrieve.</li>
</ol>
<p>Lifecycle policies can be used to transition the old data to cheaper long-term storage.</p>
<p>Every type of storage comes with various levers which you can set appropriately to optimize your storage costs on AWS. I recommend making use of AWS <strong>Data Lifecycle Manager</strong> while provisioning your storage capabilities.</p>
<h2 id="heading-a-final-note">A Final note</h2>
<p>There are many cost optimizations you can apply to resources in AWS, but how you apply these optimizations depends on your business priorities. </p>
<p>Mainly you need to decide if your focus is on costs or on time-to-market. The main bases of cost optimization are:</p>
<ol>
<li><strong>Time-based –</strong> to optimize over time.</li>
<li><strong>Demand-based –</strong> to optimize based on demand/traffic.</li>
<li><strong>Buffer-based –</strong> to optimize based on secondary workloads.</li>
</ol>
<p>The cost optimization pillar of a well-architected framework suggests that while designing, developing, and deploying applications on AWS it is a good practice to keep cost optimization in perspective. </p>
<p>You should continually monitor your costs to reap the most benefits from your cloud investment.</p>
<p>In this post, we discussed various aspects of cloud cost optimization with respect to AWS Well-Architected Framework. If you have stuck with me up until now, cheers to you!</p>
<p>Hey, if you like this content, do consider subscribing, following, and sharing this blog post! <a target="_blank" href="https://letsdotech.dev">Let'sDoTech</a>, <a target="_blank" href="https://www.instagram.com/letsdotech/">Instagram</a>, <a target="_blank" href="https://twitter.com/letsdotech_dev">Twitter</a>, <a target="_blank" href="https://www.linkedin.com/company/letsdotech">LinkedIn</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Secure Your Workloads on AWS ]]>
                </title>
                <description>
                    <![CDATA[ By Riya Sander Businesses are trying to save money these days, so many are moving to the cloud. And a study suggests that the global public cloud services market will have grown 6.3% in 2020.  Cloud services revenue will go up to US$257.9 billion fro... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-secure-your-workloads-on-aws/</link>
                <guid isPermaLink="false">66d460c59208fb118cc6cff6</guid>
                
                    <category>
                        <![CDATA[ AWS ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Cloud Services ]]>
                    </category>
                
                    <category>
                        <![CDATA[ information security ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Security ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Tue, 10 Nov 2020 17:21:32 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2020/10/Secure-Your-Workloads-on-AWS.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Riya Sander</p>
<p>Businesses are trying to save money these days, so many are moving to the cloud. And a study suggests that the <a target="_blank" href="https://www.gartner.com/en/newsroom/press-releases/2020-07-23-gartner-forecasts-worldwide-public-cloud-revenue-to-grow-6point3-percent-in-2020#:~:text=The%20worldwide%20public%20cloud%20services,increasing%2095.4%25%20to%20%241.2%20billion.">global public cloud services market</a> will have grown 6.3% in 2020. </p>
<p>Cloud services revenue will go up to US$257.9 billion from US$242.7 billion in 2019. But as technologies grow more advanced, hackers are becoming better at using that tech to gain access to your mission-critical data. <a target="_blank" href="https://www.fintechnews.org/the-2020-cybersecurity-stats-you-need-to-know/">Cloud-based attacks</a> rose 630% between January and April 2020.</p>
<p>With more data being stored in the cloud, businesses need to have robust security policies. They must also include best practices for dealing with data that's stored in cloud services like AWS. </p>
<p>With around 83% of <a target="_blank" href="https://www.varonis.com/blog/cybersecurity-statistics/">enterprise workloads moving to the cloud</a> by the end of 2020, there is a large amount of critical data that needs to be protected. </p>
<p>In this article, we will discuss some best practices that businesses should implement to protect the data they have moved to the cloud.</p>
<h2 id="heading-go-through-the-aws-documentation">Go through the AWS documentation</h2>
<p>The <a target="_blank" href="https://docs.aws.amazon.com/">AWS docs</a> detail the responsibilities of the client as well as those of AWS. The <a target="_blank" href="https://aws.amazon.com/compliance/shared-responsibility-model">shared responsibility model</a> states that AWS is responsible for protecting the infrastructure that runs the services offered on the AWS cloud. </p>
<p>The customer's responsibilities include the security configuration and management of the services they choose to use.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/11/shared-responsibility-model.png" alt="Image" width="600" height="400" loading="lazy">
<em><a target="_blank" href="https://aws.amazon.com/compliance/shared-responsibility-model">Source</a></em></p>
<h2 id="heading-use-identity-and-access-management">Use Identity and Access Management</h2>
<p>The AWS docs categorically state that the client needs to use Identity and Access Management (IAM) tools to safeguard their data. The <a target="_blank" href="https://aws.amazon.com/iam/">AWS IAM tool</a> allows you to manage users who will have access to the cloud. </p>
<p>IAM allows users to control access to certain resources. The tool also enables clients to create and manage AWS users and groups.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/11/aws-vpc-module.png" alt="Image" width="600" height="400" loading="lazy">
<em><a target="_blank" href="https://aws.amazon.com/blogs/aws/category/iam">Source</a></em></p>
<p>Specific permissions are provided that allow or deny access to various AWS resources. If you wish to assign permissions to any one resource, you can create policies like the following:</p>
<ul>
<li><strong>Actions</strong>: which service actions are allowed.</li>
<li><strong>Resources</strong>: for what resources you will allow those actions.</li>
<li><strong>Effect</strong>: whether you're denying or allowing access.</li>
<li><strong>Conditions</strong>: the requirements for which the actions will take effect.</li>
</ul>
<p>Your webmaster can create one or more IAM users in the AWS account. You can create the users in the AWS Management Console, and you can add up to ten users at a time.</p>
<h2 id="heading-use-multi-factor-authentication">Use Multi-factor Authentication</h2>
<p>While storing your data on AWS is fairly secure, you must still take precautions against unauthorized access to that data.</p>
<p>As suggested by AWS, you can use <a target="_blank" href="https://aws.amazon.com/iam/features/mfa/">multi-factor authentication (MFA)</a> for an extra layer of security. Using only your user ID and password may not be safe enough because hackers have developed many methods for breaking through your password.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/11/sign-in-aws-with-mfa.png" alt="Image" width="600" height="400" loading="lazy">
<em><a target="_blank" href="https://aws.amazon.com/blogs/security/use-yubikey-security-key-sign-into-aws-management-console">Source</a></em></p>
<p>You can also control access to AWS's APIs using MFA. You can enable and manage a virtual MFA device for an IAM user in the AWS account. </p>
<p>Just login to the AWS Management Console and add MFA after choosing the user.</p>
<h2 id="heading-have-a-robust-security-apparatus-in-place">Have a Robust Security Apparatus in Place</h2>
<p>Amazon's relational databases must be encrypted unless they're already encrypted at the storage level. IAM keys must be changed every three months.</p>
<p>You must also tag your EC2 instances logically as this can provide more information about the location of the instance and its usage. It also helps you maintain consistency in your environment.</p>
<p>Tagging can also help you manage your Amazon resources more effectively. Your webmaster can locate, classify, and identify the resources for their various needs.</p>
<p>Filtering can help you find and validate the standards of tagging undertaken in your organization. You can use automated tools to assist in the tagging process. There is a Resource Groups Tagging API to help you filter, manage and search tags.</p>
<h2 id="heading-train-your-employees"><strong>Train your employees</strong></h2>
<p>While you are taking steps to enhance the security of your systems on AWS cloud, you must also organize periodic training sessions for your employees.</p>
<p>Studies show that hackers often target employees to gain access to protected networks. A small letdown in defenses can lead to a potential data breach that can damage your organization.</p>
<p>Your employees must be aware of the security protocols you're using to safeguard your data on AWS. If everyone in your organization is not aware of these protocols, you might have issues enforcing them.</p>
<p>When you introduce new processes, you should organize a short training session for your employees. You can also create self-learning videos and have a quiz at the end.</p>
<h2 id="heading-use-end-to-end-encryption">Use End-to-end Encryption</h2>
<p>End-to-end encryption helps protect your data against unauthorized access - you just have to install an SSL certificate on AWS.</p>
<p>The AWS Management Console can use the SSL certificate between the console service endpoints and the client's browser. The SSL certificate will allow encrypted interaction between a browser and the webserver. The client browser can authenticate the identity of the control service endpoint.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/11/LDAP-security-in-AWS-Directory-Service.png" alt="Image" width="600" height="400" loading="lazy">
<em><a target="_blank" href="https://aws.amazon.com/blogs/security/how-to-improve-ldap-security-in-aws-directory-service-with-client-side-ldaps">Source</a></em></p>
<p>Using the HTTPS protocol can help protect your sensitive data. But you must also consider the additional resource requirements when your servers are handling hundreds of SSL/ TLS sessions.</p>
<p>To install the certificate, you need to convert the certificate and the intermediates to the PEM format. Then, you have to upload it to your AWS account and configure an HTTPS listener. Let's look at that process a bit more in-depth.</p>
<h3 id="heading-how-to-install-ssl-on-your-aws-server">How to Install SSL on your AWS server</h3>
<p>Once the CSR is generated and submitted to the certificate authority, the certificate authority verifies the details and issues an SSL certificate. </p>
<p>The private key file and certificate file both are in .CRT format. Once you have these two files, you need to upload them to the server.</p>
<ul>
<li>First Login to AWS and sign in onto AWS EC2.</li>
<li>Then, browse the navigation menu &gt;&gt; click “<strong>Network Security</strong>” &gt;&gt; choose ‘<strong>Load Balancers</strong>’.</li>
<li>Browse the main pane and select the Load Balancers icon while uploading the certificate.</li>
<li>Now, click on the ‘<strong>Listeners</strong>’ tab and click on ‘<strong>Edit</strong>’ and ‘<strong>Add</strong>’.</li>
<li>Choose HTTPS in the SSL certificate column and click on ‘<strong>change</strong>’ in the same column.</li>
<li>Click the radio button “<strong>Upload a new SSL certificate to AWS Identity and Access Management (IAM)</strong>”. You can rename the certificate here too.</li>
<li>In the private key field, paste the whole contents of the private key in the provided box <strong>“—–BEGIN RSA PRIVATE KEY—–” and “—–END RSA PRIVATE KEY—–”</strong>.</li>
<li>In the public key certificate, paste the details of the certificate in the respective field <strong>“—–BEGIN CERTIFICATE—–” and “—–END CERTIFICATE—–”</strong>.</li>
<li>Finally, paste the certificate chain or CA Bundle.crt in the respective column <strong>“—–BEGIN CERTIFICATE—–” and “—–END CERTIFICATE—–”</strong>.</li>
<li>Click <strong>Save</strong> to complete the installation process. IAM will verify and confirm the installation after uploading the certificate.</li>
<li>Restart your <strong>AWS EC2</strong> instance to see the changes.</li>
</ul>
<h2 id="heading-have-a-proper-recovery-policy-in-place">Have a Proper Recovery Policy in Place</h2>
<p>You should have a robust backup and recovery policy in place. Even if your security is top-notch, backup and disaster recovery is critical.</p>
<p>AWS backup can help you find the right tools for a scalable backup and recovery solution. Their centralized backup process allows you to easily automate and centralize your backup.</p>
<p>Your webmaster can easily monitor this backup process for a number of AWS resources. Also, you can create backup policies in the AWS Backup console with only a few clicks.</p>
<p>To start your AWS backup, you have to sign into your AWS account and launch the AWS Backup console.</p>
<p>Next, create a backup plan and allocate the resources. The resources will get backed up based on your policy.</p>
<p>Once the resources are backed up, the user can monitor, restore, or modify them as necessary.</p>
<p>Below are few steps you should take to create a Disaster Recovery Plan (DRP):</p>
<ul>
<li>Create a set of instructions defining the rules and regulations relating to DRP. This is called Disaster Recovery Management Contingency Statement.</li>
<li>Run a business impact analysis to get an idea of critical IT apps and components as well the impact of risks associated with the business.</li>
<li>Take preventive, detective and corrective control measures that detect and minimize your risk ratio. Also, keeps security software updated, install fire alarms, run employee training sessions, and install network and server monitoring software.</li>
<li>Find the application and business departments that will be impacted marginally during a failure (low failure assurance).</li>
<li>Run tests to check whether changes occurred after each testing process. Management and employees should be trained for the disaster recovery process.</li>
</ul>
<h2 id="heading-use-cloudtrail"><strong>Use CloudTrail</strong></h2>
<p><a target="_blank" href="https://aws.amazon.com/cloudtrail">CloudTrail</a> helps with operational and risk auditing as well as compliance and governance of your AWS account. </p>
<p>Its services allow your webmaster to continuously monitor the activity on your AWS account. It also preserves a history of all activity across all your AWS services.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/11/AWS-CloudTrail.png" alt="Image" width="600" height="400" loading="lazy">
<em><a target="_blank" href="https://aws.amazon.com/cloudtrail">Source</a></em></p>
<p>CloudTrail will help you to track resources changes, analyze your security protocols, and detect unusual activity on your account. You must identify the data that is critical for your activities.</p>
<p>You can analyze CloudTrail's logs as they collect critical data about the usage of your AWS accounts. CloudTrail must be enabled across all geographies to give you these insights.</p>
<h3 id="heading-how-to-set-up-aws-cloudtrail">How to Set Up AWS CloudTrail</h3>
<p>When you create a trail in your AWS account, it allows you to utilize other AWS services. With that, you can check the event data stored in CloudTrail's logs. CloudTrail comes by default when you create an AWS account.</p>
<h4 id="heading-set-up-cloud-trail-for-all-religions">Set Up Cloud Trail for All religions</h4>
<p>Name your CloudTrail and choose ‘Yes’ for ‘Apply trail to all regions'. You should apply it to all regions even if you are just handling a single country. You can check other regions’ activity as a comparison to yours.</p>
<h4 id="heading-select-event-log">Select Event Log</h4>
<p>You can log dissimilar events like management, data, and insight events. You should choose the event types based on your organization’s needs.</p>
<h4 id="heading-enable-log-file-validation">Enable Log File Validation</h4>
<p>You should configure logs on your S3 bucket(s), which are by default encoded with SSE-S3 encryption. Under the storage location option, you can click on ‘Yes’ to ‘Enable log file validation’.</p>
<h4 id="heading-configure-cloudwatch-alarms">Configure CloudWatch Alarms</h4>
<p>Once you create a trail in your AWS account, you can configure CloudWatch security by clicking the ‘configure’ button. </p>
<p>After that, enable IAM by clicking 'Create CloudWatch Alarms for Security and Network related API activity using CloudFormation template'. </p>
<p>When you do this, you will get a notification regarding any API security calls.</p>
<p>Now CloudTrail should be all set up.</p>
<h2 id="heading-use-aws-trusted-advisor">Use AWS Trusted Advisor</h2>
<p><a target="_blank" href="https://aws.amazon.com/premiumsupport/technology/trusted-advisor">AWS Trusted Advisor</a> helps you keep an eye on all areas of your cloud services.</p>
<p>It watches over the cloud environment and the applications that run on it. It also allows you to scan your internal networks and compare them with AWS's standards.</p>
<p>You can access AWS Trusted Advisor from the AWS Management Console. All accounts have access to a few of the checks. </p>
<p>Businesses must subscribe to the Business or Enterprise levels of AWS support to get access to all the checks.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/10/AWS-Trusted-Advisor.png" alt="Image" width="600" height="400" loading="lazy">
<em><a target="_blank" href="https://aws.amazon.com/premiumsupport/technology/trusted-advisor">Source</a></em></p>
<p>You can get the following checks through AWS at no additional charge:</p>
<ul>
<li><strong>Check IAM use</strong>: checks if the client is adhering to security best practices and whether users, groups, and roles have been created to control access to the AWS resources.</li>
<li><strong>Service limits check</strong>: Your position for the essential service limits for the different products is checked.</li>
<li><strong>MFA on root account check</strong>: checks if you use MFA.</li>
<li><strong>Security Groups</strong> (Specific Ports Unrestricted Check): This check is essential, and it informs the webmaster if access to your EC2 instances is too permissive. It helps prevent denial of service or hacking attacks.</li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>As more and more businesses move their data onto the cloud, they have to take more precautions to manage that data safely and effectively.</p>
<p>This move to the cloud has resulted in more data breaches, and SSL certificates have become essential for secure AWS services.</p>
<p>I hope you've learned some best practices to help manage your AWS services in this article.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Host a Static Site in the Cloud in Four Steps ]]>
                </title>
                <description>
                    <![CDATA[ By Marcia Villalba Static sites can host all kinds of websites from your personal portfolio, to a company landing page, or even a blog.  The main advantage of static sites is that they are simple to manage. They are also very cost-efficient. And with... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-host-a-static-site-in-the-cloud-in-4-steps/</link>
                <guid isPermaLink="false">66d46014e39d8b5612bc0dae</guid>
                
                    <category>
                        <![CDATA[ AWS ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Cloud ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Cloud Services ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 09 Sep 2020 22:03:49 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2020/09/aws-lambda---deno--3-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Marcia Villalba</p>
<p>Static sites can host all kinds of websites from your personal portfolio, to a company landing page, or even a blog. </p>
<p>The main advantage of static sites is that they are simple to manage. They are also very cost-efficient. And with static sites, you don’t need complex content management services (CMS) that run on servers all the time (even if you don’t have any traffic). </p>
<p>In this post, you will learn how to host a static website in the AWS cloud in 4 steps, using <a target="_blank" href="https://aws.amazon.com/amplify">AWS Amplify</a> and <a target="_blank" href="https://aws.amazon.com/route53/">Route 53</a>. And the best part? It will cost you almost nothing every month.</p>
<h2 id="heading-what-is-a-static-website">What is a static website?</h2>
<p>Static websites are website served from a storage server or a content delivery network (CDN). There is no need to have a running server creating the HTML files. </p>
<p>These websites are pre-built as HTML files that are stored somewhere on the internet and then served as they were built. </p>
<p>Static sites can have dynamic content, but it is handled on the client-side using JavaScript or some third party integrations using APIs. </p>
<p>Some benefits of using a static site are:</p>
<ul>
<li>They're easy to scale</li>
<li>If you're using a CDN, loading times are fast</li>
<li>They're cost-effective</li>
<li>They're easy to maintain </li>
</ul>
<p>For example, my <a target="_blank" href="https://marcia.dev/">personal website</a> is a good example of a static site:</p>
<p><img src="https://lh6.googleusercontent.com/oxSzL6eMiurmPo__pMZ1lCpg3Zf0L5ZUlyiVX5ja4X75yKTgbpeWB_HmAQ8EoNYorUOBJoeeHpyEXikfMHEj1CEwzfkE8NaPMHhMug3Al3yJwNcZcyE1Lnkq3FcKJNwDLxOgPAPC" alt="Marcia's personal website" width="1600" height="1479" loading="lazy">
<em>Marcia's personal website</em></p>
<h2 id="heading-what-is-aws">What is AWS?</h2>
<p><a target="_blank" href="https://aws.amazon.com/">AWS stands for Amazon Web Services</a> and is the most widely-adopted cloud platform. It has lots of different services to help you to develop and host your applications. </p>
<p>AWS also has data centers around the world and millions of customers use it. </p>
<p>Using the cloud for your applications you will lower the costs, help you become more agile, and allow you to innovate faster than if you were using your own on-premise servers.</p>
<h2 id="heading-step-1-setup-your-aws-account">Step 1 - Setup your AWS account</h2>
<p>The first step in this process is to get an <a target="_blank" href="https://portal.aws.amazon.com/billing/signup">AWS account</a>. You are going to host your static page in the cloud, and for that you must have a valid AWS account.</p>
<p>If you are just now creating your account the <a target="_blank" href="https://aws.amazon.com/free/">free tier</a> should be sufficient for this project. The free tier will give you access to a lot of AWS services for free for the first 12 months. </p>
<p>For example, you will get 5GB of free storage. That is great, as we need storage to save our static site in the cloud.</p>
<p>Keep in mind that having an AWS account is free if you don’t use any services. You won’t be charged for creating the account, and if you don’t use the account nothing will be charged.</p>
<p>To create an AWS account you can follow the steps in this video:</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/9_wo0FHtVmY" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<h2 id="heading-step-2-create-your-static-site-and-configure-it-with-aws-amplify">Step 2 - Create your static site and configure it with AWS Amplify</h2>
<p>Right now after reading that headline, you might be wondering, what is AWS Amplify?</p>
<p><a target="_blank" href="https://aws.amazon.com/amplify/">AWS Amplify</a> is an open-source framework that provides features to help you build cloud-native web and mobile applications. It has 4 components: </p>
<ul>
<li>the Amplify CLI</li>
<li>the Amplify libraries</li>
<li>the Amplify UI Components, and </li>
<li>the Amplify Console. </li>
</ul>
<p>The  Amplify CLI helps you configure all the services you need to create a cloud backend to your application using the command-line interface. </p>
<p>The libraries help you integrate your client applications directly with the backend services. </p>
<p>The Amplify UI components are UI libraries specifically for React, React Native, Angular, Ionic, and Vue that will help you develop your cloud-native application easily. </p>
<p>Finally, the Amplify Console is an AWS service that provides a git-based workflow for continuous deployment and for hosting full-stack web and mobile applications. </p>
<p>In this post we are not going to use all the capabilities of AWS Amplify, we are just going to use the Console. But I recommend that you check out <a target="_blank" href="https://www.youtube.com/playlist?list=PLGyRwGktEFqfquTNg6u82-m0u45qZUQpL">some tutorials</a> on how to build more complex applications using AWS Amplify. </p>
<h3 id="heading-create-the-static-site">Create the static site</h3>
<p>Now, you have everything you need to get started with your static site. For this demo, any static HTML will work. I just created a file called index.html and added this code inside of it:</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">html</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>Hello Foobar<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>This is my super simple site<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span>
</code></pre>
<h3 id="heading-upload-it-to-aws-amplify-console">Upload it to AWS Amplify Console</h3>
<p>After we have the static site, the next step is to go to the <a target="_blank" href="https://console.aws.amazon.com/amplify/">AWS Amplify service in the AWS console</a>. </p>
<p><img src="https://lh3.googleusercontent.com/LwtDo_jercaPlgTy8eQkoH2s3W-Q4bhAarfrtA8Tp_fVShfk0X0jkfgjFp9Q6VAn8WMl8at26F5cNMOVP8W5hEFElg_m2Kjy-6NsszcFg49GHNBOKTP9mM9pNcA2bob22OsX9Y0w" alt="Finding the AWS Amplify service in the AWS Console" width="1600" height="656" loading="lazy">
<em>Finding the AWS Amplify service in the AWS Console</em></p>
<p>Then when that service opens you will see something like this:</p>
<p><img src="https://lh5.googleusercontent.com/vWp3FCCnIL5cP4NkqTd-iDbVD-DKG8Gz6J3-Liu41mMlUzCPTUW9WK0BPdecyRCeW2dmC-qOkHeWxWfj5uRMW8_oGc_DZVd3zbsfHBcFENYf2pCjSnJTsN4rCiKb91JCVjShRNo5" alt="AWS Amplify console" width="1600" height="701" loading="lazy">
<em>AWS Amplify console</em></p>
<p>Click the <strong>Connect app</strong> button and then you will be presented with this page:</p>
<p><img src="https://lh3.googleusercontent.com/pRiA9jSHj1PrIsbvQ4qqmGjGzvDmvqkobhvsDf_KUIrDyVqotWlUyx3I0RhJwSAOkfQhvsl9xcuBjy3gvN06WWl-dPEUNt6n31Xcy_axDc-rIp4b_foTFJRund4vWnDaIxQ_Ypqz" alt="Options for deploying your existing project" width="1598" height="1034" loading="lazy">
<em>Options for deploying your existing project</em></p>
<p>Then you can select <strong>Deploy without a Git provider</strong> and continue. </p>
<p>You will be presented with a page to manually deploy your app. There, you choose an <strong>app name</strong> and an <strong>environment</strong> <strong>name</strong> and then you can drag your application folder into the browser.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/09/Screenshot-2020-09-08-at-22.13.29.png" alt="Starting a manual deployment in AWS Amplify" width="600" height="400" loading="lazy">
<em>Starting a manual deployment in AWS Amplify</em></p>
<p>When the application finishes uploading you will see a message that says "Deployment successfully completed".</p>
<p>Now your website is hosted in the cloud. Go to the link that is under the <strong>Domain</strong> text. That will take you to your just deployed static site. </p>
<p><img src="https://lh5.googleusercontent.com/8ZxQ_ZEs78VSt1_c0cpL9U2iqMiGlm9oS1WyuF0OOnHi_7GL15p3gNl9Cyrdbk0vGnhx-YkSrRXxC8zZN_TyTM4JcH0nXssRYLK0XbNd5WcF_9aaKSWZdOumZTkeeaD5ONEQEDB7" alt="Image" width="1600" height="1321" loading="lazy"></p>
<h2 id="heading-step-3-buy-a-domain-for-your-website">Step 3 - Buy a domain for your website</h2>
<p>Now it is time to get a domain for your website. Sharing that <strong>Domain</strong> link is not very practical and a domain can be a simpler way to name your website.</p>
<p>For that you need to go inside your <a target="_blank" href="https://console.aws.amazon.com/route53/v2">AWS account to a service called Route53</a>.</p>
<p><img src="https://lh5.googleusercontent.com/jHyrb4EAiZr0PiDJzBxn-DU6EeTdfRF3-oWUKmQr9NCMOX5mUYjQzCPYhAtcfwun8vAQhKuCa4ONhqlznKz-cEpwV8u9MK3OZVPLZ_7NVwdgygs-2KhOdGwJAsbFi_thtCYYBlFv" alt="Finding the service Route53 in the AWS console" width="1110" height="702" loading="lazy">
<em>Finding the service Route53 in the AWS console</em></p>
<p>Then when Route 53 opens you can go to a link that says <strong>Register domain</strong>, and a page like this appears. </p>
<p><img src="https://lh6.googleusercontent.com/Bnlj5cwDaFGOVMC8VIEfYImlqEx4wTHgpJxipwsRSj1cji-YSpEvLdxIfq6twQRHoQwu4MvUZFJIg1I0M-Uh0kGZSDFsVogkcy2wjko4oZGMKMAy6l8fQclYzHAt1FQGYyIi9wqn" alt="Image" width="1600" height="690" loading="lazy"></p>
<p>Here you need to choose a domain name. Domains are billed yearly and they have different costs depending on the ending (like .com, .net, and so on).</p>
<p>After you choose a domain name, you can add it to the card. Then just follow the instructions that Route53 provides. </p>
<h2 id="heading-step-4-configure-the-domain-in-your-aws-amplify-app">Step 4 - Configure the domain in your AWS Amplify app</h2>
<p>Now that you have the domain, it is time to get back to your AWS Amplify app – the one you just configured. </p>
<p>Then in the left, you click on the <strong>Domain management</strong> link and this page opens:</p>
<p><img src="https://lh4.googleusercontent.com/wsewL3CddWLzQedGnwxWwE7zby8qm4sSYqSEG-JLZewk9Dpgpk4E2iO6v28PviPu-gVRtXX0INbLSUqsfC0b_UP4DxkGxGpzcFta9CojOoYpxsL4-aPaisONN-wzhADNIsj-fpOH" alt="Adding a domain to your site" width="1600" height="1020" loading="lazy">
<em>Adding a domain to your site</em></p>
<p>The <strong>domain</strong> text box will suggest the domain you just registered. Just pick it, accept all the default configurations, and then click <strong>Save</strong>. </p>
<p>After that, you will be directed to a page where the domain and the SSL certificate will be configured. You don’t need to do anything in that step, just wait until everything is configured. It takes a while so be patient.  </p>
<p>Now you are done, so you can go to your new domain and see your static page.</p>
<h2 id="heading-how-to-update-this-site">How to update this site</h2>
<p>Now every time you need to change something in your static site you need to go to AWS Amplify and update the files. Basically you'll just drop the directory in the Amplify app.</p>
<p><img src="https://lh4.googleusercontent.com/UbaM48h2lYlAyavZKGF4qsMcNqkJYNDrne8Hm5nioBoPuL2WmVqAqLhu1b5_rGLTx6oAsO6WMNgZp9HUTD-D9HMPuxvmM56qrW6vb3bVOTg6xs6e7uYREXAeoccxtfvJAnfNOWq1" alt="Updating your static site" width="1600" height="1273" loading="lazy">
<em>Updating your static site</em></p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Now you have a static site hosted in the cloud. This site is very scalable and reliable. The site is hosted using the AWS CDN called AWS CloudFormation, so this will make your site very fast for your users. </p>
<p>The total cost of hosting after your AWS account is older than 12 months will be around $<a target="_blank" href="https://aws.amazon.com/getting-started/hands-on/host-static-website/services-costs/">0.50 USD to $4 USD per month</a>, depending on how big your site is and how much traffic you get. </p>
<p>The other yearly cost you will have is the domain that can start from $9 USD per year.</p>
<p>And if you want to make this a bit more automated I recommend looking at <a target="_blank" href="https://docs.amplify.aws/guides/hosting/git-based-deployments/q/platform/js">AWS Amplify automatic deployments using Github</a>. </p>
<p><strong>Thanks for reading.</strong></p>
<p>I’m Marcia Villalba, Developer Advocate for AWS and the host of a YouTube channel called FooBar where I have over 250 video tutorials on Serverless, AWS and software engineer practices.</p>
<ul>
<li>Twitter: <a target="_blank" href="https://twitter.com/mavi888uy">https://twitter.com/mavi888uy</a></li>
<li>Youtube: <a target="_blank" href="https://youtube.com/foobar_codes">https://youtube.com/foobar_codes</a></li>
</ul>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to host and deploy a static website or JAMstack app to AWS S3 and CloudFront ]]>
                </title>
                <description>
                    <![CDATA[ S3 and CloudFront are AWS cloud services that make serving static assets powerful and cheap. How can we host a simple static website or JAMstack app on it? A little about AWS What are the benefits of serving from S3 and CloudFront? Before we start, ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-host-and-deploy-a-static-website-or-jamstack-app-to-s3-and-cloudfront/</link>
                <guid isPermaLink="false">66bee8fdf53892da32acd273</guid>
                
                    <category>
                        <![CDATA[ AWS ]]>
                    </category>
                
                    <category>
                        <![CDATA[ beginners guide ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Cloud ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Cloud Services ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Cloud Solutions ]]>
                    </category>
                
                    <category>
                        <![CDATA[ cloudfront ]]>
                    </category>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                    <category>
                        <![CDATA[ JAMstack ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ S3 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ software development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Static Site Generators ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Tutorial ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Development ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Colby Fayock ]]>
                </dc:creator>
                <pubDate>Wed, 11 Mar 2020 13:16:31 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2020/03/static-website-in-aws-s3.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>S3 and CloudFront are AWS cloud services that make serving static assets powerful and cheap. How can we host a simple static website or JAMstack app on it?</p>
<ul>
<li><a class="post-section-overview" href="#heading-a-little-about-aws">A little about AWS</a></li>
<li><a class="post-section-overview" href="#heading-what-are-the-benefits-of-serving-from-s3-and-cloudfront">What are the benefits of serving from S3 and CloudFront?</a></li>
<li><a class="post-section-overview" href="#heading-before-we-start-youll-need-an-aws-account">Before we start, you’ll need an AWS account</a></li>
<li><a class="post-section-overview" href="#heading-storing-your-website-on-s3">Storing your website on S3</a></li>
<li><a class="post-section-overview" href="#heading-serving-your-website-on-s3">Serving your website on S3</a></li>
<li><a class="post-section-overview" href="#heading-distributing-your-website-on-cloudfront">Distributing your website on CloudFront</a></li>
<li><a class="post-section-overview" href="#heading-custom-domain-names">Custom domain names</a></li>
<li><a class="post-section-overview" href="#heading-advanced-aws-usage">Advanced AWS Usage</a></li>
<li><a class="post-section-overview" href="#heading-resources">Resources</a></li>
</ul>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/1lDGDzmbQWg" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<h2 id="heading-a-little-about-aws">A little about AWS</h2>
<p>If you’re not familiar, <a target="_blank" href="https://aws.amazon.com/">AWS</a> (Amazon Web Services) is a cloud service provider that gives developers opportunities to build pretty much anything they can imagine in the cloud.</p>
<p>Though their <a target="_blank" href="https://aws.amazon.com/products/">services</a> extend beyond the likes of <a target="_blank" href="https://aws.amazon.com/machine-learning/">machine learning</a> and <a target="_blank" href="https://aws.amazon.com/ai/">artificial intelligence</a>, we’re going to stick with the entry level services for the purpose of this guide that will allow us to easily host an HTML website.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-services-overview.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Types of AWS services available</em></p>
<p>Building a site with S3 and CloudFront is a common recipe that small and high scale companies across the web use, but let’s break down what each service actually does.</p>
<h3 id="heading-object-storage-with-s3">Object storage with S3</h3>
<p><a target="_blank" href="https://aws.amazon.com/s3/">S3</a> (Simple Storage Service) acts as your hosting for your static website. Think of it like a hard drive in the cloud which we’re not able to use it for processing purposes, but rather for simple file storage and access.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-s3-bucket-file-list.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>List of files from a static site in an AWS S3 bucket</em></p>
<p>When an app or website is compiled in static form, this is all we need to serve it to the people visiting our site. The HTML is sent in the initial request “as is” (unless there’s processing with your provider) and any additional work occurs after the page loads in the browser usually by JavaScript. This allows us to take this simple (and cheap) approach by serving these files from S3.</p>
<h3 id="heading-content-delivery-network-with-cloudfront">Content Delivery Network with CloudFront</h3>
<p><a target="_blank" href="https://aws.amazon.com/cloudfront/">CloudFront</a> works as a <a target="_blank" href="https://en.wikipedia.org/wiki/Content_delivery_network">CDN</a> (Content Delivery Network) that sits in front of your website, caching the files, and serving them directly to the people visiting your site.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/cdn-distribution-map.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>CDN Diagram</em></p>
<p>Where you host and serve your website from, typically called the origin, is the main source of your files and can serve the website itself. But putting a CDN in front of it provides the people accessing your content a shorter and faster way to make their request.</p>
<h2 id="heading-what-are-the-benefits-of-serving-from-s3-and-cloudfront">What are the benefits of serving from S3 and CloudFront?</h2>
<p>Given the rise in the <a target="_blank" href="https://jamstack.org/">JAMstack</a> era, many services are popping up that provide similar services for static sites that make it really easy to deploy. Some even come with a generous free tier like <a target="_blank" href="https://www.netlify.com/">Netlify</a> and <a target="_blank" href="https://zeit.co/">Zeit</a>!</p>
<p>But sometimes developers need a little bit more control over their services or they need to integrate into a larger cloud pipeline that’s already 99% percent in AWS, which is exactly where S3 shines. Also, chances are, during your first year you might still qualify for AWS’s <a target="_blank" href="https://aws.amazon.com/free/">free tier</a>.</p>
<h3 id="heading-fitting-in-to-the-aws-well-architected-framework">Fitting in to the AWS Well-Architected Framework</h3>
<p>As a lead provider in cloud services, AWS has published many guides to help developers and teams strive for excellence in their solutions in terms of performance, cost, and security.</p>
<p>One particular guideline is their 5 pillars of what they describe as a <a target="_blank" href="https://aws.amazon.com/architecture/well-architected/">“well-architected" infrastructure</a>.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-well-architected-framework.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>AWS Well-Architected Framework</em></p>
<p>By default, we check all of these boxes with our hosting solution by using S3 and CloudFront. Out of the box, the HTML and assets you serve will be fast, cheap, secure, and reliable.</p>
<h3 id="heading-the-beauty-of-static-and-jamstack-sites">The beauty of static and JAMstack sites</h3>
<p>Building on top of the pillars, what you’re actually serving is a static HTML file and group of assets that won’t require any type of rendering resources on the initial request. Before this, a common problem was having to worry about a site crashing due to heavy load. But with S3 and CloudFront, your website is infinitely scalable.</p>
<p>On a similar note, when that server scales up as it's trying to serve millions of hits on your post that went viral, so will your costs. Serving a static site is cheap and can greatly reduce the cost associated with running a web server.</p>
<h2 id="heading-before-we-start-youll-need-an-aws-account">Before we start, you’ll need an AWS account</h2>
<p>To work through this guide, you’ll need an AWS account. Luckily, it's free to create an account – you’ll only pay for the services used.</p>
<p>On top of that, AWS provides a generous free tier for some of its services. Some services provide only 12 months of a free tier (like S3) where others are always eligible for the free tier (like <a target="_blank" href="https://aws.amazon.com/lambda/">Lambda</a>), so make sure to do your homework so you don’t rack up an unexpectedly high bill.</p>
<p>To create your account, head over to the AWS website and then continue on to get started: <a target="_blank" href="https://aws.amazon.com/">https://aws.amazon.com/</a>.</p>
<h2 id="heading-storing-your-website-on-s3">Storing your website on S3</h2>
<p>To get started, we’re going to begin with a simple HTML file that will serve as our website. This will allow us to focus more on the process of hosting rather than the intricacies of the website itself.</p>
<h3 id="heading-creating-our-website-file">Creating our website file</h3>
<p>Begin by creating a new folder called <code>my-static-site</code>. Inside that folder, let's create a new file called <code>index.html</code> and add the following to the file:</p>
<pre><code class="lang-html"><span class="hljs-meta">&lt;!DOCTYPE <span class="hljs-meta-keyword">html</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">html</span> <span class="hljs-attr">lang</span>=<span class="hljs-string">“en”</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">charset</span>=<span class="hljs-string">“UTF-8”</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">name</span>=<span class="hljs-string">“viewport”</span> <span class="hljs-attr">content</span>=<span class="hljs-string">“width</span>=<span class="hljs-string">device-width,</span> <span class="hljs-attr">initial-scale</span>=<span class="hljs-string">1.0”</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">title</span>&gt;</span>My Static Website<span class="hljs-tag">&lt;/<span class="hljs-name">title</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>Hello World!<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>This is my static website. ?<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span>
</code></pre>
<p>If you open this file from your computer in your favorite browser, you should now be seeing this.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/hello-world-local-website-file-1.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Hello World! Opening a local webpage</em></p>
<h3 id="heading-creating-a-new-bucket">Creating a new bucket</h3>
<p>Head on over to your AWS account, log in, and navigate to your <a target="_blank" href="https://s3.console.aws.amazon.com/s3/">S3 console</a>.</p>
<p>Once there, let’s create our bucket by clicking on the blue <strong>Create bucket</strong> button:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-s3-create-bucket.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Creating a bucket in AWS S3</em></p>
<p>The first thing AWS wants us to do is enter a <strong>Bucket name</strong>. The bucket name must be globally unique, meaning, the name you use can be the only one in the world, so let’s try something like <code>[yourname]-static-website</code>, where I’ll use <code>colbyfayock-static-website</code>.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-s3-bucket-name.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Naming a bucket in AWS S3</em></p>
<p>Next, let’s set the <a target="_blank" href="https://aws.amazon.com/about-aws/global-infrastructure/regions_az/"><strong>Region</strong></a>. This is the geographic location where AWS will host the bucket and your website. You’re probably fine with the default, but if you’d like, you can select the location closest to you if it’s permitted. Since I’m in Virginia, I’m going to stick with my default of <strong>US East (N. Virginia)</strong>.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-s3-bucket-region.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Setting the region of a bucket in AWS S3</em></p>
<p>Finally, hit the <strong>Create</strong> button on the bottom left of the page.</p>
<p><em>Note: even if you use the <code>[yourname]-static-website</code> pattern, there’s a chance the name will be taken. If it’s taken, AWS will show an error stating “Bucket name already exists,” at which point you’ll want to try a new name of your choosing.</em></p>
<p>Alternatively, you can hit <strong>Next</strong> for advanced usage, but for this guide, we’re okay with all of the defaults S3 provides.</p>
<p>If successful, you should now see your bucket in the list on the S3 console dashboard.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-s3-bucket.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>New bucket in AWS S3</em></p>
<h3 id="heading-uploading-your-website-to-the-bucket">Uploading your website to the bucket</h3>
<p>Let’s navigate to our new bucket by clicking the row of our bucket. You’ll be greeted with a message stating “This bucket is empty. Upload new objects to get started,” so that’s what we’ll do.</p>
<p>Click the <strong>Upload</strong> button to get started.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-s3-bucket-upload.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Uploading files to AWS S3</em></p>
<p>You’ll then see a popup that will ask you to upload a file. Click on the <strong>Add files</strong> button and select your <code>index.html</code> file we created earlier.</p>
<p>Once selected, click the <strong>Upload</strong> button on the bottom left.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-s3-bucket-upload-files.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Selecting files to upload in AWS S3</em></p>
<p>And now your file is uploaded to S3!</p>
<h2 id="heading-serving-your-website-on-s3">Serving your website on S3</h2>
<p>If you try to navigate to your <code>index.html</code> file and open it, you’ll notice a big ugly "Access Denied" message.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-s3-access-denied.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Access Denied to bucket file</em></p>
<p>This is because your file doesn’t currently have the permissions and settings necessary to serve the file to the public, so let’s fix that.</p>
<h3 id="heading-setting-up-your-bucket-as-a-website">Setting up your bucket as a website</h3>
<p>Navigate to the <strong>Properties</strong> tab inside of your bucket, then click <strong>Static website hosting</strong>.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-s3-properties-static-hosting.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Setting up an AWS S3 bucket for statice website hosting</em></p>
<p>Once there, we want to do a few things:</p>
<ul>
<li>Note down the <strong>Endpoint</strong> at the top of the block. We’ll use this to access our site later (you can always find this here again)</li>
<li>Select the “Use this bucket to host a website” option</li>
<li>Enter <code>index.html</code> in the <strong>Index document</strong> field</li>
<li>Finally hit <strong>Save</strong></li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-s3-static-website-configuration.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Configuring an AWS S3 bucket for static website hosting</em></p>
<h3 id="heading-setting-up-your-bucket-policy-and-permissions">Setting up your bucket policy and permissions</h3>
<p>Next, navigate to the <strong>Permissions</strong> tab. Here we’ll want to do 2 things: unblock all public access and add a Bucket Policy.</p>
<p>First, on the main page, let’s click <strong>Edit</strong> to unblock all access.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-s3-bucket-permissions.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Configuring an AWS S3 bucket permissions</em></p>
<p>Then, uncheck the “Block all public access” checkbox and hit <strong>Save</strong>.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-s3-bucket-block-access.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Allowing public access to an AWS S3 bucket</em></p>
<p>AWS will ask you to confirm these settings, as this may not always be what you want to do with your bucket. But for the purposes of hosting a website, we want the whole world to see, so type in the word “confirm” and hit the <strong>Confirm</strong> button.</p>
<p>After confirming, click the <strong>Bucket policy</strong> button and you’ll be taken to a text editor.</p>
<p>In this text box, we’ll want to paste the following snippet. Within this snippet, make sure to replace <code>[your-bucket-name]</code> with the name of your bucket, otherwise you will not be able to save this file.</p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"Version"</span>:<span class="hljs-string">"2012-10-17"</span>,
  <span class="hljs-attr">"Statement"</span>:[{
    <span class="hljs-attr">"Sid"</span>:<span class="hljs-string">"PublicReadGetObject"</span>,
        <span class="hljs-attr">"Effect"</span>:<span class="hljs-string">"Allow"</span>,
      <span class="hljs-attr">"Principal"</span>: <span class="hljs-string">"*"</span>,
      <span class="hljs-attr">"Action"</span>:[<span class="hljs-string">"s3:GetObject"</span>],
      <span class="hljs-attr">"Resource"</span>:[<span class="hljs-string">"arn:aws:s3:::[your-bucket-name]/*”
      ]
    }
  ]
}</span>
</code></pre>
<p><a target="_blank" href="https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteAccessPermissionsReqd.html#bucket-policy-static-site">This policy</a> states that it’s allowing the public to perform a GetObject request on the S3 resource, which is your S3 bucket.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-s3-static-website-bucket-policy.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Setting up a public policy for an AWS S3 bucket</em></p>
<p>After you add the policy, click the <strong>Save</strong> button. Your should now see a message stating "This bucket has public access.”</p>
<h3 id="heading-previewing-your-new-bucket-website">Previewing your new bucket website</h3>
<p>If you noted down the Endpoint from your Properties page, you can now visit that address to see your website. The endpoint should look like this:</p>
<pre><code class="lang-plaintext">http://[your-bucket-name].s3-website-[region-id].amazonaws.com
</code></pre>
<p>If you didn’t, jump back up a few steps to remind yourself how to find it or look under the Properties tab.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-s3-static-website.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Hello World! Opening an AWS S3 website</em></p>
<p>Congrats, you're halfway there! ?</p>
<h2 id="heading-distributing-your-website-on-cloudfront">Distributing your website on CloudFront</h2>
<p>Now that we have our static website being served from a bucket on S3, let’s take it up another level and serve it across the world using CloudFront.</p>
<h3 id="heading-creating-a-cloudfront-distribution">Creating a CloudFront distribution</h3>
<p>Navigate to your <a target="_blank" href="https://console.aws.amazon.com/cloudfront">CloudFront dashboard</a> and click the <strong>Create Distribution</strong> button.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-cloudfront-create-distribution.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Creating a new distribution in AWS CloudFront</em></p>
<p>Next, select <strong>Get Started</strong> under the <strong>Web</strong> delivery method.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-cloudfront-creating-web-distribution.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Getting started with an AWS CloudFront distribution with Web delivery</em></p>
<p>Here, we’ll enter a few custom parameters to get our distribution set up.</p>
<p>Click into the <strong>Origin Domain Name</strong> field. Once selected, a dropdown list should appear where you can select the S3 bucket you just created. Go ahead and select your S3 bucket.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-cloudfront-distribution-origin-name-1.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Setting the origin domain name in AWS CloudFront to your bucket</em></p>
<p>While you can <a target="_blank" href="https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html">customize most of the settings</a> to your liking, for our purposes, we’re going to leave all as their default values except for one.</p>
<p>Scroll down to the <strong>Default Root Object</strong> field and type <code>index.html</code>.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-cloudfront-distribution-default-root-object-1.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Setting the Default Root Object for a distribution in AWS CloudFront</em></p>
<p>After, scroll down to the bottom and click <strong>Create Distribution</strong> in the bottom right.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-cloudfront-setup-create-1.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Creating an AWS CloudFront distribution</em></p>
<h3 id="heading-previewing-your-new-cloudfront-distribution">Previewing your new CloudFront distribution</h3>
<p>After hitting the <strong>Create</strong> button, it will take some time for your distribution to be created and set up. You’ll notice on the <strong>CloudFront Distributions</strong> list page that the <strong>Status</strong> of your new distribution is <strong>In Progress</strong>.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-cloudfront-distribution-in-progress-1.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>AWS CloudFront distribution deployment is In Progress</em></p>
<p>Once this completes, it will say <strong>Deployed</strong>. Then you can find your <strong>Domain Name</strong> in the same row.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-cloudfront-distribution-deployed.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>AWS CloudFront distribution is Deployed</em></p>
<p>Using the value in the Domain Name column, open your distribution in your browser and success! You now are viewing your S3 bucket through CloudFront’s distribution network.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-cloudfront-static-website-1.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Hello World! Opening an AWS CloudFront website</em></p>
<h2 id="heading-custom-domain-names">Custom domain names</h2>
<p>While most of us will probably want to use a custom domain name with our website, we’re not going to dive too deep into that this guide, as there are many ways to set that up depending on where you purchase your domain name.</p>
<p>However, here are a few things to consider.</p>
<h3 id="heading-https-ssl-certificate">HTTPS / SSL Certificate</h3>
<p>If you’re creating your CloudFront distribution to use with a custom domain name, you'll most likely want to configure your distribution with an <a target="_blank" href="https://www.cloudflare.com/learning/ssl/what-is-an-ssl-certificate/">SSL certificate</a> using AWS’s <a target="_blank" href="https://aws.amazon.com/certificate-manager/">Certificate Manager</a>. Alternatively you can provide your own certificate with tools like <a target="_blank" href="https://letsencrypt.org/">Let's Encrypt</a>, but by using ACM, AWS makes it easy to pull in the records for use with your distribution.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/fay.io-ssl-certificate.jpg" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Once in ACM, you’ll want to configure the certificate, map what domains and subdomains should match (typically <code>*.domain.com</code>), and then create your certificate to use with your distribution.</p>
<p>To get started, you can check out the AWS guide for <a target="_blank" href="https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html">requesting a public certificate</a>.</p>
<h3 id="heading-cnames-and-aliases">CNAMEs and Aliases</h3>
<p>A common approach to setting up a custom domain is to use a CNAME. CloudFront makes this pretty painless, as you’ll add it as a configuration option when you’re configuring your distribution.</p>
<p>To get started with setting up a CNAME in CloudFront, <a target="_blank" href="https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html">see the AWS guide</a>.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/fay.io-route53-alias.jpg" alt="Image" width="600" height="400" loading="lazy"></p>
<p>If you’re using <a target="_blank" href="https://aws.amazon.com/route53/">Route53</a> to manage your <a target="_blank" href="https://www.cloudflare.com/learning/dns/what-is-dns/">DNS</a>, you can then set up an A record (alias) to point to your distribution. You can learn more <a target="_blank" href="https://aws.amazon.com/premiumsupport/knowledge-center/route-53-create-alias-records/">using this guide</a>.</p>
<h2 id="heading-advanced-aws-usage">Advanced AWS Usage</h2>
<p>For this guide, we walked you through setting up a new static website and app using the AWS console. But whether you want to learn more, improve your deploy efficiency, or want to automate this process, you’ll want to take a it a step further with the AWS CLI or CloudFormation.</p>
<p>While we won’t walk you through how to use these tools here, we’ll get you started with a little bit of an idea of what you’re up against.</p>
<h3 id="heading-aws-cli">AWS CLI</h3>
<p>The <a target="_blank" href="https://aws.amazon.com/cli/">AWS CLI</a> allows someone to perform AWS operations from the command line. This can be incredibly powerful when you want to script out your resource creation or if you simply prefer to do all of your work from the terminal.</p>
<p>Once set up locally, you’ll be able to perform actions like creating a bucket using the following command:</p>
<pre><code class="lang-shell">aws s3api create-bucket —-bucket [your-bucket-name] —-region [bucket-region]
</code></pre>
<p>To get started, check out the AWS CLI <a target="_blank" href="https://github.com/aws/aws-cli">Github page</a> or the AWS CLI <a target="_blank" href="https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html">User Guide</a>    .</p>
<h3 id="heading-aws-cloudformation">AWS CloudFormation</h3>
<p>AWS preaches “infrastructure as code.” It’s the idea that you can spin up your infrastructure using something that’s written in a file, where in this particular case, it would be a CloudFormation template. This allows you to have a repeatable process that will be the same each time you perform the deploy.</p>
<p><a target="_blank" href="https://aws.amazon.com/cloudformation/">CloudFormation</a> allows you to set up a configuration file that will deploy the services and resources of your choosing by pointing to that file with the CLI or by uploading it in the console.</p>
<p>Here’s an <a target="_blank" href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-s3.html#scenario-s3-bucket-website">example from AWS</a> of what that looks like for a static S3 bucket that could serve as a website.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/03/aws-cloudformation-template-s3.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>AWS CloudFront template example</em></p>
<p>To get started, check out AWS’s CloudFormation <a target="_blank" href="https://aws.amazon.com/cloudformation/resources/templates/">example templates</a> or their <a target="_blank" href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/GettingStarted.Walkthrough.html">Get Started guide</a>.</p>
<h2 id="heading-resources">Resources</h2>
<p>If you’re interested in getting deeper into the AWS ecosystem, here are a few resources to get started:</p>
<ul>
<li><a target="_blank" href="https://www.freecodecamp.org/news/aws-certified-cloud-practitioner-training-2019-free-video-course/">AWS Certified Cloud Practitioner Training 2019 - A Free 4-hour Video Course</a> (freeCodeCamp.org)</li>
<li><a target="_blank" href="https://www.freecodecamp.org/news/awscertified-challenge-free-path-aws-cloud-certifications/">Introducing The #AWSCertified Challenge: A Path to Your First AWS Certifications</a> (freeCodeCamp.org)</li>
<li><a target="_blank" href="https://aws.amazon.com/getting-started/tutorials/">10-Minute Tutorials</a> (AWS)</li>
<li><a target="_blank" href="https://acloud.guru/">A Cloud Guru</a> (Paid courses)</li>
<li><a target="_blank" href="https://aws.amazon.com/solutions/case-studies/">AWS Case Studies</a> (AWS)</li>
</ul>
<div id="colbyfayock-author-card">
  <p>
    <a href="https://twitter.com/colbyfayock">
      <img src="https://res.cloudinary.com/fay/image/upload/w_2000,h_400,c_fill,q_auto,f_auto/w_1020,c_fit,co_rgb:007079,g_north_west,x_635,y_70,l_text:Source%20Sans%20Pro_64_line_spacing_-10_bold:Colby%20Fayock/w_1020,c_fit,co_rgb:383f43,g_west,x_635,y_6,l_text:Source%20Sans%20Pro_44_line_spacing_0_normal:Follow%20me%20for%20more%20JavaScript%252c%20UX%252c%20and%20other%20interesting%20things!/w_1020,c_fit,co_rgb:007079,g_south_west,x_635,y_70,l_text:Source%20Sans%20Pro_40_line_spacing_-10_semibold:colbyfayock.com/w_300,c_fit,co_rgb:7c848a,g_north_west,x_1725,y_68,l_text:Source%20Sans%20Pro_40_line_spacing_-10_normal:colbyfayock/w_300,c_fit,co_rgb:7c848a,g_north_west,x_1725,y_145,l_text:Source%20Sans%20Pro_40_line_spacing_-10_normal:colbyfayock/w_300,c_fit,co_rgb:7c848a,g_north_west,x_1725,y_222,l_text:Source%20Sans%20Pro_40_line_spacing_-10_normal:colbyfayock/w_300,c_fit,co_rgb:7c848a,g_north_west,x_1725,y_295,l_text:Source%20Sans%20Pro_40_line_spacing_-10_normal:colbyfayock/v1/social-footer-card" alt="Follow me for more Javascript, UX, and other interesting things!" width="2000" height="400" loading="lazy">
    </a>
  </p>
  <ul>
    <li>
      <a href="https://twitter.com/colbyfayock">? Follow Me On Twitter</a>
    </li>
    <li>
      <a href="https://youtube.com/colbyfayock">?️ Subscribe To My Youtube</a>
    </li>
    <li>
      <a href="https://www.colbyfayock.com/newsletter/">✉️ Sign Up For My Newsletter</a>
    </li>
  </ul>
</div>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Add Limited Access IAM Users to an EKS Cluster ]]>
                </title>
                <description>
                    <![CDATA[ By Faizan Bashir Introduction Elastic Kubernetes Service (EKS) is the fully managed Kubernetes service from AWS. It is deeply integrated with many AWS services, such as AWS Identity and Access Management (IAM) (for authentication to the cluster), Ama... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/adding-limited-access-iam-user-to-eks-cluster/</link>
                <guid isPermaLink="false">66d45edf787a2a3b05af43a8</guid>
                
                    <category>
                        <![CDATA[ AWS ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Cloud Services ]]>
                    </category>
                
                    <category>
                        <![CDATA[ EKS ]]>
                    </category>
                
                    <category>
                        <![CDATA[ IAM ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Kubernetes ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Fri, 31 Jan 2020 11:27:37 +0000</pubDate>
                <media:content url="https://cdn-media-2.freecodecamp.org/w1280/5f9c9d3d740569d1a4ca36ad.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Faizan Bashir</p>
<h3 id="heading-introduction"><strong>Introduction</strong></h3>
<p><a target="_blank" href="https://aws.amazon.com/eks/">Elastic Kubernetes Service (EKS)</a> is the fully managed <a target="_blank" href="https://kubernetes.io/">Kubernetes</a> service from AWS. It is deeply integrated with many AWS services, such as AWS Identity and Access Management (IAM) (for authentication to the cluster), Amazon CloudWatch (for logging), Auto Scaling Groups (for scaling worker nodes), and Amazon Virtual Private Cloud (VPC) (for networking). Many companies trust Amazon EKS to run their containerized workloads.</p>
<p><img src="https://faizanbashir.me/assets/images/posts/eks-iam.png" alt="EKS IAM Authentication" width="600" height="400" loading="lazy"></p>
<p>EKS uses IAM to provide authentication to your Kubernetes cluster (via the <code>aws eks get-token</code> command, or the <a target="_blank" href="https://github.com/kubernetes-sigs/aws-iam-authenticator">AWS IAM Authenticator for Kubernetes</a>). For authorization it relies on native <a target="_blank" href="https://kubernetes.io/docs/reference/access-authn-authz/rbac/">Kubernetes Role Based Access Control (RBAC)</a>. IAM is used for authentication to your EKS Cluster. And you can manage the permissions for interacting with your cluster’s Kubernetes API through the native Kubernetes RBAC system.</p>
<h2 id="heading-how-to-create-an-iam-user">How to create an IAM User</h2>
<p>Go to your <a target="_blank" href="https://console.aws.amazon.com/">AWS Console</a> where you will find the <a target="_blank" href="https://console.aws.amazon.com/iam/home">IAM service</a> listed under the “Security, Identity &amp; Compliance” group. Inside the IAM dashboard click on the Users tab and click the “Add User” button.</p>
<p><img src="https://faizanbashir.me/assets/images/posts/1*VtA7fGzE2a_h6yMTl69lBw.png" alt="AWS IAM Dashboard User Tab" width="600" height="400" loading="lazy"></p>
<p>Create a new user and allow the user <strong>programmatic access</strong> by clicking on the "Programmatic access" checkbox. You do not need any particular permission for your user to access EKS. You can go ahead without selecting any permission.</p>
<p><img src="https://faizanbashir.me/assets/images/posts/1*7FqyvVFoRxZClqC16SevXw.png" alt="Access Keys" width="600" height="400" loading="lazy"></p>
<p>After the user is created, you will have access to the user's <strong>Access Key ID</strong> and <strong>Secret Access Key</strong>. You will be required to use these keys in the next step.</p>
<h2 id="heading-configure-the-aws-cli">Configure the AWS CLI</h2>
<p>Configuring your AWS CLI with a new user is as simple as running the <code>aws configure</code> command and providing the <code>AWS Access Key ID</code> and the <code>AWS Secret Access Key</code>. The <code>Default region name</code> and <code>Default Output format</code> are optional, though.</p>
<pre><code class="lang-shell">$ aws configure --profile eks-user
AWS Access Key ID [None]: AKIAI44QH8DHBEXAMPLE
AWS Secret Access Key [None]: je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
Default region name [None]: us-east-1
Default output format [None]: text
</code></pre>
<p>Once configured you can test to see if the user is properly configured using the <code>aws sts get-caller-identity</code> command:</p>
<pre><code class="lang-shell">$ aws sts get-caller-identity --profile eks-user
</code></pre>
<p>If the user is properly configured with the <code>aws</code> cli utility you should see a response like the one shown below:</p>
<pre><code class="lang-json">{
    <span class="hljs-attr">"UserId"</span>: <span class="hljs-string">"AIDAX7JPBEM4A6FTJRTMB"</span>,
    <span class="hljs-attr">"Account"</span>: <span class="hljs-string">"123456789012"</span>,
    <span class="hljs-attr">"Arn"</span>: <span class="hljs-string">"arn:aws:iam::123456789012:user/eks-user"</span>
}
</code></pre>
<h2 id="heading-creating-a-role-and-rolebinding-for-the-user">Creating a Role and RoleBinding for the user</h2>
<p>With your IAM user properly configured, you can go ahead and create a role for the user. This snippet of code creates a role named <code>eks-user-role</code> with a modest <code>list</code> permission to the <code>pods</code> resource in your cluster.</p>
<pre><code class="lang-yaml"><span class="hljs-attr">kind:</span> <span class="hljs-string">Role</span>
<span class="hljs-attr">metadata:</span>
  <span class="hljs-attr">name:</span> <span class="hljs-string">eks-user-role</span>
<span class="hljs-attr">rules:</span>
<span class="hljs-bullet">-</span> <span class="hljs-attr">apiGroups:</span> [<span class="hljs-string">""</span>]
  <span class="hljs-attr">resources:</span> [<span class="hljs-string">"pods"</span>]
  <span class="hljs-attr">verbs:</span> [<span class="hljs-string">"list"</span>]
</code></pre>
<p>Save the above snippet of code in a file and then <code>apply</code> the Role to your Kubernetes cluster:</p>
<pre><code class="lang-shell">$ kubectl apply -f role.yaml
</code></pre>
<p>With the role configured you need to create a corresponding RoleBinding:</p>
<pre><code class="lang-yaml"><span class="hljs-attr">apiVersion:</span> <span class="hljs-string">rbac.authorization.k8s.io/v1</span>
<span class="hljs-attr">kind:</span> <span class="hljs-string">RoleBinding</span>
<span class="hljs-attr">metadata:</span>
  <span class="hljs-attr">name:</span> <span class="hljs-string">eks-user-role-binding</span>
<span class="hljs-attr">subjects:</span>
<span class="hljs-bullet">-</span> <span class="hljs-attr">kind:</span> <span class="hljs-string">User</span>
  <span class="hljs-attr">name:</span> <span class="hljs-string">eks-user</span>
  <span class="hljs-attr">apiGroup:</span> <span class="hljs-string">rbac.authorization.k8s.io</span>
<span class="hljs-attr">roleRef:</span>
  <span class="hljs-attr">kind:</span> <span class="hljs-string">Role</span>
  <span class="hljs-attr">name:</span> <span class="hljs-string">eks-user-role</span>
  <span class="hljs-attr">apiGroup:</span> <span class="hljs-string">rbac.authorization.k8s.io</span>
</code></pre>
<p>Save the above snippet of code in a file and then <code>apply</code> the Role Binding to your Kubernetes cluster:</p>
<pre><code class="lang-shell">$ kubectl apply -f role-binding.yaml
</code></pre>
<h2 id="heading-adding-the-user-to-the-aws-auth-configmap">Adding the user to the aws-auth configmap</h2>
<p>If you want to grant additional AWS users or roles the ability to interact with your EKS cluster, you must add the users/roles to the <code>aws-auth</code> ConfigMap within Kubernetes in the <code>kube-system</code> namespace.</p>
<p>You can do this by either editing it using the <code>kubectl edit</code> command:</p>
<pre><code class="lang-shell">$ kubectl edit configmap aws-auth -n kube-system
</code></pre>
<p>Or by importing the <code>aws-auth</code> ConfigMap and applying the changes:</p>
<pre><code class="lang-shell">$ kubectl get configmap aws-auth -n kube-system -o yaml &gt; aws-auth.yaml
</code></pre>
<p>Add the user under the <code>mapUsers</code> as an item in the <code>aws-auth</code> ConfigMap:</p>
<pre><code class="lang-yaml"><span class="hljs-attr">data:</span>
  <span class="hljs-attr">mapUsers:</span> <span class="hljs-string">|
    - userarn: arn:aws:iam::123456789012:user/eks-user
      username: eks-user
      groups:
      - eks-role</span>
</code></pre>
<p>If the user is properly configured you should be able to list pods in the Cluster:</p>
<pre><code class="lang-shell">$ kubectl get pods --as eks-user
</code></pre>
<p>The <code>--as</code> flag impersonates the request to Kubernetes as the given user. You can use this flag to test permissions for any given user.</p>
<h2 id="heading-configuring-permissions-for-the-user">Configuring permissions for the user</h2>
<p>The role which you defined previously only had permission to list pods. The <code>eks-user</code> cannot access any other Kubernetes resources like Deployments, ConfigMaps, Events, Secrets, logs or even shell into a given pod.</p>
<p>In a real-world scenario, you will need to provide permissions to a user to access the required resources. The below snippet of code provides access to resources such as <code>events</code>, <code>pods</code>, <code>deployments</code>, <code>configmaps</code> and <code>secrets</code>.</p>
<pre><code class="lang-yaml"><span class="hljs-attr">rules:</span>
<span class="hljs-bullet">-</span> <span class="hljs-attr">apiGroups:</span> [<span class="hljs-string">""</span>]
  <span class="hljs-attr">resources:</span> [<span class="hljs-string">"events"</span>]
  <span class="hljs-attr">verbs:</span> [<span class="hljs-string">"get"</span>, <span class="hljs-string">"list"</span>, <span class="hljs-string">"watch"</span>]
<span class="hljs-bullet">-</span> <span class="hljs-attr">apiGroups:</span> [<span class="hljs-string">""</span>]
  <span class="hljs-attr">resources:</span> [<span class="hljs-string">"pods"</span>, <span class="hljs-string">"pods/log"</span>, <span class="hljs-string">"pods/exec"</span>]
  <span class="hljs-attr">verbs:</span> [<span class="hljs-string">"list"</span>, <span class="hljs-string">"get"</span>, <span class="hljs-string">"create"</span>, <span class="hljs-string">"update"</span>, <span class="hljs-string">"delete"</span>]
<span class="hljs-bullet">-</span> <span class="hljs-attr">apiGroups:</span> [<span class="hljs-string">"extensions"</span>, <span class="hljs-string">"apps"</span>]
  <span class="hljs-attr">resources:</span> [<span class="hljs-string">"deployments"</span>]
  <span class="hljs-attr">verbs:</span> [<span class="hljs-string">"list"</span>, <span class="hljs-string">"get"</span>, <span class="hljs-string">"create"</span>, <span class="hljs-string">"update"</span>, <span class="hljs-string">"delete"</span>]
<span class="hljs-bullet">-</span> <span class="hljs-attr">apiGroups:</span> [<span class="hljs-string">""</span>]
  <span class="hljs-attr">resources:</span> [<span class="hljs-string">"configmaps"</span>]
  <span class="hljs-attr">verbs:</span> [<span class="hljs-string">"list"</span>, <span class="hljs-string">"get"</span>, <span class="hljs-string">"create"</span>, <span class="hljs-string">"update"</span>, <span class="hljs-string">"delete"</span>]
<span class="hljs-bullet">-</span> <span class="hljs-attr">apiGroups:</span> [<span class="hljs-string">""</span>]
  <span class="hljs-attr">resources:</span> [<span class="hljs-string">"secrets"</span>]
  <span class="hljs-attr">verbs:</span> [<span class="hljs-string">"list"</span>, <span class="hljs-string">"get"</span>, <span class="hljs-string">"create"</span>, <span class="hljs-string">"update"</span>, <span class="hljs-string">"delete"</span>]
</code></pre>
<p>Add the above permissions to the <code>role.yaml</code> file and apply the changes, using <code>kubectl apply -f</code>.</p>
<h2 id="heading-test-test-and-test">Test, test and test!</h2>
<p>Now go ahead and test to see if the permissions have been properly applied to the <code>eks-user</code>. You can test the same using the above mentioned <code>--as USERNAME</code> flag or set the <code>eks-user</code> as the default profile for the <code>aws</code> cli.</p>
<pre><code class="lang-shell">$ export AWS_PROFILE=eks-user
</code></pre>
<p>Once configured you can test to see if the user is properly configured using the <code>aws sts get-caller-identity</code> command:</p>
<pre><code class="lang-shell">$ aws sts get-caller-identity
</code></pre>
<p>You should see a response like the following, indicating the user is properly configured with your <code>aws</code> cli utility:</p>
<pre><code class="lang-json">{
    <span class="hljs-attr">"UserId"</span>: <span class="hljs-string">"AIDAX7JPBEM4A6FTJRTMB"</span>,
    <span class="hljs-attr">"Account"</span>: <span class="hljs-string">"123456789012"</span>,
    <span class="hljs-attr">"Arn"</span>: <span class="hljs-string">"arn:aws:iam::123456789012:user/eks-user"</span>
}
</code></pre>
<p>Test the permissions of the user with the below-mentioned commands.</p>
<pre><code class="lang-shell">$ kubectl get pods
$ kubectl get secrets
$ kubectl get configmaps
$ kubectl get deployments
$ kubectl logs &lt;pod-name&gt;
$ kubectl exec -it &lt;pod-name&gt; sh
$ kubectl create configmap my-cm --from-literal=db_username=&lt;USERNAME&gt; --from-literal=db_host=&lt;HOSTNAME&gt;
$ kubectl create secret generic my-secret --from-literal=db_password=&lt;SOME_STRONG_PASSWORD&gt;
</code></pre>
<p>Simply put, the <code>eks-user</code> user should be able to perform all the actions specified in the verbs array for <code>pods</code>, <code>secrets</code>, <code>configmaps</code>, <code>deployments</code>, and <code>events</code>. You can read more about it here <a target="_blank" href="https://kubernetes.io/docs/reference/access-authn-authz/authorization/">Kubernetes Authorization Overview</a>.</p>
<h2 id="heading-can-i-or-not">Can-I or Not</h2>
<p>You can use <code>auth can-i</code> to check if you have permission to a resource. To see if you have the permission to get pods simply run:</p>
<pre><code class="lang-shell">$ kubectl auth can-i get pods
</code></pre>
<p>The answer will be a simple <code>yes</code> or <code>no</code>. Amazing, isn’t it?</p>
<p>Wanna check if you have <code>cluster-admin</code> permissions? Fire this:</p>
<pre><code class="lang-shell">$ kubectl auth can-i "*" "*"
</code></pre>
<h2 id="heading-wrap-up">Wrap up</h2>
<p>EKS provides the Kubernetes control plane with the backend persistence layer. The Kubernetes API server and the master nodes are provisioned and scaled across various availability zones, resulting in high availability and eliminating a single point of failure. An AWS-managed Kubernetes cluster can withstand the loss of an availability zone.</p>
<p>Access and authorization controls are critical for any security system. Kubernetes provides us with an awesome robust RBAC permission mechanism.</p>
<p><em>Originally published at</em> <a target="_blank" href="https://faizanbashir.me/adding-limited-access-iam-user-to-eks-cluster"><strong>faizanbashir.me</strong></a></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Firestore: How to stay within the limits of Firebase's new database free tier ]]>
                </title>
                <description>
                    <![CDATA[ By Jeff M Lowery I recently started a personal project where I wanted to use a database in the cloud. There are quite a few to choose from. My main criteria was that it be something low or no cost.  Eventually I decided on Firestore, using the Spark ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/firestoreliving/</link>
                <guid isPermaLink="false">66d45f6b38f2dc3808b790c1</guid>
                
                    <category>
                        <![CDATA[ Cloud Services ]]>
                    </category>
                
                    <category>
                        <![CDATA[ database ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Firebase ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Free Software ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 11 Dec 2019 21:48:00 +0000</pubDate>
                <media:content url="https://cdn-media-2.freecodecamp.org/w1280/5f9c9ec5740569d1a4ca3ef8.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Jeff M Lowery</p>
<p><a target="_blank" href="https://www.freecodecamp.org/news/netlify-functions-firebase-and-graphql-working-together-at-last/">I recently started a personal project</a> where I wanted to use a database in the cloud. There are quite a few to choose from. My main criteria was that it be something low or no cost. </p>
<p>Eventually I decided on <a target="_blank" href="https://firebase.google.com/docs/firestore">Firestore</a>, using the <a target="_blank" href="https://firebase.google.com/pricing">Spark Plan</a>. This plan gives me 5Gb of storage, with 50K reads and 20K writes per day for free, which at the time seemed like plenty. I soon learned that a little carelessness can blow past those transaction limits pretty fast.</p>
<p>Firestore is a NoSQL document store database. Each NoSQL database is different and my a learning curve was steeper than expected. As you know, the best teacher is adversity, and I made my share of mistakes early on. One too many, though, and I’d hit the read or write limit of the plan, which sometimes could happen within an hour or two. Then it was time to call it a day.</p>
<p>Things are better now, so I offer these lessons learned:</p>
<h3 id="heading-do-start-with-the-free-plan"><em>Do</em> start with the free plan</h3>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/04/image-198.png" alt="Image" width="600" height="400" loading="lazy">
_Photo by [Unsplash](https://unsplash.com/@frankiefoto?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit"&gt;frank mckenna / &lt;a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm<em>campaign=api-credit)</em></p>
<p>Yes, it is easy to overshoot the plan’s limits, but those occurrences will force you to learn to be efficient with your reads and writes. You will become more cost-conscious of sequencing multiple database operations in an efficient way.</p>
<h3 id="heading-start-with-a-small-dataset">Start with a small dataset</h3>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/04/image-199.png" alt="Image" width="600" height="400" loading="lazy">
_Photo by [Unsplash](https://unsplash.com/@rayhennessy?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit"&gt;Ray Hennessy / &lt;a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm<em>campaign=api-credit)</em></p>
<p>This may seem obvious, but by <strong>small</strong> I mean less than 100 documents total. On my project, I first created a collection with 10K documents. I later realized that I made a mistake in the data I loaded, fixed that, found another, went to fix that, but… TRANSACTION_RESOURCE_LIMIT_EXCEEDED. Welp, done for the day.</p>
<h3 id="heading-take-time-in-the-design-of-your-data-model">Take time in the design of your data model</h3>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/04/image-200.png" alt="Image" width="600" height="400" loading="lazy">
_Photo by [Unsplash](https://unsplash.com/@kellysikkema?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit"&gt;Kelly Sikkema / &lt;a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm<em>campaign=api-credit)</em></p>
<p>Like the carpenter’s axiom: “Measure twice, cut once”, you don’t want to be adjusting your JSON document fields and structure piecemeal. Oh, you <em>will</em> of course, but you’ll save yourself some transactions by practicing a little foresight. Write out a schematic of documents, their fields, and their relationships first. <a target="_blank" href="https://www.freecodecamp.org/news/inserting-uml-in-markdown-using-vscode/">Visualization is the key to happiness.</a></p>
<h3 id="heading-test-and-verify-your-data-loading-scripts">Test and verify your data loading scripts</h3>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/04/image-201.png" alt="Image" width="600" height="400" loading="lazy">
_Photo by [Unsplash](https://unsplash.com/@nasa?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit"&gt;NASA / &lt;a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm<em>campaign=api-credit)</em></p>
<p>You’ll need scripts to populate the database from some other source. That is the time to:</p>
<ul>
<li>verify what you loaded is what you expected</li>
<li>correctly handle the no-data case for fields</li>
</ul>
<p>I made mistakes in both cases. First, when I loaded some string data into a document field, I hadn’t immediately noticed that those strings had quotes already, so the stored strings had embedded quotes. It didn’t seem that serious an issue, but it became a pain later when writing and testing searches on that field. Because there were a lot of documents, I spent a sizable portion of my daily write quota to clean that up.</p>
<p>In the second case, I discovered that Firestore has no mechanism for determining the <a target="_blank" href="https://stackoverflow.com/questions/46806860/how-to-query-cloud-firestore-for-non-existing-keys-of-documents">existence of a property in a document</a> (there is no <em>undefined</em> check). There <em>is</em> an <a target="_blank" href="https://firebase.google.com/docs/firestore/query-data/get-data#get_a_document"><strong>exists</strong> test for documents</a>, but not for document fields. The best practice is to populate missing data fields with <strong>null</strong>, and then do null equivalence tests in a where clause to find documents with “missing” properties.</p>
<h3 id="heading-what-a-small-dataset-wont-teach-you">What a small dataset won’t teach you</h3>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/04/image-202.png" alt="Image" width="600" height="400" loading="lazy">
_Photo by [Unsplash](https://unsplash.com/@goodfreephoto_com?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit"&gt;Good Free Photos / &lt;a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm<em>campaign=api-credit)</em></p>
<p>Once you worked out kinks on the small dataset, it is time to graduate to a larger one. With more documents to process, things like query efficiency, pagination and batch requests become important.</p>
<h3 id="heading-read-in-chunks-write-in-chunks">Read in chunks, write in chunks</h3>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/04/image-203.png" alt="Image" width="600" height="400" loading="lazy">
_Photo by [Unsplash](https://unsplash.com/@picoftasty?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit"&gt;Mae Mu / &lt;a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm<em>campaign=api-credit)</em></p>
<p><a target="_blank" href="https://firebase.google.com/docs/firestore/manage-data/transactions">Batch operations</a> allow for multiple read/writes on the database in a single transaction. This means that if any write operation fails, then all writes fail, and the database data retains its original state. Each operation in a batch counts toward the total read/write quotas, so as such it doesn’t help usage quotas. Also, when writing via batch operations, be aware there’s a 500 operation limit per batch.</p>
<p>Be careful when correlating two documents (i.e., for every A document, there is an association by reference to a B document). Don’t fetch all of one first, then iterate through the other. That’s a good way to chew up the transaction quota when debugging.</p>
<p>It is better to fetch a subset of the first collection, then iterate through it document by document. Associate these documents with document in the second collection by fetching <strong>one</strong> that matches criteria. Continue to do this until the entire first collection has been fetched. When debugging, you can verify everything looks like it is working correctly and, if not, kill the process before a lot of transactions are run.</p>
<h3 id="heading-how-to-limit-query-results">How to limit query results</h3>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/04/image-204.png" alt="Image" width="600" height="400" loading="lazy">
_Photo by [Unsplash](https://unsplash.com/@will0629?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit"&gt;Will Porada / &lt;a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm<em>campaign=api-credit)</em></p>
<p>Firestore’s query language isn’t as richly expressive as SQL is, but there are still a number of ways to restrict your queries so that you don’t overfetch data. Although technically there is no size limit for a POST response body, in practical terms there is.</p>
<p>Some mechanisms for limiting query results:</p>
<p><strong>where and compound where</strong></p>
<p>You can chain multiple where clauses together, similar to adding conditional expressions to a single where clause in SQL.</p>
<pre><code>citiesRef.where(<span class="hljs-string">'state'</span>, <span class="hljs-string">'=='</span>, <span class="hljs-string">'CO'</span>).where(<span class="hljs-string">'name'</span>, <span class="hljs-string">'=='</span>, <span class="hljs-string">'Denver'</span>);
</code></pre><p><strong>limit and ranges</strong></p>
<p>You can limit the number of documents returned by a query by using chaining a limit clause at the end of the query object.</p>
<pre><code><span class="hljs-keyword">let</span> biggest = citiesRef.where(<span class="hljs-string">'population'</span>, <span class="hljs-string">'&gt;'</span>, <span class="hljs-number">2500000</span>)  .orderBy(<span class="hljs-string">'population'</span>).limit(<span class="hljs-number">2</span>);
</code></pre><p>You can also specify a range of records to retrieve via startAt/endAt or startBefore/endBefore constraints, which allows you to do cursor-based pagination.</p>
<pre><code><span class="hljs-keyword">let</span> docRef = db.collection(<span class="hljs-string">'cities'</span>).doc(<span class="hljs-string">'SF'</span>);
</code></pre><pre><code><span class="hljs-keyword">return</span> docRef.get().then(<span class="hljs-function"><span class="hljs-params">snapshot</span> =&gt;</span> {  <span class="hljs-keyword">let</span> startAtSnapshot = db.collection(<span class="hljs-string">'cities'</span>)    .orderBy(<span class="hljs-string">'population'</span>)    .startAt(snapshot);  <span class="hljs-keyword">return</span> startAtSnapshot.limit(<span class="hljs-number">10</span>).get();});
</code></pre><p><strong>in array query</strong></p>
<p>You can look for specific matches in an array. This is good for enumerated values.</p>
<pre><code><span class="hljs-keyword">const</span> usaOrJapan = citiesRef.where(<span class="hljs-string">'country'</span>, <span class="hljs-string">'in'</span>, [<span class="hljs-string">'USA'</span>, <span class="hljs-string">'Japan'</span>]);
</code></pre><p>As demonstrated, it is possible to work within the limitations of the Spark Plan as you learn about Firestore. It’s free, which is always a good place to start.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Simple site hosting with Amazon S3 and HTTPS ]]>
                </title>
                <description>
                    <![CDATA[ By Georgia Nola Hiya folks! In this tutorial I’ll show you how to host a static website with HTTPS on AWS with a custom domain. All this is possible using AWS free tier. However, the services we are going to use do incur some small charges. Generally... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/simple-site-hosting-with-amazon-s3-and-https-5e78017f482a/</link>
                <guid isPermaLink="false">66c35edca365c359945c9b64</guid>
                
                    <category>
                        <![CDATA[ AWS ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Cloud Services ]]>
                    </category>
                
                    <category>
                        <![CDATA[ S3 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Hosting ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Tue, 08 Jan 2019 16:25:45 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*nKAE02IQZHWQ9oqNgGX3ag.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Georgia Nola</p>
<p>Hiya folks!</p>
<p>In this tutorial I’ll show you how to host a static website with HTTPS on AWS with a custom domain. All this is possible using AWS free tier.</p>
<p>However, the services we are going to use do incur some small charges. Generally speaking these shouldn’t exceed $1/month.</p>
<p>We’ll be using a combination of the following AWS services:<br> —S3<br> — Route53<br> — Certificate manager<br>— CloudFront</p>
<p><em>Let’s get into it!</em></p>
<h3 id="heading-setup-your-s3-buckets">Setup your S3 buckets</h3>
<p>First, you’ll need <strong>two S3 buckets</strong>, both should match your custom domain name with the second including the www subdomain.</p>
<p>Bucket 1: mywebsite.com<br>Bucket 2: www.mywebsite.com</p>
<p>The first bucket (mywebsite.com) is the main bucket for your site. This contains all your files and assets for your static website.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/8tMXguNd0mEM-Kdt54Dy0WzMNvD0h0D0Moci" alt="Image" width="564" height="556" loading="lazy"></p>
<p>Next we setup this bucket for static site hosting. You can find this under the Properties tab of the bucket, and we’re going to keep the defaults provided here with the index of the site set to index.html.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/-HHilv-8c1Y3OHdtaZhJR9DNlphJOBFd87gy" alt="Image" width="800" height="506" loading="lazy"></p>
<p>We also need to make this bucket publicly accessible as a user’s browser will need to access the bucket’s files in order to render the website. We can do this by setting a Bucket Policy under the Permissions tab.</p>
<pre><code>{       <span class="hljs-string">"Version"</span>: <span class="hljs-string">"2012-10-17"</span>,       <span class="hljs-string">"Statement"</span>: [        {            <span class="hljs-string">"Sid"</span>: <span class="hljs-string">"PublicReadGetObject"</span>,            <span class="hljs-string">"Effect"</span>: <span class="hljs-string">"Allow"</span>,            <span class="hljs-string">"Principal"</span>: <span class="hljs-string">"*"</span>,            <span class="hljs-string">"Action"</span>: <span class="hljs-string">"s3:GetObject"</span>,            <span class="hljs-string">"Resource"</span>: <span class="hljs-string">"MY_BUCKET_ARN"</span>        }    ]}
</code></pre><p>This is a simple policy that will only allow public read access of objects in the bucket. Now, if you head to the endpoint defined in the static hosting config of the bucket, you should see your website.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/yEcjdf6UEr8iPVBjQCT0CtidDLpUQyhQCbLG" alt="Image" width="800" height="475" loading="lazy"></p>
<p>Progress! But we can do better than that.</p>
<p>The second bucket (www.mywebsite.com) we will leave empty but configure to redirect to our first bucket using HTTP as the protocol (we’ll make it HTTPS later).</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/MphGJGErSalxmf76wjQbOGSuyhg6y50dPWxT" alt="Image" width="800" height="419" loading="lazy">
<em>Redirect requests back to the main bucket using HTTP protocol</em></p>
<p>Your buckets are now ready to go!</p>
<h3 id="heading-configure-domains-with-route53">Configure Domains with Route53</h3>
<p>So your website is up and running but only accessible via the bucket endpoint and not your custom domain. Let’s change that.</p>
<p>Head to <strong>Route53</strong>. If you’ve registered your domain with the Amazon Registrar you should see that a hosted zone has been setup for you with two record sets. One for Name Server (NS) and one for SOA.</p>
<p>All we need to do is to create two more record sets to point to the S3 bucket endpoints.</p>
<p>For each record set:<br> — Type: A — IPv4 address<br> — Alias: Yes<br> — Alias Target: the S3 website endpoint that matches what you set for Name.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/-pRXjHHB-EmOPzuTcNbKribluPQTsshaCGf-" alt="Image" width="562" height="324" loading="lazy">
<em>Creating a record set for www subdomain</em></p>
<p>Now we can head to the custom url…and voilà!<br>We’re almost there, but there’s one last thing we’re missing…</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/Tn5XmMFeKZDKn2zLITzmEfYtBOP6OH2ZSrVl" alt="Image" width="800" height="356" loading="lazy"></p>
<p><strong>Note</strong>: If your domain is registered with another domain registrar (not Amazon) you’ll need to follow some different steps to set this up. Usually you’ll need to add a CNAME record with a value of the main S3 buckets endpoint.</p>
<p><strong>Troubleshooting</strong>:<br>If you deleted the hosted zone Amazon created when you first registered the domain (I’ve done this because hosted zones do incur some charges), you’ll need to create a new hosted zone from scratch.</p>
<ol>
<li>Select “Create Hosted Zone” and set the domain name, for example “mywebsite.com”</li>
<li>This will generate some new record sets for types NS and SOA.</li>
<li>Go into your registered domain and update the Name Servers values to those generated in the new NS record set.</li>
</ol>
<h3 id="heading-requesting-a-certificate">Requesting a Certificate</h3>
<p>Awesome, the site is now hosted using the custom url! However we can only access it via HTTP protocol.<br>We should always ensure our sites are secured using HTTPS protocol. This protects our site and users from malicious injection attacks and guarantees authenticity.</p>
<p>Head to <strong>Certificate Manager</strong> in AWS Console and request a new public certificate (this is free). You’ll be prompted to enter the domain names you wish to secure.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/nklZPz8lBuVETFkAxoKadUuDn3PLvztVIH3J" alt="Image" width="633" height="435" loading="lazy"></p>
<p>Before the certificate can be issued, Amazon needs to be able to verify that you own the specified domains.</p>
<p>You can choose from two verification methods: Email or DNS.</p>
<p>Email is generally simpler, but you’ll need to ensure you can access the email used to register the domain. Alternatively, if you used Amazon Registrar and Route53, you can select the DNS method. This requires you to add some specific record sets to the hosted zone, but this is mostly automated for you so it’s quite simple.</p>
<p>It can take a few minutes for the certificate to be issued after validation.<br>When its all done we can continue to the final step!</p>
<h3 id="heading-configuring-cloudfront">Configuring CloudFront</h3>
<p>For the final step we are going to use <strong>CloudFront</strong> which allows us to use the new SSL certificate to serve the website with HTTPS. CloudFront also speeds up the distribution of web content by storing it at multiple edge locations and delivering from the closest edge location to a user.</p>
<p>We need <strong>two new web distributions</strong>, one for each S3 bucket. Head to CloudFront in the AWS Console and create the first web distribution.<br>There are lots of settings available to create a web distribution, but for the basics we only need to change five:</p>
<ol>
<li><strong>Origin Domain Name</strong>: Set this to the S3 website endpoint for one of the buckets. <strong>Important</strong>: This field will give you some auto-complete options with your S3 bucket names. However, using these can cause issues with redirecting to the bucket endpoint. So instead use the bucket endpoint directly.</li>
<li><strong>Origin Id</strong>: This populated for you when you enter Origin Domain Name.</li>
<li><strong>Viewer Protocol Policy</strong>: Set to “Redirect HTTP to HTTPS”.</li>
<li><strong>Alternate Domain Names</strong>: This should match the name of the S3 bucket you’re pointing to. For example “mywebsite.com”.</li>
<li><strong>SSL Certificate</strong>: Select “Custom SSL Certificate” and select your new certificate from the dropdown.</li>
</ol>
<p>Do this again for the second S3 bucket.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/yAhOQRit35ON9mB7rtO4aefi6w2o9r-RQ2p1" alt="Image" width="800" height="605" loading="lazy"></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/AUfGClmx76ORz-sEOSipOFrJmBQE6KH2pDpf" alt="Image" width="800" height="511" loading="lazy"></p>
<p>The distributions can take a while to spin up, so while we wait, let’s do the finishing steps.</p>
<p>Back in <strong>S3</strong>, go to your secondary bucket (www.mywebsite.com), in the Properties tab and under Static Website Hosting set the redirect protocol to HTTPS.</p>
<p>Finally, head back to <strong>Route53</strong>. We need to update the custom A records we created to now target the CloudFront distributions rather than the S3 buckets. For each record, change the Alias Target and select the CloudFront distribution available in the dropdown.</p>
<p>Note: Again, if you are using another DNS service you’ll need to go update the CNAME record from there to point to the CloudFront domain name.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/9PtEunXXDJGvAsXD03ZFepeSNosGtlXC-SWl" alt="Image" width="800" height="392" loading="lazy">
<em>Huzzah!</em></p>
<p>And there you have it! Your beautiful website is now available at the custom domain and served with HTTPS!</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1q28QH0CERJRnMkDZdrmOImMQD7szHNf5xZI" alt="Image" width="496" height="360" loading="lazy">
_[From Giphy](https://giphy.com" rel="noopener" target="<em>blank" title=")</em></p>
<p>Thanks for reading! I hope this guide was useful and enjoyable, I’d love to know if you found it helpful.</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
