Build1 publisher3 min readPublished
The EC2 console tells you to check MetadataNoToken before setting HttpTokens to required, and that check carries the whole risk, because the metric only counts calls that actually happened in the window you watched.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
A component that never learned the token PUT does not fail in a way that says "metadata". Software on an instance with a role attached through an instance profile reads temporary credentials out of IMDS precisely so nobody keeps access keys on the box [7]. The dev.to lab's walkthrough reads the role name from /latest/meta-data/iam/security-credentials/, which returns IMDSLabRole, then reads AccessKeyId, SecretAccessKey and Token from the path underneath it [6]. Cut that read off and the process starts fine, then fails at whatever AWS API call it makes next [14].
That is why the console's instruction is worth reading literally: confirm the instance is making no IMDSv1 calls first, and use MetadataNoToken to confirm it [1][2]. The metric counts tokenless calls that were made. A backup script that runs monthly, or an agent that only touches IMDS when its cached credentials expire, contributes nothing to that count during a window it did not run in, and reads as compliant [15]. A flat reading over a Tuesday afternoon only tells you what did not happen on that Tuesday afternoon.
The lab requests its token with a TTL of 21600 seconds, which is six hours [8][13]. That sets how long one v2 session stays valid; it says nothing about how long you should watch the metric, and the material supplies no guidance on that either [17].
The second dependency is one most people meet after the flip. The HTTP PUT response hop limit is specifically part of the v2 session mechanism: it governs how many network hops the reply carrying the token may travel, and AWS accepts values from 1 to 64 [11]. A caller sitting further from 169.254.169.254 [4] than that limit allows never receives a token, so it never receives metadata, and from the outside that is indistinguishable from a legacy SDK that never asked for one [16]. The material states the range without stating the default [17], which makes it a number to choose rather than inherit.
One naming trap sits in the middle of all this. The console presents the setting as IMDSv2 Optional or Required, and at launch as a Metadata version field reading "V2 only (token required)" [9][10]. Through the API, CLI, SDKs or infrastructure as code, the same option is HttpTokens [9]. It is the same field under two vocabularies, and the one in the IaC diff is the one that gets reviewed.
The lab cites the 2019 Capital One incident, where unauthorized access to IMDS formed part of an attack chain, and information on more than 100 million people was affected [12]. That history argues for the ordering here, not against it: instrument, choose a hop limit deliberately, then set required. The duration of that first step is the part the lab does not give you a number for [17], and it is the part that decides whether the flag flip is boring.
Ranked by verification strength, evidence, and original report placement.
The EC2 console shows a warning before changing metadata options: make sure the instance is not making IMDSv1 calls before setting IMDSv2 to required.
AWS directs operators to review the CloudWatch metric MetadataNoToken before requiring IMDSv2.
Keeping IMDSv1 enabled is a security risk, but requiring IMDSv2 without first reviewing dependencies can break applications, agents, SDKs or old scripts.
IMDS is reached at the link-local address 169.254.169.254.
With IMDSv1, querying metadata is a direct HTTP request with no prior token.
In the lab, GET /latest/meta-data/iam/security-credentials/ returns the role name IMDSLabRole, and requesting that path plus the role name returns a body containing Code, AccessKeyId, SecretAccessKey, Token and Expiration.
Follow any of these and your For You feed starts watching them — no settings page required.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Demonstrated on one instance, corroborated nowhere
The mechanics are shown rather than asserted: the token PUT, the exact header names, the TTL, the JSON that came back from the security-credentials path. That earns real credit. It is still one author on one lab instance. No AWS documentation is quoted next to the console strings, no second operator confirms the HttpTokens equivalence, and the Capital One figure that opens the piece arrives with no source at all.
No deployment signal
Nothing in this reporting counts instances, accounts or fleets. There is no figure for how many EC2 instances still allow IMDSv1, no enforcement rate, and no before-and-after from an organisation that completed the migration - only a two-instance-scale lab built to illustrate the change.
Modest, with two soft edges
The lab mostly claims what it ran, and the console-to-HttpTokens section is more careful than most writing on the subject. The overreach sits at the frame: more than 100 million people attributed to a 2019 breach with nothing behind it, and MetadataNoToken presented as the check that clears you to proceed when no observation period is attached to it. The mechanism, by contrast, is understated - a caller behind a hop limit and a caller with no token fail identically, and the post lets that pass in a single container aside.
Nothing being sold
A self-published developer lab on dev.to with no sponsor, no product and no vendor relationship visible in the text. The pull on the author is toward a tidy tutorial arc rather than toward a conclusion, which shows in the uncited breach hook and in the piece breaking off mid-demonstration. AWS's own console wording is quoted rather than reframed.
Right kind of facts, thin sourcing
Claims about a documented API surface are the sort a careful practitioner can get right alone. These transcripts read as genuinely executed. Set against that: one publisher, no independent reading of the console text, and the parts that matter most operationally - the metric's blind spot, the identical symptoms of a hop-limit refusal and a tokenless caller - are inferences from the documented mechanism rather than things anyone tested here.
build
Put a threshold and a price next to every "idle" resource, or stop calling it idle1 publisher
build
AWS's SIRT traced one SSRF bug to Bedrock calls in a second Region1 publisher
build
The nightly shutdown Lambda earns its postmortem on the morning restart1 publisher
build
Two Actions, One Loose Policy: The Bedrock Wildcards That Widen A Least-Privilege Grant1 publisher
Publishers with included, body-backed reporting in this cluster.
1 article · September 6, 2026