Posts

Showing posts from 2026

'ExpiredTokenException' During Rekognition Batch Processing with Temporary Credentials

Image
  'ExpiredTokenException' During Rekognition Batch Processing with Temporary Credentials # AWS # AmazonRekognition # IAM # CloudSecurity Why temporary credentials expire mid-batch and how to prevent Rekognition failures in long-running jobs Category: IAM & Permission Boundaries Problem Your application processes images in batches using  Amazon Rekognition . The first several requests succeed. Then the job fails mid-run with: ExpiredTokenException: The security token included in the request is expired Rekognition permissions are correct. IAM policies are valid. Nothing changed. Yet the process stops halfway through. Clarifying the Issue Your application is using  temporary credentials . These are issued by: sts:AssumeRole Federated login AWS SSO IAM Roles for EC2 or Lambda Temporary credentials include: Access key Secret key Session token Expiration timestamp Once the expiration time is reached, all API calls fail — even if permissions are correct. Rekognition is not d...

The Secret Life of Azure: The Blueprint for a Thousand Shelves

Image
  The Secret Life of Azure: The Blueprint for a Thousand Shelves # Azure # Bicep # InfrastructureAsCode # DevOps Automating infrastructure with Bicep and Infrastructure as Code. Resilience & Release The library was expanding, but Timothy was exhausted. He was surrounded by sticky notes, screenshots, and a long checklist of every setting he had to toggle to get the new London branch to match the original Texas building. "Margaret," he said, rubbing his eyes, "I’m terrified. I just spent four hours setting up the London branch, and I realized I forgot to enable Soft-Delete on the Key Vault. If I have to build ten more branches like this, I’m going to make a mistake that costs us everything. Is there a way to just... copy the whole building?" Margaret didn't pick up the chalk. Instead, she picked up a single sheet of paper with a few lines of clean, structured text on it. "Timothy, you're building the library like a carpenter, one board at a time. In t...

The Secret Life of JavaScript: The Rejection

Image
  The Secret Life of JavaScript: The Rejection # JavaScript # AsyncAwait # ErrorHandling # Webdev Why async errors bypass try/catch, and how to fix them. Timothy felt invincible. He had learned the mechanics of Stack Unwinding. He had placed a strategic  try/catch  boundary at the top of his application. He was a master of disaster recovery. Then, he wrote a new network request. function loadDashboard () { try { // Initiating a background network request fetch ( ' /api/corrupted-data ' ); console . log ( " Dashboard loading... " ); } catch ( error ) { console . error ( " Safe Landing: " , error . message ); } } loadDashboard (); Timothy ran the code. The console printed  Dashboard loading... . Two seconds later, a massive red error filled the screen:  UnhandledPromiseRejection: Failed to fetch . Timothy stared at the screen. The application had crashed. "But... I put it inside a  try/catch ,...

The Secret Life of AWS: Cross-Network Communication (VPC Peering)

Image
  The Secret Life of AWS: Cross-Network Communication (VPC Peering) # AWS # VPC # Peering # CloudArchitecture Connecting isolated environments without touching the public internet. Part 43 of The Secret Life of AWS Timothy was staring at a connection timeout error. Following Margaret's advice from the previous week, he had fully embraced network isolation. When he was tasked with building a new "Inventory" microservice, he created a brand new Virtual Private Cloud (VPC) for it, completely separate from the "Checkout" VPC. Now, the Inventory service needed to query the Checkout database. "They are in two different VPCs," Timothy explained to Margaret. "I can't connect them. I was thinking of attaching a NAT Gateway to the Inventory VPC and routing the traffic over the public internet to the Checkout VPC's public endpoint... but we just made the database private." "Exactly," Margaret said. "We did not isolate the database...