AWS Builder Center
Four Ways to Register a Device with AWS IoT Core

Four Ways to Register a Device with AWS IoT Core

The four AWS IoT provisioning paths — manual, trusted user, by claim, and JITP — how each works, how to choose, and the tradeoffs between them.

Series: digital-operations (1 article)

  1. 1
    Four Ways to Register a Device with AWS IoT Core This article

Four Ways to Register a Device with AWS IoT Core

The most interesting moment in a device's life is the first time it connects to the cloud. Before that connection it's an anonymous box on a shelf; after it, it's a trusted identity that can publish telemetry, receive jobs, and act on your behalf. How you cross that line — how a device goes from "manufactured" to "registered and trusted" — is one of the more consequential design decisions in any IoT system, and one that's surprisingly easy to get wrong.
AWS IoT Core gives you four ways to register a device . They aren't ranked from worst to best. They're different answers to a different question each time: who is trusted, and when does the device get its permanent identity? This post walks through all four, the flow that most automated fleets actually use, and one distinction that's easy to misread the first time.

The four approaches at a glance

ApproachWho owns the CAWhen the device gets its permanent certBest for
Single-thing / manualAWS IoT CABefore it shipsLab devices, one-offs, prototypes
Provisioning by trusted userAWS IoT CAAt commissioning — an authenticated actor calls the API on demandAny scale, when a commissioning workflow already exists
Fleet provisioning by claimAWS IoT CAOn first connection — device swaps a shared claim cert for a permanent oneFully automated deployments with no human in the loop
JITP / JITRYou own the CABefore it ships — identity burned in at the factoryHardware with factory-provisioned identity (HSM, secure element)
Single-thing provisioning  is the one you meet first: you create a Thing, generate a certificate, attach a policy, and flash all of it onto the device by hand. It's perfect for learning and lab work and completely impractical at fleet scale — nobody wants to hand-mint ten thousand certificates.
The other three are how you scale, and the rest of this post is about telling them apart.

Fleet provisioning by claim: the workhorse flow

Fleet provisioning by claim  is the path most fully-automated deployments land on, because it needs no human at install time. The idea: every device ships with the same shared claim certificate — a bootstrap credential that can do almost nothing except ask for a real identity. On first connection, the device trades that claim cert for a unique, permanent certificate that IoT Core mints just for it.
Provision By Claim
Here's the flow, concretely, the way it plays out with the AWS IoT Device Client  as the on-device agent:
  1. A provisioning template defines what to create when a device presents a valid claim: the Thing name, the policy to attach, the group to join, and which permanent certificate to activate. See the provisioning template reference .
  2. The claim certificate is issued with a deliberately tiny IoT policy  — it can connect and call the $aws/certificates/create/* and $aws/provisioning-templates/{template}/provision/* reserved topics, and nothing else. It cannot publish telemetry or subscribe to anything operational.
  3. On first boot, the device loads the claim cert and calls CreateKeysAndCertificate followed by RegisterThing. IoT Core evaluates the request, creates the Thing, and issues a permanent per-device certificate.
  4. The claim cert is deleted from disk the moment RegisterThing succeeds. From then on the device authenticates only with its own unique identity.
Two properties make this clean. The device never holds AWS credentials — the claim cert is scoped so narrowly that leaking it costs you far less than leaking an IAM key. And the permanent certificate's private key can be generated on the device (or on IoT Core) so that each unit ends up cryptographically distinct even though they all shipped identical.
The one thing to respect: the claim certificate is a shared static secret. Anyone holding it can attempt to provision. That's exactly why the next piece matters.

The pre-provisioning hook is your control point

Because the claim cert is a wide key, "any holder can try to register" is the default posture. The pre-provisioning hook  is where you narrow it. It's a Lambda that IoT Core calls before it acts on a provisioning request — and its return value decides whether provisioning proceeds.
This is the natural home for whatever "is this a device I actually expect?" logic your system needs:
  • Check the incoming serial number against an authoritative source — a device registry, a manufacturing database, an ERP record of what you actually shipped.
  • Reject unknown serials, duplicates, or devices that have already provisioned.
  • Enrich the registration with attributes (site, model, firmware baseline) that later drive fleet indexing  queries and targeted IoT Jobs .
A hook that always returns "allow" turns the shared claim cert into the only gate — fine for a workshop or a closed lab, risky for production. A hook that validates against an authoritative source turns a wide key into a narrow one. The mechanism is the same either way; what you enforce in the hook is a policy choice, and it's the choice that decides how much a leaked claim cert can actually hurt you.

Provisioning by trusted user: when there's a human at install

Provisioning by trusted user  fits the case where a person — a field engineer, an installer, a technician — is present at commissioning. Instead of every device carrying a shared secret, the authenticated human requests a one-time-use claim on demand:
Provision by trusted user
  1. The operator authenticates to your management app (an Amazon Cognito  user pool, say).
  2. The app calls CreateProvisioningClaim , which returns a short-lived, single-use claim certificate.
  3. That claim is handed to the specific device in front of the operator.
  4. The device runs the same RegisterThing flow as before.
The trade-off against by-claim is clean:
By claimBy trusted user
Human required at installNoYes — authenticated
Per-device audit trailNo (shared cert)Yes — operator identity + CloudTrail per device
Risk surfaceShared static cert must stay secretNo shared secret; short-lived, single-use claims
Works with no cloud at the factoryYesNo — needs a live API call
By-claim wins when there's genuinely no human in the loop. Trusted user wins almost everywhere a commissioning step already exists, because you get a per-device audit trail and there's no long-lived shared secret to protect.

What JITP actually changes

Just-in-Time Provisioning (JITP) and Just-in-Time Registration (JITR)  look, from a distance, like by-claim: the device "self-registers" on first connection. But they're fundamentally different, and it's worth being precise about how.
  • With by-claim, the device arrives as a blank slate and AWS mints its identity on first boot.
  • With JITP/JITR, the device already holds its permanent identity, signed by a CA you own, burned in at the factory. AWS just learns about it when it first connects and registers it automatically.
It's easy to assume JITP is the only way to get a permanent, factory-provisioned identity — but it isn't. You can burn a per-unit identity in at the factory using the AWS IoT CA too: mint a per-device cert (using CreateCertificateFromCsr  so the private key never leaves the secure element) and flash it in. Both approaches produce the same kind of thing — a unique, permanent certificate per device. What differs is everything around the cert.
So what actually separates them? The factory's trust boundary — who holds credentials, and whether the production line depends on your cloud.
JITP Trust Boundary
  • AWS IoT CA at the factory — the flashing station must hold live credentials to your AWS account and call AWS IoT per unit. That extends your account's trust boundary onto the factory floor (often a third-party contract manufacturer) and couples your production line's throughput to your cloud being reachable.
  • JITP with a CA you own (for example, AWS Private CA ) — the factory signs certs locally, never touching your AWS account. The manufacturer can even run their own Private CA in their own AWS account; you just register that CA's certificate  in your IoT account. No cross-account credentials, no per-unit call to your cloud.
Read that as a decision rule:
  • If the factory is trusted with your AWS credentials and has reliable connectivity — say, it's your own facility — minting via the AWS IoT CA is the simpler design, with less machinery to run.
  • JITP earns its keep when you can't or won't put AWS credentials in the factory, need the production line to run independently of your cloud, or must be your own root of trust for compliance or portability reasons.
Both give each device a unique, permanent certificate. What changes across these options is where the trust boundary sits and who has to hold credentials — a process and operations property, not a property of the cert itself.

How to choose

Strip away the mechanics and the decision comes down to three questions:
  1. Is there a human at commissioning? If yes, trusted user gives you a per-device audit trail and no shared secret — reach for it first.
  2. Fully automated, no human, no factory-side identity? By claim, with a pre-provisioning hook that validates against an authoritative device list. Don't ship the log-only hook to production.
  3. Do you need the factory to be independent of your AWS account, or to be your own root of trust? JITP with a CA you own. Otherwise, factory-minting with the AWS IoT CA is the simpler path.
And for the first device you ever register — the one you're learning on — single-thing manual provisioning is completely fine. Just don't build a fleet on it.

Try it hands-on

If you want to watch the by-claim flow actually run — claim cert in Secrets Manager, the Device Client calling RegisterThing, the permanent cert showing up in the registry, and a real Raspberry Pi joining a fleet over SSH — the open-source Edge to Cloud Digital Ops Workshop  walks through it end to end, alongside IoT Jobs, Device Shadows, and fleet indexing. It's a good way to make all of this concrete instead of conceptual.
The takeaway I'd leave you with: there's no default "best" among these four. Each is the right answer to a specific question about who you trust and when. Get that framing right and the mechanics fall out of it — and you'll stop reaching for JITP by reflex when a simpler path would fit just as well.

Series: digital-operations (1 article)

  1. 1
    Four Ways to Register a Device with AWS IoT Core This article
Any opinions in this article are those of the individual author and may not reflect the opinions of AWS.
Enjoyed reading this content? Let the author know!

Your likes, comments, shares, and saves help creators reach more builders.

Loading recommendations

Loading article