<?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" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Tiago Rodrigues]]></title><description><![CDATA[Dipping into programming one toe at a time.]]></description><link>https://tig.pt/</link><image><url>https://tig.pt/favicon.png</url><title>Tiago Rodrigues</title><link>https://tig.pt/</link></image><generator>Ghost 5.25</generator><lastBuildDate>Sun, 14 Jul 2024 10:40:19 GMT</lastBuildDate><atom:link href="https://tig.pt/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Terraform AWS IAM Role Errors DNS]]></title><description><![CDATA[<p>This is not the first time, and if you are out there and seeing a similar error, this may be the soltuion you are looking for.</p><pre><code>terraform plan

Planning failed. Terraform encountered an error while generating this plan.

&#x2577;
&#x2502; Error: configuring Terraform AWS Provider: IAM Role (arn:aws:iam:</code></pre>]]></description><link>https://tig.pt/terraform-aws-iam-role-errors-dns/</link><guid isPermaLink="false">65f422056b844c0001665b08</guid><dc:creator><![CDATA[Tiago Rodrigues]]></dc:creator><pubDate>Fri, 15 Mar 2024 10:31:37 GMT</pubDate><content:encoded><![CDATA[<p>This is not the first time, and if you are out there and seeing a similar error, this may be the soltuion you are looking for.</p><pre><code>terraform plan

Planning failed. Terraform encountered an error while generating this plan.

&#x2577;
&#x2502; Error: configuring Terraform AWS Provider: IAM Role (arn:aws:iam::111222333444:role/YourRole) cannot be assumed.
&#x2502;
&#x2502; There are a number of possible causes of this - the most common are:
&#x2502;   * The credentials used in order to assume the role are invalid
&#x2502;   * The credentials do not have appropriate permission to assume the role
&#x2502;   * The role ARN is not valid
&#x2502;
&#x2502; AWS Error: operation error STS: AssumeRole, https response error StatusCode: 0, RequestID: , request send failed, Post &quot;https://sts.eu-central-1.amazonaws.com/&quot;: dial tcp: lookup sts.eu-central-1.amazonaws.com on [2001:8a0:6727:d900::1]:53: no such host
&#x2502;
&#x2502;
&#x2502;   with provider[&quot;registry.terraform.io/hashicorp/aws&quot;],
&#x2502;   on _provider.tf line 1, in provider &quot;aws&quot;:
&#x2502;    1: provider &quot;aws&quot; {
&#x2502;
&#x2575;
&#x2577;
&#x2502; Error: configuring Terraform AWS Provider: IAM Role (arn:aws:iam::111222333444:role/YourRole) cannot be assumed.
&#x2502;
&#x2502; There are a number of possible causes of this - the most common are:
&#x2502;   * The credentials used in order to assume the role are invalid
&#x2502;   * The credentials do not have appropriate permission to assume the role
&#x2502;   * The role ARN is not valid
&#x2502;
&#x2502; AWS Error: operation error STS: AssumeRole, https response error StatusCode: 0, RequestID: , request send failed, Post &quot;https://sts.eu-central-1.amazonaws.com/&quot;: dial tcp: lookup sts.eu-central-1.amazonaws.com on [2001:8a0:6727:d900::1]:53: no such host
&#x2502;
&#x2502;
&#x2502;   with provider[&quot;registry.terraform.io/hashicorp/aws&quot;].dev,
&#x2502;   on _provider.tf line 18, in provider &quot;aws&quot;:
&#x2502;   18: provider &quot;aws&quot; {</code></pre><p>All my logins where right, I was using them all along, even more, I have a differnt CLI window open on my computer with the same login working just fine.</p><p>Then my eyes glased at something: </p><pre><code>dial tcp: lookup sts.eu-central-1.amazonaws.com on [2001:8a0:6727:d900::1]:53: no such host</code></pre><p>Hum, no such host? port 53 ? is this a DNS error?</p><p>I quickly changed my DNS from the default ISP (shame on you Altice) to CloudFlare ones:</p><pre><code>1.1.1.1
1.0.0.1
2606:4700:4700::1111
2606:4700:4700::1001</code></pre><p>Guess what, problem solved, my Terraform is working again, it was not an IAM error at all, it was all about the DNS caches on my ISP.</p><p>Next time you see a STS error, consider changing your DNS to a different provider and may save you some unicorn hunt.x</p>]]></content:encoded></item><item><title><![CDATA[New AWS Game on AWSary v1.4.0]]></title><description><![CDATA[<p>&#x1F680; Exciting News Alert! &#x1F680;<br><br>I&apos;m thrilled to announce the latest update to our AWSary mobile app - introducing a brand new feature that takes learning about AWS services to a whole new level: the AWSary Logo Challenge Game! &#x1F3AE;&#x1F4A1;<br><br>At AWS re:invent 2023 <a href="https://www.linkedin.com/in/gruizesteban/">Guillermo Ruiz</a></p>]]></description><link>https://tig.pt/new-aws-game-on-awsary-v1-4-0/</link><guid isPermaLink="false">65c0e4a96b844c0001665af6</guid><dc:creator><![CDATA[Tiago Rodrigues]]></dc:creator><pubDate>Mon, 05 Feb 2024 13:39:55 GMT</pubDate><media:content url="https://tig.pt/content/images/2024/02/Screenshot-2024-02-05-at-11.24.46.png" medium="image"/><content:encoded><![CDATA[<img src="https://tig.pt/content/images/2024/02/Screenshot-2024-02-05-at-11.24.46.png" alt="New AWS Game on AWSary v1.4.0"><p>&#x1F680; Exciting News Alert! &#x1F680;<br><br>I&apos;m thrilled to announce the latest update to our AWSary mobile app - introducing a brand new feature that takes learning about AWS services to a whole new level: the AWSary Logo Challenge Game! &#x1F3AE;&#x1F4A1;<br><br>At AWS re:invent 2023 <a href="https://www.linkedin.com/in/gruizesteban/">Guillermo Ruiz</a> challenged me to tweak my app and add a game so he can use on AWS Summits and Cloud Days. &quot;Do you want to get a t-shirt or socks, well you have 5 attempts to guess the AWS service name just looking at its logo.&quot;<br><br>In this fun and engaging game, you&apos;ll be put to the test as you&apos;re challenged to recall AWS service names just by looking at their logos. It&apos;s a fantastic way to sharpen your AWS knowledge while having a blast!<br><br>Whether you&apos;re new to AWS or a seasoned pro, the AWSary Logo Challenge Game offers something for everyone. It&apos;s a fantastic addition to our app, designed to make learning about AWS services more enjoyable and memorable.<br><br>Download the latest update of AWSary today on the App Store - let&apos;s see who&apos;s the ultimate AWS expert! &#x1F4AA;&#x1F525;</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://apps.apple.com/us/app/awsary-aws-dictionary/id1634871091"><div class="kg-bookmark-content"><div class="kg-bookmark-title">&#x200E;AWSary - AWS Dictionary</div><div class="kg-bookmark-description">&#x200E;AWSary is the ultimate resource for AWS Cloud Consultants, students, and anyone looking to stay up-to-date with AWS services. With this app, you&#x2019;ll have access to a comprehensive AWS dictionary, allowing you to easily search and learn about various AWS services. With this app, you&#x2019;ll have access t&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://apps.apple.com/favicon.ico" alt="New AWS Game on AWSary v1.4.0"><span class="kg-bookmark-author">App Store</span><span class="kg-bookmark-publisher">Tiago Rodrigues</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple126/v4/40/af/36/40af36aa-cae8-ff40-1c6f-fc57b851bd0d/AppIcon-0-0-1x_U007emarketing-0-2-0-85-220.png/1200x630wa.png" alt="New AWS Game on AWSary v1.4.0"></div></a></figure><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/c0SjbhRR3lk?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen title="AWSary v1.4.0 release"></iframe></figure>]]></content:encoded></item><item><title><![CDATA[Yet another AWS Terraform Backend on S3 + DynamoDB]]></title><description><![CDATA[<p>Every time I start an AWS project, I have the same issue, what Terraform backend to use?<br><br>I love the <a href="https://developer.hashicorp.com/terraform/language/settings/backends/s3">AWS S3 + DynamoDB</a> backend solution but this just covers the basics, you want your Terraform State to be protected from client misbehavior or human error. Yes, I&apos;ve been</p>]]></description><link>https://tig.pt/yet-another-aws-terraform-backend-on-s3-dynamodb/</link><guid isPermaLink="false">65bcbe346b844c0001665819</guid><dc:creator><![CDATA[Tiago Rodrigues]]></dc:creator><pubDate>Fri, 02 Feb 2024 10:37:32 GMT</pubDate><content:encoded><![CDATA[<p>Every time I start an AWS project, I have the same issue, what Terraform backend to use?<br><br>I love the <a href="https://developer.hashicorp.com/terraform/language/settings/backends/s3">AWS S3 + DynamoDB</a> backend solution but this just covers the basics, you want your Terraform State to be protected from client misbehavior or human error. Yes, I&apos;ve been on the end of the call where the customer used <a href="https://github.com/gruntwork-io/cloud-nuke">cloud-nuke</a> against the Terraform S3 bucket and we got a drift for the whole project. (yes I managed to import and recreate .tfstate for 500+ resources of the landing zone + applications accounts)</p><p>So every time I start a new project I hope to find some simple module that gives some extra protection as the S3 version enabled, deletion protection policy, object lock, DynamoDB table with point-in-time recovery, kms encryption, and so on.</p><p>Today I decided to make yet another attempt at solving this well, hope it is beneficial for others as well and that we can over time keep improving this module.<br><br><a href="https://registry.terraform.io/modules/tigpt/remote-state-s3-dynamodb-backend/aws/latest">https://registry.terraform.io/modules/tigpt/remote-state-s3-dynamodb-backend/aws/latest</a></p><p>Let&apos;s break it down on how to use it:</p><pre><code class="language-Terraform">module &quot;remote-state-s3-dynamodb-backend&quot; {
  source  = &quot;tigpt/remote-state-s3-dynamodb-backend/aws&quot;
  version = &quot;1.0.1&quot;

  name = &quot;my-terraform-backend&quot;

  tags = {
    terraform = &quot;true&quot;
  }
}</code></pre><p>So you call the module with source and pin a version, of course.<br>Then you name it, this should have some project related name, example business unit or account, I like to name something like <code>landingzone</code> or <code>network-production</code>, even <code>application-dev</code>.</p><p>You can as well pass some tags because everyone loves tags and they are an important asset.</p><p>Let&apos;s break out the module into parts:</p><pre><code class="language-Terraform">&#x251C;&#x2500;&#x2500; dynamodb.tf
&#x251C;&#x2500;&#x2500; outputs.tf
&#x251C;&#x2500;&#x2500; random.tf
&#x251C;&#x2500;&#x2500; s3.tf
&#x251C;&#x2500;&#x2500; variables.tf
&#x2514;&#x2500;&#x2500; versions.tf</code></pre><p>Each file should be self-explanatory, but let&apos;s dig into them, DynamoDB first.</p><pre><code class="language-Terraform">#############################
#--- DynamoDB State Lock ---#
#############################

module &quot;dynamodb_table&quot; {
  source  = &quot;terraform-aws-modules/dynamodb-table/aws&quot;
  version = &quot;4.0.0&quot;

  name     = &quot;tf-${var.name}-${random_integer.random.id}-locktable&quot;
  hash_key = &quot;LockID&quot;

  attributes = [
    {
      name = &quot;LockID&quot;
      type = &quot;S&quot;
    }
  ]

  deletion_protection_enabled    = true
  point_in_time_recovery_enabled = true

  server_side_encryption_enabled     = true
  server_side_encryption_kms_key_arn = aws_kms_key.dynamodb.arn

  tags = merge(
    var.tags,
    {
      &quot;Name&quot; = format(&quot;%s&quot;, var.name)
    },
  )
}

resource &quot;aws_kms_key&quot; &quot;dynamodb&quot; {
  description             = &quot;KMS key is used to encrypt bucket objects&quot;
  deletion_window_in_days = 7

  tags = merge(
    var.tags,
    {
      &quot;Name&quot; = format(&quot;%s&quot;, var.name)
    },
  )
}</code></pre><p>I love the <a href="https://registry.terraform.io/namespaces/terraform-aws-modules ">Terraform AWS modules</a> so we leverage them as much as possible to make the DynamoDB table, we then add some naming conventions to the input <code>name</code> that comes from the <code>variables.tf</code> as well as a random generated from <code>random.tf</code> to make sure names are unique (especially important for S3).</p><p>Then it&apos;s time to configure deletion_protection, point_in_time_recovery as well as encritpions with KMS key that we create.</p><p>Next the <code>s3.tf</code></p><pre><code class="language-Terraform">###########################
#--- S3 Backend Bucket ---#
###########################

module &quot;s3_bucket&quot; {
  source  = &quot;terraform-aws-modules/s3-bucket/aws&quot;
  version = &quot;4.1.0&quot;

  bucket = &quot;tf-${var.name}-${random_integer.random.id}-state&quot;
  acl    = &quot;private&quot;

  object_lock_enabled = true
  control_object_ownership          = true
  object_ownership                  = &quot;ObjectWriter&quot;
  attach_deny_incorrect_kms_key_sse = true
  allowed_kms_key_arn               = aws_kms_key.objects.arn

  server_side_encryption_configuration = {
    rule = {
      apply_server_side_encryption_by_default = {
        kms_master_key_id = aws_kms_key.objects.arn
        sse_algorithm     = &quot;aws:kms&quot;
      }
    }
  }

  force_destroy = true

  versioning = {
    enabled = true
  }
  attach_policy = true
  policy        = &lt;&lt;POLICY
{
  &quot;Statement&quot;: [
    {
      &quot;Sid&quot;: &quot;bucket-delete-protection&quot;,
      &quot;Action&quot;: [
        &quot;s3:DeleteBucket&quot;
      ],
      &quot;Effect&quot;: &quot;Deny&quot;,
      &quot;Resource&quot;: &quot;arn:aws:s3:::tf-${var.name}-${random_integer.random.id}-state&quot;,
      &quot;Principal&quot;: {
        &quot;AWS&quot;: [
          &quot;*&quot;
        ]
      }
    }
  ]
}
POLICY

  tags = merge(
    var.tags,
    {
      &quot;Name&quot; = format(&quot;%s&quot;, var.name)
    },
  )
}

resource &quot;aws_kms_key&quot; &quot;objects&quot; {
  description             = &quot;KMS key is used to encrypt bucket objects&quot;
  deletion_window_in_days = 7

  tags = merge(
    var.tags,
    {
      &quot;Name&quot; = format(&quot;%s&quot;, var.name)
    },
  )
}</code></pre><p>Once again we start with the Terraform AWS modules of S3 and configure the bucket as private as well as activate object_lock, versioning, kms encryption but what I want and don&apos;t see a lot in other modules out there is a <code>S3:DeleteBucket</code> a policy that prevents all <code>principals</code> from deleting the bucket.</p><p>Well, I could do more, like an S3 bucket replication policy to a bucket on another account, but some people consider this overkill, so I do it specifically only for the projects/clients that want it.</p><p>Feel free to fork it and do a pull request for any change you consider necessary, I will keep this going as my default AWS S3 backend and keep evolving it as feel necessary.</p>]]></content:encoded></item><item><title><![CDATA[AWS re:cap 2023]]></title><description><![CDATA[<p>This week we had AWS re:cap in Lisbon, we had bad luck organising the event on the same day as the two major football teams in Lisbon played, Sporting and Benfica, but the core people attended the event anyway in <a href="https://codeforall.com/bootcamp-programacao-fullstack-lp">Academia de C&#xF3;digo</a> office.</p><p>It was so</p>]]></description><link>https://tig.pt/aws-recap-2023/</link><guid isPermaLink="false">65bd46466b844c0001665916</guid><dc:creator><![CDATA[Tiago Rodrigues]]></dc:creator><pubDate>Mon, 29 Jan 2024 19:50:00 GMT</pubDate><media:content url="https://tig.pt/content/images/2024/02/DSC05496-1.JPG" medium="image"/><content:encoded><![CDATA[<img src="https://tig.pt/content/images/2024/02/DSC05496-1.JPG" alt="AWS re:cap 2023"><p>This week we had AWS re:cap in Lisbon, we had bad luck organising the event on the same day as the two major football teams in Lisbon played, Sporting and Benfica, but the core people attended the event anyway in <a href="https://codeforall.com/bootcamp-programacao-fullstack-lp">Academia de C&#xF3;digo</a> office.</p><p>It was so great to have finally <a href="https://www.linkedin.com/in/mariaencinar/">Mar&#xED;a Encinar</a> and <a href="https://www.linkedin.com/in/gruizesteban/">Guillermo Ruiz</a> in Lisbon, just to celebrate our 10th AWS User Group Lisbon event in 10 months.</p><p>Shout out to all AWS UG Leaders who have been doing a great job, but especially for &#xA0;<a href="https://www.linkedin.com/in/martinmueller88/">Martin M&#xFC;ller</a> has been a rock star keeping pushing the events.</p><p>We had some drinks afterward and shared experiences outside AWS world as well, it was awesome.</p><figure class="kg-card kg-image-card"><img src="https://tig.pt/content/images/2024/02/IMG_0264.jpeg" class="kg-image" alt="AWS re:cap 2023" loading="lazy" width="2000" height="1500" srcset="https://tig.pt/content/images/size/w600/2024/02/IMG_0264.jpeg 600w, https://tig.pt/content/images/size/w1000/2024/02/IMG_0264.jpeg 1000w, https://tig.pt/content/images/size/w1600/2024/02/IMG_0264.jpeg 1600w, https://tig.pt/content/images/size/w2400/2024/02/IMG_0264.jpeg 2400w" sizes="(min-width: 720px) 720px"></figure>]]></content:encoded></item><item><title><![CDATA[AWSary on Android]]></title><description><![CDATA[<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://play.google.com/store/apps/details?id=com.lzcalderaro.awsary"><div class="kg-bookmark-content"><div class="kg-bookmark-title">AWSary - Apps on Google Play</div><div class="kg-bookmark-description">AWS services dictionary</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://www.gstatic.com/android/market_images/web/favicon_v3.ico" alt><span class="kg-bookmark-author">Apps on Google Play</span><span class="kg-bookmark-publisher">Luiz Calderaro</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://play-lh.googleusercontent.com/JuXSeZ6KpQqx-n6D9CbGvw2tnSvAyA_iio92HHiiudU1lmkGvNOGolxZ6iv2-m_ZWyk" alt></div></a></figure><p>Finally, AWSary is available on Android.</p><p>About 4 Months ago, <a href="https://www.linkedin.com/in/luizcalderaro/">Luiz Calderaro</a> approached me to help port AWSary to Android, and I couldn&apos;t be more thrilled.</p><p>Luiz has found some time here and</p>]]></description><link>https://tig.pt/awsary-android/</link><guid isPermaLink="false">65be04836b844c0001665ac7</guid><dc:creator><![CDATA[Tiago Rodrigues]]></dc:creator><pubDate>Fri, 08 Dec 2023 09:27:00 GMT</pubDate><media:content url="https://tig.pt/content/images/2024/02/googleplayold.jpg" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://play.google.com/store/apps/details?id=com.lzcalderaro.awsary"><div class="kg-bookmark-content"><div class="kg-bookmark-title">AWSary - Apps on Google Play</div><div class="kg-bookmark-description">AWS services dictionary</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://www.gstatic.com/android/market_images/web/favicon_v3.ico" alt="AWSary on Android"><span class="kg-bookmark-author">Apps on Google Play</span><span class="kg-bookmark-publisher">Luiz Calderaro</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://play-lh.googleusercontent.com/JuXSeZ6KpQqx-n6D9CbGvw2tnSvAyA_iio92HHiiudU1lmkGvNOGolxZ6iv2-m_ZWyk" alt="AWSary on Android"></div></a></figure><img src="https://tig.pt/content/images/2024/02/googleplayold.jpg" alt="AWSary on Android"><p>Finally, AWSary is available on Android.</p><p>About 4 Months ago, <a href="https://www.linkedin.com/in/luizcalderaro/">Luiz Calderaro</a> approached me to help port AWSary to Android, and I couldn&apos;t be more thrilled.</p><p>Luiz has found some time here and there to sync with me and in no time we had an Android POC up and running. After some fine-tuning, we have today almost 100% feature parity between the 2 versions and I&apos;m happy to share that AWSary is available on Google Play.</p><p>Luiz is a true professional, fully autonomous, and just checking with me on some core ideas. We would not have an Android version if it wasn&apos;t for Luiz, all props go to him!</p><p>If you have an Android phone or tablet, test it out and share your feedback with us. We will make the source code public like the iOS version in the next months.</p>]]></content:encoded></item><item><title><![CDATA[AWS re:invent 2023]]></title><description><![CDATA[<p>This was my first re:invent and boy, oh boy, it was overwhelming in a good way. I want more!</p><p>It was my first time outside of Europe, and I have to say, jetlag is a real thing, with 8 hours difference I was waking up at 3 am every</p>]]></description><link>https://tig.pt/aws-re-invent-2023/</link><guid isPermaLink="false">65bd47fb6b844c000166593a</guid><dc:creator><![CDATA[Tiago Rodrigues]]></dc:creator><pubDate>Sun, 03 Dec 2023 19:52:00 GMT</pubDate><media:content url="https://tig.pt/content/images/2024/02/IMG_5887-1.jpeg" medium="image"/><content:encoded><![CDATA[<img src="https://tig.pt/content/images/2024/02/IMG_5887-1.jpeg" alt="AWS re:invent 2023"><p>This was my first re:invent and boy, oh boy, it was overwhelming in a good way. I want more!</p><p>It was my first time outside of Europe, and I have to say, jetlag is a real thing, with 8 hours difference I was waking up at 3 am every day and trying to enjoy the full day as if it was nothing, and you know what, the time just flys by in re:invent Las Vegas.</p><p>I was in re:invent as invite from ABW Grant, THANKS AWS Comunity Builder program for allowing me to have this experience, I sadly can&apos;t afford from my own finances to justify a 7.000&#x20AC; trip to Las Vegas, but if it&apos;s worth it, I definitly belive so.</p><p>You can have a lot of the AWS experience on <a href="https://www.youtube.com/@AWSEventsChannel/playlists">YouTube</a> but there is something that you can&apos;t replicate remotely, the vibe of all these AWS Comunity Builders, AWS Heros, and Amazonians who just want to share as much as possible, they want you to grow with them, they want your success!</p><p>I was lucky to meet other <a href="https://aws.amazon.com/training/aai/">AAIs</a> share my experiences as an AAI and learn from them as well.</p><p>No matter where you come from, or who you are, AWS re:invent will transform your cloud career to the next level.</p><p>If you can afford it, just don&apos;t think twice and go!</p><p>If you can&apos;t afford it, keep contributing to the community and you will see that like what happened to me, you may as well be elected to the AWS ABW Grant and have this once-in-a-lifetime opportunity.</p><p>Because pictures are worth thousands of words, here are some for you:</p><figure class="kg-card kg-image-card"><img src="https://tig.pt/content/images/2024/02/IMG_4009.jpeg" class="kg-image" alt="AWS re:invent 2023" loading="lazy" width="2000" height="1500" srcset="https://tig.pt/content/images/size/w600/2024/02/IMG_4009.jpeg 600w, https://tig.pt/content/images/size/w1000/2024/02/IMG_4009.jpeg 1000w, https://tig.pt/content/images/size/w1600/2024/02/IMG_4009.jpeg 1600w, https://tig.pt/content/images/size/w2400/2024/02/IMG_4009.jpeg 2400w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card"><img src="https://tig.pt/content/images/2024/02/IMG_3954.jpeg" class="kg-image" alt="AWS re:invent 2023" loading="lazy" width="2000" height="1500" srcset="https://tig.pt/content/images/size/w600/2024/02/IMG_3954.jpeg 600w, https://tig.pt/content/images/size/w1000/2024/02/IMG_3954.jpeg 1000w, https://tig.pt/content/images/size/w1600/2024/02/IMG_3954.jpeg 1600w, https://tig.pt/content/images/size/w2400/2024/02/IMG_3954.jpeg 2400w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card"><img src="https://tig.pt/content/images/2024/02/IMG_4007.jpeg" class="kg-image" alt="AWS re:invent 2023" loading="lazy" width="2000" height="1500" srcset="https://tig.pt/content/images/size/w600/2024/02/IMG_4007.jpeg 600w, https://tig.pt/content/images/size/w1000/2024/02/IMG_4007.jpeg 1000w, https://tig.pt/content/images/size/w1600/2024/02/IMG_4007.jpeg 1600w, https://tig.pt/content/images/size/w2400/2024/02/IMG_4007.jpeg 2400w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card"><img src="https://tig.pt/content/images/2024/02/IMG_3960.jpeg" class="kg-image" alt="AWS re:invent 2023" loading="lazy" width="2000" height="1500" srcset="https://tig.pt/content/images/size/w600/2024/02/IMG_3960.jpeg 600w, https://tig.pt/content/images/size/w1000/2024/02/IMG_3960.jpeg 1000w, https://tig.pt/content/images/size/w1600/2024/02/IMG_3960.jpeg 1600w, https://tig.pt/content/images/size/w2400/2024/02/IMG_3960.jpeg 2400w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card"><img src="https://tig.pt/content/images/2024/02/IMG_3942.JPG" class="kg-image" alt="AWS re:invent 2023" loading="lazy" width="2000" height="1500" srcset="https://tig.pt/content/images/size/w600/2024/02/IMG_3942.JPG 600w, https://tig.pt/content/images/size/w1000/2024/02/IMG_3942.JPG 1000w, https://tig.pt/content/images/size/w1600/2024/02/IMG_3942.JPG 1600w, https://tig.pt/content/images/size/w2400/2024/02/IMG_3942.JPG 2400w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card"><img src="https://tig.pt/content/images/2024/02/IMG_3921.jpeg" class="kg-image" alt="AWS re:invent 2023" loading="lazy" width="2000" height="1500" srcset="https://tig.pt/content/images/size/w600/2024/02/IMG_3921.jpeg 600w, https://tig.pt/content/images/size/w1000/2024/02/IMG_3921.jpeg 1000w, https://tig.pt/content/images/size/w1600/2024/02/IMG_3921.jpeg 1600w, https://tig.pt/content/images/size/w2400/2024/02/IMG_3921.jpeg 2400w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card"><img src="https://tig.pt/content/images/2024/02/IMG_3909.jpeg" class="kg-image" alt="AWS re:invent 2023" loading="lazy" width="2000" height="1500" srcset="https://tig.pt/content/images/size/w600/2024/02/IMG_3909.jpeg 600w, https://tig.pt/content/images/size/w1000/2024/02/IMG_3909.jpeg 1000w, https://tig.pt/content/images/size/w1600/2024/02/IMG_3909.jpeg 1600w, https://tig.pt/content/images/size/w2400/2024/02/IMG_3909.jpeg 2400w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card"><img src="https://tig.pt/content/images/2024/02/IMG_3929.jpeg" class="kg-image" alt="AWS re:invent 2023" loading="lazy" width="2000" height="1500" srcset="https://tig.pt/content/images/size/w600/2024/02/IMG_3929.jpeg 600w, https://tig.pt/content/images/size/w1000/2024/02/IMG_3929.jpeg 1000w, https://tig.pt/content/images/size/w1600/2024/02/IMG_3929.jpeg 1600w, https://tig.pt/content/images/size/w2400/2024/02/IMG_3929.jpeg 2400w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card"><img src="https://tig.pt/content/images/2024/02/IMG_3943.jpeg" class="kg-image" alt="AWS re:invent 2023" loading="lazy" width="2000" height="1500" srcset="https://tig.pt/content/images/size/w600/2024/02/IMG_3943.jpeg 600w, https://tig.pt/content/images/size/w1000/2024/02/IMG_3943.jpeg 1000w, https://tig.pt/content/images/size/w1600/2024/02/IMG_3943.jpeg 1600w, https://tig.pt/content/images/size/w2400/2024/02/IMG_3943.jpeg 2400w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card"><img src="https://tig.pt/content/images/2024/02/IMG_3816.jpeg" class="kg-image" alt="AWS re:invent 2023" loading="lazy" width="2000" height="1500" srcset="https://tig.pt/content/images/size/w600/2024/02/IMG_3816.jpeg 600w, https://tig.pt/content/images/size/w1000/2024/02/IMG_3816.jpeg 1000w, https://tig.pt/content/images/size/w1600/2024/02/IMG_3816.jpeg 1600w, https://tig.pt/content/images/size/w2400/2024/02/IMG_3816.jpeg 2400w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card"><img src="https://tig.pt/content/images/2024/02/IMG_3828.jpeg" class="kg-image" alt="AWS re:invent 2023" loading="lazy" width="2000" height="2667" srcset="https://tig.pt/content/images/size/w600/2024/02/IMG_3828.jpeg 600w, https://tig.pt/content/images/size/w1000/2024/02/IMG_3828.jpeg 1000w, https://tig.pt/content/images/size/w1600/2024/02/IMG_3828.jpeg 1600w, https://tig.pt/content/images/size/w2400/2024/02/IMG_3828.jpeg 2400w" sizes="(min-width: 720px) 720px"></figure>]]></content:encoded></item><item><title><![CDATA[CloudFront and the Wild West of the Internet]]></title><description><![CDATA[<p>The internet is truly amazing, but it is a Wild West.</p><p>The other day I was looking at my CloudFront <code>Popular objects</code> and was supper curious, this is pointing to an S3 bucket with some static images and <a href="https://tig.pt/python-amazon-polly/">polly mp3</a> that are serving the mobile app.</p><p>What <code>wp-login.php</code> and</p>]]></description><link>https://tig.pt/cloudfront-and-the-wild-west-of-the-internet/</link><guid isPermaLink="false">65bd66f26b844c00016659be</guid><dc:creator><![CDATA[Tiago Rodrigues]]></dc:creator><pubDate>Wed, 15 Nov 2023 22:10:00 GMT</pubDate><content:encoded><![CDATA[<p>The internet is truly amazing, but it is a Wild West.</p><p>The other day I was looking at my CloudFront <code>Popular objects</code> and was supper curious, this is pointing to an S3 bucket with some static images and <a href="https://tig.pt/python-amazon-polly/">polly mp3</a> that are serving the mobile app.</p><p>What <code>wp-login.php</code> and <code>server-status</code> or <code>login.action</code>.</p><p>The internet is a true place without many laws and if you have any IP or domain up and running, some crawler or bot will immediately try to find vulnerabilities and brute-force / exploit them.</p><p>Be aware, build safe infrastructure, hide vulnerabilities, and leverage AWS services like S3 and CloudFront, WAF and AWS Shield, load balancers, and private subnets. open as little as possible the ports and let the outlaws out of your walled garden. They are there and are not your friends.</p><p>Stay safe!</p><figure class="kg-card kg-image-card"><img src="https://tig.pt/content/images/2024/02/image-1.png" class="kg-image" alt loading="lazy" width="1470" height="1366" srcset="https://tig.pt/content/images/size/w600/2024/02/image-1.png 600w, https://tig.pt/content/images/size/w1000/2024/02/image-1.png 1000w, https://tig.pt/content/images/2024/02/image-1.png 1470w" sizes="(min-width: 720px) 720px"></figure>]]></content:encoded></item><item><title><![CDATA[AWS Cloud Experience Portugal 2023]]></title><description><![CDATA[<p>This year on Cloud Experience Portugal, I was invited by AWS to step up on the stage and talk about AWS cloud in my carrier, in Portuguese &#x1F973;</p><p>When looking back, I realized what a journey has been. From casual running some virtual machines on ec2 to being a Champion</p>]]></description><link>https://tig.pt/aws-cloud-experience-portugal-2023/</link><guid isPermaLink="false">65bd6ddd6b844c0001665a32</guid><dc:creator><![CDATA[Tiago Rodrigues]]></dc:creator><pubDate>Tue, 10 Oct 2023 21:34:00 GMT</pubDate><media:content url="https://tig.pt/content/images/2024/02/DSC04892-1.JPG" medium="image"/><content:encoded><![CDATA[<img src="https://tig.pt/content/images/2024/02/DSC04892-1.JPG" alt="AWS Cloud Experience Portugal 2023"><p>This year on Cloud Experience Portugal, I was invited by AWS to step up on the stage and talk about AWS cloud in my carrier, in Portuguese &#x1F973;</p><p>When looking back, I realized what a journey has been. From casual running some virtual machines on ec2 to being a Champion AAI and an AWS User Group Leader, a Community Builder, and dreaming I will eventually join the Heros group (one can dream).</p><p>Actually what I like the most about my career is that is full of stories about how &quot;it&apos;s not a zero-sum game&quot;, we can grow by helping others to grow as well. I love to share my knowledge and experiences, with friends, colleagues, clients, with strangers. Just ask me something and I will do my best to help you out.</p><p>I love these blurry pictures, because they tell a story, a story of someone that was using the same tool to solve all the problems, and now, with AWS have a big toolbox to use specialized tools to solve each problem.</p><p>I love how things sometimes deviate from the perfect project and you are in firefighter mode, but even so, you can leverage the expertise of the cloud providers to add value to your business and solve clients&apos; problems.</p><p>I can&apos;t wait for the Cloud Experience Portugal 2024, to listen to other&apos;s stories and learn from them, but also connect and accelerate the ones that are just getting started.</p><figure class="kg-card kg-image-card"><img src="https://tig.pt/content/images/2024/02/image-2.png" class="kg-image" alt="AWS Cloud Experience Portugal 2023" loading="lazy" width="2000" height="1111" srcset="https://tig.pt/content/images/size/w600/2024/02/image-2.png 600w, https://tig.pt/content/images/size/w1000/2024/02/image-2.png 1000w, https://tig.pt/content/images/size/w1600/2024/02/image-2.png 1600w, https://tig.pt/content/images/2024/02/image-2.png 2232w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card"><img src="https://tig.pt/content/images/2024/02/DSC04916.JPG" class="kg-image" alt="AWS Cloud Experience Portugal 2023" loading="lazy" width="2000" height="1333" srcset="https://tig.pt/content/images/size/w600/2024/02/DSC04916.JPG 600w, https://tig.pt/content/images/size/w1000/2024/02/DSC04916.JPG 1000w, https://tig.pt/content/images/size/w1600/2024/02/DSC04916.JPG 1600w, https://tig.pt/content/images/size/w2400/2024/02/DSC04916.JPG 2400w" sizes="(min-width: 720px) 720px"></figure>]]></content:encoded></item><item><title><![CDATA[DeepRacer Day]]></title><description><![CDATA[<p>Today I was part of the team organising a <a href="https://www.meetup.com/sixt-tech-hub-lisbon/events/295023584/">DeepRacer Day</a> with SIXT. </p><p>It is awesome to share some of the experiences and help others start on the Cloud Journey.</p><p>As I won 1st place on AWS DeepRacer Madrid 2022, tecRacer kind of nominated me as the DeepRacer guy.</p><p>Once</p>]]></description><link>https://tig.pt/deepracer-day/</link><guid isPermaLink="false">65bd71736b844c0001665a78</guid><dc:creator><![CDATA[Tiago Rodrigues]]></dc:creator><pubDate>Sat, 07 Oct 2023 21:52:00 GMT</pubDate><media:content url="https://tig.pt/content/images/2024/02/DSC04734.JPG" medium="image"/><content:encoded><![CDATA[<img src="https://tig.pt/content/images/2024/02/DSC04734.JPG" alt="DeepRacer Day"><p>Today I was part of the team organising a <a href="https://www.meetup.com/sixt-tech-hub-lisbon/events/295023584/">DeepRacer Day</a> with SIXT. </p><p>It is awesome to share some of the experiences and help others start on the Cloud Journey.</p><p>As I won 1st place on AWS DeepRacer Madrid 2022, tecRacer kind of nominated me as the DeepRacer guy.</p><p>Once we knew that SIXT was getting the Machine Learning team into AWS, we could not find a better excuse to do a DeepRacer Day together with SIXT.</p><p>It was very fun after all and we made a public event open to anyone in Lisbon to get to know more about AWS and DeepRacer, about 50 people participated in a full-day event, joining in and out, it was so great to see people eager to learn about AWS and how they can bring their knowledge to the cloud to accelerate the time to market.</p><figure class="kg-card kg-image-card"><img src="https://tig.pt/content/images/2024/02/DSC04037.JPG" class="kg-image" alt="DeepRacer Day" loading="lazy" width="2000" height="1333" srcset="https://tig.pt/content/images/size/w600/2024/02/DSC04037.JPG 600w, https://tig.pt/content/images/size/w1000/2024/02/DSC04037.JPG 1000w, https://tig.pt/content/images/size/w1600/2024/02/DSC04037.JPG 1600w, https://tig.pt/content/images/size/w2400/2024/02/DSC04037.JPG 2400w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card"><img src="https://tig.pt/content/images/2024/02/DSC04067.JPG" class="kg-image" alt="DeepRacer Day" loading="lazy" width="2000" height="1333" srcset="https://tig.pt/content/images/size/w600/2024/02/DSC04067.JPG 600w, https://tig.pt/content/images/size/w1000/2024/02/DSC04067.JPG 1000w, https://tig.pt/content/images/size/w1600/2024/02/DSC04067.JPG 1600w, https://tig.pt/content/images/size/w2400/2024/02/DSC04067.JPG 2400w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card"><img src="https://tig.pt/content/images/2024/02/DSC04182.JPG" class="kg-image" alt="DeepRacer Day" loading="lazy" width="2000" height="1333" srcset="https://tig.pt/content/images/size/w600/2024/02/DSC04182.JPG 600w, https://tig.pt/content/images/size/w1000/2024/02/DSC04182.JPG 1000w, https://tig.pt/content/images/size/w1600/2024/02/DSC04182.JPG 1600w, https://tig.pt/content/images/size/w2400/2024/02/DSC04182.JPG 2400w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card"><img src="https://tig.pt/content/images/2024/02/DSC04180.JPG" class="kg-image" alt="DeepRacer Day" loading="lazy" width="2000" height="1333" srcset="https://tig.pt/content/images/size/w600/2024/02/DSC04180.JPG 600w, https://tig.pt/content/images/size/w1000/2024/02/DSC04180.JPG 1000w, https://tig.pt/content/images/size/w1600/2024/02/DSC04180.JPG 1600w, https://tig.pt/content/images/size/w2400/2024/02/DSC04180.JPG 2400w" sizes="(min-width: 720px) 720px"></figure>]]></content:encoded></item><item><title><![CDATA[AWAsary v1.3.0]]></title><description><![CDATA[<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://apps.apple.com/gh/app/awsary-aws-dictionary/id1634871091"><div class="kg-bookmark-content"><div class="kg-bookmark-title">&#x200E;AWSary - AWS Dictionary</div><div class="kg-bookmark-description">&#x200E;AWSary is the ultimate resource for AWS Cloud Consultants, students, and anyone looking to stay up-to-date with AWS services. With this app, you&#x2019;ll have access to a comprehensive AWS dictionary, allowing you to easily search and learn about various AWS services. With</div></div></a></figure>]]></description><link>https://tig.pt/awasary-v1-3-0/</link><guid isPermaLink="false">65bd44526b844c00016658e6</guid><dc:creator><![CDATA[Tiago Rodrigues]]></dc:creator><pubDate>Mon, 02 Oct 2023 18:37:00 GMT</pubDate><content:encoded><![CDATA[<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://apps.apple.com/gh/app/awsary-aws-dictionary/id1634871091"><div class="kg-bookmark-content"><div class="kg-bookmark-title">&#x200E;AWSary - AWS Dictionary</div><div class="kg-bookmark-description">&#x200E;AWSary is the ultimate resource for AWS Cloud Consultants, students, and anyone looking to stay up-to-date with AWS services. With this app, you&#x2019;ll have access to a comprehensive AWS dictionary, allowing you to easily search and learn about various AWS services. With this app, you&#x2019;ll have access t&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://apps.apple.com/favicon.ico" alt><span class="kg-bookmark-author">App&#xA0;Store</span><span class="kg-bookmark-publisher">Tiago Rodrigues</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple116/v4/71/ad/51/71ad511d-7c67-2ac5-c6cb-a00fc0a41077/AppIcon-0-0-1x_U007emarketing-0-2-0-85-220.png/1200x630wa.png" alt></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/AWSary/AWSary-iOS/releases/tag/v1.3.0"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Release v1.3.0 &#xB7; AWSary/AWSary-iOS</div><div class="kg-bookmark-description">New Features You can now enable a label bellow the service logo, making your AWS Architecture Diagrams more readable.Also added Polly reading out AWS service names, because why not ?</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">AWSary</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/cbe07185756af91200516610a0843d12307e03cd99300562b46ef5b0568c5b75/AWSary/AWSary-iOS/releases/tag/v1.3.0" alt></div></a></figure><p>Major update to the App, I&apos;ve been working on how to get compressed icons (smaller app footprint) without loss of image quality, I also fine-tuned the icon sizes once dragged into a diagram before the images were too big.</p><p>On top of that now there is a toggle in settings that allows you to label the icons with the service name on your diagrams to make your diagrams more readable, see the example image below:</p><figure class="kg-card kg-image-card"><img src="https://tig.pt/content/images/2024/02/image.png" class="kg-image" alt loading="lazy" width="1928" height="1518" srcset="https://tig.pt/content/images/size/w600/2024/02/image.png 600w, https://tig.pt/content/images/size/w1000/2024/02/image.png 1000w, https://tig.pt/content/images/size/w1600/2024/02/image.png 1600w, https://tig.pt/content/images/2024/02/image.png 1928w" sizes="(min-width: 720px) 720px"></figure><p>This was not an easy task but the result is just awesome.</p><p>I also added <a href="https://aws.amazon.com/polly/">Amazon Polly</a> to pronounce the service names, it is much better than I expected, congrats to Polly for the great pronunciation, please try it yourself in the App.</p><p>By the way, these Polly audio files are being served by AWS S3 with CloudFront CDN and it works like a charm.</p>]]></content:encoded></item><item><title><![CDATA[AWS GuardDuty is an Angel]]></title><description><![CDATA[<p>A few weeks ago a client asked me: &quot;Hey, can you please create a dev machine on our POC account, we want an internet-facing server with RDP opened on port 3389 for a small test and an RDS Database connected to it, just go simple, ClickOps to test out</p>]]></description><link>https://tig.pt/aws-guardduty-is-an-angel/</link><guid isPermaLink="false">65bd690c6b844c00016659d6</guid><dc:creator><![CDATA[Tiago Rodrigues]]></dc:creator><pubDate>Thu, 21 Sep 2023 21:13:00 GMT</pubDate><content:encoded><![CDATA[<p>A few weeks ago a client asked me: &quot;Hey, can you please create a dev machine on our POC account, we want an internet-facing server with RDP opened on port 3389 for a small test and an RDS Database connected to it, just go simple, ClickOps to test out something&quot;</p><p>I immediately said: Careful RDP is typically a target port, and you should use AWS SSM (AWS Systems Manager) to access the machine, you can even <a href="https://awscloudsecvirtualevent.com/workshops/module1/rdp/">enable RDP through session manager</a> by configuring a proxy on the localhost if needed. </p><p>No no, that&apos;s too complicated, this is just for a few days, then we kill the machine.</p><p>Long story short, the machine stayed running and they assumed this was already production ready... Clients... </p><p>A few days in, this message came out of the blue, thanks GuardDuty once again saving the day.</p><pre><code>Hello.

We recieved the following GuardDuty Alarm.

94.232.42.99 is performing RDP brute force attacks against i-XXXXXXXXXX.&quot;,&quot;description&quot;:&quot;94.232.42.99 is performing RDP brute force attacks against i-XXXXXXXXXX. Brute force attacks are used to gain unauthorized access to your instance by guessing the RDP password.
UnauthorizedAccess:EC2/RDPBruteForce
Resource affected
Resource role TARGET
Resource type Instance
Port 3389
Port name RDP

Instance details
Instance ID i-XXXXXXXXXX (XXXXXXXXXX_dev)
Instance type t3.medium
Instance state running
Availability zone eu-west-1a

If we check the Security Rules for this Instance, it showsthat Port 3389 is open for the world.
This Alarm reocures every few days.
Is it necesary for this port to be open? Can we regulate Acces with a Whitelist (IP based) or can it be closed?
If nothing of the suggested solutions is aplicable, can we block this kind of alarm to minimized unnesecary communikation?</code></pre><p>A malicious IP was brute forcing the RDP port of the machine and it was a matter of time until they eventually got access to the machine. If it was not for GuardDuty we could not have noticed the issue until it was too late and someone gained access to the infrastructure and did all the possible damage. </p><p>Thanks to GuardDuty I immediately called the client, hey this is happening, do you wanna try SSM now?</p><p>The answer was... ah not really, what&apos;s the other options?</p><p>Well, don&apos;t whitelist this port to the world (0.0.0.0/0) at least have a single public IP able to target the port and restrict the security group on this port to a /32.</p><p>Ok, but this is an external consultant company, we want them to update the IP when they access it, but not touch the rest of the infrastructure.</p><p>No problem, AWS IAM Policy to the resque.</p><p>Create a user, create, create a prefix list, associate the prefix list to the security group, and create a policy to allow the user to update only its prefix list and nothing else.</p><pre><code>{
    &quot;Version&quot;: &quot;2012-10-17&quot;,
    &quot;Statement&quot;: [
        {
            &quot;Sid&quot;: &quot;VisualEditor0&quot;,
            &quot;Effect&quot;: &quot;Allow&quot;,
            &quot;Action&quot;: [
                &quot;ec2:GetManagedPrefixListAssociations&quot;,
                &quot;ec2:GetManagedPrefixListEntries&quot;,
                &quot;ec2:ModifyManagedPrefixList&quot;,
                &quot;ec2:RestoreManagedPrefixListVersion&quot;
            ],
            &quot;Resource&quot;: [
                &quot;arn:aws:ec2:eu-west-1:ACCOUNT_ID:prefix-list/pl-XXXXXXXXX&quot;
            ]
        },
        {
            &quot;Effect&quot;: &quot;Allow&quot;,
            &quot;Action&quot;: &quot;ec2:DescribeManagedPrefixLists&quot;,
            &quot;Resource&quot;: &quot;*&quot;
        }
    ]
}</code></pre><p>15 minutes later, the RDP port was at least closed to a single IP and reduced the security vector to a minimal target. I still believe that the best way is just to not open ports to the internet and use AWS SSM, but I&apos;m not scared this machine will be a target anymore. </p><p>I also sleep well knowing that AWS GuardDutty has my back covered 24 hours per day and will probably email me in case something is about to go wrong. Thanks, AWS for making my life on the internet much easier.</p>]]></content:encoded></item><item><title><![CDATA[AWAsary v1.2.2]]></title><description><![CDATA[<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://apps.apple.com/gh/app/awsary-aws-dictionary/id1634871091"><div class="kg-bookmark-content"><div class="kg-bookmark-title">&#x200E;AWSary - AWS Dictionary</div><div class="kg-bookmark-description">&#x200E;AWSary is the ultimate resource for AWS Cloud Consultants, students, and anyone looking to stay up-to-date with AWS services. With this app, you&#x2019;ll have access to a comprehensive AWS dictionary, allowing you to easily search and learn about various AWS services. With</div></div></a></figure>]]></description><link>https://tig.pt/awasary-v1-2-2/</link><guid isPermaLink="false">65bd44126b844c00016658da</guid><dc:creator><![CDATA[Tiago Rodrigues]]></dc:creator><pubDate>Tue, 22 Aug 2023 18:36:00 GMT</pubDate><content:encoded><![CDATA[<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://apps.apple.com/gh/app/awsary-aws-dictionary/id1634871091"><div class="kg-bookmark-content"><div class="kg-bookmark-title">&#x200E;AWSary - AWS Dictionary</div><div class="kg-bookmark-description">&#x200E;AWSary is the ultimate resource for AWS Cloud Consultants, students, and anyone looking to stay up-to-date with AWS services. With this app, you&#x2019;ll have access to a comprehensive AWS dictionary, allowing you to easily search and learn about various AWS services. With this app, you&#x2019;ll have access t&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://apps.apple.com/favicon.ico" alt><span class="kg-bookmark-author">App&#xA0;Store</span><span class="kg-bookmark-publisher">Tiago Rodrigues</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple116/v4/71/ad/51/71ad511d-7c67-2ac5-c6cb-a00fc0a41077/AppIcon-0-0-1x_U007emarketing-0-2-0-85-220.png/1200x630wa.png" alt></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/AWSary/AWSary-iOS/releases/tag/v1.2.2"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Release v1.2.2 &#xB7; AWSary/AWSary-iOS</div><div class="kg-bookmark-description">What&#x2019;s Changed Link to appstore rating by @tigpt in #99accentColor orange by @tigpt in #102Cta improve by @tigpt in #104 and #106 Full Changelog: v1.2.1...v1.2.2</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">AWSary</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/b19cdf5ee3d351df2c374eea7630df13a2331176cb706286ad7f4e4510c03f2c/AWSary/AWSary-iOS/releases/tag/v1.2.2" alt></div></a></figure><p>Add an option for users to send feedback by email.</p>]]></content:encoded></item><item><title><![CDATA[Python Amazon Polly]]></title><description><![CDATA[<p>By now if you have been following my blog, you know about AWSary.</p><p>What if we could generate sound out of text, what if I could &quot;magically&quot; have AWS generate all AWS Services names in voice format so I know how to pronounce them?</p><p>First we importo <a href="https://aws.amazon.com/sdk-for-python/">boto3</a></p>]]></description><link>https://tig.pt/python-amazon-polly/</link><guid isPermaLink="false">65bd63ed6b844c000166597e</guid><dc:creator><![CDATA[Tiago Rodrigues]]></dc:creator><pubDate>Tue, 08 Aug 2023 20:58:00 GMT</pubDate><content:encoded><![CDATA[<p>By now if you have been following my blog, you know about AWSary.</p><p>What if we could generate sound out of text, what if I could &quot;magically&quot; have AWS generate all AWS Services names in voice format so I know how to pronounce them?</p><p>First we importo <a href="https://aws.amazon.com/sdk-for-python/">boto3</a> the AWS SDK for Python.</p><pre><code class="language-python">import boto3</code></pre><p>Then we load initiate a DynamoDB client as well as a Polly client.</p><pre><code class="language-python">dynamodb = boto3.resource(&apos;dynamodb&apos;, region_name=&apos;eu-west-1&apos;)
table = dynamodb.Table(&apos;AWSary-services&apos;)
polly_client = boto3.client(&apos;polly&apos;)</code></pre><p>Now that we have the clients, let&apos;s scan the table for some items, since we want all of them</p><pre><code class="language-python">response = table.scan()
items = response[&apos;Items&apos;]</code></pre><p>For each item in the table that we scanned, let&apos;s print out to the CLI just for feedback, then call polly client and save the result on a file in the local disk, we will use this later to copy for our S3 to serve with CloudFront on the iOS Mobile Application.</p><pre><code class="language-python">for item in items:
    print(&quot;Start working on: &quot; + item[&apos;name&apos;])
    service_name = item[&apos;longName&apos;]
    response = polly_client.synthesize_speech(VoiceId=&apos;Brian&apos;, OutputFormat=&apos;mp3&apos;, Text=service_name)

    file = open(&apos;speech/&apos; + item[&apos;name&apos;].replace(&apos; &apos;,&apos;_&apos;) + &apos;_Brian_&apos; + &apos;en-GB&apos; + &apos;.mp3&apos;, &apos;wb&apos;)
    file.write(response[&apos;AudioStream&apos;].read())
    file.close()
    print(&quot;Done with: &quot; + item[&apos;name&apos;])</code></pre><p>Let&apos;s look at everything together:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/AWSary/AWSary-iOS/blob/main/utils/polly.py"><div class="kg-bookmark-content"><div class="kg-bookmark-title">AWSary-iOS/utils/polly.py at main &#xB7; AWSary/AWSary-iOS</div><div class="kg-bookmark-description">AWS Dictionary iOS App. Contribute to AWSary/AWSary-iOS development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">AWSary</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/2ff322dc0bdeab1d15c4f2c611923ebb4e502af1236e8d1a283cbd29591a8d66/AWSary/AWSary-iOS" alt></div></a></figure><pre><code class="language-pyhton">import boto3

dynamodb = boto3.resource(&apos;dynamodb&apos;, region_name=&apos;eu-west-1&apos;)
table = dynamodb.Table(&apos;AWSary-services&apos;)
polly_client = boto3.client(&apos;polly&apos;)

response = table.scan()
items = response[&apos;Items&apos;]

for item in items:
    print(&quot;Start working on: &quot; + item[&apos;name&apos;])
    service_name = item[&apos;longName&apos;]
    response = polly_client.synthesize_speech(VoiceId=&apos;Brian&apos;, OutputFormat=&apos;mp3&apos;, Text=service_name)

    file = open(&apos;speech/&apos; + item[&apos;name&apos;].replace(&apos; &apos;,&apos;_&apos;) + &apos;_Brian_&apos; + &apos;en-GB&apos; + &apos;.mp3&apos;, &apos;wb&apos;)
    file.write(response[&apos;AudioStream&apos;].read())
    file.close()
    print(&quot;Done with: &quot; + item[&apos;name&apos;])</code></pre><p>What should I do next, open an issue and let me know your ideas:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/AWSary/AWSary-iOS/issues"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Issues &#xB7; AWSary/AWSary-iOS</div><div class="kg-bookmark-description">AWS Dictionary iOS App. Contribute to AWSary/AWSary-iOS development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">AWSary</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/2ff322dc0bdeab1d15c4f2c611923ebb4e502af1236e8d1a283cbd29591a8d66/AWSary/AWSary-iOS" alt></div></a></figure>]]></content:encoded></item><item><title><![CDATA[AWAsary v1.2.1]]></title><description><![CDATA[<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://apps.apple.com/gh/app/awsary-aws-dictionary/id1634871091"><div class="kg-bookmark-content"><div class="kg-bookmark-title">&#x200E;AWSary - AWS Dictionary</div><div class="kg-bookmark-description">&#x200E;AWSary is the ultimate resource for AWS Cloud Consultants, students, and anyone looking to stay up-to-date with AWS services. With this app, you&#x2019;ll have access to a comprehensive AWS dictionary, allowing you to easily search and learn about various AWS services. With</div></div></a></figure>]]></description><link>https://tig.pt/awasary-v1-2-1/</link><guid isPermaLink="false">65bd43bc6b844c00016658ce</guid><dc:creator><![CDATA[Tiago Rodrigues]]></dc:creator><pubDate>Fri, 04 Aug 2023 18:35:00 GMT</pubDate><content:encoded><![CDATA[<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://apps.apple.com/gh/app/awsary-aws-dictionary/id1634871091"><div class="kg-bookmark-content"><div class="kg-bookmark-title">&#x200E;AWSary - AWS Dictionary</div><div class="kg-bookmark-description">&#x200E;AWSary is the ultimate resource for AWS Cloud Consultants, students, and anyone looking to stay up-to-date with AWS services. With this app, you&#x2019;ll have access to a comprehensive AWS dictionary, allowing you to easily search and learn about various AWS services. With this app, you&#x2019;ll have access t&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://apps.apple.com/favicon.ico" alt><span class="kg-bookmark-author">App&#xA0;Store</span><span class="kg-bookmark-publisher">Tiago Rodrigues</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple116/v4/71/ad/51/71ad511d-7c67-2ac5-c6cb-a00fc0a41077/AppIcon-0-0-1x_U007emarketing-0-2-0-85-220.png/1200x630wa.png" alt></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/AWSary/AWSary-iOS/releases/tag/v1.2.1"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Release v1.2.1 &#xB7; AWSary/AWSary-iOS</div><div class="kg-bookmark-description">AWS Dictionary iOS App. Contribute to AWSary/AWSary-iOS development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">AWSary</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/7078e63d17651b8a6715456e0b73f9e2c1de07de409b57c1f65a373d347b9c0d/AWSary/AWSary-iOS/releases/tag/v1.2.1" alt></div></a></figure><p>Bug fixes and compliance with Apple requirements with in app purchase for the Tip Jar, we hope that Apple aproves this app update. </p>]]></content:encoded></item><item><title><![CDATA[AWAsary v1.2.0]]></title><description><![CDATA[<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://apps.apple.com/gh/app/awsary-aws-dictionary/id1634871091"><div class="kg-bookmark-content"><div class="kg-bookmark-title">&#x200E;AWSary - AWS Dictionary</div><div class="kg-bookmark-description">&#x200E;AWSary is the ultimate resource for AWS Cloud Consultants, students, and anyone looking to stay up-to-date with AWS services. With this app, you&#x2019;ll have access to a comprehensive AWS dictionary, allowing you to easily search and learn about various AWS services. With</div></div></a></figure>]]></description><link>https://tig.pt/awasary-v1-2-0/</link><guid isPermaLink="false">65bd42ea6b844c00016658b8</guid><dc:creator><![CDATA[Tiago Rodrigues]]></dc:creator><pubDate>Wed, 02 Aug 2023 18:31:00 GMT</pubDate><content:encoded><![CDATA[<figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://apps.apple.com/gh/app/awsary-aws-dictionary/id1634871091"><div class="kg-bookmark-content"><div class="kg-bookmark-title">&#x200E;AWSary - AWS Dictionary</div><div class="kg-bookmark-description">&#x200E;AWSary is the ultimate resource for AWS Cloud Consultants, students, and anyone looking to stay up-to-date with AWS services. With this app, you&#x2019;ll have access to a comprehensive AWS dictionary, allowing you to easily search and learn about various AWS services. With this app, you&#x2019;ll have access t&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://apps.apple.com/favicon.ico" alt><span class="kg-bookmark-author">App&#xA0;Store</span><span class="kg-bookmark-publisher">Tiago Rodrigues</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://is1-ssl.mzstatic.com/image/thumb/Purple116/v4/71/ad/51/71ad511d-7c67-2ac5-c6cb-a00fc0a41077/AppIcon-0-0-1x_U007emarketing-0-2-0-85-220.png/1200x630wa.png" alt></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/AWSary/AWSary-iOS/releases/tag/v1.2.0"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Release v1.2.0 &#xB7; AWSary/AWSary-iOS</div><div class="kg-bookmark-description">revenuecat subscription</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">AWSary</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/2ff322dc0bdeab1d15c4f2c611923ebb4e502af1236e8d1a283cbd29591a8d66/AWSary/AWSary-iOS" alt></div></a></figure><p>We improved the AWS Services descriptions and pricings, as well as added a way for users to help me financially with the app development and servers costs, now with a Tip Jar users are able to send some money this way with no aditional peark, the same app with the same features but you feel awesome because you help me prioritize this app. Hope some of you decide to leave a Tip &#x1F605;.</p>]]></content:encoded></item></channel></rss>