<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[George Palangattil's blog]]></title><description><![CDATA[George Palangattil's blog]]></description><link>https://blog.gepal.cz</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 03:33:51 GMT</lastBuildDate><atom:link href="https://blog.gepal.cz/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Data Encryption with Amazon S3]]></title><description><![CDATA[Introduction
Data encryption is a critical component of cloud security, especially when dealing with sensitive workloads in regulated environments. Amazon S3 provides multiple encryption mechanisms that cater to different compliance and operational n...]]></description><link>https://blog.gepal.cz/data-encryption-with-amazon-s3</link><guid isPermaLink="true">https://blog.gepal.cz/data-encryption-with-amazon-s3</guid><category><![CDATA[S3 data encryption]]></category><category><![CDATA[Amazon S3]]></category><category><![CDATA[data encryption]]></category><category><![CDATA[aws s3 encryption]]></category><dc:creator><![CDATA[George Palangattil]]></dc:creator><pubDate>Sat, 10 Jan 2026 11:14:01 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1768041429822/721252f7-bad3-4fdf-8062-9746f934e982.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction"><strong>Introduction</strong></h2>
<p>Data encryption is a critical component of cloud security, especially when dealing with sensitive workloads in regulated environments. Amazon S3 provides multiple encryption mechanisms that cater to different compliance and operational needs. This guide goes beyond the basics, diving into advanced configurations, key management strategies, and best practices for enterprise-grade security.</p>
<h2 id="heading-why-encrypt-data-in-s3"><strong>Why Encrypt Data in S3?</strong></h2>
<p>Encryption ensures that even if data is accessed without authorization, it remains unreadable. For enterprises, encryption is not optional—it’s a compliance mandate. AWS offers encryption at rest and in transit, but understanding the nuances of each method is key to building a secure architecture.<br /><strong>Advanced Consideration:</strong> Evaluate encryption requirements based on data classification, regulatory frameworks (e.g., GDPR, HIPAA), and internal security policies. For multi-account setups, enforce encryption through <strong>Service Control Policies (SCPs)</strong> and <strong>AWS Config rules</strong>.</p>
<h2 id="heading-encryption-options-in-amazon-s3"><strong>Encryption Options in Amazon S3</strong></h2>
<p>AWS S3 supports two primary encryption paradigms: <strong>Server-Side Encryption (SSE)</strong> and <strong>Client-Side Encryption</strong>. Each has advanced features that can be leveraged for enterprise use cases.</p>
<h3 id="heading-1-server-side-encryption-sse"><strong>1. Server-Side Encryption (SSE)</strong></h3>
<p>Server-side encryption with Amazon S3 is by far the simplest option and requires very little effort to enable. All you need to do is set the server-side encryption flag in the object metadata when uploading your data. Once your data reaches S3, it is encrypted automatically and stored securely. When you retrieve the data, Amazon S3 decrypts it seamlessly as it streams back to your application, so the process is completely transparent to you.</p>
<p>The key advantage of server-side encryption is that AWS manages the encryption keys on your behalf, making it incredibly easy to adopt without changing your application logic. Your data remains encrypted at rest in S3, and you don’t need to worry about key storage or rotation. This approach is ideal for organisations looking for a quick, compliant solution without the complexity of managing encryption keys themselves. AWS encrypts data before writing it to disk.</p>
<ul>
<li><p><strong>SSE-S3 (AES-256):</strong> Simplest option; AWS manages keys. Ideal for workloads where compliance does not require customer-managed keys.</p>
</li>
<li><p><strong>SSE-KMS:</strong> Integrates with AWS Key Management Service for granular control, key rotation, and audit trails. Supports <strong>encryption context</strong> for additional security metadata.</p>
</li>
<li><p><strong>SSE-C:</strong> Customer-provided keys; AWS never stores your key. Requires strict operational discipline for key lifecycle management.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768042171522/7018f11a-a28c-4d3c-a2a7-f0da896d0cd5.png" alt class="image--center mx-auto" /></p>
<p><strong>Advanced Option:</strong> Use <strong>bucket policies</strong> to enforce SSE-KMS and deny uploads without encryption headers. Combine with <strong>KMS key policies</strong> for least privilege access.</p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"Version"</span>: <span class="hljs-string">"2012-10-17"</span>,
  <span class="hljs-attr">"Statement"</span>: [
    {
      <span class="hljs-attr">"Sid"</span>: <span class="hljs-string">"DenyIncorrectEncryption"</span>,
      <span class="hljs-attr">"Effect"</span>: <span class="hljs-string">"Deny"</span>,
      <span class="hljs-attr">"Principal"</span>: <span class="hljs-string">"*"</span>,
      <span class="hljs-attr">"Action"</span>: <span class="hljs-string">"s3:PutObject"</span>,
      <span class="hljs-attr">"Resource"</span>: <span class="hljs-string">"arn:awsN:s3:::bucket-br/*"</span>,
      <span class="hljs-attr">"Condition"</span>: {
        <span class="hljs-attr">"StringNotEquals"</span>: {
          <span class="hljs-attr">"s3:x-amz-server-side-encryption"</span>: <span class="hljs-string">"aws:kms"</span>
        }
      }
    },
    {
      <span class="hljs-attr">"Sid"</span>: <span class="hljs-string">"DenyNonKMSKey"</span>,
      <span class="hljs-attr">"Effect"</span>: <span class="hljs-string">"Deny"</span>,
      <span class="hljs-attr">"Principal"</span>: <span class="hljs-string">"*"</span>,
      <span class="hljs-attr">"Action"</span>: <span class="hljs-string">"s3:PutObject"</span>,
      <span class="hljs-attr">"Resource"</span>: <span class="hljs-string">"arn:awsN:s3:::bucket-br/*"</span>,
      <span class="hljs-attr">"Condition"</span>: {
        <span class="hljs-attr">"Null"</span>: {
          <span class="hljs-attr">"s3:x-amz-server-side-encryption-aws-kms-key-id"</span>: <span class="hljs-string">"true"</span>
        }
      }
    }
  ]
}
</code></pre>
<h3 id="heading-2-client-side-encryption"><strong>2. Client-Side Encryption</strong></h3>
<p>Client-side encryption is an alternative approach for securing your sensitive data before it ever leaves your environment/application. Unlike server-side encryption, this method ensures that your data remains encrypted throughout its journey, giving you complete control over the encryption keys. By using the AWS SDK for Java, you can implement client-side encryption with the <strong>AmazonS3EncryptionClient</strong>, which replaces the standard <strong>AmazonS3Client</strong>. The transition is straightforward because the encryption client shares the same interface as the standard client, meaning existing code requires minimal changes. Once configured, the client automatically encrypts data as it streams to Amazon S3 and decrypts it when retrieved, ensuring seamless integration with your application.</p>
<p>The key distinction between server-side and client-side encryption lies in key management. With client-side encryption, you are responsible for providing <strong>EncryptionMaterials</strong>, which dictate how the encryption process operates. This added responsibility offers stronger security because AWS never sees your unencrypted data or your keys. However, it also means you must implement robust key management practices, including secure storage, rotation, and access control, to maintain compliance and prevent vulnerabilities.</p>
<ul>
<li><p><strong>AWS SDKs:</strong> Provide built-in support for client-side encryption using envelope encryption.</p>
</li>
<li><p><strong>Custom Implementations:</strong> Allows integration with on-prem HSMs or external key managers for hybrid architectures.</p>
</li>
</ul>
<p><strong>Advanced Option:</strong> For high-security environments, integrate client-side encryption with <strong>AWS Encryption SDK</strong> and implement <strong>data key caching</strong> for performance optimization.</p>
<h2 id="heading-how-to-enable-encryption"><strong>How to Enable Encryption</strong></h2>
<h3 id="heading-a-sse-s3"><strong>a. SSE-S3</strong></h3>
<p>Enable default encryption in the bucket settings. AWS applies AES-256 automatically. Use <strong>S3 Object Lock</strong> with SSE-S3 for immutable storage in compliance scenarios.</p>
<h3 id="heading-b-sse-kms"><strong>b. SSE-KMS</strong></h3>
<ul>
<li><p>Create a <strong>Customer Managed Key (CMK)</strong> in AWS KMS.</p>
</li>
<li><p>Configure IAM and bucket policies for controlled access.</p>
</li>
<li><p>Apply encryption during upload using CLI or SDK:</p>
</li>
</ul>
<pre><code class="lang-json">aws s3 cp file.txt s3:<span class="hljs-comment">//bucket-name/ --sse aws:kms --sse-kms-key-id &lt;key-id&gt;</span>
</code></pre>
<p>Enable <strong>automatic key rotation</strong> and monitor key usage with <strong>CloudTrail</strong> for compliance audits.</p>
<h3 id="heading-c-sse-c"><strong>c. SSE-C</strong></h3>
<p>Provide your own key in the request header:</p>
<pre><code class="lang-json">aws s3 cp file.txt s3:<span class="hljs-comment">//bucket-name/ --sse-c --sse-c-key &lt;base64-encoded-key&gt;</span>
</code></pre>
<p>Implement a secure key distribution mechanism and audit access logs regularly.</p>
<h2 id="heading-best-practices"><strong>Best Practices</strong></h2>
<ul>
<li><p>Enforce encryption using <strong>bucket policies</strong> and <strong>AWS Config rules</strong>.</p>
</li>
<li><p>Use <strong>SSE-KMS</strong> for workloads requiring compliance and auditability.</p>
</li>
<li><p>Rotate keys periodically and enable <strong>multi-region keys</strong> for disaster recovery.</p>
</li>
<li><p>Monitor encryption compliance with <strong>AWS Security Hub</strong> and <strong>CloudTrail</strong>.</p>
</li>
<li><p>For hybrid environments, integrate with <strong>AWS PrivateLink</strong> for secure KMS access</p>
</li>
</ul>
<h2 id="heading-conclusion"><strong>Conclusion</strong></h2>
<p>Encryption in AWS S3 is more than a checkbox—it’s a strategic decision that impacts compliance, security posture, and operational complexity. By leveraging advanced features like SSE-KMS, encryption context, and client-side encryption, you can build a robust, enterprise-grade security model for your cloud workloads.</p>
<h3 id="heading-reference">Reference:</h3>
<ol>
<li><p><a target="_blank" href="https://aws.amazon.com/id/video/watch/07d5a9abf3d/">Securing Your Data in the Cloud</a></p>
</li>
<li><p><a target="_blank" href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html">Protecting data with encryption</a></p>
</li>
<li><p><a target="_blank" href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html">Protecting data with server-side encryption</a></p>
</li>
<li><p><a target="_blank" href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html">Protecting data by using client-side encryption</a></p>
</li>
</ol>
]]></content:encoded></item><item><title><![CDATA[Global Data Durability: Implementing Amazon S3 Cross-Region Replication]]></title><description><![CDATA[Introduction
Amazon S3 is a highly durable, scalable object storage service that provides 99.999999999% durability by storing data across multiple Availability Zones. However, certain compliance, latency, and disaster recovery requirements demand sto...]]></description><link>https://blog.gepal.cz/global-data-durability-implementing-amazon-s3-cross-region-replication</link><guid isPermaLink="true">https://blog.gepal.cz/global-data-durability-implementing-amazon-s3-cross-region-replication</guid><category><![CDATA[#s3crossreplication]]></category><category><![CDATA[s3 replication]]></category><category><![CDATA[S3 object copy from cross account]]></category><dc:creator><![CDATA[George Palangattil]]></dc:creator><pubDate>Fri, 09 Jan 2026 18:53:58 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1767950364383/f1819f84-f24d-46ee-8b92-ba4949d49cc6.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction"><strong>Introduction</strong></h2>
<p>Amazon S3 is a highly durable, scalable object storage service that provides 99.999999999% durability by storing data across multiple Availability Zones. However, certain compliance, latency, and disaster recovery requirements demand storing data across <strong>different AWS Regions</strong>. This is where <strong>Cross-Region Replication (CRR)</strong> comes in.</p>
<p>CRR enables <strong>automatic, asynchronous replication</strong> of objects from one S3 bucket to another in a different AWS Region. It ensures business continuity, improves performance for global users, and helps meet regulatory requirements.</p>
<h2 id="heading-why-use-cross-region-replication"><strong>Why Use Cross-Region Replication?</strong></h2>
<p>According to AWS best practices and industry use cases:</p>
<ul>
<li><p><strong>Compliance:</strong> Some regulations require data copies in geographically distant regions.</p>
</li>
<li><p><strong>Disaster Recovery:</strong> Replicating data across regions mitigates risks from regional outages.</p>
</li>
<li><p><strong>Latency Optimization:</strong> Serve global customers faster by storing data closer to them.</p>
</li>
<li><p><strong>Ownership Override:</strong> CRR allows changing object ownership in the destination bucket for access control.</p>
</li>
</ul>
<h2 id="heading-how-crr-works"><strong>How CRR Works</strong></h2>
<p>CRR uses <strong>live replication</strong> for new objects and <strong>S3 Batch Replication</strong> for existing objects. Key requirements:</p>
<ul>
<li><p>Both buckets must have <strong>versioning enabled</strong>.</p>
</li>
<li><p>An <strong>IAM role</strong> must grant permissions for replication.</p>
</li>
<li><p>Objects uploaded before enabling replication are not automatically replicated.</p>
</li>
</ul>
<h3 id="heading-replication-types"><strong>Replication Types:</strong></h3>
<ul>
<li><p><strong>Same-Region Replication (SRR):</strong> For compliance within a region.</p>
</li>
<li><p><strong>Cross-Region Replication (CRR):</strong> For multi-region backups and disaster recovery.</p>
</li>
</ul>
<p><strong>Advanced Option:</strong> Enable <strong>Replication Time Control (RTC)</strong> for predictable replication within 15 minutes (additional cost).</p>
<h2 id="heading-step-by-step-configuration"><strong>Step-by-Step Configuration</strong></h2>
<h3 id="heading-1-create-buckets-and-enable-versioning">1. <strong>Create Buckets and Enable Versioning</strong></h3>
<ul>
<li><p>Create <strong>source bucket</strong> in primary region.</p>
</li>
<li><p>Enable <strong>versioning</strong> via <strong>Properties → Bucket Versioning</strong>.</p>
</li>
<li><p>Create <strong>destination bucket</strong> in secondary region with versioning enabled.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767980238623/a37c2451-46bc-41f4-80cc-ef79057fe411.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767980258400/9fb3e82d-e3cf-4c6f-bdd1-b74638935a33.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767980353620/88b0efd7-acf0-4cc4-8eb5-6a773f8ad02a.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767980374203/9dc3c68f-6c1d-4e34-a387-fba34c7e9179.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767981430052/4ce7103a-8395-442e-a93b-56d1cb83d8da.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-2-configure-replication-rule-source-bucket"><strong>2. Configure Replication Rule (source bucket)</strong></h3>
<ul>
<li><p>Navigate to <strong>Management → Replication rules → Create replication rule</strong>.</p>
</li>
<li><p>Scope: <strong>Entire bucket</strong> or filtered by <strong>prefix/tags</strong>.</p>
</li>
<li><p>Destination: Select destination bucket.</p>
</li>
<li><p>IAM Role: Assign or create a role with permissions:</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767981518070/d5f275a1-e190-433f-a6d0-a8aea9cb5c2b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767981933251/b65ccbdf-465a-461b-b452-d043bb418302.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767982008658/fca3994e-4804-48ab-ad80-701d82fb025a.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767982686966/335f4aff-316e-4310-8e0f-ae2e02ac1bf2.png" alt class="image--center mx-auto" /></p>
<p><strong>IAM Replication Policy</strong></p>
<pre><code class="lang-json">{
    <span class="hljs-attr">"Version"</span>: <span class="hljs-string">"2012-10-17"</span>,
    <span class="hljs-attr">"Statement"</span>: [
        {
            <span class="hljs-attr">"Effect"</span>: <span class="hljs-string">"Allow"</span>,
            <span class="hljs-attr">"Action"</span>: [
                <span class="hljs-string">"s3:GetReplicationConfiguration"</span>,
                <span class="hljs-string">"s3:ListBucket"</span>
            ],
            <span class="hljs-attr">"Resource"</span>: [
                <span class="hljs-string">"arn:aws:s3:::source-br"</span>
            ]
        },
        {
            <span class="hljs-attr">"Effect"</span>: <span class="hljs-string">"Allow"</span>,
            <span class="hljs-attr">"Action"</span>: [
                <span class="hljs-string">"s3:GetObjectVersionForReplication"</span>,
                <span class="hljs-string">"s3:GetObjectVersionAcl"</span>,
                <span class="hljs-string">"s3:GetObjectVersionTagging"</span>
            ],
            <span class="hljs-attr">"Resource"</span>: [
                <span class="hljs-string">"arn:aws:s3:::source-br/*"</span>
            ]
        },
        {
            <span class="hljs-attr">"Effect"</span>: <span class="hljs-string">"Allow"</span>,
            <span class="hljs-attr">"Action"</span>: [
                <span class="hljs-string">"s3:ReplicateObject"</span>,
                <span class="hljs-string">"s3:ReplicateDelete"</span>,
                <span class="hljs-string">"s3:ReplicateTags"</span>
            ],
            <span class="hljs-attr">"Resource"</span>: <span class="hljs-string">"arn:aws:s3:::target-br/*"</span>
        }
    ]
}
</code></pre>
<p>There is an advance option for S3 objects to be replicated within 15 minutes, you’ll need to tick the “Replication Time Control (RTC)” box. Please note that this feature incurs additional charges.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767983081290/7f937ae2-8ab8-4d48-8d44-08a17190af57.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767983157985/8fb885e5-e2cd-4a7f-8505-24bce7c423ee.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767983263567/531b2a65-44c6-4454-8487-71ed2447ee00.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-3-test-replication"><strong>3. Test Replication</strong></h3>
<ul>
<li><p>Upload a new file to the source bucket.</p>
</li>
<li><p>Verify replication in the destination bucket.</p>
</li>
<li><p>Note: Existing objects require <strong>S3 Batch Replication</strong>.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767983734669/abe5c451-75e5-4d50-8db3-38c8e65e7b36.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767983830092/db875e02-e14c-4ceb-9c86-24dda6468f60.png" alt class="image--center mx-auto" /></p>
<p>Now validate if the uploaded files are replicated to our target bucket.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767983859718/67248084-5bdd-4ae9-b8e6-074c2c9f04ab.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-advanced-scenarios"><strong>Advanced Scenarios</strong></h2>
<h3 id="heading-encrypted-objects"><strong>Encrypted Objects</strong></h3>
<ul>
<li><p>By default, KMS-encrypted objects are not replicated.</p>
</li>
<li><p>Edit replication rule → Enable <strong>Replicate objects encrypted with AWS KMS</strong>.</p>
</li>
<li><p>Specify destination KMS key.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767984288819/c06400e2-910d-4f5a-bb57-f439b780079d.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-folder-based-replication"><strong>Folder-Based Replication</strong></h3>
<ul>
<li>Use <strong>prefix filter</strong> (e.g., crr-test/) to replicate only specific folders.</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767984436680/cdeb8cb1-1c01-40ef-af81-fd5435150f7a.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-tag-based-replication"><strong>Tag-Based Replication</strong></h3>
<ul>
<li><p>Create rule with <strong>Tag filter</strong> (e.g., Key=replicate, Value=yes).</p>
</li>
<li><p>Only tagged objects replicate.</p>
</li>
</ul>
<h3 id="heading-delete-marker-replication"><strong>Delete Marker Replication</strong></h3>
<ul>
<li><p>By default, deletions are not replicated.</p>
</li>
<li><p>Enable <strong>Delete marker replication</strong> if required.</p>
</li>
</ul>
<h2 id="heading-best-practices-amp-considerations"><strong>Best Practices &amp; Considerations</strong></h2>
<ul>
<li><p><strong>Cost:</strong> Replication incurs storage and request charges in both regions.</p>
</li>
<li><p><strong>Monitoring:</strong> Use <strong>Amazon S3 Replication metrics</strong>, <strong>CloudWatch</strong>, and <strong>EventBridge</strong> for alerts.</p>
</li>
<li><p><strong>Multi-Region Access Points:</strong> Combine CRR with Multi-Region Access Points for global applications.</p>
</li>
<li><p><strong>Security:</strong> Apply least-privilege IAM roles and enable encryption for compliance.</p>
</li>
</ul>
<h2 id="heading-conclusion"><strong>Conclusion</strong></h2>
<p>Amazon S3 CRR is a powerful feature for compliance, disaster recovery, and performance optimization. By leveraging versioning, replication rules, and advanced filters, you can design robust multi-region backup strategies.</p>
<h3 id="heading-reference">Reference</h3>
<ol>
<li><p><a target="_blank" href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication.html">Replicating objects within and across Regions</a></p>
</li>
<li><p><a target="_blank" href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/setting-repl-config-perm-overview.html">Setting up permissions for live replication</a></p>
</li>
<li><p><a target="_blank" href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-batch-replication-batch.html">Replicating existing objects with Batch Replication</a></p>
</li>
<li><p><a target="_blank" href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/repl-metrics.html">Using S3 Replication metrics</a></p>
</li>
</ol>
]]></content:encoded></item><item><title><![CDATA[Advanced Monitoring of AWS Backup Jobs with Notifications]]></title><description><![CDATA[Introduction
In modern cloud architectures, backups are not just a compliance checkbox, they are a critical component of resilience and disaster recovery strategies. AWS Backup provides a centralised service to automate backups across AWS services su...]]></description><link>https://blog.gepal.cz/advanced-monitoring-of-aws-backup-jobs-with-notifications</link><guid isPermaLink="true">https://blog.gepal.cz/advanced-monitoring-of-aws-backup-jobs-with-notifications</guid><category><![CDATA[monitoring]]></category><category><![CDATA[AWS]]></category><category><![CDATA[aws backup]]></category><category><![CDATA[#AWSMonitoring]]></category><category><![CDATA[AWS Backup Service]]></category><category><![CDATA[sns]]></category><dc:creator><![CDATA[George Palangattil]]></dc:creator><pubDate>Wed, 07 Jan 2026 18:47:30 GMT</pubDate><content:encoded><![CDATA[<h2 id="heading-introduction"><strong>Introduction</strong></h2>
<p>In modern cloud architectures, backups are not just a compliance checkbox, they are a critical component of resilience and disaster recovery strategies. AWS Backup provides a centralised service to automate backups across AWS services such as Amazon EC2, Amazon RDS, Amazon EFS, and DynamoDB. However, configuring robust monitoring and alerting mechanisms is essential to ensure that backup jobs complete successfully and failures are addressed promptly.</p>
<ul>
<li><p>Configuring notifications for AWS Backup jobs using Amazon SNS.</p>
</li>
<li><p>Leveraging Amazon CloudWatch for advanced monitoring.</p>
</li>
<li><p>Implementing automation for remediation.</p>
</li>
<li><p>Applying security and operational best practices.</p>
</li>
</ul>
<h2 id="heading-why-monitoring-matters"><strong>Why Monitoring Matters</strong></h2>
<p>Backup failures can lead to data loss, compliance breaches, and operational downtime. Monitoring AWS Backup jobs ensures:</p>
<ul>
<li><p><strong>Visibility:</strong> Real-time awareness of backup job states.</p>
</li>
<li><p><strong>Compliance:</strong> Meeting RPO and RTO objectives.</p>
</li>
<li><p><strong>Automation:</strong> Triggering workflows for remediation without manual intervention.</p>
</li>
</ul>
<p>AWS Backup integrates with <strong>Amazon SNS</strong> for notifications and <strong>Amazon CloudWatch</strong> for metrics and events, enabling a layered monitoring approach.</p>
<h2 id="heading-step-1-create-and-secure-an-sns-topic"><strong>Step 1: Create and Secure an SNS Topic</strong></h2>
<p>AWS Backup publishes job status changes to SNS topics. To configure:</p>
<h3 id="heading-1-create-sns-topic">1. <strong>Create SNS Topic</strong></h3>
<ul>
<li><p>Navigate to <strong>Amazon SNS → Topics → Create topic</strong>.</p>
</li>
<li><p>Select <strong>Standard</strong> type for broad compatibility.</p>
</li>
<li><p>Name the topic, e.g., AWSBackupStatusNotifications.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767866738412/dbdd1d5c-2ac6-4b86-812b-132e8fe4c982.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-2-configure-access-policy"><strong>2. Configure Access Policy</strong></h3>
<ul>
<li><p>Ensure the topic policy allows awsbackup.amazonaws.com to publish messages.</p>
</li>
<li><p>Example policy snippet:</p>
</li>
</ul>
<pre><code class="lang-json">{
  <span class="hljs-attr">"Version"</span>: <span class="hljs-string">"2012-10-17"</span>,
  <span class="hljs-attr">"Statement"</span>: [
    {
      <span class="hljs-attr">"Effect"</span>: <span class="hljs-string">"Allow"</span>,
      <span class="hljs-attr">"Principal"</span>: {
        <span class="hljs-attr">"Service"</span>: <span class="hljs-string">"awsbackup.amazonaws.com"</span>
      },
      <span class="hljs-attr">"Action"</span>: <span class="hljs-string">"SNS:Publish"</span>,
      <span class="hljs-attr">"Resource"</span>: <span class="hljs-string">"arn:aws:sns:region:account-id:AWSBackupStatusNotifications"</span>
    }
  ]
}
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767874958892/1aae6a7f-ebcb-405a-aefe-ef2c3fd1b0a0.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-3-add-subscriptions"><strong>3. Add Subscriptions</strong></h3>
<ul>
<li><p>Email, SMS, or Lambda for automation.</p>
</li>
<li><p>Confirm email subscriptions via the verification link.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767879861426/be6b6058-c2bb-49ec-a338-b8490163ead8.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-step-2-configure-aws-backup-notifications-via-cliapi">Step 2: Configure AWS Backup Notifications (via CLI/API)</h2>
<p>Because backup vault notifications are <strong>not configurable in the AWS Backup console</strong>, you must use the AWS CLI or SDK to authorise which <strong>AWS Backup events</strong> are published to an <strong>Amazon SNS</strong> topic. First, ensure your SNS topic policy permits <code>awsbackup.amazonaws.com</code> to publish. Then run the <code>put-backup-vault-notifications</code> command to subscribe a specific backup vault (e.g., demo_backup) to the chosen SNS topic and declare the events you want to receive—such as <code>RESTORE_JOB_COMPLETED</code> and <code>BACKUP_JOB_COMPLETED</code>.</p>
<pre><code class="lang-json">
aws backup put-backup-vault-notifications \
  --endpoint-url https:<span class="hljs-comment">//backup.eu-central-1.amazonaws.com \</span>
  --sns-topic-arn arn:aws:sns:eu-central<span class="hljs-number">-1</span>:<span class="hljs-number">000000000001</span>:AWSBackupStatusNotifications \
  --backup-vault-name demo_backup \
  --backup-vault-events RESTORE_JOB_COMPLETED BACKUP_JOB_COMPLETED
</code></pre>
<p>You can verify the configuration using <code>get-backup-vault-notifications</code>, which returns the currently associated SNS topic and the enumerated event list for the vault.</p>
<pre><code class="lang-json">aws backup get-backup-vault-notifications \
--backup-vault-name demo_backup
</code></pre>
<h2 id="heading-step-3-integrate-aws-backup-with-cloudwatch-for-advanced-monitoring"><strong>Step 3: Integrate AWS Backup with CloudWatch for Advanced Monitoring</strong></h2>
<p>AWS Backup automatically publishes metrics and events to <strong>Amazon CloudWatch</strong>, enabling you to monitor backup activity and create automated responses. This integration is crucial for building a proactive monitoring framework that goes beyond basic notifications.</p>
<h3 id="heading-key-components-of-integration"><strong>Key Components of Integration</strong></h3>
<ol>
<li><p><strong>CloudWatch Metrics</strong></p>
<ul>
<li><p>AWS Backup emits metrics such as:</p>
<ul>
<li><p>BackupJobsCompleted</p>
</li>
<li><p>BackupJobsFailed</p>
</li>
<li><p>RestoreJobsCompleted</p>
</li>
<li><p>RestoreJobsFailed</p>
</li>
</ul>
</li>
<li><p>These metrics allow you to track job success/failure rates and trends over time.</p>
</li>
</ul>
</li>
<li><p><strong>CloudWatch Events (via EventBridge)</strong></p>
<ul>
<li><p>AWS Backup sends detailed job state changes to <strong>Amazon EventBridge</strong>, which can route events to CloudWatch or other services.</p>
</li>
<li><p>Example events:</p>
<ul>
<li><p>AWS Backup Job State Change</p>
</li>
<li><p>AWS Backup Vault Lock Compliance</p>
</li>
</ul>
</li>
</ul>
</li>
<li><p><strong>CloudWatch Alarms</strong></p>
<ul>
<li><p>Create alarms based on metrics to trigger actions when thresholds are breached.</p>
</li>
<li><p>Example: Alarm when BackupJobsFailed &gt;= 1 in the last 5 minutes.</p>
</li>
</ul>
</li>
</ol>
<h2 id="heading-configuration-steps"><strong>Configuration Steps</strong></h2>
<p><strong>1. Enable Metrics and Events</strong></p>
<ul>
<li><p>AWS Backup automatically integrates with CloudWatch; no manual activation is required.</p>
</li>
<li><p>Navigate to <strong>CloudWatch → All Metrics → Backup</strong> to view available metrics</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767893670298/0d0c9870-bfde-4af9-b715-10f052a299c0.png" alt class="image--center mx-auto" /></p>
<p><strong>2. Create CloudWatch Alarms</strong></p>
<ul>
<li><p>Go to <strong>CloudWatch → Alarms → Create Alarm</strong>.</p>
</li>
<li><p>Select the metric BackupJobsFailed.</p>
</li>
<li><p>Define conditions:</p>
<ul>
<li><p><strong>Threshold type:</strong> Static</p>
</li>
<li><p><strong>Condition:</strong> Greater than or equal to 1</p>
</li>
<li><p><strong>Period:</strong> 5 minutes</p>
</li>
</ul>
</li>
<li><p>Configure actions:</p>
<ul>
<li><p>Send notification to SNS topic (e.g., AWSBackupStatusNotifications).</p>
</li>
<li><p>Optionally, trigger an <strong>AWS Lambda</strong> function for automated remediation.</p>
</li>
</ul>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767896754059/b8d98760-54c8-4efb-a363-e5bf3504b7a1.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767896793694/970f1e0b-77bc-4679-abb3-62905ee7d4b9.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-advanced-monitoring-techniques"><strong>Advanced Monitoring Techniques</strong></h2>
<ul>
<li><p><strong>Custom Dashboards:</strong> Build CloudWatch dashboards to visualise backup trends across multiple accounts and regions.</p>
</li>
<li><p><strong>Cross-Account Monitoring:</strong> Use <strong>CloudWatch cross-account observability</strong> to centralise metrics from multiple AWS accounts.</p>
</li>
<li><p><strong>Anomaly Detection:</strong> Enable CloudWatch anomaly detection on backup metrics to identify unusual patterns (e.g., sudden spike in failures).</p>
</li>
<li><p><strong>Composite Alarms:</strong> Combine multiple alarms (e.g., failed backups + vault lock compliance) to reduce alert fatigue.</p>
</li>
</ul>
<h3 id="heading-security-considerations"><strong>Security Considerations</strong></h3>
<ul>
<li><p>Apply <strong>least privilege IAM policies</strong> for CloudWatch, SNS, and Lambda roles.</p>
</li>
<li><p>Enable <strong>CloudWatch Logs encryption</strong> using AWS KMS.</p>
</li>
<li><p>Audit all actions via <strong>AWS CloudTrail</strong>.</p>
</li>
</ul>
<h2 id="heading-security-and-compliance-best-practices"><strong>Security and Compliance Best Practices</strong></h2>
<ul>
<li><p><strong>Least Privilege IAM:</strong> Restrict AWS Backup and SNS roles to required actions only.</p>
</li>
<li><p><strong>Encryption:</strong> Enable encryption for SNS topics and backup vaults using AWS KMS.</p>
</li>
<li><p><strong>Cross-Region Notifications:</strong> Configure SNS topics in multiple regions for DR scenarios.</p>
</li>
<li><p><strong>Audit Trails:</strong> Enable AWS CloudTrail for all backup-related API calls.</p>
</li>
</ul>
<h2 id="heading-troubleshooting-common-issues"><strong>Troubleshooting Common Issues</strong></h2>
<ul>
<li><p><strong>SNS Delivery Failures:</strong> Check subscription confirmation and topic policy.</p>
</li>
<li><p><strong>IAM Permission Errors:</strong> Validate roles for sns:Publish and sns:Subscribe.</p>
</li>
<li><p><strong>Delayed Notifications:</strong> Review CloudWatch event rules and SNS delivery status.</p>
</li>
</ul>
<h2 id="heading-conclusion"><strong>Conclusion</strong></h2>
<p>By combining AWS Backup notifications with SNS, CloudWatch, and automation, you can build a resilient monitoring framework that ensures data protection and compliance. This approach not only provides visibility but also enables proactive remediation, reducing operational risk.</p>
<h3 id="heading-reference">Reference:</h3>
<ol>
<li><p><a target="_blank" href="https://docs.aws.amazon.com/aws-backup/latest/devguide/cloudwatch.html#monitoring-metrics-with-cloudwatch">CloudWatch Dashboard</a></p>
</li>
<li><p><a target="_blank" href="https://repost.aws/questions/QUsgwdsP_HS4msiTBm90jSbQ/backup-failed-metric">Backup Failed Metric</a></p>
</li>
<li><p><a target="_blank" href="https://repost.aws/knowledge-center/aws-backup-failed-job-notification">put-backup-vault-notifications</a></p>
</li>
<li><p><a target="_blank" href="https://docs.aws.amazon.com/aws-backup/latest/devguide/API_PutBackupVaultNotifications.html">PutBackupVaultNotifications</a></p>
</li>
</ol>
]]></content:encoded></item><item><title><![CDATA[Using AWS Systems Manager in Hybrid Cloud Environments]]></title><description><![CDATA[Introduction
Hybrid and multicloud strategies are now the norm for enterprises seeking agility, resilience, and compliance. Yet, managing infrastructure that spans AWS, on-premises data centres, and even other public clouds introduces operational com...]]></description><link>https://blog.gepal.cz/using-aws-systems-manager-in-hybrid-cloud-environments</link><guid isPermaLink="true">https://blog.gepal.cz/using-aws-systems-manager-in-hybrid-cloud-environments</guid><category><![CDATA[ssm]]></category><category><![CDATA[system manager]]></category><category><![CDATA[PatchManager]]></category><category><![CDATA[AWS]]></category><dc:creator><![CDATA[George Palangattil]]></dc:creator><pubDate>Wed, 31 Dec 2025 15:42:26 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1765218445340/608a5561-d957-4454-81c2-1c7bf98d9a38.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction"><strong>Introduction</strong></h2>
<p>Hybrid and multicloud strategies are now the norm for enterprises seeking agility, resilience, and compliance. Yet, managing infrastructure that spans AWS, on-premises data centres, and even other public clouds introduces operational complexity and security challenges. AWS Systems Manager (SSM) provides a unified, scalable solution for automating, monitoring, and securing workloads across these diverse environments.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1765219561606/ed1bc35d-3e3e-4e5e-93cc-970c9c41d42c.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-why-aws-systems-manager-for-hybrid-environments"><strong>Why AWS Systems Manager for Hybrid Environments?</strong></h2>
<p>AWS SSM enables organisations to treat on-premises servers and VMs, whether Windows or Linux, just like EC2 instances. By registering these machines as “managed nodes”, you can apply consistent patching, configuration, and compliance policies across your entire estate. This approach eliminates silos, reduces manual effort, and enhances security posture.</p>
<h3 id="heading-key-benefits-include"><strong>Key benefits include:</strong></h3>
<ul>
<li><p><strong>Centralised management:</strong> One console for AWS, on-premises, and multicloud resources.</p>
</li>
<li><p><strong>Consistent automation:</strong> Use the same SSM documents, maintenance windows, and automation scripts everywhere.</p>
</li>
<li><p><strong>Unified compliance:</strong> Generate fleet-wide patch and compliance reports, regardless of location.</p>
</li>
<li><p><strong>Secure operations:</strong> All actions are logged in AWS CloudTrail, and access is governed by IAM.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1765216549916/74e0741b-e6bd-4f9f-b91d-4492fcbbe29d.jpeg" alt class="image--center mx-auto" /></p>
<h2 id="heading-architecture-overview"><strong>Architecture Overview</strong></h2>
<p>A robust hybrid SSM deployment typically includes:</p>
<ul>
<li><p><strong>SSM Agent:</strong> Installed on all managed nodes (EC2, on-premises, or other cloud VMs).</p>
</li>
<li><p><strong>Private Connectivity:</strong> On-premises servers connect to AWS via Direct Connect or VPN, with VPC endpoints for SSM, S3, and related services to ensure no traffic traverses the public internet.</p>
</li>
<li><p><strong>IAM Roles:</strong> Fine-grained roles for hybrid activations, with least-privilege permissions.</p>
</li>
<li><p><strong>Patch Manager:</strong> Automates patch scanning, deployment, and compliance reporting.</p>
</li>
<li><p><strong>CloudWatch &amp; CloudTrail:</strong> For monitoring, alerting, and auditing.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1765227824791/22508482-df4e-4e28-977d-a5b4abf5e523.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-deep-dive-network-architecture-vpc-endpoints-and-patch-source-requirements"><strong>Deep Dive: Network Architecture, VPC Endpoints, and Patch Source Requirements</strong></h2>
<h3 id="heading-ensuring-secure-private-connectivity-with-vpc-endpoints"><strong>Ensuring Secure, Private Connectivity with VPC Endpoints</strong></h3>
<p>In a well-architected hybrid SSM deployment, <strong>all communication between on-premises servers and AWS Systems Manager services must traverse private VPC endpoints</strong>—never the public internet. This is essential for both security and compliance, especially in regulated industries.</p>
<h3 id="heading-centralising-endpoints-in-the-network-account"><strong>Centralising Endpoints in the Network Account</strong></h3>
<p>Within an AWS Organisation, it is best practice to <strong>centralise all VPC endpoints in a dedicated network account</strong>. This approach simplifies management, auditing, and ensures consistent security controls across all environments (Dev, Test, Prod). All on-premises and cloud-based managed nodes should route their SSM, S3, and related traffic through these endpoints.</p>
<h3 id="heading-vpc-endpoint-policies-restricting-access-to-patch-repositories"><strong>VPC Endpoint Policies: Restricting Access to Patch Repositories</strong></h3>
<p>To enforce that <strong>all patching traffic flows exclusively through VPC endpoints</strong>, you must apply strict endpoint policies. Below is an example S3 VPC endpoint policy that only allows access to the patch repository bucket from the endpoint itself:</p>
<h3 id="heading-ssm-and-related-endpoint-policies"><strong>SSM and Related Endpoint Policies</strong></h3>
<p>For SSM, SSM Messages, and EC2 Messages endpoints, use endpoint policies that restrict access to only the required AWS services and resources. Example:</p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"Statement"</span>: [
    {
      <span class="hljs-attr">"Effect"</span>: <span class="hljs-string">"Allow"</span>,
      <span class="hljs-attr">"Principal"</span>: <span class="hljs-string">""</span>,
      <span class="hljs-attr">"Action"</span>: <span class="hljs-string">"ssm:SendCommand"</span>,
      <span class="hljs-attr">"Resource"</span>: <span class="hljs-string">""</span>
    }
  ]
}
</code></pre>
<h3 id="heading-best-practice"><strong>Best practice:</strong></h3>
<ul>
<li><p>Limit actions and resources as tightly as possible.</p>
</li>
<li><p>Regularly review endpoint policies for least-privilege access.</p>
</li>
</ul>
<h2 id="heading-patch-source-requirements-wsus-and-satellite-servers"><strong>Patch Source Requirements: WSUS and Satellite Servers</strong></h2>
<p>While AWS Patch Manager orchestrates patching, <strong>the actual patch binaries for on-premises servers must still be sourced from local repositories</strong>:</p>
<ul>
<li><p><strong>Windows Servers:</strong>\ Require connectivity to a local <strong>WSUS (Windows Server Update Services)</strong> server. This ensures that Windows updates are distributed efficiently and in compliance with internal policies.\ <em>Note: Direct internet access to Microsoft Update is not recommended for enterprise environments.</em></p>
</li>
<li><p><strong>Linux Servers (e.g., Red Hat):</strong>\ Must have access to a <strong>Red Hat Satellite</strong> server or equivalent local repository. This is critical for environments with restricted internet access and for maintaining control over which updates are approved and deployed.</p>
</li>
</ul>
<h3 id="heading-why-local-patch-sources-are-mandatory"><strong>Why Local Patch Sources Are Mandatory</strong></h3>
<ul>
<li><p><strong>Bandwidth Efficiency:</strong> Downloading patches once to a local repository and distributing internally reduces WAN usage and speeds up patch deployment.</p>
</li>
<li><p><strong>Compliance and Control:</strong> Organisations can vet and approve patches before they are made available to production systems.</p>
</li>
<li><p><strong>Security:</strong> Prevents unmanaged or unapproved updates from being installed, and avoids exposing servers to the public internet</p>
</li>
</ul>
<h2 id="heading-advanced-setup-hybrid-activation-and-agent-configuration"><strong>Advanced Setup: Hybrid Activation and Agent Configuration</strong></h2>
<h3 id="heading-1-hybrid-activation"><strong>1. Hybrid Activation</strong></h3>
<p>Hybrid activation is the process of registering non-EC2 machines (on-premises or other clouds) as managed nodes in SSM. This involves:</p>
<ul>
<li><p>Creating an activation in the SSM console, specifying the instance limit, IAM role, and expiry.</p>
</li>
<li><p>Installing the SSM Agent on each server and registering it using the activation code and ID.</p>
</li>
<li><p>For large estates, automate agent deployment and registration using configuration management tools (e.g., Ansible, Chef, or PowerShell DSC).</p>
</li>
</ul>
<h3 id="heading-2-agent-configuration-for-secure-connectivity"><strong>2. Agent Configuration for Secure Connectivity</strong></h3>
<p>Update the <em>amazon-ssm-agent.json</em> file on each managed node to:</p>
<ul>
<li><p>Point to VPC endpoints for SSM, S3, and EC2 messages.</p>
</li>
<li><p>Disable public internet access.</p>
</li>
<li><p>Configure logging and telemetry to CloudWatch or S3 for centralised monitoring.</p>
</li>
</ul>
<p>Example configuration snippet:</p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"Ssm"</span>: { <span class="hljs-attr">"Endpoint"</span>: <span class="hljs-string">"ssm.region.amazonaws.com"</span> },
  <span class="hljs-attr">"Mds"</span>: { <span class="hljs-attr">"Endpoint"</span>: <span class="hljs-string">"ec2messages.region.amazonaws.com"</span> },
  <span class="hljs-attr">"Mgs"</span>: { <span class="hljs-attr">"Endpoint"</span>: <span class="hljs-string">"ssmmessages.region.amazonaws.com"</span> },
  <span class="hljs-attr">"S3"</span>: { <span class="hljs-attr">"Endpoint"</span>: <span class="hljs-string">"PATCH-LOG-BUCKET.s3-region.amazonaws.com"</span> }
}
</code></pre>
<h3 id="heading-3-iam-and-security"><strong>3. IAM and Security</strong></h3>
<p>Patch Manager, a feature of SSM, automates patching for both operating systems and supported applications (limited to Microsoft updates on Windows). It supports:</p>
<ul>
<li><p><strong>Patch Baselines:</strong> Define which patches are approved, auto-approve rules, and exceptions.</p>
</li>
<li><p><strong>Patch Groups:</strong> Use tags to group servers for targeted patching.</p>
</li>
<li><p><strong>Maintenance Windows:</strong> Schedule patching to minimise business impact.</p>
</li>
<li><p><strong>Compliance Reporting:</strong> Generate detailed reports on patch status and compliance.</p>
</li>
</ul>
<h3 id="heading-4-advanced-patch-orchestration"><strong>4. Advanced Patch Orchestration</strong></h3>
<ul>
<li><p>Integrate Patch Manager with automation pipelines (e.g., Jenkins, GitHub Actions) for CI/CD-driven patching.</p>
</li>
<li><p>Use custom SSM documents to handle complex patching scenarios, such as pre- and post-patch validation, or application-aware patching.</p>
</li>
<li><p>For multicloud, ensure SSM Agent is supported and network connectivity is secured for each cloud provider.</p>
</li>
</ul>
<h2 id="heading-monitoring-auditing-and-compliance"><strong>Monitoring, Auditing, and Compliance</strong></h2>
<ul>
<li><p><strong>CloudWatch:</strong> Collect metrics and logs from all managed nodes, set up alarms for patch failures or compliance drift.</p>
</li>
<li><p><strong>CloudTrail:</strong> Audit all SSM actions, including who initiated patching or configuration changes.</p>
</li>
<li><p><strong>Athena &amp; QuickSight:</strong> Query and visualise compliance data at scale for audits and executive reporting.</p>
</li>
</ul>
<h2 id="heading-best-practices-and-lessons-learned"><strong>Best Practices and Lessons Learned</strong></h2>
<ul>
<li><p><strong>Segregate environments:</strong> Use separate activations and IAM roles for Dev, Test, and Prod.</p>
</li>
<li><p><strong>Automate everything:</strong> From agent deployment to compliance reporting, leverage automation to reduce manual errors.</p>
</li>
<li><p><strong>Test patching in lower environments</strong> before rolling out to production.</p>
</li>
<li><p><strong>Monitor agent health:</strong> Regularly check that all managed nodes are online and reporting.</p>
</li>
<li><p><strong>Document and review:</strong> Maintain clear documentation of your hybrid SSM setup, and periodically review IAM policies and network configurations.</p>
</li>
</ul>
<h2 id="heading-end-to-end-patch-flow-in-a-hybrid-environment"><strong>End-to-End Patch Flow in a Hybrid Environment</strong></h2>
<ol>
<li><p><strong>Patch Manager schedules a scan or deployment via SSM.</strong></p>
</li>
<li><p><strong>SSM Agent on each managed node receives instructions via the VPC endpoint.</strong></p>
</li>
<li><p><strong>On-premises Windows servers fetch updates from WSUS; Linux servers fetch from Satellite.</strong></p>
</li>
<li><p><strong>Patch status and compliance data are sent back to AWS via the VPC endpoint.</strong></p>
</li>
<li><p><strong>All logs and compliance reports are centralised in S3, accessible only via the endpoint.</strong></p>
</li>
</ol>
<h2 id="heading-security-and-audit-considerations"><strong>Security and Audit Considerations</strong></h2>
<ul>
<li><p>All patching and SSM traffic must be logged and auditable via CloudTrail and VPC Flow Logs.</p>
</li>
<li><p>No direct internet access should be permitted from managed nodes for patching.</p>
</li>
<li><p>IAM roles and endpoint policies must be reviewed regularly to ensure least-privilege.</p>
</li>
</ul>
<h2 id="heading-conclusion"><strong>Conclusion</strong></h2>
<p>AWS Systems Manager, when properly architected, delivers enterprise-grade automation, compliance, and security across hybrid and multicloud estates. By enforcing strict VPC endpoint policies, mandating WSUS and Satellite servers for on-premises patch sources, and following advanced setup practices, such as private connectivity, robust IAM, and automated patch orchestration, organisations can achieve operational excellence and regulatory compliance, while reducing risk and manual effort.</p>
]]></content:encoded></item><item><title><![CDATA[Automating AWS Governance with Account Factory for Terraform (AFT)]]></title><description><![CDATA[As organizations scale their cloud footprint, managing AWS accounts with consistent governance, security, and customization becomes increasingly complex. AWS Control Tower Account Factory for Terraform (AFT) bridges this gap by combining the governan...]]></description><link>https://blog.gepal.cz/automating-aws-governance-with-account-factory-for-terraform-aft</link><guid isPermaLink="true">https://blog.gepal.cz/automating-aws-governance-with-account-factory-for-terraform-aft</guid><category><![CDATA[control tower]]></category><category><![CDATA[AWS Control Tower]]></category><dc:creator><![CDATA[George Palangattil]]></dc:creator><pubDate>Mon, 15 Sep 2025 12:26:17 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1757937087161/62c5111d-5885-48ea-b7f3-56cf707ba63d.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As organizations scale their cloud footprint, managing AWS accounts with consistent governance, security, and customization becomes increasingly complex. <strong>AWS Control Tower Account Factory for Terraform (AFT)</strong> bridges this gap by combining the governance of AWS Control Tower with the flexibility of Terraform. This blog explores AFT’s architecture, deployment models, customization capabilities, and operational features that make it a cornerstone for cloud platform teams.</p>
<p><strong>Overview of AFT</strong></p>
<p>AFT is a Terraform-based orchestration framework that automates the provisioning and customization of AWS accounts in a Control Tower landing zone. It enables platform teams to adopt a <strong>GitOps-style workflow</strong>, where account lifecycle operations are managed through version-controlled repositories.</p>
<h3 id="heading-key-benefits"><strong>Key Benefits:</strong></h3>
<ul>
<li><p><strong>Terraform-native provisioning</strong> with support for Terraform Cloud, Enterprise, and OSS.</p>
</li>
<li><p><strong>Governance integration</strong> with AWS Control Tower.</p>
</li>
<li><p><strong>Customizations</strong> applied globally or per-account.</p>
</li>
<li><p><strong>Git-based workflows</strong> via AWS CodeCommit or external VCS providers.</p>
</li>
</ul>
<h2 id="heading-architecture"><strong>Architecture</strong></h2>
<p>AFT operates in a dedicated <strong>AFT management account</strong>, separate from the Control Tower management account. The architecture includes:</p>
<p><img src="https://docs.aws.amazon.com/images/controltower/latest/userguide/images/high-level-aft-diagram.png" alt="Figure: AFT Workflow Diagram" /></p>
<ol>
<li><p><strong>Account Request Pipeline</strong>: Users submit Terraform files to a Git repo.</p>
</li>
<li><p><strong>Provisioning Engine</strong>: AFT provisions accounts via Control Tower.</p>
</li>
<li><p><strong>Global Customizations</strong>: Common configurations applied to all accounts.</p>
</li>
<li><p><strong>Account-Specific Customizations</strong>: Tailored settings based on metadata.</p>
</li>
<li><p><strong>Audit and Traceability</strong>: CloudWatch Logs and unique tokens for tracking.</p>
</li>
</ol>
<p>This modular design ensures scalability, traceability, and compliance across large AWS environments.</p>
<h2 id="heading-deployment-models"><strong>Deployment Models</strong></h2>
<p>AFT supports both <strong>single-account</strong> and <strong>multi-account</strong> provisioning:</p>
<ul>
<li><p><strong>Single Account</strong>: Ideal for testing or small teams.</p>
</li>
<li><p><strong>Multiple Accounts</strong>: Supports concurrent provisioning for enterprise-scale environments.</p>
</li>
</ul>
<h3 id="heading-prerequisites"><strong>Prerequisites:</strong></h3>
<ul>
<li><p>AWS Control Tower landing zone.</p>
</li>
<li><p>AFT management account.</p>
</li>
<li><p>Terraform runtime environment.</p>
</li>
<li><p>Git repository (CodeCommit or external).</p>
</li>
<li><p>Optional configurations: VPC, encryption, tagging, compute resources.</p>
</li>
</ul>
<h2 id="heading-required-roles-and-permissions"><strong>Required Roles and Permissions</strong></h2>
<p>AFT requires specific IAM roles to operate securely:</p>
<ul>
<li><p><strong>AFT Management Role</strong>: Deployed in the AFT management account to orchestrate pipelines.</p>
</li>
<li><p><strong>Account Customization Role</strong>: Assumes permissions in target accounts for applying configurations.</p>
</li>
<li><p><strong>Terraform Execution Role</strong>: Manages Terraform operations securely.</p>
</li>
<li><p><strong>Cross-Account Access Roles</strong>: Enable customization and logging across accounts.</p>
</li>
</ul>
<p>These roles should follow least privilege principles and be monitored via AWS CloudTrail.</p>
<h2 id="heading-customizations-and-data-protection"><strong>Customizations and Data Protection</strong></h2>
<p>AFT supports <strong>global and account-specific customizations</strong> using Terraform modules. Examples include:</p>
<ul>
<li><p><strong>Security Baselines</strong>: GuardDuty, IAM policies, SCPs.</p>
</li>
<li><p><strong>Networking</strong>: VPC setup, Transit Gateway attachments.</p>
</li>
<li><p><strong>Monitoring</strong>: CloudWatch alarms, dashboards.</p>
</li>
<li><p><strong>Data Protection</strong>:</p>
<ul>
<li><p><strong>KMS Encryption</strong>: Encrypt logs, SNS topics, and other resources.</p>
</li>
<li><p><strong>CloudTrail Integration</strong>: Organization-wide logging of data events.</p>
</li>
<li><p><strong>Default VPC Removal</strong>: Enforce custom networking standards.</p>
</li>
</ul>
</li>
</ul>
<p>Customizations are version-controlled and auditable, ensuring compliance with data protection regulations.</p>
<h2 id="heading-operational-metrics-and-monitoring"><strong>Operational Metrics and Monitoring</strong></h2>
<p>AFT provides visibility into operations via:</p>
<ul>
<li><p><strong>CloudWatch Logs</strong>: Track provisioning and customization events.</p>
</li>
<li><p><strong>Step Functions</strong>: Visualize workflow execution.</p>
</li>
<li><p><strong>Custom Metrics</strong>:</p>
<ul>
<li><p>Account provisioning success/failure rates.</p>
</li>
<li><p>Customization execution times.</p>
</li>
<li><p>Drift detection and reconciliation.</p>
</li>
</ul>
</li>
</ul>
<p>These metrics help platform teams optimize performance and troubleshoot issues proactively.</p>
<h2 id="heading-updating-and-removing-accounts"><strong>Updating and Removing Accounts</strong></h2>
<h3 id="heading-updating-existing-accounts"><strong>Updating Existing Accounts</strong></h3>
<p>AFT supports post-provisioning updates via manual customization requests. This allows teams to:</p>
<ul>
<li><p>Apply new policies.</p>
</li>
<li><p>Update networking.</p>
</li>
<li><p>Modify tagging strategies.</p>
</li>
</ul>
<p>All updates are logged and traceable.</p>
<h3 id="heading-removing-accounts"><strong>Removing Accounts</strong></h3>
<p>While AFT does not directly delete accounts, it supports:</p>
<ul>
<li><p><strong>Decommissioning workflows</strong>: Custom Terraform modules to clean up resources.</p>
</li>
<li><p><strong>Tagging for retirement</strong>: Mark accounts for manual review and deletion.</p>
</li>
<li><p><strong>Audit Trails</strong>: Ensure all removal actions are logged.</p>
</li>
</ul>
<p>Account removal should follow organizational policies and AWS best practices.</p>
<h2 id="heading-feature-options"><strong>Feature Options</strong></h2>
<p>AFT offers several optional features to enhance governance and cost optimization :</p>
<ul>
<li><p><strong>CloudTrail Logging</strong>: Enable organization-level logging of data events.</p>
</li>
<li><p><strong>Default VPC Deletion</strong>: Remove default VPCs to enforce custom networking standards.</p>
</li>
<li><p><strong>Enterprise Support Enrollment</strong>: Automatically enroll accounts into AWS Enterprise Support.</p>
</li>
<li><p><strong>KMS Encryption</strong>: Apply customer-managed keys to CloudWatch logs and SNS topics.</p>
</li>
<li><p><strong>Custom Tags</strong>: Add metadata for cost allocation and resource tracking.</p>
</li>
</ul>
<p>These features can be toggled via Terraform variables during deployment or updated later.</p>
<h2 id="heading-conclusion"><strong>Conclusion</strong></h2>
<p>AWS Control Tower Account Factory for Terraform empowers platform teams to manage AWS accounts at scale with automation, governance, and flexibility. From provisioning to customization, monitoring, and decommissioning, AFT provides a robust framework that integrates seamlessly with modern DevOps workflows.</p>
<p>Ref: <a target="_blank" href="https://docs.aws.amazon.com/controltower/latest/userguide/aft-architecture.html">https://docs.aws.amazon.com/controltower/latest/userguide/aft-architecture.html</a></p>
]]></content:encoded></item><item><title><![CDATA[AWS S3 Tables: Transforming Structured Storage in the Cloud]]></title><description><![CDATA[Introduction
As businesses increasingly rely on data lakes for storing massive volumes of information, the need for structured storage within Amazon S3 has grown. Enter AWS S3 Tables—a revolutionary feature that enhances S3’s object storage capabilit...]]></description><link>https://blog.gepal.cz/aws-s3-tables-transforming-structured-storage-in-the-cloud</link><guid isPermaLink="true">https://blog.gepal.cz/aws-s3-tables-transforming-structured-storage-in-the-cloud</guid><category><![CDATA[S3]]></category><category><![CDATA[s3-tables]]></category><category><![CDATA[AWS]]></category><category><![CDATA[AWS s3]]></category><category><![CDATA[aws s3 for beginners]]></category><dc:creator><![CDATA[George Palangattil]]></dc:creator><pubDate>Sat, 24 May 2025 09:58:49 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1735987858864/cb89d10d-caaa-4d3c-92c4-537e9aeeceab.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-introduction">Introduction</h1>
<p>As businesses increasingly rely on data lakes for storing massive volumes of information, the need for structured storage within Amazon S3 has grown. Enter <strong>AWS S3 Tables</strong>—a revolutionary feature that enhances S3’s object storage capabilities by introducing <strong>table-based data organization</strong>, optimized for analytics workloads. </p>
<p>Unlike traditional S3 buckets, AWS S3 Tables enable structured querying using <strong>Apache Iceberg</strong>, providing an <strong>efficient, scalable, and transactional</strong> approach to managing structured data in the cloud.S3 Table Buckets</p>
<h3 id="heading-key-features-of-aws-s3-tables"><strong>Key Features of AWS S3 Tables</strong></h3>
<p>AWS S3 Tables come packed with innovations designed for high-performance analytics: </p>
<ol>
<li><strong>Native Apache Iceberg Support</strong> </li>
</ol>
<p>AWS S3 Tables fully integrate with <strong>Apache Iceberg</strong>, a format that supports <strong>SQL-like query optimizations, transactional consistency, and schema evolution</strong>—ensuring flexible and efficient data management.</p>
<ol start="2">
<li><strong>Automatic Optimization &amp; Maintenance</strong> </li>
</ol>
<p>Unlike manually managed data lakes, S3 Tables provide automatic <strong>compaction and metadata management</strong>, improving query speeds while reducing storage costs.</p>
<ol start="3">
<li><strong>Schema Evolution for Flexibility</strong> </li>
</ol>
<p>Data structures often change over time. S3 Tables support <strong>schema evolution</strong>, meaning fields can be added or modified <strong>without requiring complex migrations</strong>.</p>
<ol start="4">
<li><strong>Partitioning for Faster Query Execution</strong> </li>
</ol>
<p>Partitioning helps accelerate queries by <strong>reducing data scan sizes</strong>. AWS S3 Tables <strong>automatically</strong> handle partitioned data to enhance <strong>query performance</strong>.</p>
<ol start="5">
<li><strong>High Transaction Throughput</strong> </li>
</ol>
<p>AWS S3 Tables deliver up to <strong>10x higher transactions per second (TPS)</strong> compared to unmanaged Iceberg tables—critical for high-volume workloads.</p>
<ol start="6">
<li><strong>Seamless AWS Service Integration</strong></li>
</ol>
<p>✅ <strong>Amazon Athena</strong> – Direct SQL queries on S3 Tables. </p>
<p>✅ <strong>Redshift Spectrum</strong> – Combining S3 and Redshift for analytics. </p>
<p>✅ <strong>AWS Glue</strong> – Automated data preparation and cataloging. </p>
<ol start="7">
<li><strong>Use Cases: Where S3 Tables Shine</strong> </li>
</ol>
<p>📌 <strong>Data Lakes &amp; Business Intelligence</strong> – Enterprises use S3 Tables for structured, high-performance querying within <strong>large-scale data lakes</strong>.  </p>
<p>📌 <strong>Transactional Workloads</strong> – Retailers and fintech companies leverage S3 Tables for structured transaction storage, ensuring <strong>real-time processing</strong>. </p>
<p>📌 <strong>Machine Learning Pipelines</strong> – Data scientists benefit from <strong>structured, scalable datasets</strong> that streamline feature engineering and model training. </p>
<p>📌 <strong>Clickstream &amp; Ad Analytics</strong> – Marketing firms track user interactions and campaign performance efficiently using <strong>partitioned tables</strong>.</p>
<ol start="8">
<li><strong>Comparing AWS S3 Tables vs. Traditional S3 Storage</strong> </li>
</ol>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Feature</strong></td><td><strong>AWS S3 Tables</strong></td><td><strong>Standard S3 Buckets</strong></td></tr>
</thead>
<tbody>
<tr>
<td><strong>Data Organization</strong></td><td>Structured, tabular format</td><td>Unstructured object storage</td></tr>
<tr>
<td><strong>Query Performance</strong></td><td>Optimized for analytics</td><td>Requires additional tools</td></tr>
<tr>
<td><strong>Schema Evolution</strong></td><td>Supported</td><td>Not natively supported</td></tr>
<tr>
<td><strong>Automatic Optimization</strong></td><td>Built-in maintenance</td><td>Manual optimization needed</td></tr>
</tbody>
</table>
</div><h3 id="heading-conclusion">Conclusion</h3>
<p>While <strong>standard S3 buckets</strong> are great for general storage, <strong>AWS S3 Tables</strong> bring advanced <strong>queryability, transaction support, and efficiency</strong> to large-scale data applications.</p>
]]></content:encoded></item><item><title><![CDATA[AWS CloudWatch Billing Alarm]]></title><description><![CDATA[Introduction
In the cloud computing environment, particularly on AWS (Amazon Web Services), it is crucial to manage and control costs effectively. One of the primary concerns for organisations and individuals using AWS is ensuring that they do not un...]]></description><link>https://blog.gepal.cz/aws-cloudwatch-billing-alarm</link><guid isPermaLink="true">https://blog.gepal.cz/aws-cloudwatch-billing-alarm</guid><category><![CDATA[aws cloudwatch billing alaram]]></category><category><![CDATA[Cost management]]></category><category><![CDATA[AWS cost management]]></category><category><![CDATA[AWS CloudWatch]]></category><dc:creator><![CDATA[George Palangattil]]></dc:creator><pubDate>Fri, 27 Dec 2024 15:16:30 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1735304964647/8f045b29-3976-4f2b-b385-62f414e3fe73.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction</h2>
<p>In the cloud computing environment, particularly on AWS (Amazon Web Services), it is crucial to manage and control costs effectively. One of the primary concerns for organisations and individuals using AWS is ensuring that they do not unintentionally exceed their budget. AWS offers numerous services, and without proper monitoring, costs can easily spiral out of control. This is where AWS CloudWatch Billing Alarms come into play.</p>
<p>A CloudWatch Billing Alarm helps monitor your AWS usage and sends notifications when your costs approach or exceed a set threshold. By configuring these alarms, you gain insights into your usage patterns and can take action to prevent unnecessary expenses. This makes billing alarms an essential tool in cost optimisation and budgeting within AWS.</p>
<h2 id="heading-how-it-helps">How It Helps</h2>
<ul>
<li><p><strong>Cost Control</strong>: AWS operates on a pay-as-you-go pricing model, which, while beneficial, can sometimes lead to unintended overspending. Billing alarms mitigate this risk by providing notifications before you reach your budgetary limits, allowing for informed decision-making and resource management.</p>
</li>
<li><p><strong>Usage Monitoring</strong>: With a multitude of AWS services in operation, keeping a comprehensive track of every resource can be challenging. Billing alarms offer a consolidated overview of your overall usage, facilitating better awareness and helping you avoid surpassing your budgetary constraints.</p>
</li>
<li><p><strong>Proactive Notifications</strong>: These alarms are designed to alert you via email or SMS when your spending approaches or exceeds the designated threshold. This proactive approach empowers you to take immediate action, whether that entails adjusting resource utilisation or revising budgetary parameters, ultimately promoting financial prudence.</p>
</li>
<li><p><strong>Prevent Unexpected Charges</strong>: It is not uncommon for users to overlook unused services that continue to run in the background, accruing charges without their knowledge. Billing alarms play a critical role in identifying these dormant services early, allowing you to eliminate unnecessary costs and streamline your expenditure.</p>
</li>
<li><p><strong>Support for Scaling</strong>: As your utilisation of AWS increases, CloudWatch Billing Alarms become instrumental in tracking cost escalations. They provide essential insights that aid in strategic planning for scaling your infrastructure, ensuring that you can accommodate growth without encountering unwelcome financial surprises.</p>
</li>
</ul>
<h2 id="heading-step-by-step-process-for-setting-up-cloudwatch-billing-alarms"><strong>Step-by-Step Process for Setting Up CloudWatch Billing Alarms</strong></h2>
<ol>
<li><h3 id="heading-enable-billing-alerts">Enable Billing Alerts</h3>
<p> Before setting up the billing alarm, we first need to enable billing alerts in the <strong>billing preferences</strong>. This can be done by accessing the “<strong>Billing and Management</strong>” dashboard after logging into the AWS Management Console.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735309213517/be432307-5928-4efc-8c80-3e01dbbdd712.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735309332981/31a884f2-cd6c-4a13-b744-5987e2bdb4fc.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735309470999/54790a5d-8e31-42dc-8e4b-dd161b874456.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735309561665/a580e225-a2cd-4b5d-83b3-cb6e25dcf45e.png" alt class="image--center mx-auto" /></p>
</li>
<li><h3 id="heading-setup-sns-topic-and-subscription">Setup SNS Topic and Subscription</h3>
<p> Move to the Amazon Simple Notification Service (SNS) console and provide the topic name you wish to create.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735309921632/a38596aa-3337-4327-988f-fc07dfdf651d.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735310032427/5f171794-1634-4326-8ebe-8bbbd519a88f.png" alt class="image--center mx-auto" /></p>
<p> Scroll down the end of the page and click “<strong>Create Topic</strong>”</p>
<p> Select the subscription section from the left pane and provide the required protocol and endpoint for the subscription. In this instance, I am using <strong>email</strong> as the protocol and have provided my email address for the endpoint.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735310413942/3a63e13c-607f-46b7-a1dc-d43f1384bef5.png" alt class="image--center mx-auto" /></p>
<p> Confirm the subscription and its ready</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735310576406/3bab8ef7-a567-4dab-9a44-0c5291ae0376.png" alt class="image--center mx-auto" /></p>
</li>
<li><h3 id="heading-final-step-create-a-billing-alarm">Final Step: Create a Billing Alarm</h3>
<p> Move to the CloudWatch console and click on Create Alarm on the Alarm Section.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735310793915/31a50b00-d002-468b-8217-3a3e9d561dc3.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735311033241/358b4a4a-2e92-4f40-85e3-fde6a1eb9690.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735311115014/ba95d1c8-2d68-45bc-a230-0692ef6ee614.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735311173204/09253fbd-3af1-448b-be12-37e5f4037b28.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735311282252/4d9b6156-dbfc-4588-a8d8-798357cccbbc.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735311443872/144120cb-4993-4840-8b70-66bb40d048bb.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735311529765/ea1f7c95-6ef5-4eb9-bda9-0305b9a59c63.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735311657238/2902f96f-64a6-4d27-bd5f-2e0b340cf3d6.png" alt class="image--center mx-auto" /></p>
<p> Review and create alarm</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735311766411/a516dbc4-740e-41b3-906a-40a9ad5eb427.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735311904003/11b6fd2d-b1fa-4504-a3ff-32a0d60258b4.png" alt class="image--center mx-auto" /></p>
<p> wait for a while for CloudWatch collect the data and you will see the alarm action enabled.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735312024112/ceebbbdb-0dc8-42f5-bb3f-4595f3f93aac.png" alt class="image--center mx-auto" /></p>
</li>
<li><h3 id="heading-monitoring-and-managing-the-alarm"><strong>Monitoring and Managing the Alarm</strong></h3>
<p> Once the alarm is set up, it will actively monitor your billing. You can view the status of the alarm in the CloudWatch Console under the Alarms section. If triggered, you will receive a notification based on your configured settings. You can also modify or delete the alarm at any time by going back to the Alarms section. But remember you can’t rollback the “<strong>CloudWatch Billing Alerts</strong>”. <strong>Once it enabled, this preference cannot be disabled.</strong></p>
</li>
</ol>
<h2 id="heading-conclusion">Conclusion</h2>
<p>AWS CloudWatch Billing Alarms are a vital tool for anyone using AWS, allowing you to monitor and control costs effectively. By setting up billing alarms, you can ensure you are always aware of your cloud expenditure and avoid exceeding your budget unintentionally. This proactive approach to cost management is particularly important for businesses and individuals using multiple AWS services.</p>
<p>The setup process involves enabling billing alerts, creating a billing alarm in CloudWatch, and configuring notifications via SNS. Once configured, the billing alarm helps keep your cloud expenses under control, sending notifications when thresholds are crossed, helping you to optimise your AWS spending.</p>
<p><strong><em>Please remember to delete the resources you created if you did it for learning purposes to avoid unnecessary costs on your account.</em></strong></p>
]]></content:encoded></item><item><title><![CDATA[How to take AWS RDS Database Snapshots]]></title><description><![CDATA[Overview
Amazon RDS creates a storage volume snapshot of your DB instance, backing up the entire instance rather than individual databases. When creating this DB snapshot on a Single-AZ DB instance, there is a brief I/O suspension that can last from ...]]></description><link>https://blog.gepal.cz/how-to-take-aws-rds-database-snapshots</link><guid isPermaLink="true">https://blog.gepal.cz/how-to-take-aws-rds-database-snapshots</guid><category><![CDATA[AWS RDS]]></category><category><![CDATA[aws rds instance]]></category><category><![CDATA[aws snapshot]]></category><category><![CDATA[AWS]]></category><category><![CDATA[aws backup]]></category><dc:creator><![CDATA[George Palangattil]]></dc:creator><pubDate>Tue, 29 Oct 2024 22:48:52 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1730228812708/db3766e0-8455-43cb-88de-394b2a008860.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-overview">Overview</h2>
<p>Amazon RDS creates a storage volume snapshot of your DB instance, backing up the entire instance rather than individual databases. When creating this DB snapshot on a Single-AZ DB instance, there is a brief I/O suspension that can last from a few seconds to a few minutes, depending on the size and class of your DB instance. The time required to create a snapshot varies with the size of your databases. Since the snapshot includes the entire storage volume, the size of files, such as temporary files, also affects the duration of the snapshot creation process.</p>
<p>Snapshots of Amazon RDS volumes are incremental, even though database snapshots function operationally as full backups. There are two types of Amazon RDS snapshots: automated and manual. Automated backups occur daily during the preferred backup window, whereas a manual snapshot can be triggered at any time it is needed. Unlike automated backups, manual snapshots are not subject to the backup retention period and do not expire</p>
<h3 id="heading-step-1-select-the-database">Step 1 - Select the database</h3>
<ol>
<li><p><strong>Sign in to the Amazon RDS Console</strong></p>
<p> <em>Go to the AWS Management Console and log in with your credentials. Then In the console, locate and select RDS from the list of services. In the upper-right corner of the RDS console, select the AWS Region where DB instance located.</em></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730197470392/834f62a3-47c9-4bf6-ae5a-2fe0855a0146.png?auto=compress,format&amp;format=webp" alt /></p>
</li>
<li><p><strong>Select the database</strong></p>
<p> In the left navigation pane of the RDS dashboard, click on <strong>Databases</strong>. This will display a list of all your RDS instances. Locate and select the database instance from the list.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730238942674/41204765-7264-47a0-bf5d-61c0a7def941.png" alt class="image--center mx-auto" /></p>
</li>
</ol>
<h3 id="heading-prepare-snapshot">Prepare Snapshot</h3>
<p><strong>Manual Snapshot</strong></p>
<ol>
<li><p><strong>Take Snapshot</strong></p>
<p> Select Database then go to <strong>actions</strong> and click <strong>Take Snapshot</strong> option</p>
<p> <em><mark>If it is taking the first snapshot, it may take a couple of minutes depending on the size of the database.</mark></em></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730239285822/cea4ada4-9aef-43e4-b1be-59ec1124c6bc.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><strong>Name it and initiate the snapshot</strong></p>
<p> <em>For the snapshot name, use the meaning full and easy to recognise the purpose of each snapshot.</em></p>
<p> Provide the snapshot name and click on <strong>Take Snapshot</strong></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730239685197/fd181805-763d-479b-9142-9e1f67c03fd2.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><strong>Validate the snapshot</strong></p>
</li>
</ol>
<p><em>Console automatically move to the RDS Snapshots console.</em> Watch on the snapshot name and the status to see the completion</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730239888198/e34a0788-ee1e-4afd-8b8c-22a73b8b9432.png" alt class="image--center mx-auto" /></p>
<p><em>Snapshot is ready, when the status change to Available</em>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730240073332/2df23793-461d-4cb9-a219-e0fbdad1783e.png" alt class="image--center mx-auto" /></p>
<p><em>click on the snapshot and validate the details</em></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730240290642/faacaf23-0af2-4c6c-b4e8-b49ecc7912e3.png" alt class="image--center mx-auto" /></p>
<p>You successfully created a RDS manual snapshot.</p>
<p><strong>Automated Snapshot</strong></p>
<ol>
<li><p><strong>Modify the database configuration</strong></p>
<p> Select the Database and click <strong>Modify</strong></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730240830314/3f688683-197d-4d3d-9eab-2bc596821371.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><strong>Configure the preferred backup window</strong></p>
<p> <em>Scroll down up to the Additional Configuration and set the time under the Backup section</em></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730241093184/53cc3717-a341-484b-bc6e-bf05f34d5dc2.png" alt class="image--center mx-auto" /></p>
<p> In the next window, select the option <strong>when to apply</strong> then click on <strong>Modify DB instance</strong></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730241263597/d2c79343-7ad1-4bd9-a407-034a59bc3c21.png" alt class="image--center mx-auto" /></p>
<p> <em><mark>You successfully set the automated snapshot(Backup) window</mark></em></p>
</li>
<li><p><strong>Validate the Automated Snapshot settings</strong></p>
<p> Select the Automated backups section in the left panel (After the scheduled time which set earlier) and find the snapshot form the list.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730241645200/59fa2bb0-2b5c-4e08-aeae-324a82852f1c.png" alt class="image--center mx-auto" /></p>
<p> click on the snapshot and cross check the summary</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730241802587/d16165f3-6242-4c4e-8090-f5b91597d477.png" alt class="image--center mx-auto" /></p>
</li>
</ol>
<p>We have successfully configured and created RDS automated and manual snapshots and validated.</p>
<p><strong><em>Please remember to delete the resources you created if you did it for learning purposes to avoid unnecessary costs on your account.</em></strong></p>
]]></content:encoded></item><item><title><![CDATA[How to Encrypt a RDS DB Instance]]></title><description><![CDATA[Overview
Amazon RDS offers encryption for DB instances, ensuring that data at rest, including underlying storage, automated backups, read replicas, and snapshots are protected. It employs the industry-standard AES-256 encryption algorithm, which oper...]]></description><link>https://blog.gepal.cz/how-to-encrypt-a-rds-db-instance</link><guid isPermaLink="true">https://blog.gepal.cz/how-to-encrypt-a-rds-db-instance</guid><category><![CDATA[encryption]]></category><category><![CDATA[aws rds instance]]></category><category><![CDATA[AWS,Amazon RDS,AWS KMS,Cloud Computing,AWS Snapshot, Data Migration, Encryption, Cross-Account Access, AWS Tutorial, PostgreSQL]]></category><category><![CDATA[AWS RDS]]></category><dc:creator><![CDATA[George Palangattil]]></dc:creator><pubDate>Tue, 29 Oct 2024 12:03:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1730107134323/781bf0c2-575a-497d-b197-6e0992bad52a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-overview">Overview</h3>
<p>Amazon RDS offers encryption for DB instances, ensuring that data at rest, including underlying storage, automated backups, read replicas, and snapshots are protected. It employs the industry-standard AES-256 encryption algorithm, which operates transparently with minimal performance impact, requiring no modifications to database client applications. This encryption enhances data security against unauthorized access and helps meet compliance requirements. Additionally, when creating a read replica, it must be encrypted with the same KMS key as the primary instance if they are in the same AWS Region; otherwise, the appropriate regional KMS key should be used.</p>
<h3 id="heading-walkthrough">Walkthrough</h3>
<ol>
<li><p><strong>Sign in to the Amazon RDS Console</strong></p>
<p> <em>Go to the AWS Management Console and log in with your credentials. Then In the console, locate and select RDS from the list of services. In the upper-right corner of the RDS console, select the AWS Region where you want to create your DB instance.</em></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730197470392/834f62a3-47c9-4bf6-ae5a-2fe0855a0146.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><strong>Start the Database Creation Process</strong></p>
<p> <em>In the RDS Console pane, click the Create database button</em>.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730197811043/dc26cc80-ffb7-44a9-9282-c416788dab84.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><strong>Select Database Creation Method and Choose the Database Engine</strong></p>
<p> <em>Choose</em> <strong><em>Standard create</em></strong> <em>for more configuration options and Under</em> <strong><em>Engine options</em></strong>*, select* <strong><em>MySQL</em></strong> <em>as the database engine.</em></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730198052771/3bf333c9-97ca-4cdb-bb45-9fcdb10595aa.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><strong>Select the Engine Version and Template</strong></p>
<p> <em>Scroll down the same page and select the compatible version and select the templates depends your needs.</em></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730198521701/cbe9684f-f5b2-4aa4-b51b-16bdeb267322.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><strong>Select the Availability and Durability</strong></p>
<p> <em>Here the option to decide do we need DB Cluster or single node or Multi-AZ DB</em></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730199081042/c6dcf465-5577-4166-804a-47e66f557cfc.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><strong>Configure DB Instance Settings</strong></p>
<p> <strong><em>DB instance identifier*</em></strong>: Enter a unique name for your DB instance.*</p>
<p> <strong><em>Master username*</em></strong>: Specify a username for the database administrator.*</p>
<p> <strong><em>Master password*</em></strong>: Create a strong password and confirm it.*</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730199473415/f070ab5a-560b-48d5-a70c-099cd0599fd3.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><strong>Configure DB Instance Size</strong></p>
<p> <em>Choose the</em> <strong><em>DB instance class</em></strong> <em>based on your performance needs (e.g., db.t3.micro for a small instance).</em></p>
<p> <em>Set the</em> <strong><em>Storage type</em></strong> <em>and allocate the desired amount of storage.</em></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730200966580/7f4746b3-9ba7-4c09-92fa-952b907fbb4d.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><strong>Configure Connectivity</strong></p>
<p> <em>Choose the</em> <strong><em>VPC</em></strong> <em>and</em> <strong><em>Subnet group</em></strong> <em>for your DB instance.</em></p>
<p> <em>Set the</em> <strong><em>Public accessibility</em></strong> <em>option to determine if the database should be accessible from the internet.</em></p>
<p> <em>Configure the</em> <strong><em>VPC security group</em></strong> <em>to control access to the DB instance.</em></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730201265038/9f9fac64-9fd5-483f-9899-9c543c66017f.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730201361264/1ceb477d-da04-4455-8815-87270ecf40fb.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><strong>Additional Configuration</strong></p>
<p> Select and configure Monitoring options</p>
<p> Under <strong>Database options</strong>, you can set the initial database name and other parameters.</p>
<p> Configure backup, <strong>encryption</strong>, log exports, maintenance, and deletion protection settings as needed.</p>
<p> — <strong><em><mark>Here the option to encrypt the database instance and you can only encrypt an Amazon RDS DB instance when you create it, not after the DB instance is created.</mark></em></strong></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730201794818/1895ba13-2317-4a4f-adc2-cf0db8098357.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730201883772/ec5cb388-eb3e-4bcc-9a1a-54cac1aacd8a.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><strong>Review and Create</strong></p>
<p><em>Review all your settings to ensure they are correct.</em></p>
<p><em>Click the</em> <strong><em>Create database</em></strong> <em>button to launch your MySQL DB instance at the end of the page.</em></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730202219059/d5e0e05e-4245-42df-8669-1608a857b01a.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><strong>Validate the Database instance</strong></p>
<p><em>It will take a few minutes to complete the database creation and launch.</em></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730202576209/d76216ff-8c95-4344-9627-2f2fd09137d2.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Validate the Encryption of the DB instance</p>
<p>Click on the <strong>DB identifier</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730202770433/a5d68c2b-0b5e-4152-b9bb-1d50fe4bc0d2.png" alt class="image--center mx-auto" /></p>
<p><em>Select the Configuration TAB and look on the Storage panel</em></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730203021295/5b645e1c-3ca8-4292-b66f-fa9e955f2b8e.png" alt class="image--center mx-auto" /></p>
<p><strong><em><mark>Remember</mark></em></strong> <em><mark> :You can't turn off encryption on an encrypted DB instance.</mark></em></p>
<p><em><mark>You can't create an encrypted snapshot of an unencrypted DB instance.</mark></em></p>
</li>
</ol>
<hr />
<p>We have successfully created an <strong><em>encrypted AWS RDS DB instance</em></strong>. Please remember to delete the resources you created if you did it for learning purposes to avoid unnecessary costs on your account.</p>
]]></content:encoded></item><item><title><![CDATA[How to Activate CloudTrail in Your AWS Environment]]></title><description><![CDATA[Introduction
AWS CloudTrail is a service that enables governance, compliance, and operational and risk auditing of your AWS account. It logs all API calls made within your AWS environment, including those made through the AWS Management Console, AWS ...]]></description><link>https://blog.gepal.cz/how-to-activate-cloudtrail-in-your-aws-environment</link><guid isPermaLink="true">https://blog.gepal.cz/how-to-activate-cloudtrail-in-your-aws-environment</guid><category><![CDATA[cloudtrail]]></category><category><![CDATA[AWS CloudTrail]]></category><category><![CDATA[aws cloudtrail for beginners]]></category><dc:creator><![CDATA[George Palangattil]]></dc:creator><pubDate>Sun, 25 Aug 2024 19:22:47 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1724078915833/3c6ebd63-2e75-49cf-983f-dac80bde3d7b.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-introduction">Introduction</h3>
<p>AWS CloudTrail is a service that enables governance, compliance, and operational and risk auditing of your AWS account. It logs all API calls made within your AWS environment, including those made through the AWS Management Console, AWS SDKs, command-line tools, and other AWS services.</p>
<h3 id="heading-why-is-cloudtrail-important">Why is CloudTrail Important?</h3>
<p>With CloudTrail, you can keep an eye on and archive account activity linked to actions taken throughout your AWS infrastructure. It may be essential for compliance obligations, security audits, and identifying any strange activity in your account.</p>
<h3 id="heading-setting-up-cloudtrail-in-a-single-account">Setting Up CloudTrail in a Single Account</h3>
<h3 id="heading-prerequisites">Prerequisites</h3>
<ol>
<li><p>Necessary IAM permissions to create CloudTrail (e.g., cloudtrail:CreateTrail).</p>
</li>
<li><p>S3 bucket (optional, but necessary if storing logs outside of the default location).</p>
</li>
</ol>
<h3 id="heading-enable-the-trail">Enable the Trail</h3>
<ol>
<li><p>Navigate to the AWS CloudTrail Console and Click on <strong>Create a trail</strong></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1724584953598/da76c767-6319-41c8-8414-c800342d074e.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Create Trail</p>
<ol>
<li><p>In the CloudTrail dashboard, click on "Create trail".</p>
<ol>
<li><p>Provide a name for your trail.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1724585300246/89992a6b-17e7-4cde-a4b5-3951fbbc184a.png" alt class="image--center mx-auto" /></p>
</li>
</ol>
</li>
</ol>
</li>
<li><p>Trail first look</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1724585883242/7aaeaed3-0d04-4558-9e10-63d298058a0a.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Configure the Storage.</p>
<ol>
<li><p>Click on Edit in the General details section.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1724585998901/9990db65-f2c4-413c-9e55-b21327d3166b.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Select "Use existing S3 Bucket, then click Browse and select the bucket</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1724612631445/6f71121a-40a0-4971-8b66-07d62a000f36.png" alt class="image--center mx-auto" /></p>
</li>
</ol>
</li>
<li><p>Choose Additional Settings (Recommended)</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1724612859729/0beb2636-05c3-42b9-92ef-4b9a204ab36b.png" alt class="image--center mx-auto" /></p>
<p> Save Changes.</p>
</li>
<li><p>Select the Events ( Management / Data /Insights)</p>
<ol>
<li><p>By Default Management events is enabled read and write.</p>
</li>
<li><p>The rest must be manually enable as per the requriements.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1724613415076/ef274bb3-fcb6-4fab-ac6b-6925b0e37799.png" alt class="image--center mx-auto" /></p>
</li>
</ol>
</li>
</ol>
<h3 id="heading-best-practices">Best Practices</h3>
<ol>
<li><p>Enable Log File Validation</p>
</li>
<li><p>Use Multi-Region Trails</p>
</li>
<li><p>Monitor for Anomalies</p>
</li>
<li><p>Set Up Alerts</p>
</li>
<li><p>Review and Rotate Keys</p>
</li>
</ol>
<h3 id="heading-conclusion">Conclusion</h3>
<p>    AWS CloudTrail is a service that logs all API calls made in your AWS environment, providing detailed records of activities across your account. It plays a crucial role in security, compliance, and operational auditing by enabling you to monitor and track actions such as who accessed resources, when, and from where. CloudTrail logs can be stored in an S3 bucket, integrated with CloudWatch for real-time monitoring, and used to trigger automated responses to specific events. This makes it an essential tool for maintaining transparency, ensuring accountability, and responding to potential security incidents in your AWS environment.</p>
]]></content:encoded></item><item><title><![CDATA[A Guide to Creating and Navigating Budgets and Budget Reports]]></title><description><![CDATA[With AWS Budgets, set custom budgets to track your costs and usage, and respond quickly to alerts received from email or SNS notifications if you exceed your threshold. You can use AWS Budgets to monitor your aggregate utilization and coverage metric...]]></description><link>https://blog.gepal.cz/a-guide-to-creating-and-navigating-budgets-and-budget-reports</link><guid isPermaLink="true">https://blog.gepal.cz/a-guide-to-creating-and-navigating-budgets-and-budget-reports</guid><category><![CDATA[AWS FinOps]]></category><category><![CDATA[finops]]></category><category><![CDATA[AWS Cost Optimization]]></category><category><![CDATA[AWS Budget]]></category><category><![CDATA[AWS]]></category><dc:creator><![CDATA[George Palangattil]]></dc:creator><pubDate>Tue, 23 Jan 2024 22:28:05 GMT</pubDate><content:encoded><![CDATA[<p>With AWS Budgets, set custom budgets to track your costs and usage, and respond quickly to alerts received from email or SNS notifications if you exceed your threshold. You can use AWS Budgets to monitor your aggregate utilization and coverage metrics for your Reserved Instances (RIs) or Savings Plans.</p>
<h3 id="heading-create-a-zero-spend-budget">Create a Zero Spend Budget</h3>
<p>-&gt; Navigate to the Billing and Cost Management AWS console<br />-&gt; Select the Budgets under the Budgets and Planning in the left navigation pane<br />-&gt; Select <strong>Create Budget</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706046459768/25bd313d-e77e-4e56-a50f-e70969100f2e.png" alt class="image--center mx-auto" /></p>
<p>-&gt; Select Use a template in Budget setup<br />-&gt; Select Zero spend budget in Templates - new<br />-&gt; Enter your budget name<br />-&gt; Enter the email ID to get notify when the threshold has exceeded<br />-&gt; Select <strong>Create Budget</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706046709381/0bf6aa11-67a7-434e-a91e-3f5a25777367.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706046905670/60135190-39dd-426e-9a10-164ef0674d4a.png" alt class="image--center mx-auto" /></p>
<p>-&gt; You will get the message about the successful creation of the budget<br />-&gt; You will also receive the budget notification mail if the current usage exceed the threshold</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706047032881/09849aa1-f6f7-41f5-8eba-048e334fdb5b.png" alt class="image--center mx-auto" /></p>
<p>-&gt; You will see the thresholds Ok or exceeded under Alerts section</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706047400825/aeaa98a1-8944-408a-8d05-6a3fb177e006.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-create-budget-report">Create Budget Report</h3>
<p>-&gt; Select the budget which you wanted to create the budget report in the Billing and Cost Management Console<br />-&gt; Select Create budget report under Actions</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706047831050/82c0bbae-7515-4b73-b898-c42c99f45fb5.png" alt class="image--center mx-auto" /></p>
<p>-&gt; Enter the report name<br />-&gt; Keep the budget selection as it is<br />-&gt; Enter the required details for deliver settings. [Weekly /Sunday]<br />-&gt; Provide the email address to receive the reports<br />-&gt; Select <strong>Create budget report</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706048344646/c2a1c471-339b-4e47-af1b-410c13772a67.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706048498274/30b87068-9019-463e-8615-19a5e455a6f9.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706048581658/4de823ba-8aab-4e4c-936d-de617e4507be.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-clean-up">Clean up</h3>
<p>Considering this is a testing environment — you might not require preserving the AWS resources. Consequently, it is advisable to remove the allocated AWS resources to prevent additional charges. In this illustration, deleting the AWS resources is recommended.</p>
<p>Delete the AWS budget and Budget report</p>
]]></content:encoded></item><item><title><![CDATA[Amazon Data Lifecycle Manager]]></title><description><![CDATA[EBS snapshots play a vital role in the effective data management of Amazon Web Services (AWS). These snapshots, serving as backups for EBS volumes, find their home in Amazon Simple Storage Service (S3). While essential for safeguarding data and prepa...]]></description><link>https://blog.gepal.cz/amazon-data-lifecycle-manager</link><guid isPermaLink="true">https://blog.gepal.cz/amazon-data-lifecycle-manager</guid><category><![CDATA[Amazon DLM]]></category><category><![CDATA[aws ec2]]></category><category><![CDATA[ELB]]></category><category><![CDATA[snapshot]]></category><dc:creator><![CDATA[George Palangattil]]></dc:creator><pubDate>Tue, 23 Jan 2024 18:43:59 GMT</pubDate><content:encoded><![CDATA[<p>EBS snapshots play a vital role in the effective data management of Amazon Web Services (AWS). These snapshots, serving as backups for EBS volumes, find their home in Amazon Simple Storage Service (S3). While essential for safeguarding data and preparing for unforeseen disasters, handling EBS snapshots can be intricate and time-consuming. Enter Amazon DLM, an elegant solution that eliminates the need for complex, custom scripts to manage EBS snapshots.</p>
<p>Amazon DLM simplifies the process of creating, managing, and deleting EBS snapshots by offering an automated approach. This is achieved through resource tags applied to EBS volumes or EC2 instances. The result? A reduction in operational complexity, saving both time and money. And here's the cherry on top: Amazon DLM is freely available for use and accessible across all AWS Regions.</p>
<h3 id="heading-create-a-lifecycle-policy">Create a Lifecycle Policy</h3>
<p>-&gt; Navigate to EC2 Console<br />-&gt; Select the Lifecycle Manager under the Elastic Block Store in the navigation pane<br />-&gt; Select custom policy and EBS Snapshot policy as type<br />-&gt; Select <strong>Next step</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706030780417/b6d557ed-5f0d-4f2e-8771-b5a06ffda8b8.png" alt class="image--center mx-auto" /></p>
<p>In this example we will cover the Disk volume as target<br />-&gt; In Specify Settings Page<br />-&gt; Select Volume as target resource type<br />-&gt; Add the target resource TAG Key name and value<br />-&gt; Add a policy description in the description section<br />-&gt; Select the default IAM role and Scroll down</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706031736326/fdbb31d0-c5d5-43ee-90b7-09ad945e0e6c.png" alt class="image--center mx-auto" /></p>
<p>-&gt; Set Policy status - Enabled<br />-&gt; Select <strong>Next</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706031863492/0048246b-36ac-460c-b2a6-ba96242edb31.png" alt class="image--center mx-auto" /></p>
<p>Here I am going to setup one schedule, daily snapshot with retention count as five snapshots. Also we will cover her the advanced settings of the Tagging, Fast snapshot restore and cross-region copy<br />-&gt; Enter Schedule name<br />-&gt; Frequency:Daily | Every:24 hours | Starting at: 21:00 | Retention Type: Count | Keep: 5</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706032686603/dc65a9e7-7327-477d-a628-19de6e788c4f.png" alt class="image--center mx-auto" /></p>
<p>Move to the Advanced settings( This section is actually optional)<br />-&gt; Select the checkbox of Copy tags from source in the tagging info section<br />-&gt; Enable the Fast Snapshot Restore option under the Fast Snapshot Restore section<br />[<strong>Fast Snapshot Restore:</strong> The Amazon EBS Fast Snapshot Restore (FSR) feature empowers you to generate a volume from a snapshot that is entirely initialized upon creation. This eradicates the latency associated with I/O operations on a block when it is initially accessed. Volumes produced through Fast Snapshot Restore promptly provide their full provisioned performance. Additional charges applied depends the number of snapshots and AZ we enabled the FSR]<br />-&gt; Enter how many number of snapshots enabled for FSR<br />-&gt; Select the Availability Zone to enable FSR</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706033751016/1c199b08-8d97-40b6-9f94-78620df8a217.png" alt class="image--center mx-auto" /></p>
<p>-&gt; Enabled cross region copy for this schedule checkbox<br />-&gt; Select the target region, expire days/weeks/months<br />-&gt; Enable the encryption<br />-&gt; Select a multi region KMS key<br />-&gt; Select copy tags from source<br />-&gt; Select <strong>review policy</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706034519124/1fc450b0-036b-4236-a613-422a0134688b.png" alt class="image--center mx-auto" /></p>
<p>-&gt; Review the page<br />-&gt; Scroll down and Select <strong>Create Policy</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706034739247/1b3122d8-8255-4cf7-9285-c670e1142a36.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706034802704/f17696da-3a98-4ad3-973e-dd3d3840a1ed.png" alt class="image--center mx-auto" /></p>
<p>-&gt; You should get the message that the policy created successfully</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1706034930794/cf63450b-dcab-4fab-abd6-a123871e4ff4.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-monitoring">Monitoring</h3>
<p>Amazon DLM sends notifications about Amazon EBS snapshot lifecycle events to the AWS CloudTrail console's Event history page. You can find events associated with the creation or deletion of EBS snapshots by filtering under the User name as DataLifecycleManager.</p>
<h3 id="heading-clean-up">Clean up</h3>
<p>If you have generated test EBS volumes, along with Amazon DLM policies for creating EBS snapshots, utilizing KMS Keys, implementing FSR, and duplicating EBS snapshots across AWS Regions — considering this is a testing environment — you might not require preserving the AWS resources. Consequently, it is advisable to remove the allocated AWS resources to prevent additional charges. In this illustration, deleting the AWS resources is recommended.</p>
]]></content:encoded></item><item><title><![CDATA[Application Load Balancer Access Log Management]]></title><description><![CDATA[What is Access Log?
Access logs in Elastic Load Balancing is an optional feature, and it comes disabled by default. Once you activate/enable access logs for your load balancer, Elastic Load Balancing captures and stores the logs in the specified Amaz...]]></description><link>https://blog.gepal.cz/application-load-balancer-access-log-management</link><guid isPermaLink="true">https://blog.gepal.cz/application-load-balancer-access-log-management</guid><category><![CDATA[ELB]]></category><category><![CDATA[Amazon ELB]]></category><category><![CDATA[Access Log]]></category><category><![CDATA[AWS]]></category><dc:creator><![CDATA[George Palangattil]]></dc:creator><pubDate>Tue, 23 Jan 2024 08:39:05 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1706438452244/418dc8b6-9df8-413b-a219-5252d2df0ec8.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-what-is-access-log">What is Access Log?</h3>
<p>Access logs in Elastic Load Balancing is an optional feature, and it comes disabled by default. Once you activate/enable access logs for your load balancer, Elastic Load Balancing captures and stores the logs in the specified Amazon S3 bucket in compressed file format. Disabling access logs can be done at any point in time. For every load balancer node, Elastic Load Balancing generates a log file every 5 minutes. The delivery of logs follows an eventually consistent model. Each log file includes details such as the time of request receipt, client IP addresses, latencies, request paths, and server responses. You must create S3 bucket for access logs before you enable the access logs.</p>
<h3 id="heading-setup-s3-bucket">Setup S3 Bucket</h3>
<ul>
<li><p>The bucket must be located in the same Region as the load balancer.</p>
</li>
<li><p>The bucket and the load balancer can be in same or different account.</p>
</li>
</ul>
<p>-&gt; Connect the AWS Console and Open the Amazon S3 console<br />-&gt; Select <strong>Create Bucket</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705993533633/f57135e1-110a-4320-94ea-98c057dba0ac.png" alt class="image--center mx-auto" /></p>
<p>-&gt; Select the region of the bucket<br />-&gt; Enter the name of the bucket<br />-&gt; Scroll down<br />-&gt; Select the default encryption, Amazon S3-managed keys (SSE-S3)<br />-&gt; Select Create bucket</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705993841318/1149c04a-52c2-4173-94b5-83cf2077f02e.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705994013209/72fea1ed-8f6a-46c0-8a86-c6deabad330b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705994119894/498ce5a4-fac2-4401-a57e-e1aa603cce25.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-attach-bucket-policy">Attach bucket policy</h3>
<p>S3 bucket must have a bucket policy that grants Elastic Load Balancing permission to write the access logs to the bucket.</p>
<p>-&gt; Connect the AWS Console and Open the Amazon S3 console<br />-&gt; Select your bucket</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705994378785/78f39161-6ead-48fc-96f4-34fd9fafa780.png" alt class="image--center mx-auto" /></p>
<p>-&gt; Select Permission tab<br />-&gt; Select <strong>Edit</strong> under Bucket policy</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705994585807/8615842f-a405-4417-9eb3-de6d0178b61c.png" alt class="image--center mx-auto" /></p>
<p>-&gt; Replace the account ID mentioned in the principal. This AWS account is managed by AWS and you have to select the one which assigned to each region.<br />-&gt; Scroll Down and Select Save Changes</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705997499814/4a995c70-46cc-4b6a-9863-09590fe91278.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-enable-and-configure-the-access-logs">Enable and Configure the Access logs</h3>
<p>-&gt; Navigate to the Amazon EC2 Console<br />-&gt; Select Load Balancers from the left navigation pane</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705996418295/ace28046-b7a1-481c-9aaa-24df087ea364.png" alt class="image--center mx-auto" /></p>
<p>-&gt; Select the attribute tab<br />-&gt; Select Edit under the attributes</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705996745081/80f310d0-9055-42bc-b61c-ec6f3f8a044a.png" alt class="image--center mx-auto" /></p>
<p>-&gt; Scroll down the edit page<br />-&gt; <strong>Enable</strong> access logs under Monitoring section<br />-&gt; Select Browse for selecting the bucket</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705997028509/0f7df5b8-3bee-4b5d-bc14-e68129422ee7.png" alt class="image--center mx-auto" /></p>
<p>-&gt; Select the radio button of the bucket<br />-&gt; Select Choose button on the popup window</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705997241407/28d7364d-26c1-4ff2-a80f-aa6be6a22c33.png" alt class="image--center mx-auto" /></p>
<p>-&gt; Select Save Changes</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705998208760/988da0d1-d774-431c-b521-f0adcd93b152.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705998295753/23507e99-4ee3-47dc-a33f-bd3b0f02a4cf.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-validation">Validation</h3>
<p>-&gt; Navigate to Amazon S3 Console<br />-&gt; Select the Access logs repository bucket<br />-&gt; Navigate to the test log file Eg: <em>repo-bucket/AWSLogs/aws account ID/ELBAccessLogTestFile</em></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705998920305/6bfab078-40cb-49b9-aef7-de575a62a44d.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-clean-up">Clean Up</h3>
<p>As this is a testing environment, you may not need to retain the AWS resources used for creating this lab. Therefore, delete the AWS resources you allocated to avoid incurring further charges.</p>
]]></content:encoded></item><item><title><![CDATA[Mastering Static Website Hosting and Management with Amazon S3]]></title><description><![CDATA[What is a Static Website
A static website is a site that delivers pages using a set number of pre-built files crafted from HTML, CSS, and JavaScript. A static website lacks backend server-side processing and a database. Any 'dynamic' functionality li...]]></description><link>https://blog.gepal.cz/mastering-static-website-hosting-and-management-with-amazon-s3</link><guid isPermaLink="true">https://blog.gepal.cz/mastering-static-website-hosting-and-management-with-amazon-s3</guid><category><![CDATA[AWS]]></category><category><![CDATA[Amazon S3]]></category><category><![CDATA[AWS Community Builder]]></category><dc:creator><![CDATA[George Palangattil]]></dc:creator><pubDate>Sat, 20 Jan 2024 17:58:05 GMT</pubDate><content:encoded><![CDATA[<h3 id="heading-what-is-a-static-website">What is a Static Website</h3>
<p>A static website is a site that delivers pages using a set number of pre-built files crafted from HTML, CSS, and JavaScript. A static website lacks backend server-side processing and a database. Any 'dynamic' functionality linked with the static site is carried out on the client side.</p>
<h3 id="heading-navigating-the-build">Navigating the Build</h3>
<ol>
<li><p>Deploy Your S3 Bucket</p>
</li>
<li><p>Enable Static Website on Your Bucket</p>
</li>
<li><p>Allow Public Access</p>
</li>
<li><p>Apply the Bucket Policy</p>
</li>
<li><p>Set Up Your Index File</p>
</li>
<li><p>Set Up Your Error File</p>
</li>
<li><p>Testing</p>
</li>
<li><p>Clean Up</p>
</li>
</ol>
<h3 id="heading-deploy-s3-bucket">Deploy S3 bucket</h3>
<p>Connect to the Amazon S3 Console and navigate to the <em>Create bucket</em> and click it.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705761335750/de23b998-5bc9-4943-b373-ef67860a5116.png" alt class="image--center mx-auto" /></p>
<p>-&gt; Select your region<br />-&gt; Enter your bucket name<br />-&gt; Scroll down to the end of the page<br />-&gt; Click <em>Create bucket</em> button.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705761721374/5c93021a-b217-483a-85d8-961933c3aa20.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705762121991/7515eac7-f712-401b-8877-4dab8007875a.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-enable-static-website-on-your-bucket">Enable Static Website on Your Bucket</h3>
<p>-&gt; Click on your bucket<br />-&gt; Select the properties tab<br />-&gt; Scroll down the end of the properties tab page</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705763571454/15caaea7-a5b9-4fe5-9d0f-d82587665197.png" alt class="image--center mx-auto" /></p>
<p>-&gt; Select <em>Edit</em> button on the <strong>Static website hosting</strong> form.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705763824292/b35fdf17-4347-4079-9164-5cce02d86987.png" alt class="image--center mx-auto" /></p>
<p>In the Static website hosting settings page:<br />-&gt; <strong>Enable</strong> the static web hosting<br />-&gt; Select the radio button for "<em>Use the bucket endpoint as the web address</em>".<br />-&gt; In Index document text box enter the file name of the index document. eg: index.html<br />-&gt; In error document text box, enter the file name of the error document. eg: error.html<br />-&gt; Scroll down and click on <strong>save changes</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705765468690/e0b014f8-d4d2-4780-966b-08b956e929a1.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-allow-public-access">Allow Public Access</h3>
<p>By default, Amazon blocks all public access to S3 buckets. To host the static website on an S3 bucket, we need to edit the block public access settings and allow it.<br />-&gt; Select and click on the bucket name<br />-&gt; Select the permission tab<br />-&gt; Click <strong>Edit</strong>, under <strong>Block public access (bucket settings)</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705766869548/1e9ace3d-cd89-4012-a85a-0051e166a614.png" alt class="image--center mx-auto" /></p>
<p>-&gt; Clear <strong>Block <em>all</em> public access</strong><br />-&gt; Select <strong>Save changes</strong><br /><strong>-&gt;</strong> Type "confirm" in the pop up screen and select "confirm"</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705766992872/324f702a-8a8b-4a0c-8283-fb6bd12d9e97.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-apply-the-bucket-policy">Apply the Bucket Policy</h3>
<p>Due to the enabled public access, it is necessary to secure our bucket with a bucket policy. The policy will grant only public read access to our bucket, allowing anyone on the internet to access it.</p>
<p>-&gt; Select the bucket and choose the permission tab<br />-&gt; Select <strong>Edit</strong> under <strong>Bucket Policy</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705768665263/25ef4f14-0202-46a0-9d71-341b631b6342.png" alt class="image--center mx-auto" /></p>
<p>-&gt; Add the required policy in policy editor<br />-&gt; Make confirm the ARN of the bucket.<br />-&gt; Scroll down and select <strong>Save Changes</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705769012620/97d0635e-cfd1-43d6-88b3-a430d4ba2524.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-set-up-your-index-file">Set Up Your Index File</h3>
<p>Now the time to upload your index file to the S3 bucket. File name should be the exact name that you provider earlier in the index document file name section.<br />-&gt; Select your bucket<br />-&gt; Select Object tab<br />-&gt; Upload the file by clicking the upload button or drag and drop the file to console</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705771628447/a6f08849-e7e1-4d4c-9514-d00772b8a1be.png" alt class="image--center mx-auto" /></p>
<p>-&gt; Verify your file<br />-&gt; Select upload button in down of the page</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705771838838/59cfac1f-b896-4cfe-93da-6f7a2098659a.png" alt class="image--center mx-auto" /></p>
<p>-&gt; Select he <strong>close</strong> button on the upload status page</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705771987119/cc9a720b-8061-43f7-8efd-a467fecdfebc.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-set-up-your-error-file">Set Up Your Error File</h3>
<p>Upload your error document to the bucket the same way you uploaded the index document.<br />-&gt; Now you can see both the index and error document in the bucket</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705772406433/6b3413ad-9721-4a07-8bc0-75eb6befc058.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-testing">Testing</h3>
<p>-&gt; Select your bucket properites<br />-&gt; Scroll down and slect your <strong>Bucket website endpoint</strong> under <strong>Static website hosting</strong> section</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705772937558/58c1b138-0304-4d62-8218-aa1f7d680dc1.png" alt class="image--center mx-auto" /></p>
<p>-&gt; Use a new browser window and open the endpoint website<br />-&gt; It will open your index document</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1705773144628/a76258d1-1635-4893-a402-6a19245e6940.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-clean-up">Clean up</h3>
<p>As this is a testing environment, you may not need to retain the AWS resources used for creating this static website. Therefore, delete the AWS resources you allocated to avoid incurring further charges.<br /><strong>Note:</strong> After deleting these resources, your website will no longer be available.</p>
]]></content:encoded></item></channel></rss>