

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 事物策略变量
<a name="thing-policy-variables"></a>

事物策略变量允许您编写基于事物名称、事物类型和事物属性值等事物属性授予或拒绝权限的 AWS IoT Core 策略。您可以使用事物策略变量来应用相同的策略来控制许多 AWS IoT Core 设备。有关设备预调配的更多信息，请参阅[设备预调配](iot-provision.html)。

如果您使用非独占事物关联，则同一证书可以附加到多个事物。为保持清晰的关联并避免潜在冲突，您必须将客户端 ID 与事物名称匹配。在这种情况下，您可以从事物连接到时发送的 MQTT `Connect` 消息中的客户端 ID 中获取事物名称。 AWS IoT Core

在 AWS IoT Core 策略中使用事物策略变量时，请记住以下事项。
+ 使用 [AttachThingPrincipal](https://docs.aws.amazon.com/iot/latest/apireference/API_AttachThingPrincipal.html)API 将证书或委托人（经过身份验证的 Amazon Cognito 身份）附加到事物。
+ 如果存在非独占事物关联，当您用事物策略变量替换事物名称时，MQTT 连接消息或 TLS 连接中的 `clientId` 值必须与事物名称完全匹配。

可用的事物策略变量如下：
+ `iot:Connection.Thing.ThingName`

  这将解析为正在评估策略的 AWS IoT Core 注册表中事物的名称。 AWS IoT Core 使用设备在进行身份验证时出示的证书来确定使用哪个东西来验证连接。只有当设备通过协议通过 MQTT 或 MQTT 进行连接时，此策略变量才可用。 WebSocket 
+ `iot:Connection.Thing.ThingTypeName`

  它解析为与要评估策略的事物关联的事物类型。MQTT/ WebSocket 连接的客户端 ID 必须与事物名称相同。仅当通过协议通过 MQTT 或 MQTT 进行连接时，此策略变量才可用。 WebSocket
+ `iot:Connection.Thing.Attributes[attributeName]`

  它解析为与要评估策略的事物关联的指定属性的值。事物最多可以具有 50 个属性。每个属性都可用作策略变量：`iot:Connection.Thing.Attributes[attributeName]`其中*attributeName*是属性的名称。 MQTT/WebSocket 连接的客户端 ID 必须与事物名称相同。此策略变量仅在通过 MQTT 或 MQTT 通过协议进行连接时可用。 WebSocket 
+ `iot:Connection.Thing.IsAttached`

  `iot:Connection.Thing.IsAttached: ["true"]`强制规定只有同时在委托人中注册 AWS IoT 并关联到委托人的设备才能访问策略内的权限。 AWS IoT Core 如果设备提供的证书未附加到注册表中的物联网事物，则可以使用此变量来阻止其连接 AWS IoT Core 。此变量具有值`true`，`false`表示连接对象已使用 API 附加到注册表中的证书或 Amazon Cognito 身份。[AttachThingPrincipal](https://docs.aws.amazon.com/iot/latest/apireference/API_AttachThingPrincipal.html)事物名称被视为客户端 ID。

如果您的客户端 ID 与事物名称匹配，或者如果您将证书独占附加到事物，则在策略定义中使用策略变量可以简化策略管理。您可以使用事物策略变量定义单个策略，而不是为每个物联网事物创建单独的策略。此策略可以动态应用于所有设备。以下是一个示例策略来说明其工作原理。有关更多信息，请参阅 [将 AWS IoT 事物关联到 MQTT 客户端连接](exclusive-thing.md)。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Condition": {
				"StringLike": {
					"iot:ClientId": "*${iot:Connection.Thing.Attributes[envType]}"
				}
			},
			"Effect": "Allow",
			"Action": "iot:Connect",
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/*"
		}
	]
}
```

 AWS IoT Core 如果事物的客户端 ID 以其`envType`属性的值结尾，则此策略示例允许它们进行连接。只有具有匹配客户端 ID 模式的事物才被允许连接。