

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

# 基本 AWS IoT Core 策略变量
<a name="basic-policy-variables"></a>

AWS IoT Core 定义了以下基本策略变量：
+ `aws:SourceIp`：连接到 AWS IoT Core 消息代理的客户端的 IP 地址。
+ `iot:ClientId`：用于连接到 AWS IoT Core 消息代理的客户端 ID。
+ `iot:DomainName`：连接到的客户端的域名 AWS IoT Core。

**Topics**
+ [

## `ClientId` 和 `SourceIp` 策略变量示例
](#basic-policy-variables-example)
+ [

## `iot:DomainName` 策略变量示例
](#basic-policy-variables-example-domain)

## `ClientId` 和 `SourceIp` 策略变量示例
<a name="basic-policy-variables-example"></a>

以下 AWS IoT Core 策略显示了使用策略变量的策略。 `aws:SourceIp`可以在策略的条件元素中使用，以允许委托人仅在特定地址范围内发出 API 请求。有关示例，请参阅 [授权用户和云服务使用 AWS IoT 作业](iam-policy-users-jobs.md)。

****  

```
{
	"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/clientid"
			]
		}
	]
}
```

**注意**  
不建议将策略变量 `${iot:ClientId}` 与 `Connect` 一起使用。不检查 `ClientId` 的值，因此，具有不同客户端 ID 的附加程序可以通过验证，但会导致连接断开。由于允许任何 `ClientId`，因此设置随机客户端 ID 可以绕过事物组策略。

## `iot:DomainName` 策略变量示例
<a name="basic-policy-variables-example-domain"></a>

您可以添加 `iot:DomainName` 策略变量来限制允许使用哪些域。添加 `iot:DomainName` 策略变量可以让设备仅连接到已配置的特定端点。

以下策略让设备可以连接到指定域。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": {
		"Sid": "AllowConnectionsToSpecifiedDomain",
		"Effect": "Allow",
		"Action": [
			"iot:Connect"
		],
		"Resource": "arn:aws:iot:us-east-1:123456789012:client/clientid",
		"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": "arn:aws:iot:us-east-1:123456789012:client/clientid",
		"Condition": {
			"StringEquals": {
				"iot:DomainName": "d1234567890abcdefghij-ats.iot.us-east-1.amazonaws.com"
			}
		}
	}
}
```

有关策略条件运算符的信息，请参阅 [IAM JSON 策略元素：条件运算符](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)。有关域配置的更多信息，请参阅[什么是域配置？](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html)。