Basic AWS IoT Core policy variables
AWS IoT Core defines the following basic policy variables:
-
aws:SourceIp
: The IP address of the client connected to the AWS IoT Core message broker. -
iot:ClientId
: The client ID used to connect to the AWS IoT Core message broker. -
iot:DomainName
: The domain name of the client connected to AWS IoT Core.
Examples
Examples of ClientId
and
SourceIp
policy variables
The following AWS IoT Core policy shows a policy that uses policy variables.
aws:SourceIp
can be used in the Condition element of your
policy to allow principals to make API requests only within a specific address
range. For examples, see Authorizing users and cloud services to use
AWS IoT Jobs.
In these examples, ${iot:ClientId}
is replaced by the ID of the
client connected to the AWS IoT Core message broker when the policy is evaluated.
When you use policy variables like ${iot:ClientId}
, you can
inadvertently open access to unintended topics. For example, if you use a policy
that uses ${iot:ClientId}
to specify a topic filter:
{ "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:
us-east-1
:123456789012
:topicfilter/my/${iot:ClientId}/topic
" ] }
A client can connect using +
as the client ID. This would allow
the user to subscribe to any topic that matches the topic filter
my/+/topic
. To protect against such security gaps, use the
iot:Connect
policy action to control which client IDs can
connect. For example, this policy allows only those clients whose client ID is
clientid1
to connect:
Note
Using the policy variable ${iot:ClientId}
with
Connect
is not recommended. There is no check on the value
of ClientId
, so an attacher with a different client's ID can
pass the validation but cause disconnection. Because any
ClientId
is allowed, setting a random client ID can bypass
thing group policies.
Examples of
iot:DomainName
policy variable
You can add the iot:DomainName
policy variable to restrict
which domains are allowed to use. Adding the iot:DomainName
policy variable allows devices to connect to only specific configured
endpoints.
The following policy allows devices to connect to the specified domain.
The following policy denies devices to connect to the specified domain.
For more information about policy conditional operator, see IAM JSON policy elements: Condition operators. For more information about domain configurations, see What is a domain configuration?.