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

授予直接调用 AWS 服务的权限

设备可使用 X.509 证书通过 TLS 双向身份验证协议连接到 AWS IoT。其他 AWS 服务不支持基于证书的身份验证,但可使用签名版本 4 格式的 AWS 凭证调用这些服务。在使用证书对某个设备进行身份验证后,AWS IoT 可代表该设备代入角色并从 IAM 请求临时凭证。随后,该设备可使用该凭证调用其他 AWS 服务。

可使用 HTTP GET 在端口 443 上请求临时凭证,例如:

https://<your-aws-account-id>.credentials.iot.region.amazonaws.com:443/role-aliases/<your-role-alias>/credentials

注意

要查找您的终端节点,可使用 describe-endpoint CLI 命令,并将 iot:CredentialProvider 指定为终端节点类型。

要确保您的设备正在与 AWS IoT (而不是假冒它的服务) 进行通信,请将 RSA Amazon Root CA 1VeriSign Class 3 Public Primary G5 根 CA 证书复制到您的设备。

在发出临时凭证请求时,您可以选择在名为 x-amzn-iot-thingname 的请求标头中提供事物名称。要在请求标头中使用 thingName,您必须使用 AttachThingPrincipal API 将事物附加到设备证书。在设备通过传递 thingName 来请求凭证时,AWS IoT 会检查是否已将 thingName 附加到 TLS 握手期间提供的证书;除非已附加,否则将不会提供临时凭证。

通过在请求中传递事物名称,您可以使用 thingNamethingType 作为角色的访问策略中的策略变量以实现精细访问。有关更多信息,请参阅 AWS IoT 策略变量。除非在请求标头中传递事物名称,否则您无法在策略中使用事物变量。

附加到设备证书的策略必须向设备授予代入角色的权限。 您可以通过授予对角色别名的 ARN 执行 iot:AssumeRoleWithCertificate 操作的权限来做到这一点,例如 arn:aws:iot:<your-region>:<your-aws-account-id>:rolealias/<role-alias-name>

您可以通过创建一个 IAM 角色并向该角色附加策略,来授予对临时凭证的权限。您可以通过使用策略变量 thingNamethingTypecertificateId,对授予此角色的权限进行精细控制。有关更多信息,请参阅 AWS IoT 策略变量

打算直接调用 AWS 服务的设备必须知道在连接到 AWS IoT 时要使用的角色 ARN。而对角色 ARN 进行硬编码并不是一个很好的解决方案,因为您必须在角色 ARN 发生更改时更新设备。更好的解决方案是创建一个指向角色 ARN 的角色别名,并在您的设备上使用该别名。如果角色 ARN 发生更改,则可更新角色别名,而无需在设备上做出任何更改。使用 CreateRoleAlias API 创建角色别名。此 API 接受以下参数:

credentialDurationInSeconds

凭证有效的时间长度 (以秒为单位)。

roleAlias

一个标识角色别名的任意字符串。必须为 1-128 个字符,并且只能包含 A-Za-z0-9=,@- 字符。

roleArn

角色别名所指向的角色的 ARN。

请注意,执行 CreateRoleAlias 的实体本身必须具有执行此操作所需的足够权限。具体而言,它必须附加了一个策略,该策略允许对创建的 IAM 角色 (将为其创建别名) 的 ARN 执行 iam:PassRole 操作。

在请求临时凭证时,可以在请求标头中传递事物名称。如果存在事物名称,您可以使用事物策略变量来缩小 AWS IoT 所返回的凭证的范围。

ThingName 是一个可选的请求参数,可通过名为 x-amzn-iot-thingname 的 HTTP 请求标头传递。

使用 TLS 双向身份验证在端口 443 上通过 HTTP 向 AWS IoT 发出临时凭证请求。此请求必须是 HTTP GET 请求。URL 类似于:

https://<your-iot-endpoint>.iot.<your-aws-region>.amazonaws.com:443/role-aliases/<roleAlias>/credentials