本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
基本 Amazon IoT Core 策略变量
Amazon IoT Core 定义了以下基本策略变量:
-
iot:ClientId:用于连接到 Amazon IoT Core 消息代理的客户端 ID。 -
aws:SourceIp:连接到 Amazon IoT Core 消息代理的客户端的 IP 地址。
下面的 Amazon IoT Core 策略显示一个使用策略变量的策略。可以在策略的条件元素中使用 aws:SourceIp,以允许主体仅在特定地址范围内发出 API 请求。有关示例,请参阅 向用户和云服务授权以使用 Amazon IoT Jobs。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["iot:Connect"], "Resource": [ "arn:aws:iot:us-east-1:123451234510:client/${iot:ClientId}" ] }, { "Effect": "Allow", "Action": ["iot:Publish"], "Resource": [ "arn:aws:iot:us-east-1:123451234510:topic/my/topic/${iot:ClientId}" ] } ] }
在这些示例中,${iot:ClientId} 将替换为评估策略时连接到 Amazon IoT Core 消息代理的客户端的 ID。使用 ${iot:ClientId} 等策略变量时,您可能会无意中开放对意外主题的访问权限。例如,如果您使用借助 ${iot:ClientId} 来指定主题筛选条件的策略:
{ "Effect": "Allow", "Action": ["iot:Subscribe"], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/my/${iot:ClientId}/topic" ] }
客户端可使用 + 作为客户端 ID 来进行连接。这样,用户便可以订阅与主题筛选条件 my/+/topic 匹配的任何主题。要防范此类安全漏洞,请使用 iot:Connect 策略操作来控制哪些客户端 ID 可以连接。例如,此策略仅允许那些客户端 ID 为 clientid1 的客户端建立连接:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["iot:Connect"], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/clientid1" ] } ] }