AWS IoT
开发人员指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

基本策略变量

AWS IoT 定义了以下基本策略变量:

  • iot:ClientId:用于连接到 AWS IoT 消息代理的客户端 ID。

  • aws:SourceIp:连接到 AWS IoT 消息代理的客户端的 IP 地址。

以下 AWS IoT 策略显示了策略变量的用法:

{ "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/foo/bar/${iot:ClientId}" ] }] }

在这些示例中,${iot:ClientId} 将替换为评估策略时连接到 AWS IoT 消息代理的客户端的 ID。使用 ${iot:ClientId} 等策略变量时,您可能会无意中开放对意外主题的访问权限。例如,如果您使用借助 ${iot:ClientId} 来指定主题筛选条件的策略:

{ "Effect": "Allow", "Action": ["iot:Subscribe"], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/foo/${iot:ClientId}/bar" ] }

客户端可使用 + 作为客户端 ID 来进行连接。这样,用户便可以订阅与主题筛选条件 foo/+/bar 匹配的任何主题。要防范此类安全漏洞,请使用 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" ] }] }