<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: CHANDRA PRABHA V</title>
    <description>The latest articles on DEV Community by CHANDRA PRABHA V (@chandra_prabha_v).</description>
    <link>https://dev.to/chandra_prabha_v</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4125481%2Fbca9d500-97bb-4274-a1e5-a8bc420c447f.png</url>
      <title>DEV Community: CHANDRA PRABHA V</title>
      <link>https://dev.to/chandra_prabha_v</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chandra_prabha_v"/>
    <language>en</language>
    <item>
      <title>Hosting My Portfolio on AWS S3 with CloudFront</title>
      <dc:creator>CHANDRA PRABHA V</dc:creator>
      <pubDate>Tue, 15 Sep 2026 06:59:07 +0000</pubDate>
      <link>https://dev.to/chandra_prabha_v/hosting-my-portfolio-on-aws-s3-with-cloudfront-4b2c</link>
      <guid>https://dev.to/chandra_prabha_v/hosting-my-portfolio-on-aws-s3-with-cloudfront-4b2c</guid>
      <description>&lt;h1&gt;
  
  
  Hosting My Portfolio on AWS S3 with CloudFront
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;I wanted to host my personal portfolio using AWS and understand how a static website can be deployed using cloud services.&lt;/p&gt;

&lt;p&gt;For this project, I used &lt;strong&gt;Amazon S3&lt;/strong&gt; to store my portfolio files and &lt;strong&gt;Amazon CloudFront&lt;/strong&gt; to deliver the website through a secure and fast content delivery network (CDN).&lt;/p&gt;

&lt;p&gt;The final architecture is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Internet
   |
   v
CloudFront
   |
   | Origin Access Control
   v
S3 Bucket
   |
   +-- index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  One important part of this setup is that the S3 bucket remains &lt;strong&gt;private&lt;/strong&gt;.
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Technologies Used
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Amazon S3&lt;/strong&gt; - Stores the portfolio files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon CloudFront&lt;/strong&gt; - Delivers the website globally through a CDN.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTML&lt;/strong&gt; - Creates the structure of the portfolio.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSS&lt;/strong&gt; - Provides styling for the portfolio.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Step 1: Creating the S3 Bucket
&lt;/h1&gt;

&lt;p&gt;First, I logged in to the &lt;strong&gt;AWS Management Console&lt;/strong&gt; and searched for &lt;strong&gt;S3&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I opened Amazon S3 and selected:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create bucket&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I entered a unique bucket name.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;chandra-prabha-portfolio-2026
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The bucket name must be globally unique because S3 bucket names are shared across AWS.&lt;/p&gt;

&lt;p&gt;For the AWS Region, I selected:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Asia Pacific (Mumbai) - ap-south-1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Bucket Configuration
&lt;/h3&gt;

&lt;p&gt;For &lt;strong&gt;Object Ownership&lt;/strong&gt;, I kept:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ACLs disabled
Bucket owner enforced
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For &lt;strong&gt;Block Public Access&lt;/strong&gt;, I kept all public access blocked.&lt;/p&gt;

&lt;p&gt;This is important because I wanted the S3 bucket to remain private and allow CloudFront to access the files instead.&lt;/p&gt;

&lt;p&gt;I then clicked:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create bucket&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshot
&lt;/h3&gt;

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

&lt;h1&gt;
  
  
  Step 2: Uploading Portfolio Files
&lt;/h1&gt;

&lt;p&gt;After creating the bucket, I opened it from the S3 bucket list.&lt;/p&gt;

&lt;p&gt;My portfolio contained files such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;├── index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I selected:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Upload → Add files&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;and uploaded my portfolio files.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;index.html&lt;/code&gt; file acts as the main page of the portfolio.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;style.css&lt;/code&gt; file contains the styling, while the &lt;code&gt;images&lt;/code&gt; folder contains images used by the website.&lt;/p&gt;

&lt;h1&gt;
  
  
  Step 3: Creating a CloudFront Distribution
&lt;/h1&gt;

&lt;p&gt;After uploading the files, I created a CloudFront distribution.&lt;/p&gt;

&lt;p&gt;I opened:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS Console → CloudFront&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;and selected:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create distribution&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For the &lt;strong&gt;Origin domain&lt;/strong&gt;, I selected my S3 bucket.&lt;/p&gt;

&lt;p&gt;The origin points to the S3 bucket where my portfolio files are stored.&lt;/p&gt;

&lt;p&gt;The important point here is that I selected the &lt;strong&gt;S3 bucket origin&lt;/strong&gt;, not the S3 static website endpoint.&lt;/p&gt;

&lt;p&gt;This allows CloudFront to securely communicate with the S3 bucket.&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshot
&lt;/h3&gt;

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




&lt;h1&gt;
  
  
  Step 4: Updating the S3 Bucket Policy
&lt;/h1&gt;

&lt;p&gt;After configuring OAC, CloudFront needs permission to read the objects from the S3 bucket.&lt;/p&gt;

&lt;p&gt;AWS provides a bucket policy for allowing the CloudFront distribution to access the bucket.&lt;/p&gt;

&lt;p&gt;I went to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;S3 → My Bucket → Permissions → Bucket Policy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The policy allows the CloudFront service to perform:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;s3:GetObject
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;on the objects inside the bucket.&lt;/p&gt;

&lt;p&gt;The policy is associated with my specific CloudFront distribution.&lt;/p&gt;

&lt;p&gt;The general structure looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Sid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AllowCloudFrontServicePrincipalReadOnly"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Principal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Service"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cloudfront.amazonaws.com"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"s3:GetObject"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:s3:::YOUR-BUCKET-NAME/*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Condition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"StringEquals"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"AWS:SourceArn"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:cloudfront::YOUR-AWS-ACCOUNT-ID:distribution/YOUR-DISTRIBUTION-ID"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I used the policy generated for my own CloudFront distribution rather than manually guessing the values.&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshot
&lt;/h3&gt;

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




&lt;h1&gt;
  
  
  Step 5: Setting &lt;code&gt;index.html&lt;/code&gt; as the Default Root Object
&lt;/h1&gt;

&lt;p&gt;The next step was configuring the default page of the CloudFront distribution.&lt;/p&gt;

&lt;p&gt;Inside the CloudFront distribution settings, I set:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Default root object: index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is useful because users can simply visit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://my-cloudfront-domain/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://my-cloudfront-domain/index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CloudFront automatically serves &lt;code&gt;index.html&lt;/code&gt; when the root URL is requested.&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshot
&lt;/h3&gt;

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




&lt;h1&gt;
  
  
  Step 6: Deploying the CloudFront Distribution
&lt;/h1&gt;

&lt;p&gt;After completing the configuration, I created the CloudFront distribution.&lt;/p&gt;

&lt;p&gt;Initially, CloudFront may show a deployment status while AWS creates the distribution and applies the configuration.&lt;/p&gt;

&lt;p&gt;After deployment, the distribution becomes available.&lt;/p&gt;

&lt;p&gt;The CloudFront console provides a domain name similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;d2ze62elibenrh.cloudfront.net
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This domain can be used to access the portfolio.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 7: Testing the Portfolio
&lt;/h1&gt;

&lt;p&gt;After the CloudFront distribution was deployed, I opened the CloudFront URL in my browser.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://d1234567890abc.cloudfront.net
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The portfolio website was displayed successfully.&lt;/p&gt;

&lt;p&gt;The request flow was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser
   |
   v
CloudFront
   |
   v
S3
   |
   v
index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Screenshot
&lt;/h3&gt;

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




&lt;h1&gt;
  
  
  Why Use CloudFront?
&lt;/h1&gt;

&lt;p&gt;CloudFront is a Content Delivery Network (CDN).&lt;/p&gt;

&lt;p&gt;Instead of every user directly accessing the S3 bucket, CloudFront handles requests and delivers the content through its distributed infrastructure.&lt;/p&gt;

&lt;p&gt;This provides several advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster content delivery&lt;/li&gt;
&lt;li&gt;HTTPS support&lt;/li&gt;
&lt;li&gt;Caching of static files&lt;/li&gt;
&lt;li&gt;Reduced load on the origin&lt;/li&gt;
&lt;li&gt;Better global performance&lt;/li&gt;
&lt;li&gt;Integration with AWS security features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a simple portfolio, the performance difference may not be dramatic, but the architecture is much more representative of a real cloud deployment.&lt;/p&gt;

&lt;h1&gt;
  
  
  What I Learned
&lt;/h1&gt;

&lt;p&gt;Through this project, I learned how to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create and configure an Amazon S3 bucket.&lt;/li&gt;
&lt;li&gt;Upload static website files to S3.&lt;/li&gt;
&lt;li&gt;Create a CloudFront distribution.&lt;/li&gt;
&lt;li&gt;Configure an S3 origin for CloudFront.&lt;/li&gt;
&lt;li&gt;Configure Origin Access Control.&lt;/li&gt;
&lt;li&gt;Use an S3 bucket policy to allow CloudFront access.&lt;/li&gt;
&lt;li&gt;Configure &lt;code&gt;index.html&lt;/code&gt; as the default root object.&lt;/li&gt;
&lt;li&gt;Deploy and test a website using a CloudFront URL.&lt;/li&gt;
&lt;li&gt;Understand the difference between public S3 hosting and private S3 with CloudFront.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hosting a portfolio using S3 and CloudFront is a simple way to understand the basics of AWS cloud deployment.&lt;/p&gt;

&lt;p&gt;The main idea is straightforward:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;S3 stores the website, CloudFront delivers it, and Origin Access Control keeps the S3 origin private.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This project also helped me understand that cloud deployment is not only about getting a website online. Security, access control and how services communicate with each other are equally important.&lt;/p&gt;

&lt;p&gt;A small portfolio ended up being a useful introduction to real-world AWS architecture.&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>aws</category>
    </item>
  </channel>
</rss>
