<?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: Moses Daniel</title>
    <description>The latest articles on DEV Community by Moses Daniel (@moses_daniel_2cfa7c6753d0).</description>
    <link>https://dev.to/moses_daniel_2cfa7c6753d0</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1857708%2Fc87807d3-51b7-46e5-b99a-b17f988c3e51.jpg</url>
      <title>DEV Community: Moses Daniel</title>
      <link>https://dev.to/moses_daniel_2cfa7c6753d0</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/moses_daniel_2cfa7c6753d0"/>
    <language>en</language>
    <item>
      <title>Web Application for Hospital Management System on GCP with HIPAA Compliance</title>
      <dc:creator>Moses Daniel</dc:creator>
      <pubDate>Fri, 10 Jan 2025 08:46:02 +0000</pubDate>
      <link>https://dev.to/moses_daniel_2cfa7c6753d0/web-application-for-hospital-management-system-on-gcp-with-hipaa-compliance-bli</link>
      <guid>https://dev.to/moses_daniel_2cfa7c6753d0/web-application-for-hospital-management-system-on-gcp-with-hipaa-compliance-bli</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Designing a Hospital Management System (HMS) for healthcare organizations requires strict adherence to HIPAA (Health Insurance Portability and Accountability Act) compliance. This ensures the security and privacy of patient data.&lt;/p&gt;

&lt;p&gt;In this guide, we’ll deploy a secure three-tier architecture for an HMS using Google Cloud Platform (GCP). This architecture uses:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Frontend VM&lt;/strong&gt;: Hosts &lt;strong&gt;Node.js&lt;/strong&gt; and &lt;strong&gt;NPM&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend VM&lt;/strong&gt;: Hosts &lt;strong&gt;Java JDK&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database&lt;/strong&gt;: Uses &lt;strong&gt;GCP MySQL Managed Database&lt;/strong&gt; for scalability and high availability.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We will configure the system with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;1 VPC&lt;/strong&gt; with &lt;strong&gt;3 subnets&lt;/strong&gt; for segmentation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Firewall Rules&lt;/strong&gt; for security.&lt;/li&gt;
&lt;li&gt;GCP services to meet HIPAA requirements, including encryption and access control.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Overview of Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Components&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VPC (Virtual Private Cloud)&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;3 Subnets: &lt;code&gt;Frontend Subnet&lt;/code&gt;, &lt;code&gt;Backend Subnet&lt;/code&gt;, and &lt;code&gt;Database Subnet&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Virtual Machines (VMs)&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;VM1: Hosts &lt;strong&gt;Node.js&lt;/strong&gt; and &lt;strong&gt;NPM&lt;/strong&gt; (Frontend).&lt;/li&gt;
&lt;li&gt;VM2: Hosts &lt;strong&gt;Java JDK&lt;/strong&gt; (Backend).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Database&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;GCP &lt;strong&gt;Cloud SQL (MySQL)&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Firewall Rules&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Protect communication between the tiers.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;HIPAA Compliance Features&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Encryption of data in transit and at rest.&lt;/li&gt;
&lt;li&gt;Least privilege access control.&lt;/li&gt;
&lt;li&gt;Secure audit logging.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Step 1: Set Up the VPC and Subnets&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a VPC&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Navigate to &lt;strong&gt;VPC Network &amp;gt; Create VPC&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Name: &lt;code&gt;HMS-VPC&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Configure subnets:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend Subnet&lt;/strong&gt;: &lt;code&gt;10.0.1.0/24&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend Subnet&lt;/strong&gt;: &lt;code&gt;10.0.2.0/24&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database Subnet&lt;/strong&gt;: &lt;code&gt;10.0.3.0/24&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;Step 2: Set Up Virtual Machines&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;VM1: Frontend (Node.js and NPM)&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a VM&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Go to &lt;strong&gt;Compute Engine &amp;gt; VM Instances &amp;gt; Create Instance&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Name: &lt;code&gt;Frontend-VM&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Subnet: &lt;code&gt;Frontend Subnet&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Machine type: &lt;strong&gt;e2-medium&lt;/strong&gt; (or equivalent).&lt;/li&gt;
&lt;li&gt;Image: &lt;strong&gt;Ubuntu 22.04&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install Node.js and NPM&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; nodejs npm
   node &lt;span class="nt"&gt;-v&lt;/span&gt;
   npm &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;VM2: Backend (Java JDK)&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a second VM:

&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;Backend-VM&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Subnet: &lt;code&gt;Backend Subnet&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Machine type: &lt;strong&gt;e2-medium&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Image: &lt;strong&gt;Ubuntu 22.04&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install Java JDK&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; openjdk-17-jdk
   java &lt;span class="nt"&gt;-version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;Step 3: Configure GCP Cloud SQL (MySQL)&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a Cloud SQL instance&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Navigate to &lt;strong&gt;SQL &amp;gt; Create Instance&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;MySQL&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Configure:

&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;hms-database&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Database Version: &lt;strong&gt;MySQL 8.0&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Region: Same as your VPC.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Enable &lt;strong&gt;Public IP&lt;/strong&gt; and select &lt;code&gt;Database Subnet&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Create a Database&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After the instance is created, connect to it using the &lt;strong&gt;Cloud Shell&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; gcloud sql connect hms-database &lt;span class="nt"&gt;--user&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;root
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Run the following commands:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt; &lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="n"&gt;hospital_mgmt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;USER&lt;/span&gt; &lt;span class="s1"&gt;'hms_user'&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="s1"&gt;'%'&lt;/span&gt; &lt;span class="n"&gt;IDENTIFIED&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="s1"&gt;'secure_password'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;ALL&lt;/span&gt; &lt;span class="k"&gt;PRIVILEGES&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;hospital_mgmt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="s1"&gt;'hms_user'&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="s1"&gt;'%'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="n"&gt;FLUSH&lt;/span&gt; &lt;span class="k"&gt;PRIVILEGES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Step 4: Set Up Firewall Rules&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Frontend Subnet&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Allow inbound HTTP/HTTPS traffic (ports 80, 443).&lt;/li&gt;
&lt;li&gt;Deny all other inbound traffic.&lt;/li&gt;
&lt;li&gt;Allow outbound traffic to &lt;code&gt;Backend Subnet&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Backend Subnet&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Allow inbound traffic from &lt;code&gt;Frontend Subnet&lt;/code&gt; on port 8080.&lt;/li&gt;
&lt;li&gt;Deny all other inbound traffic.&lt;/li&gt;
&lt;li&gt;Allow outbound traffic to &lt;code&gt;Database Subnet&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Database Subnet&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Allow inbound traffic from &lt;code&gt;Backend Subnet&lt;/code&gt; on port 3306 (MySQL).&lt;/li&gt;
&lt;li&gt;Deny all other inbound traffic.&lt;/li&gt;
&lt;li&gt;Block all outbound traffic (or restrict as necessary).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;Step 5: Application Deployment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frontend Deployment&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Set up a simple Node.js app&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;mkdir &lt;/span&gt;hms-frontend
   &lt;span class="nb"&gt;cd &lt;/span&gt;hms-frontend
   npm init &lt;span class="nt"&gt;-y&lt;/span&gt;
   npm &lt;span class="nb"&gt;install &lt;/span&gt;express
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a sample &lt;code&gt;index.js&lt;/code&gt; file&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;   &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
   &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

   &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hospital Management Frontend Running!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
   &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Frontend running on port &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Run the app&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   node index.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Backend Deployment&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Write and compile a Java-based REST API&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Example: Use &lt;strong&gt;Spring Boot&lt;/strong&gt; to create APIs for the HMS.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deploy the API&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Run the API on port 8080 and ensure it communicates with the database.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;Step 6: Enforce HIPAA Compliance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Data Encryption&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enable SSL/TLS:

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;Let’s Encrypt&lt;/strong&gt; or &lt;strong&gt;GCP Certificate Manager&lt;/strong&gt; for securing frontend and backend communication.&lt;/li&gt;
&lt;li&gt;Enable SSL for Cloud SQL:&lt;/li&gt;
&lt;li&gt;Navigate to your SQL instance and enable &lt;strong&gt;SSL connections&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Access Control&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;IAM roles&lt;/strong&gt; to limit access to critical resources.&lt;/li&gt;
&lt;li&gt;Store sensitive information (e.g., database credentials) in &lt;strong&gt;GCP Secret Manager&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Audit Logging&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enable &lt;strong&gt;Cloud Audit Logs&lt;/strong&gt; for all actions on the VMs and database.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;Cloud Monitoring&lt;/strong&gt; to track system activity and detect anomalies.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Step 7: Test and Validate&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test Connectivity&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verify that:

&lt;ul&gt;
&lt;li&gt;The frontend connects to the backend.&lt;/li&gt;
&lt;li&gt;The backend successfully interacts with the MySQL database.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Run HIPAA Tests&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use tools like &lt;strong&gt;OpenSCAP&lt;/strong&gt; to validate compliance with HIPAA controls.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Step 8: Secure the Environment&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enable &lt;strong&gt;GCP Identity-Aware Proxy (IAP)&lt;/strong&gt; for secure access to VMs.&lt;/li&gt;
&lt;li&gt;Regularly update VMs and software.&lt;/li&gt;
&lt;li&gt;Set up &lt;strong&gt;Cloud Backup&lt;/strong&gt; for the database and application data.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqrwr75t4mll7yt71826e.jpg" alt="Image description" width="800" height="375"&gt;
&lt;/h2&gt;

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

&lt;p&gt;By leveraging GCP’s managed services and adhering to HIPAA compliance principles, you can design a secure, scalable, and efficient Hospital Management System. The architecture described ensures patient data is protected while providing seamless application functionality.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Designing a Bank Web Application on Azure with PCI-DSS Compliance</title>
      <dc:creator>Moses Daniel</dc:creator>
      <pubDate>Fri, 10 Jan 2025 07:53:00 +0000</pubDate>
      <link>https://dev.to/moses_daniel_2cfa7c6753d0/designing-a-bank-web-application-on-azure-with-pci-dss-compliance-46bl</link>
      <guid>https://dev.to/moses_daniel_2cfa7c6753d0/designing-a-bank-web-application-on-azure-with-pci-dss-compliance-46bl</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In today’s fintech landscape, ensuring that your banking application adheres to compliance standards like PCI-DSS (Payment Card Industry Data Security Standard) is critical. This guide walks you through designing a secure, three-tier bank web application on &lt;strong&gt;Microsoft Azure&lt;/strong&gt; using PCI-DSS compliance principles.&lt;/p&gt;

&lt;p&gt;We’ll set up a &lt;strong&gt;three-tier architecture&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Frontend VM&lt;/strong&gt; (Node.js and NPM)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend VM&lt;/strong&gt; (Java JDK)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database VM&lt;/strong&gt; (MySQL Database)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The architecture will include &lt;strong&gt;a single VNet with three subnets&lt;/strong&gt;, &lt;strong&gt;three NSGs for network security&lt;/strong&gt;, and a strong firewall strategy.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Overview of Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Components&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Virtual Network (VNet)&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;3 Subnets: &lt;code&gt;Frontend Subnet&lt;/code&gt;, &lt;code&gt;Backend Subnet&lt;/code&gt;, and &lt;code&gt;Database Subnet&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Virtual Machines (VMs)&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;VM1: Hosts &lt;strong&gt;Node.js&lt;/strong&gt; and &lt;strong&gt;NPM&lt;/strong&gt; (Frontend)&lt;/li&gt;
&lt;li&gt;VM2: Hosts &lt;strong&gt;Java JDK&lt;/strong&gt; (Backend)&lt;/li&gt;
&lt;li&gt;VM3: Hosts &lt;strong&gt;MySQL&lt;/strong&gt; (Database)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Network Security Groups (NSGs)&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Frontend NSG&lt;/code&gt;: Protects the frontend.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Backend NSG&lt;/code&gt;: Protects the backend.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Database NSG&lt;/code&gt;: Secures database access.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;PCI-DSS Compliance&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Secure transmission of sensitive data.&lt;/li&gt;
&lt;li&gt;Strong firewall configuration.&lt;/li&gt;
&lt;li&gt;Segmented architecture to limit lateral movement.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Step 1: Create the Virtual Network (VNet)&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Log into Azure Portal&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create a Virtual Network&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Networking &amp;gt; Virtual Networks &amp;gt; Create&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Name: &lt;code&gt;BankApp-VNet&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Address Space: &lt;code&gt;192.168.0.0/16&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Subnets:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Frontend Subnet&lt;/code&gt;: &lt;code&gt;192.168.2.0/24&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Backend Subnet&lt;/code&gt;: &lt;code&gt;192.168.1.0/24&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Database Subnet&lt;/code&gt;: &lt;code&gt;192.168.0.0/24&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Review + Create&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;Step 2: Create Virtual Machines&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;VM1: Frontend (Node.js and NPM)&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Navigate to Compute &amp;gt; Virtual Machines &amp;gt; Create&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configuration&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;Frontend-VM&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Size: Standard_B2s (or equivalent).&lt;/li&gt;
&lt;li&gt;Image: Ubuntu Server 22.04.&lt;/li&gt;
&lt;li&gt;Subnet: &lt;code&gt;Frontend Subnet&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install Node.js and NPM&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; nodejs npm
   node &lt;span class="nt"&gt;-v&lt;/span&gt;
   npm &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;VM2: Backend (Java JDK)&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Repeat the steps above for &lt;code&gt;Backend-VM&lt;/code&gt;:

&lt;ul&gt;
&lt;li&gt;Subnet: &lt;code&gt;Backend Subnet&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install Java JDK&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; openjdk-17-jdk
   java &lt;span class="nt"&gt;-version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;VM3: Database (MySQL)&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create &lt;code&gt;Database-VM&lt;/code&gt;:

&lt;ul&gt;
&lt;li&gt;Subnet: &lt;code&gt;Database Subnet&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install MySQL&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; mysql-server
   &lt;span class="nb"&gt;sudo &lt;/span&gt;mysql_secure_installation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;Step 3: Configure Network Security Groups (NSGs)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frontend NSG&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Navigate to Networking &amp;gt; Network Security Groups &amp;gt; Create&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Configure rules:

&lt;ul&gt;
&lt;li&gt;Allow &lt;strong&gt;HTTP (80)&lt;/strong&gt; and &lt;strong&gt;HTTPS (443)&lt;/strong&gt; inbound.&lt;/li&gt;
&lt;li&gt;Deny all other inbound traffic.&lt;/li&gt;
&lt;li&gt;Outbound: Allow only to backend subnet.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Backend NSG&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create another NSG for &lt;code&gt;Backend-VM&lt;/code&gt;:

&lt;ul&gt;
&lt;li&gt;Allow &lt;strong&gt;TCP port 8080&lt;/strong&gt; from frontend subnet.&lt;/li&gt;
&lt;li&gt;Deny all other inbound traffic.&lt;/li&gt;
&lt;li&gt;Outbound: Allow only to database subnet.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Database NSG&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create the final NSG for &lt;code&gt;Database-VM&lt;/code&gt;:

&lt;ul&gt;
&lt;li&gt;Allow &lt;strong&gt;MySQL (port 3306)&lt;/strong&gt; inbound from backend subnet.&lt;/li&gt;
&lt;li&gt;Deny all other inbound traffic.&lt;/li&gt;
&lt;li&gt;Outbound: Deny all (or allow restricted outbound).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Step 4: Application Deployment&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Frontend Deployment&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Set up your Node.js app on Frontend-VM&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;mkdir &lt;/span&gt;bank-frontend
   &lt;span class="nb"&gt;cd &lt;/span&gt;bank-frontend
   npm init &lt;span class="nt"&gt;-y&lt;/span&gt;
   npm &lt;span class="nb"&gt;install &lt;/span&gt;express
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a sample &lt;code&gt;index.js&lt;/code&gt; file&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;   &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
   &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

   &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bank Frontend Running!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
   &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Server running on port &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Run the application&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   node index.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Backend Deployment&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a sample Java REST API&lt;/strong&gt; on Backend-VM:

&lt;ul&gt;
&lt;li&gt;Write and compile your REST API (e.g., using Spring Boot or JAX-RS).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Database Configuration&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Connect the Backend API to the MySQL Database&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a database for your bank application:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt; &lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="n"&gt;bank_app&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;USER&lt;/span&gt; &lt;span class="s1"&gt;'bank_user'&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="s1"&gt;'%'&lt;/span&gt; &lt;span class="n"&gt;IDENTIFIED&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="s1"&gt;'secure_password'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;ALL&lt;/span&gt; &lt;span class="k"&gt;PRIVILEGES&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;bank_app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="s1"&gt;'bank_user'&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="s1"&gt;'%'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="n"&gt;FLUSH&lt;/span&gt; &lt;span class="k"&gt;PRIVILEGES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;Step 5: Implement PCI-DSS Controls&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Data Encryption&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enable &lt;strong&gt;SSL/TLS&lt;/strong&gt; for communication between components:

&lt;ul&gt;
&lt;li&gt;Install Let's Encrypt SSL certificates for the frontend server.&lt;/li&gt;
&lt;li&gt;Configure MySQL to use SSL for secure database connections.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Secure Authentication&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use strong passwords for all VMs and database users.&lt;/li&gt;
&lt;li&gt;Configure &lt;strong&gt;Azure Key Vault&lt;/strong&gt; to store sensitive secrets like database credentials.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Logging and Monitoring&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enable Azure Monitor to log network traffic and application activity.&lt;/li&gt;
&lt;li&gt;Set up alerts for unusual behavior or unauthorized access attempts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Segmentation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Subnets are already segmented; ensure NSG rules strictly enforce this segmentation.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Step 6: Test and Validate&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test Connectivity&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Verify that:

&lt;ul&gt;
&lt;li&gt;Frontend can communicate with the backend via the &lt;code&gt;Backend NSG&lt;/code&gt; rules.&lt;/li&gt;
&lt;li&gt;Backend can connect to the database securely using &lt;code&gt;Database NSG&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Run PCI-DSS Tests&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use tools like &lt;strong&gt;AlienVault OSSIM&lt;/strong&gt; or &lt;strong&gt;OpenVAS&lt;/strong&gt; to validate compliance.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Step 7: Secure the Environment&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Regularly update VMs and software.&lt;/li&gt;
&lt;li&gt;Enable Azure Backup to back up critical data.&lt;/li&gt;
&lt;li&gt;Conduct periodic penetration tests to identify vulnerabilities.&lt;/li&gt;
&lt;/ul&gt;

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




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

&lt;p&gt;This architecture ensures a secure, scalable, and PCI-DSS-compliant bank web application. By using Azure’s robust infrastructure and best practices, you can focus on delivering value to your users while safeguarding sensitive financial data.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Integrate and Configure Zabbix for Monitoring IT Infrastructure</title>
      <dc:creator>Moses Daniel</dc:creator>
      <pubDate>Fri, 10 Jan 2025 05:58:07 +0000</pubDate>
      <link>https://dev.to/moses_daniel_2cfa7c6753d0/how-to-integrate-and-configure-zabbix-for-monitoring-it-infrastructure-1onn</link>
      <guid>https://dev.to/moses_daniel_2cfa7c6753d0/how-to-integrate-and-configure-zabbix-for-monitoring-it-infrastructure-1onn</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
Zabbix is a powerful open-source monitoring tool used to monitor IT infrastructure, applications, and services. It provides comprehensive visibility into your environment, enabling proactive issue resolution. In this article, we’ll walk you through the steps to integrate and configure Zabbix for your IT infrastructure.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;br&gt;
Before starting, ensure the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Server Requirements&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;OS: Ubuntu 22.04 (or your preferred Linux distribution)&lt;/li&gt;
&lt;li&gt;At least 2GB RAM and 10GB of disk space&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database&lt;/strong&gt;: MySQL or PostgreSQL installed on the server&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network Setup&lt;/strong&gt;: Open ports 80, 10051 (for Zabbix server), and 10050 (for Zabbix agents)&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;strong&gt;Step 1: Install Zabbix Server&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Update System Packages&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Add the Zabbix Repository&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-5%2Bubuntu22.04_all.deb
   &lt;span class="nb"&gt;sudo &lt;/span&gt;dpkg &lt;span class="nt"&gt;-i&lt;/span&gt; zabbix-release_6.0-5+ubuntu22.04_all.deb
   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install Zabbix Server and Agent&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-agent &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;p&gt;&lt;strong&gt;Step 2: Configure Zabbix Database&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install MySQL Server&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;mysql-server &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Secure MySQL Installation&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;mysql_secure_installation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a Database for Zabbix&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   mysql &lt;span class="nt"&gt;-u&lt;/span&gt; root &lt;span class="nt"&gt;-p&lt;/span&gt;
   CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin&lt;span class="p"&gt;;&lt;/span&gt;
   CREATE USER &lt;span class="s1"&gt;'zabbix'&lt;/span&gt;@&lt;span class="s1"&gt;'localhost'&lt;/span&gt; IDENTIFIED BY &lt;span class="s1"&gt;'your_password'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   GRANT ALL PRIVILEGES ON zabbix.&lt;span class="k"&gt;*&lt;/span&gt; TO &lt;span class="s1"&gt;'zabbix'&lt;/span&gt;@&lt;span class="s1"&gt;'localhost'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   FLUSH PRIVILEGES&lt;span class="p"&gt;;&lt;/span&gt;
   EXIT&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Import Zabbix Schema&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   zcat /usr/share/doc/zabbix-server-mysql&lt;span class="k"&gt;*&lt;/span&gt;/create.sql.gz | mysql &lt;span class="nt"&gt;-u&lt;/span&gt; zabbix &lt;span class="nt"&gt;-p&lt;/span&gt; zabbix
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;p&gt;&lt;strong&gt;Step 3: Configure Zabbix Server&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Edit the Zabbix Server Configuration File&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/zabbix/zabbix_server.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   DBName=zabbix
   DBUser=zabbix
   DBPassword=your_password
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Restart and Enable Zabbix Server&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart zabbix-server zabbix-agent apache2
   &lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;zabbix-server zabbix-agent apache2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;Step 4: Access the Zabbix Web Interface&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Open the Web UI&lt;/strong&gt;:
Navigate to &lt;code&gt;http://&amp;lt;your_server_ip&amp;gt;/zabbix&lt;/code&gt; in a browser.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Follow the Web Installer&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose your language.&lt;/li&gt;
&lt;li&gt;Verify prerequisites.&lt;/li&gt;
&lt;li&gt;Configure the database (use the &lt;code&gt;zabbix&lt;/code&gt; user and database name).&lt;/li&gt;
&lt;li&gt;Finalize the setup.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Login to Zabbix&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Default Username: &lt;code&gt;Admin&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Default Password: &lt;code&gt;zabbix&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;Step 5: Configure Zabbix Agents&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install Zabbix Agent on a Monitored Host&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;zabbix-agent &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Edit Agent Configuration&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/zabbix/zabbix_agentd.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   Server=&amp;lt;zabbix_server_ip&amp;gt;
   ServerActive=&amp;lt;zabbix_server_ip&amp;gt;
   Hostname=&amp;lt;monitored_host_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Restart the Agent&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart zabbix-agent
   &lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;zabbix-agent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;Step 6: Add Hosts to Zabbix&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Navigate to “Configuration &amp;gt; Hosts” in the Zabbix Web Interface.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add a New Host&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Hostname: Same as in &lt;code&gt;zabbix_agentd.conf&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Group: Select or create a group (e.g., Linux Servers).&lt;/li&gt;
&lt;li&gt;Interfaces: Add the IP address of the monitored host.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Link a Template&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Go to “Templates” and select a Template OS Linux template.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;Step 7: Set Up Alerts&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Navigate to “Configuration &amp;gt; Actions.”&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create a Trigger&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Define a condition (e.g., CPU usage &amp;gt; 90%).&lt;/li&gt;
&lt;li&gt;Configure an action (e.g., send email).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configure Media Types&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Go to “Administration &amp;gt; Media Types.”&lt;/li&gt;
&lt;li&gt;Add email or other notification methods.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;Step 8: Visualize Data&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Set Up Dashboards&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Navigate to “Monitoring &amp;gt; Dashboards.”&lt;/li&gt;
&lt;li&gt;Create widgets for CPU, memory, disk, and network usage.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Graphs&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Go to “Monitoring &amp;gt; Graphs” for detailed performance data.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;Step 9: Secure Your Zabbix Installation&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Enable HTTPS&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Install SSL certificates using Let’s Encrypt or self-signed certificates.&lt;/li&gt;
&lt;li&gt;Configure Apache to use HTTPS.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Restrict Access&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Use a firewall (e.g., &lt;code&gt;ufw&lt;/code&gt;) to allow only necessary ports.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow 22/tcp
   &lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow 80/tcp
   &lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow 443/tcp
   &lt;span class="nb"&gt;sudo &lt;/span&gt;ufw &lt;span class="nb"&gt;enable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;Step 10: Maintain and Monitor&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Update Zabbix&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Regularly check for updates and apply patches.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor Logs&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo tail&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; /var/log/zabbix/zabbix_server.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Backup Configuration&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Export Zabbix configurations and regularly back up the database.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

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

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj33lmjppw94mxww8v810.png" alt="Image description" width="800" height="458"&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
Zabbix is a comprehensive monitoring solution that can scale with your infrastructure. By following these steps, you’ll have a fully functional Zabbix setup that provides real-time insights and proactive issue resolution. If you encounter any challenges, refer to the &lt;a href="https://www.zabbix.com/documentation" rel="noopener noreferrer"&gt;official Zabbix documentation&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>monitoring</category>
      <category>devops</category>
      <category>cloudsecurity</category>
      <category>infosec</category>
    </item>
    <item>
      <title>Deploying GCP Infrastructure Using Terraform Modules: A Step-by-Step Guide</title>
      <dc:creator>Moses Daniel</dc:creator>
      <pubDate>Fri, 20 Dec 2024 12:11:42 +0000</pubDate>
      <link>https://dev.to/moses_daniel_2cfa7c6753d0/deploying-gcp-infrastructure-using-terraform-modules-a-step-by-step-guide-365n</link>
      <guid>https://dev.to/moses_daniel_2cfa7c6753d0/deploying-gcp-infrastructure-using-terraform-modules-a-step-by-step-guide-365n</guid>
      <description>&lt;p&gt;Managing cloud resources manually can be tedious, error-prone, and time-consuming. Infrastructure-as-Code (IaC) tools like Terraform make it easier to define, provision, and manage cloud infrastructure. In this guide, we'll use Terraform to deploy a Virtual Private Cloud (VPC), a Subnet, a Firewall rule, and a Compute Instance on Google Cloud Platform (GCP).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;br&gt;
Before we start, ensure you have:&lt;/p&gt;

&lt;p&gt;Google Cloud Account with project setup.&lt;br&gt;
Terraform installed on your local machine. Download Terraform.&lt;br&gt;
GCP Service Account JSON Key with appropriate permissions (e.g., Owner or specific permissions for the resources).&lt;br&gt;
Google Cloud SDK (gcloud) installed for authentication.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Authenticate Terraform with GCP&lt;br&gt;
Download the Service Account JSON file from GCP.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Set the GOOGLE_APPLICATION_CREDENTIALS environment variable to the JSON file path:&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 2: Create the Terraform Configuration File&lt;br&gt;
Create a directory for your Terraform project:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8pxq6hn9bvriinowxrmf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8pxq6hn9bvriinowxrmf.png" alt="Image description" width="800" height="549"&gt;&lt;/a&gt;&lt;br&gt;
-Run the command "terraform init" to initialize the directory&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Create VPC Network Module&lt;br&gt;
Create a vpc tf file&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feuv8kl7jmxw0as3aog5i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feuv8kl7jmxw0as3aog5i.png" alt="Image description" width="800" height="445"&gt;&lt;/a&gt;&lt;br&gt;
-Run the command terraform validate to make sure every vpc network configuration is correct&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run the command "terraform plan"&lt;/li&gt;
&lt;li&gt;Run the command "terraform deploy --auto-approve"&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Step 4: Create the Subnet Module&lt;br&gt;
Create a subnet tf file:&lt;/strong&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Run the command "terraform deploy --auto-approve"&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Step 4: Create the Firewall Module&lt;br&gt;
Create a firewall tf file:&lt;/strong&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Run the command "terraform deploy --auto-approve"&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Step 4: Create the Compute Instance Module&lt;br&gt;
Create a compute tf file:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjiny66g3dv2tgvjifx2m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjiny66g3dv2tgvjifx2m.png" alt="Image description" width="800" height="558"&gt;&lt;/a&gt;&lt;br&gt;
-Run the command terraform validate to make sure every computer instance configuration is correct&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run the command "terraform plan"&lt;/li&gt;
&lt;li&gt;Run the command "terraform deploy --auto-approve"&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Step 5: Verify the Resources&lt;/strong&gt;&lt;br&gt;
Log in to the Google Cloud Console.&lt;br&gt;
Navigate to VPC networks, Compute Engine, and Firewall rules to confirm the resources are created.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Clean Up Resources&lt;/strong&gt;&lt;br&gt;
When you're done, destroy the resources to avoid unnecessary charges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run the command "terraform destroy --auto-approve&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Code Explanation&lt;/strong&gt;&lt;br&gt;
VPC: Creates an isolated network (google_compute_network) for your resources.&lt;br&gt;
Subnet: Reserves an IP range within the VPC using a CIDR block (google_compute_subnetwork).&lt;br&gt;
Firewall: Opens port 22 to allow SSH access (google_compute_firewall).&lt;br&gt;
Compute Instance: Deploys a virtual machine (google_compute_instance) with an external IP for access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Terraform?&lt;/strong&gt;&lt;br&gt;
Terraform is declarative, meaning you define what you want to achieve, and Terraform figures out how to make it happen. It supports multi-cloud environments and tracks changes with state files, making infrastructure management simple and efficient.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefits of Using Modules&lt;/strong&gt;&lt;br&gt;
Reusability: Write once and reuse across multiple projects.&lt;br&gt;
Clarity: Keep your root configuration clean and organized.&lt;br&gt;
Scalability: Manage complex deployments with modular components.&lt;/p&gt;

&lt;p&gt;This modular setup is production-ready and ensures scalability for future infrastructure growth. Let me know if you'd like help refining the documentation further! 🚀&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Securing a Web Application on Google Cloud Platform: Best Practices and Implementation</title>
      <dc:creator>Moses Daniel</dc:creator>
      <pubDate>Wed, 18 Dec 2024 10:45:44 +0000</pubDate>
      <link>https://dev.to/moses_daniel_2cfa7c6753d0/securing-a-web-application-on-google-cloud-platform-best-practices-and-implementation-532n</link>
      <guid>https://dev.to/moses_daniel_2cfa7c6753d0/securing-a-web-application-on-google-cloud-platform-best-practices-and-implementation-532n</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
Security is a critical aspect of any web application, especially in the cloud. In this post, I’ll walk you through how I secured a web application hosted on Google Cloud Platform (GCP). This project demonstrates the implementation of cloud-native security tools and practices to safeguard a web application against common threats while ensuring compliance with industry standards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project Overview&lt;/strong&gt;&lt;br&gt;
Objective: To secure a web application deployed on GCP by implementing best practices for data protection, network security, and access control.&lt;br&gt;
Key Features:&lt;br&gt;
Securing data in transit and at rest.&lt;br&gt;
Protecting the application from unauthorized access and attacks.&lt;br&gt;
Using GCP-native tools for monitoring, logging, and threat detection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Architecture&lt;br&gt;
Components:&lt;/strong&gt;&lt;br&gt;
Web Server: Hosted on Compute Engine (NGINX/Apache).&lt;br&gt;
Database: Cloud SQL (MySQL).&lt;br&gt;
Load Balancer: GCP HTTP(S) Load Balancer with SSL.&lt;br&gt;
Firewall Rules: Configured via GCP VPC.&lt;br&gt;
Monitoring: Cloud Monitoring and Cloud Logging.&lt;br&gt;
Threat Protection: Security Command Center&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step-by-Step Implementation&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;1. Deploying the Web Application on GCP&lt;/strong&gt;&lt;br&gt;
Before securing the application, I deployed it on GCP:&lt;/p&gt;

&lt;p&gt;Compute Engine: Deployed the web application on a virtual machine.&lt;br&gt;
Cloud SQL: Set up the MySQL database for application data.&lt;br&gt;
Configured an HTTP(S) Load Balancer to distribute traffic efficiently.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;2. Enforcing Secure Network Configurations&lt;/strong&gt;&lt;br&gt;
Firewall Rules:&lt;/p&gt;

&lt;p&gt;Allowed only HTTP/HTTPS traffic from specific IP ranges.&lt;br&gt;
Restricted SSH access to my IP address using ingress rules.&lt;br&gt;
Blocked all unused ports.&lt;br&gt;
Example rule:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft66jmpfck0pxfonq6uqw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft66jmpfck0pxfonq6uqw.png" alt="Image description" width="800" height="420"&gt;&lt;/a&gt;&lt;br&gt;
Private IPs for Database Services:&lt;/p&gt;

&lt;p&gt;Configured the database to use private IPs to prevent public exposure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Encrypting Data&lt;/strong&gt;&lt;br&gt;
Data in Transit:&lt;/p&gt;

&lt;p&gt;Secured communication between clients and the server using SSL/TLS.&lt;br&gt;
Integrated an SSL certificate on the HTTP(S) Load Balancer.&lt;br&gt;
Redirected all HTTP traffic to HTTPS.&lt;br&gt;
Steps:&lt;/p&gt;

&lt;p&gt;Provisioned a free SSL certificate via GCP's managed certificates.&lt;br&gt;
Configured SSL policies to enforce modern TLS standards (e.g., TLS 1.3).&lt;br&gt;
Data at Rest:&lt;/p&gt;

&lt;p&gt;Enabled encryption for Cloud SQL and Cloud Storage buckets.&lt;br&gt;
Used customer-managed encryption keys (CMEK) for added control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Implementing Identity and Access Management (IAM)&lt;/strong&gt;&lt;br&gt;
Principle of Least Privilege:&lt;/p&gt;

&lt;p&gt;Restricted IAM roles to the minimum required permissions.&lt;br&gt;
Used predefined roles for Compute Engine, Cloud SQL, and Storage instead of broad Owner/Editor roles.&lt;br&gt;
Service Accounts:&lt;/p&gt;

&lt;p&gt;Assigned dedicated service accounts to each GCP resource.&lt;br&gt;
Configured granular permissions for service accounts.&lt;br&gt;
Audit Logging:&lt;/p&gt;

&lt;p&gt;Enabled Cloud Audit Logs to track all changes to GCP resources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Protecting Against Threats&lt;/strong&gt;&lt;br&gt;
Google Cloud Armor:&lt;/p&gt;

&lt;p&gt;Configured Cloud Armor to protect against DDoS attacks and common web vulnerabilities (e.g., SQL injection, XSS).&lt;br&gt;
Applied pre-configured WAF (Web Application Firewall) rules.&lt;br&gt;
reCAPTCHA Enterprise:&lt;/p&gt;

&lt;p&gt;Integrated reCAPTCHA to prevent bot traffic and brute-force login attempts.&lt;br&gt;
Firewall for Egress Traffic:&lt;/p&gt;

&lt;p&gt;Monitored and restricted outgoing traffic to prevent data exfiltration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Monitoring and Logging&lt;/strong&gt;&lt;br&gt;
Cloud Monitoring:&lt;/p&gt;

&lt;p&gt;Set up dashboards to monitor CPU usage, memory, and network traffic.&lt;br&gt;
Configured alerts for unusual activity.&lt;br&gt;
Cloud Logging:&lt;/p&gt;

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

&lt;p&gt;Collected and analyzed logs for HTTP requests, errors, and database queries.&lt;br&gt;
Integrated with Cloud Logging for real-time insights.&lt;br&gt;
Security Command Center:&lt;/p&gt;

&lt;p&gt;Enabled GCP’s Security Command Center for threat detection and vulnerability scanning.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;7. Regular Security Audits and Patching&lt;/strong&gt;&lt;br&gt;
Scheduled periodic vulnerability assessments using third-party tools and GCP Security Scanner.&lt;/p&gt;

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

&lt;p&gt;Configured automatic updates for the operating system and application dependencies.&lt;br&gt;
Regularly patched the database and web server to address known vulnerabilities.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Security Assessment and Testing&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Penetration Testing&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Nmap Scanning: Use &lt;code&gt;Nmap&lt;/code&gt; to verify open ports and firewall rules.&lt;/li&gt;
&lt;li&gt;Vulnerability Testing:

&lt;ul&gt;
&lt;li&gt;Run Nikto against the webserver to check for outdated software and web vulnerabilities.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

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

&lt;p&gt;&lt;strong&gt;Results&lt;/strong&gt;&lt;br&gt;
The web application was fully secured against common vulnerabilities such as SQL injection, XSS, and DDoS attacks.&lt;br&gt;
All data was encrypted at rest and in transit, ensuring compliance with security standards.&lt;br&gt;
Real-time monitoring and alerting helped detect and mitigate threats promptly.&lt;br&gt;
The security measures improved user trust and application performance.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Lessons Learned&lt;/strong&gt;&lt;br&gt;
Security is a Continuous Process: Threats evolve, so regular updates and monitoring are essential.&lt;br&gt;
Leverage Cloud-Native Tools: GCP’s built-in tools like Cloud Armor and IAM made securing the application much easier.&lt;br&gt;
Document Everything: Clear documentation simplifies audits and troubleshooting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
Securing a web application on Google Cloud Platform requires a combination of cloud-native tools, best practices, and ongoing vigilance. By implementing the steps outlined in this guide, I ensured the application was robust against threats and compliant with modern security standards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Call to Action&lt;/strong&gt;&lt;br&gt;
Have you secured an application on GCP or any other cloud platform? Share your experiences and tips in the comments!&lt;/p&gt;

</description>
      <category>googlecloud</category>
      <category>security</category>
      <category>webapp</category>
      <category>hackathon</category>
    </item>
    <item>
      <title>Migrating a Web Application from AWS to GCP: A Step-by-Step Guide</title>
      <dc:creator>Moses Daniel</dc:creator>
      <pubDate>Wed, 18 Dec 2024 09:01:24 +0000</pubDate>
      <link>https://dev.to/moses_daniel_2cfa7c6753d0/migrating-a-web-application-from-aws-to-gcp-a-step-by-step-guide-5g25</link>
      <guid>https://dev.to/moses_daniel_2cfa7c6753d0/migrating-a-web-application-from-aws-to-gcp-a-step-by-step-guide-5g25</guid>
      <description>&lt;p&gt;*&lt;em&gt;Introduction *&lt;/em&gt;&lt;br&gt;
Migrating web applications between cloud platforms can be challenging but rewarding. In this post, I’ll share how I successfully migrated a web application from AWS to Google Cloud Platform (GCP). I’ll cover everything from planning, setting up infrastructure, migrating static content, databases, and DNS, to ensuring functionality and performance optimization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project Overview&lt;/strong&gt;&lt;br&gt;
Objective: To migrate a production-ready web application from AWS to GCP.&lt;br&gt;
Motivation: The migration aimed to leverage GCP’s cost-efficiency, scalability, and integration capabilities.&lt;br&gt;
Challenges:&lt;br&gt;
Ensuring zero downtime during the migration.&lt;br&gt;
Maintaining data integrity and performance.&lt;br&gt;
Updating DNS configurations without affecting users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Architecture Before and After&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;AWS Setup:&lt;/strong&gt;&lt;br&gt;
Web Server: EC2 instance running Apache.&lt;br&gt;
Database: Amazon RDS (MySQL).&lt;br&gt;
Static Files: S3 bucket.&lt;br&gt;
DNS: Amazon Route 53.&lt;br&gt;
&lt;strong&gt;GCP Setup:&lt;/strong&gt;&lt;br&gt;
Web Server: Compute Engine with NGINX.&lt;br&gt;
Database: Cloud SQL (MySQL).&lt;br&gt;
Static Files: Google Cloud Storage (GCS).&lt;br&gt;
DNS: Google Cloud DNS.&lt;/p&gt;

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

&lt;p&gt;**Step-by-Step Migration Process&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Planning the Migration**
Before migrating, I assessed the existing AWS infrastructure and mapped equivalent GCP services:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;EC2 (AWS) → Compute Engine (GCP)&lt;br&gt;
RDS (AWS) → Cloud SQL (GCP)&lt;br&gt;
S3 (AWS) → Cloud Storage (GCP)&lt;br&gt;
Route 53 (AWS) → Cloud DNS (GCP)&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;2. Setting Up GCP Infrastructure&lt;br&gt;
Compute Engine:&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Created a Compute Engine VM instance with the necessary configurations (vCPU, memory, storage).&lt;br&gt;
Installed NGINX and configured it as the web server.&lt;br&gt;
Cloud SQL:&lt;/p&gt;

&lt;p&gt;Set up a MySQL instance on Cloud SQL with the same schema as the original RDS database.&lt;br&gt;
Cloud Storage:&lt;/p&gt;

&lt;p&gt;Created a bucket for static files and set the appropriate permissions.&lt;br&gt;
DNS Configuration:&lt;/p&gt;

&lt;p&gt;Prepared Cloud DNS for domain management post-migration.&lt;/p&gt;

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

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

&lt;p&gt;Migrating the Web Server&lt;br&gt;
Task: Recreate the EC2 instance on GCP using Compute Engine.&lt;br&gt;
Steps:&lt;br&gt;
Configured a Compute Engine instance to run NGINX.&lt;br&gt;
Transferred the application code to the instance using SCP:&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Testing and Validation&lt;/strong&gt;&lt;br&gt;
Performed rigorous testing to ensure the application was working as expected:&lt;br&gt;
Load Testing: Verified the application’s performance on GCP.&lt;br&gt;
Functionality Testing: Ensured all features (login, file uploads, database queries) worked.&lt;br&gt;
DNS Propagation Check: Used tools like dig and whatsmydns.net to confirm DNS changes.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Post-Migration Optimization&lt;br&gt;
Enabled GCP-specific features for better performance:&lt;/strong&gt;&lt;br&gt;
Cloud CDN for caching and reducing latency.&lt;br&gt;
Cloud Monitoring for performance insights.&lt;br&gt;
IAM Policies for secure access control.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Lessons Learned&lt;/strong&gt;&lt;br&gt;
Thorough Planning is Key: Mapping AWS services to GCP equivalents upfront saved time.&lt;br&gt;
Data Integrity: Regular database backups ensured no data loss.&lt;br&gt;
Testing: Early testing avoided surprises during the migration.&lt;/p&gt;

&lt;p&gt;Conclusion&lt;br&gt;
Migrating from AWS to GCP is achievable with careful planning and execution. This project taught me the importance of aligning cloud services with business goals while ensuring minimal disruption to users.&lt;/p&gt;

&lt;p&gt;Have you undertaken a cloud migration project? Share your experiences in the comments!&lt;/p&gt;

</description>
      <category>googlecloud</category>
      <category>aws</category>
      <category>migration</category>
      <category>webapp</category>
    </item>
  </channel>
</rss>
