本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
基本 AWS IoT Core 策略变量
AWS IoT Core 定义了以下基本策略变量:
-
aws:SourceIp
:连接到 AWS IoT Core 消息代理的客户端的 IP 地址。 -
iot:ClientId
:用于连接到 AWS IoT Core 消息代理的客户端 ID。 -
iot:DomainName
:连接到的客户端的域名 AWS IoT Core。
ClientId
和SourceIp
策略变量的示例
以下 AWS IoT Core 策略显示了使用策略变量的策略。 aws:SourceIp
可以在策略的 Condition 元素中使用,以允许委托人仅在特定地址范围内发出API请求。有关示例,请参阅向用户和云服务授权以使用 AWS IoT Jobs。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/clientid1" ] }, { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/my/topic/${iot:ClientId}" ], "Condition": { "IpAddress": { "aws:SourceIp": "123.45.167.89" } } } ] }
在这些示例中${iot:ClientId}
,将替换为评估策略时连接到 AWS 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
策略操作来控制IDs可以连接的客户端。例如,此策略仅允许那些客户端 ID 为 clientid1
的客户端建立连接:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/clientid1" ] } ] }
注意
不建议将策略变量 ${iot:ClientId}
与 Connect
一起使用。不检查 ClientId
的值,因此,具有不同客户端 ID 的附加程序可以通过验证,但会导致连接断开。由于允许任何 ClientId
,因此设置随机客户端 ID 可以绕过事物组策略。
iot:DomainName
策略变量的示例
您可以添加iot:DomainName
策略变量来限制允许使用哪些域。添加iot:DomainName
策略变量允许设备仅连接到已配置的特定端点。
以下策略允许设备连接到指定域。
{ "Version": "2012-10-17", "Statement": { "Sid": "AllowConnectionsToSpecifiedDomain", "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": "*", "Condition": { "StringEquals": { "iot:DomainName": "d1234567890abcdefghij-ats.iot.us-east-1.amazonaws.com" } } } }
以下策略拒绝设备连接到指定域。
{ "Version": "2012-10-17", "Statement": { "Sid": "DenyConnectionsToSpecifiedDomain", "Effect": "Deny", "Action": [ "iot:Connect" ], "Resource": "*", "Condition": { "StringEquals": { "iot:DomainName": "d1234567890abcdefghij-ats.iot.us-east-1.amazonaws.com" } } } }
有关策略条件运算符的更多信息,请参阅IAMJSON策略元素:条件运算符。有关域配置的更多信息,请参阅什么是域配置? 。