<?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[Robert Kruk IT Professional]]></title><description><![CDATA[I am an AWS Certified Solutions Architect & AWS Certified Developer, working in Brisbane, Australia
]]></description><link>https://robertkruk.me</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1618398724076/Cam4Sf6Vh.png</url><title>Robert Kruk IT Professional</title><link>https://robertkruk.me</link></image><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Apr 2026 08:04:04 GMT</lastBuildDate><atom:link href="https://robertkruk.me/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[AWS PostgreSQL Demo - Database Audit Trail Solution]]></title><description><![CDATA[AWS PostgreSQL Demo Project
The Problem: "Who Accessed The Database?"

When your database audit trail looks like this...
I built an AWS PostgreSQL demonstration that solves the critical question: "Who accessed what data and when?" This project addres...]]></description><link>https://robertkruk.me/aws-postgresql-demo-database-audit-trail-solution</link><guid isPermaLink="true">https://robertkruk.me/aws-postgresql-demo-database-audit-trail-solution</guid><dc:creator><![CDATA[Robert Kruk]]></dc:creator><pubDate>Thu, 11 Sep 2025 01:00:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/9XAnXWHu9_4/upload/ded040cde751a5d15eb7567fbd65aa3f.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-aws-postgresql-demo-project">AWS PostgreSQL Demo Project</h1>
<h2 id="heading-the-problem-who-accessed-the-database">The Problem: "Who Accessed The Database?"</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1759098597763/282831aa-554c-4376-b8cb-23cd173d527d.gif" alt="Who accessed the database?" />
<em>When your database audit trail looks like this...</em></p>
<p>I built an AWS PostgreSQL demonstration that solves the critical question: <strong>"Who accessed what data and when?"</strong> This project addresses the common issue of shared database credentials where multiple engineers use the same login, making it impossible to trace individual database actions or maintain proper audit trails.</p>
<h2 id="heading-full-project-details">🚀 Full Project Details</h2>
<p><strong><a target="_blank" href="https://robertkruk.github.io/aws-pgsql-demo/">View the complete project →</a></strong></p>
<p>The project page includes:</p>
<ul>
<li>🎬 <strong>Live demo videos</strong> showing PII masking and audit trails</li>
<li>📊 <strong>Architecture diagrams</strong> with detailed explanations  </li>
<li>🔧 <strong>Step-by-step setup</strong> instructions</li>
<li>💡 <strong>Security best practices</strong> and recommendations</li>
<li>📝 <strong>Complete documentation</strong> for replication</li>
</ul>
<h2 id="heading-quick-overview">Quick Overview</h2>
<p><strong>What it demonstrates:</strong></p>
<ul>
<li>AWS Aurora PostgreSQL Serverless with PGaudit logging</li>
<li>Individual accountability through unique database logins</li>
<li>PII data masking for internal engineers</li>
<li>Complete audit trails streamed to CloudWatch</li>
<li>Infrastructure as Code using AWS CDK</li>
</ul>
<p><strong>Key benefits:</strong></p>
<ul>
<li>✅ Track who accessed what data and when</li>
<li>✅ Enhanced security and compliance posture</li>
<li>✅ Individual engineer accountability</li>
<li>✅ Automated infrastructure deployment</li>
<li>✅ Cost-effective serverless architecture</li>
</ul>
<h2 id="heading-repository">Repository</h2>
<p><strong><a target="_blank" href="https://github.com/robertkruk/aws-pgsql-demo">GitHub Repository →</a></strong></p>
<blockquote>
<p><strong>Note</strong>: Remember to run <code>npx cdk destroy</code> after testing to avoid ongoing AWS charges!
{: .prompt-warning }</p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[Boosting AWS ECS Load Time]]></title><description><![CDATA[Recently I was using ECS on AWS with attached EFS storage, running a spikey workload. We encountered challenges with slow load times and redeployment issues, which we resolved by implementing Elastic Throughput mode for EFS.
The Problem: Slow Storage...]]></description><link>https://robertkruk.me/boosting-aws-ecs-load-time</link><guid isPermaLink="true">https://robertkruk.me/boosting-aws-ecs-load-time</guid><category><![CDATA[AWS]]></category><category><![CDATA[Amazon EFS]]></category><category><![CDATA[ECS]]></category><dc:creator><![CDATA[Robert Kruk]]></dc:creator><pubDate>Wed, 24 May 2023 07:12:01 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/hfiym43qBpk/upload/6d88683e7713d924375406f0d04f36d9.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Recently I was using ECS on AWS with attached EFS storage, running a spikey workload. We encountered challenges with slow load times and redeployment issues, which we resolved by implementing Elastic Throughput mode for EFS.</p>
<h3 id="heading-the-problem-slow-storage-layer">The Problem: Slow Storage Layer</h3>
<p>After a thorough examination, we noticed that while our ECS instance seemed to function properly during regular operations, it encountered significant challenges during redeployments. These issues manifested as prolonged load times and deployment complications. In certain cases, the ECS instance would even become trapped in a death loop, repeatedly failing health checks upon service restarts. Our investigation revealed that the root cause of these problems lay within the EFS storage layer. Specifically, the default Burst mode, which imposed throughput limitations determined by the file system's size, was leading to delays and performance bottlenecks within our application.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1684911412262/c98a7b67-6940-4efc-980c-24a6f5204e73.png" alt class="image--center mx-auto" /></p>
<p><em>Bursting throughput utilization was reaching its limits.</em></p>
<h3 id="heading-the-solution-elastic-throughput-mode">The Solution: Elastic Throughput Mode</h3>
<p>To address the issue, we decided to leverage Elastic Throughput mode for EFS, as recommended by AWS for workloads with unpredictable or spiky characteristics. This mode dynamically adjusts the throughput based on network traffic and the stored data volume. Further details can be found here: <a target="_blank" href="https://docs.aws.amazon.com/efs/latest/ug/performance.html#throughput-modes">https://docs.aws.amazon.com/efs/latest/ug/performance.html#throughput-modes</a></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1684911488106/0845770a-c319-4e5f-aba7-6929a3a5a51e.png" alt class="image--center mx-auto" /></p>
<p><em>By utilizing Elastic Throughput, we no longer encounter any "utilization warning."</em></p>
<h3 id="heading-the-results-improved-load-time-and-redeployment">The Results: Improved Load Time and Redeployment</h3>
<p>Upon configuring EFS to use Elastic Throughput mode, <mark>we witnessed a substantial enhancement in load and redeployment times</mark>. The ECS task now takes approximately 8 minutes to redeploy, compared to over 15 minutes previously. Additionally, the web gateway (service) restart time matches the ECS task boot time at around 2.5 minutes. We have also eliminated any issues with the health check or the ECS task terminating itself.</p>
<h3 id="heading-conclusion-efs-elastic-mode-for-the-win">Conclusion - EFS Elastic Mode for the Win</h3>
<p>We are extremely pleased with the positive outcomes resulting from the adoption of Elastic Throughput mode for EFS. It has significantly reduced our load and redeployment times by <mark>nearly half</mark> while <mark>enhancing application reliability and performance.</mark> If you are utilizing AWS ECS with EFS storage and spikey workloads, we highly recommend exploring this (Elastic Throughput) mode and experiencing the difference firsthand.</p>
]]></content:encoded></item><item><title><![CDATA[Conecting to AWS CodeCommit using SSO]]></title><description><![CDATA[AWS CodeCommit using SSO
Using this method, you can quickly and easily switch between GIT repositories owned by different groups or even managed in separate AWS accounts.

User access is controlled with federated login via AWS SSO
You can grant acces...]]></description><link>https://robertkruk.me/conecting-to-aws-codecommit-using-sso</link><guid isPermaLink="true">https://robertkruk.me/conecting-to-aws-codecommit-using-sso</guid><category><![CDATA[AWS]]></category><dc:creator><![CDATA[Robert Kruk]]></dc:creator><pubDate>Wed, 09 Jun 2021 01:23:01 GMT</pubDate><content:encoded><![CDATA[<h1 id="aws-codecommit-using-sso">AWS CodeCommit using SSO</h1>
<p>Using this method, you can quickly and easily switch between GIT repositories owned by different groups or even managed in separate AWS accounts.</p>
<ul>
<li>User access is controlled with federated login via AWS SSO</li>
<li>You can grant access using AWS native authentication, which eliminates the need for a Git credential helper, SSH, and GPG keys.</li>
<li>Allows the administrator to control access by adding or removing the user’s IAM role access</li>
</ul>
<h2 id="overview">Overview</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1623201742390/mdmyDhEZ7.png" alt="1ArchDiagram.png" />
SRC: <a target="_blank" href="https://aws.amazon.com/blogs/devops/federated-multi-account-access-for-aws-codecommit/">https://aws.amazon.com/blogs/devops/federated-multi-account-access-for-aws-codecommit/</a></p>
<p>(!) This guide assumes you already have SSO access and permissions setup</p>
<h2 id="instructions">Instructions</h2>
<p>There are prerequisites to be installed on the local machine.</p>
<h3 id="prerequisites">Prerequisites</h3>
<ul>
<li>Python 3.6 or higher installed on the developer’s local machine.<ul>
<li>See the <a target="_blank" href="https://www.python.org/">Python website.</a></li>
<li>For Mac OSX see the following <a target="_blank" href="https://github.com/pyenv/pyenv">GitHub repo</a>.</li>
</ul>
</li>
<li>Git installed on your local machine.<ul>
<li>To download Git, see <a target="_blank" href="http://git-scm.com/downloads">Git Downloads</a>.</li>
</ul>
</li>
<li>PIP version 9.0.3 or higher installed on your local machine.<ul>
<li>For instructions, see <a target="_blank" href="https://pip.pypa.io/en/stable/installing/">Installation</a> on the PIP website.</li>
</ul>
</li>
<li>AWS CLI - <a target="_blank" href="http://aws.amazon.com/cli">AWS Command Line Interface</a> - AWS CLI v2 can easily be installed on most standard platforms:</li>
<li><a target="_blank" href="https://awscli.amazonaws.com/AWSCLIV2.pkg">MacOS pkg installer</a></li>
<li><a target="_blank" href="https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip">Linux executable installer</a></li>
<li><a target="_blank" href="https://awscli.amazonaws.com/AWSCLIV2.msi">Windows MSI installer</a></li>
<li>You can find more detailed installation <a target="_blank" href="https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html">instructions here</a></li>
<li>Alternatively,<ul>
<li>you can use PIP - <a target="_blank" href="https://pypi.org/project/awscli/">awscli · PyPI</a> - <code>pip install awscli</code></li>
<li>or use <a target="_blank" href="https://brew.sh/">homebrew</a> (OSX only) - <code>brew install awscli</code></li>
</ul>
</li>
</ul>
<h3 id="enabling-aws-sso-login">Enabling AWS SSO login</h3>
<p>Enable is AWS SSO login from the <a target="_blank" href="http://aws.amazon.com/cli">AWS Command Line Interface</a> (AWS CLI) on our local machine.</p>
<ol>
<li>Run the following command from the AWS CLI.</li>
</ol>
<pre><code>aws configure sso
SSO <span class="hljs-keyword">start</span> <span class="hljs-keyword">URL</span> [<span class="hljs-keyword">None</span>]: &lt;https://mydomain-aws.awsapps.com/<span class="hljs-keyword">start</span>&gt;
SSO region [<span class="hljs-keyword">None</span>]: ap-southeast<span class="hljs-number">-2</span>
</code></pre><ol>
<li>You’re redirected to your default browser.<ol>
<li>Sign in and you should see the following</li>
</ol>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1623201706481/CEaK2usXV.png" alt="awssso.png" /></p>
<ol>
<li>When you return to the CLI, you must choose your account. See the following code example:</li>
</ol>
<pre><code>There are <span class="hljs-number">2</span> AWS accounts available <span class="hljs-keyword">to</span> you.
&gt; DeveloperResearch, developer-account-<span class="hljs-keyword">admin</span>@example.com (<span class="hljs-number">123456789123</span>)
DeveloperTrading, trading-account-<span class="hljs-keyword">admin</span>@example.com (<span class="hljs-number">123456789444</span>)
</code></pre><ol>
<li>Choose the account with your CodeCommit repository; e.g. Pick DeveloperResearch</li>
</ol>
<blockquote>
<p>DeveloperResearch, developer-account-admin@example.com (123456789123)</p>
</blockquote>
<ol>
<li>Next, you see the permissions sets available to you in the account you just picked</li>
</ol>
<pre><code><span class="hljs-keyword">Using</span> the account ID <span class="hljs-number">123456789123</span>
There are <span class="hljs-number">2</span> roles available <span class="hljs-keyword">to</span> you.
&gt; ReadOnly
CodeCommitDeveloperAccess
</code></pre><ol>
<li>Enter the following</li>
</ol>
<pre><code>CLI <span class="hljs-keyword">default</span> client Region [<span class="hljs-keyword">None</span>]: ap-southeast<span class="hljs-number">-2</span>&lt;ENTER&gt;
CLI <span class="hljs-keyword">default</span> output <span class="hljs-keyword">format</span> [<span class="hljs-keyword">None</span>]: <span class="hljs-type">json</span>&lt;ENTER&gt;
CLI profile <span class="hljs-type">name</span> [<span class="hljs-number">123456789011</span>_ReadOnly]: DevResearch-profile&lt;ENTER&gt;
</code></pre><ol>
<li><p>Repeat these steps for each AWS account you want to access.</p>
</li>
<li><p>Your <code>~/user/.aws/config</code> file will look something like the following:-</p>
</li>
</ol>
<p>[profile DevResearch]
sso_start_url = <a target="_blank" href="https://domain-aws.awsapps.com/start">https://domain-aws.awsapps.com/start</a>
sso_region = ap-southeast-2
sso_account_id = 123456789123
sso_role_name = DeveloperResearch
region = ap-southeast-2
output = json</p>
<p>(i) Now that we have CLI and SSO installed and set up, we just need to install the recently released git-remote-codecommit and start working with our Git repositories!</p>
<h3 id="installing-git-remote-codecommit">Installing git-remote-codecommit</h3>
<p>Install git-remote-codecommit with the following code:</p>
<p><code>pip install git-remote-codecommit</code></p>
<p>Clone the code from one of your repositories. For this use case, my CodeCommit repository is named <code>aws-foo-repo</code>.</p>
<pre><code><span class="hljs-attribute">git</span> clone codecommit://DevResearch@aws-foo-repo aws-foo-repo
<span class="hljs-attribute">Cloning</span> into 'aws-foo-repo'...
<span class="hljs-attribute">remote</span>: Counting objects: <span class="hljs-number">4597</span>, done.
<span class="hljs-attribute">Receiving</span> objects: <span class="hljs-number">100</span>% (<span class="hljs-number">4597</span>/<span class="hljs-number">4597</span>), <span class="hljs-number">19</span>.<span class="hljs-number">84</span> MiB | <span class="hljs-number">2</span>.<span class="hljs-number">61</span> MiB/s, done.
<span class="hljs-attribute">Resolving</span> deltas: <span class="hljs-number">100</span>% (<span class="hljs-number">2910</span>/<span class="hljs-number">2910</span>), done.
</code></pre><p>You can also now perform CLI using --profile DevResearch; e.g.</p>
<p><code>aws s3 ls --profile DevResearch</code></p>
<p>You can also integrate into <a target="_blank" href="https://code.visualstudio.com/">VisualStudio Code</a></p>
]]></content:encoded></item><item><title><![CDATA[No drama lama]]></title><description><![CDATA[No dramas]]></description><link>https://robertkruk.me/no-drama-lama</link><guid isPermaLink="true">https://robertkruk.me/no-drama-lama</guid><category><![CDATA[blog]]></category><dc:creator><![CDATA[Robert Kruk]]></dc:creator><pubDate>Thu, 22 Apr 2021 08:53:50 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1619081588559/Lq4reqFjV.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>No dramas</p>
]]></content:encoded></item><item><title><![CDATA[Lets bee friends...]]></title><description><![CDATA[Today I saved a native bee 🐝 that was stuck inside…. 
 Video 
In return I received two jars of honey 🍯 from @beeonethird #lawofattraction #honey #serendipity BeeOneThird]]></description><link>https://robertkruk.me/lets-bee-friends</link><guid isPermaLink="true">https://robertkruk.me/lets-bee-friends</guid><category><![CDATA[blog]]></category><dc:creator><![CDATA[Robert Kruk]]></dc:creator><pubDate>Fri, 16 Apr 2021 05:31:49 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1619268441545/25r4jZ5Kl.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Today I saved a native bee 🐝 that was stuck inside…. </p>
<p> <a target="_blank" href="https://www.instagram.com/p/CNrldUwgBOF/?utm_source=ig_web_copy_link">Video</a> </p>
<p>In return I received two jars of honey 🍯 from @beeonethird #lawofattraction #honey #serendipity <a target="_blank" href="https://www.instagram.com/p/CNrldUwgBOF/?utm_source=ig_web_copy_link">BeeOneThird</a> 
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1618550925786/n8dGFKLzd.png" alt="iu.png" /></p>
]]></content:encoded></item><item><title><![CDATA[Exit...]]></title><description><![CDATA[---> exit this way <---]]></description><link>https://robertkruk.me/exit</link><guid isPermaLink="true">https://robertkruk.me/exit</guid><category><![CDATA[blog]]></category><dc:creator><![CDATA[Robert Kruk]]></dc:creator><pubDate>Thu, 15 Apr 2021 01:37:17 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1619268501514/XLcUbmeIU.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1618450565654/GdogtNnxf.png" alt="Screen Shot 2021-04-14 at 9.11.54 pm.png" /></p>
<p>---&gt; exit this way &lt;---</p>
]]></content:encoded></item><item><title><![CDATA[Hello World!]]></title><description><![CDATA[This is a test
Hello World]]></description><link>https://robertkruk.me/hello-world</link><guid isPermaLink="true">https://robertkruk.me/hello-world</guid><category><![CDATA[test]]></category><dc:creator><![CDATA[Robert Kruk]]></dc:creator><pubDate>Wed, 14 Apr 2021 10:07:20 GMT</pubDate><content:encoded><![CDATA[<p>This is a test</p>
<p><code>Hello World</code> </p>
]]></content:encoded></item></channel></rss>