<?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: Ashwarya</title>
    <description>The latest articles on DEV Community by Ashwarya (@xcl1br).</description>
    <link>https://dev.to/xcl1br</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%2F457058%2F26ba00e1-b6ac-4852-b815-105c50cf9915.jpg</url>
      <title>DEV Community: Ashwarya</title>
      <link>https://dev.to/xcl1br</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/xcl1br"/>
    <language>en</language>
    <item>
      <title>My First Time Putting an App on AWS (A Beginner's Story)</title>
      <dc:creator>Ashwarya</dc:creator>
      <pubDate>Sun, 16 Aug 2026 12:29:39 +0000</pubDate>
      <link>https://dev.to/xcl1br/my-first-time-putting-an-app-on-aws-a-beginners-story-41d3</link>
      <guid>https://dev.to/xcl1br/my-first-time-putting-an-app-on-aws-a-beginners-story-41d3</guid>
      <description>&lt;p&gt;Today I did something I've wanted to do for a while — I took an app running on my own laptop and put it "live" on the internet using AWS. It sounds scary when you read about it online, but once I actually did it, it was just a bunch of small, simple steps, one after another.&lt;/p&gt;

&lt;p&gt;This post is me writing down everything I did, in plain, easy words, so that if you're a beginner like me, you can follow along without getting confused by fancy tech terms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is AWS, in simple words?&lt;/strong&gt;&lt;br&gt;
AWS (Amazon Web Services) is basically Amazon renting out computers over the internet. Instead of buying your own physical server and keeping it running 24/7 at home, you "rent" a computer from Amazon. That computer runs your app, and anyone with the internet can visit it.&lt;br&gt;
The specific service I used is called &lt;strong&gt;EC2&lt;/strong&gt;. Think of EC2 as one virtual computer that lives in Amazon's data center, and you get to control it like it's your own.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Step 1: Set up IAM first&lt;br&gt;
&lt;/u&gt;&lt;/strong&gt;&lt;br&gt;
Before touching any servers, I went to IAM (Identity and Access Management). This is AWS's way of managing "who is allowed to do what" in your account.&lt;/p&gt;

&lt;p&gt;In simple words: instead of using your main AWS login for everything (which is risky), IAM lets you create a separate user with its own permissions. It's like giving someone a spare key instead of your master key. I set this up first so my account stays safer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Step 2: Launch an EC2 instance&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Next, I went to the EC2 section and launched a new instance (a fancy word for "a virtual computer"). During this step, AWS also lets you create a .pem file — this is basically a secret key file. It's like a digital key to a lock. Only someone with this file can get into the server. I downloaded it and kept it safe, because if you lose it, you can't easily get back in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Step 3: Login to the server using SSH&lt;br&gt;
&lt;/u&gt;&lt;/strong&gt;&lt;br&gt;
Once the server (EC2 instance) was ready, I needed a way to "log in" to it from my own laptop. For that, I used something called SSH, along with the .pem key file I downloaded earlier.&lt;/p&gt;

&lt;p&gt;In simple words: SSH is like a secure phone call between your laptop and the AWS server, and the .pem file is the password that proves it's really you calling.&lt;/p&gt;

&lt;p&gt;Once connected, my laptop's terminal was now basically "inside" the AWS computer. Anything I typed from here on ran on the AWS server, not my own laptop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Step 4: Update the server&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The very first thing to do on a fresh server is:&lt;/p&gt;

&lt;p&gt;sudo apt update&lt;/p&gt;

&lt;p&gt;In simple words: this just checks for the latest versions of software so everything installed after this is up to date. Think of it like checking for updates before installing new apps on your phone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Step 5: Install the dependencies&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Next, I installed the "dependencies" — these are just the extra tools and programs my app needs to actually run (things like Node.js, npm, git, etc., depending on the app). Without these, the app's code would have nowhere to run, kind of like trying to play a video game without installing the game console first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Step 6: Bring the code onto the server&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To get my actual project code onto this AWS server, I used:&lt;/p&gt;

&lt;p&gt;git clone &lt;/p&gt;

&lt;p&gt;This downloads a copy of my project (that was sitting on GitHub) directly onto the AWS server. Now the server has all my app's files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Step 7: Set up the .env file (the secret settings file)&lt;br&gt;
&lt;/u&gt;&lt;/strong&gt;&lt;br&gt;
Most apps need some private settings — like passwords, API keys, or database links — that should never be shared publicly on GitHub. These usually go in a file called .env.&lt;/p&gt;

&lt;p&gt;Here's exactly what I did:&lt;/p&gt;

&lt;p&gt;touch .env&lt;/p&gt;

&lt;p&gt;This creates a new, empty file named .env.&lt;/p&gt;

&lt;p&gt;ls -a&lt;/p&gt;

&lt;p&gt;This lists all files, including hidden ones (files starting with a dot are hidden by default), just to confirm .env was really created.&lt;/p&gt;

&lt;p&gt;vim .env&lt;/p&gt;

&lt;p&gt;This opens the file in a text editor called Vim, right inside the terminal.&lt;/p&gt;

&lt;p&gt;Inside Vim, I pressed i to switch into "insert mode" (this lets you actually type text — Vim doesn't let you type by default, which confused me at first). Then I typed in my credentials (my secret settings, like API keys).&lt;/p&gt;

&lt;p&gt;After typing everything, I pressed Esc to leave insert mode, then typed :x and hit Enter. This saves the file and closes Vim.&lt;/p&gt;

&lt;p&gt;In simple words: Vim feels strange the first time because you can't just start typing like Notepad — you have to "unlock" typing mode with i, and then "save and exit" with a special command. It trips up almost every beginner once.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Step 8: Open the door — editing the Security Group&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Even after all this, my app still wasn't visible on the internet. That's because AWS blocks all traffic by default, for safety. You have to manually tell AWS which "doors" (ports) are allowed to be opened.&lt;/p&gt;

&lt;p&gt;Here's what I did:&lt;/p&gt;

&lt;p&gt;Went to my EC2 instance page.&lt;br&gt;
Clicked on the Security tab.&lt;br&gt;
Clicked Edit inbound rules.&lt;br&gt;
Added a new rule and set the port to 3000 (since that's the port my app runs on).&lt;br&gt;
Saved the rule.&lt;/p&gt;

&lt;p&gt;In simple words: a "port" is like a specific door number on the server. My app was listening on door number 3000, but AWS had that door locked. This step unlocked it so people from outside could knock and get in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Step 9: The moment it goes live&lt;br&gt;
&lt;/u&gt;&lt;/strong&gt;&lt;br&gt;
After all that, I just opened a browser and typed:&lt;/p&gt;

&lt;p&gt;:3000&lt;/p&gt;

&lt;p&gt;And there it was — my app, running live on the internet, for anyone in the world to open.&lt;/p&gt;

&lt;p&gt;What I learned&lt;/p&gt;

&lt;p&gt;Honestly, none of these steps were individually hard. What made it feel scary before doing it was not knowing the order things happen in, and not knowing what each command actually does. Once I understood that:&lt;/p&gt;

&lt;p&gt;IAM is about who can access what&lt;br&gt;
EC2 is just a rented computer&lt;br&gt;
SSH + .pem is how you securely log into that computer&lt;br&gt;
The .env file holds your app's secrets&lt;br&gt;
The Security Group is basically a locked door that you have to manually open&lt;/p&gt;

&lt;p&gt;...it all made a lot more sense. If you're trying this for the first time, don't worry about memorizing every command. Just understand what each step is trying to do, and the commands will make sense on their own.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>aws</category>
      <category>ec2</category>
      <category>iam</category>
    </item>
    <item>
      <title>Security Principles:</title>
      <dc:creator>Ashwarya</dc:creator>
      <pubDate>Thu, 17 Oct 2024 07:27:27 +0000</pubDate>
      <link>https://dev.to/xcl1br/security-principles-33ho</link>
      <guid>https://dev.to/xcl1br/security-principles-33ho</guid>
      <description>&lt;p&gt;When evaluating the security of a system, we use the CIA triad: confidentiality, integrity, and availability.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Confidentiality: Only authorized people can access the data.&lt;/li&gt;
&lt;li&gt;Integrity: Data cannot be changed without detection.&lt;/li&gt;
&lt;li&gt;Availability: The system is accessible when needed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Online Shopping:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Confidentiality: Credit card info is kept secret.&lt;/li&gt;
&lt;li&gt;Integrity: Shipping address cannot be altered.&lt;/li&gt;
&lt;li&gt;Availability: The website/app is up and running.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Patient Records:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Confidentiality: Medical records are kept private by law.&lt;/li&gt;
&lt;li&gt;Integrity: Records are accurate to ensure correct treatment.&lt;/li&gt;
&lt;li&gt;Availability: Records are accessible during medical visits.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sometimes, one aspect is more important than the others, like the integrity of a university announcement being critical.&lt;br&gt;
Beyond CIA, &lt;em&gt;two additional aspects&lt;/em&gt; are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Authenticity: Data is genuine and from the claimed source.&lt;/li&gt;
&lt;li&gt;Non repudiation: The source cannot deny their actions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Online Shopping: Confirm the order is real and the customer cannot deny placing it.&lt;/li&gt;
&lt;li&gt;Large Orders: Ensure the order is authentic and the sender cannot deny it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Parkerian Hexad&lt;/strong&gt; adds two more elements to CIA:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Utility: Data must be useful (e.g., encrypted data is useless without the key).&lt;/li&gt;
&lt;li&gt;Possession: Prevent unauthorized control of data (e.g., backups or ransomware).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In simple terms, security is about keeping data private, accurate, accessible, genuine, and ensuring it cannot be denied or taken without permission.&lt;br&gt;
System security can be attacked by revealing, changing, or destroying data. These are the opposites of the CIA triad: confidentiality, integrity, and availability.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Disclosure (opposite of confidentiality): Revealing secret data.&lt;/li&gt;
&lt;li&gt;Alteration (opposite of integrity): Changing data.&lt;/li&gt;
&lt;li&gt;Destruction/Denial (opposite of availability): Making data or systems unavailable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Examples with patient records:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Disclosure: If medical records are stolen and made public, it’s a confidentiality attack.&lt;/li&gt;
&lt;li&gt;Alteration: If medical records are changed, wrong treatments might be given.&lt;/li&gt;
&lt;li&gt;Destruction/Denial: If systems are made unavailable, a medical facility can’t access patient records, stalling operations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Balancing protection against disclosure, alteration, and destruction is crucial. Focusing too much on one can harm the others. Good security practices require a balance between confidentiality, integrity, and availability. To ensure the security of a system, we can use different security models that focus on confidentiality, integrity, or both.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bell-LaPadula&lt;/strong&gt; Model (Confidentiality):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple Security Property: "No read up" – can't read data at a higher security level.&lt;/li&gt;
&lt;li&gt;Star Security Property: "No write down" – can't write data to a lower security level.&lt;/li&gt;
&lt;li&gt;Discretionary-Security Property: Uses an access matrix to control read/write operations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Biba Model&lt;/strong&gt; (Integrity):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple Integrity Property: "No read down" – can't read data from a lower integrity level.&lt;/li&gt;
&lt;li&gt;Star Integrity Property: "No write up" – can't write data to a higher integrity level.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Clark-Wilson Model (Integrity):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Constrained Data Item (CDI): Important data whose integrity must be protected.&lt;/li&gt;
&lt;li&gt;Unconstrained Data Item (UDI): All other data.&lt;/li&gt;
&lt;li&gt;Transformation Procedures (TPs): Operations to maintain CDI integrity.&lt;/li&gt;
&lt;li&gt;Integrity Verification Procedures (IVPs): Checks to ensure CDI integrity.
These models help protect data through rules about reading and writing based on security and integrity levels&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Extras&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;ISO/IEC 19249:2017&lt;/strong&gt; standard by the International Organization for Standardization (ISO) and the International Electrotechnical Commission (IEC) outlines architectural and design principles for secure products, systems, and applications. The five architectural principles are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Domain Separation: Grouping related components as single entities with common security attributes.&lt;/li&gt;
&lt;li&gt;Layering: Structuring systems into layers to impose and validate security policies at different levels.&lt;/li&gt;
&lt;li&gt;Encapsulation: Hiding low-level implementations and preventing direct data manipulation, using methods or APIs.&lt;/li&gt;
&lt;li&gt;Redundancy: Ensuring availability and integrity through backup systems, like dual power supplies or RAID configurations.&lt;/li&gt;
&lt;li&gt;Virtualization: Sharing hardware among multiple OSes, providing sandboxing for security.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The five design principles are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Least Privilege: Granting the minimal necessary permissions for tasks.&lt;/li&gt;
&lt;li&gt;Attack Surface Minimization: Reducing vulnerabilities by disabling unnecessary services.&lt;/li&gt;
&lt;li&gt;Centralized Parameter Validation: Ensuring input validation is centralized to prevent exploitation.&lt;/li&gt;
&lt;li&gt;Centralized General Security Services: Centralizing security services, like authentication, to enhance security.&lt;/li&gt;
&lt;li&gt;Error and Exception Handling: Designing systems to handle errors safely, preventing information leakage and ensuring secure failure states.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These principles guide the development of secure systems by emphasizing structured, validated, and minimalistic approaches to security.&lt;/p&gt;

&lt;p&gt;To avoid confusion, note these three terms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vulnerability: A weakness susceptible to attack or damage.&lt;/li&gt;
&lt;li&gt;Threat: A potential danger associated with a vulnerability.&lt;/li&gt;
&lt;li&gt;Risk: The likelihood of a threat exploiting a vulnerability and the resulting impact on the business.&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
  </channel>
</rss>
