对客户端设备进行身份验证和授权 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

对客户端设备进行身份验证和授权

使用客户端设备身份验证 IPC 服务开发自定义本地代理组件,本地物联网设备(例如客户端设备)可以在其中进行连接。

要使用这些 IPC 操作,请将客户端设备身份验证组件的 2.2.0 或更高版本作为依赖项包含在您的自定义组件中。然后,您可以在自定义组件中使用 IPC 操作来执行以下操作:

  • 验证连接到核心设备的客户端设备的身份。

  • 为客户端设备创建连接核心设备的会话。

  • 验证客户端设备是否有权执行某项操作。

  • 当核心设备的服务器证书轮换时,会收到通知。

SDK 的最低版本

下表列出了与客户端设备身份验证 IPC 服务交互时必须使用的最低版本。Amazon IoT Device SDK

授权

要在自定义组件中使用客户端设备身份验证 IPC 服务,必须定义允许您的组件执行这些操作的授权策略。有关定义授权策略的信息,请参阅授权组件执行 IPC 操作

客户端设备身份验证和授权的授权策略具有以下属性。

IPC 服务标识符:aws.greengrass.clientdevices.Auth

操作 描述 资源

aws.greengrass#VerifyClientDeviceIdentity

允许组件验证客户端设备的身份。

*

aws.greengrass#GetClientDeviceAuthToken

允许组件验证客户端设备的凭据并为该客户端设备创建会话。

*

aws.greengrass#AuthorizeClientDeviceAction

允许组件验证客户端设备是否有权执行某项操作。

*

aws.greengrass#SubscribeToCertificateUpdates

允许组件在核心设备的服务器证书轮换时接收通知。

*

*

允许组件执行所有客户端设备身份验证 IPC 服务操作。

*

授权策略示例

您可以参考以下授权策略示例,以帮助您为组件配置授权策略。

例 授权策略示例

以下示例授权策略允许组件执行所有客户端设备身份验证 IPC 操作。

{ "accessControl": { "aws.greengrass.clientdevices.Auth": { "com.example.MyLocalBrokerComponent:clientdevices:1": { "policyDescription": "Allows access to authenticate and authorize client devices.", "operations": [ "aws.greengrass#VerifyClientDeviceIdentity", "aws.greengrass#GetClientDeviceAuthToken", "aws.greengrass#AuthorizeClientDeviceAction", "aws.greengrass#SubscribeToCertificateUpdates" ], "resources": [ "*" ] } } } }

VerifyClientDeviceIdentity

验证客户端设备的身份。此操作验证客户端设备是否有效Amazon IoT。

请求

此操作的请求具有以下参数:

credential

客户端设备的凭证。此对象包含以下信息:ClientDeviceCredential

clientDeviceCertificate(Python:client_device_certificate

客户端设备的 X.509 设备证书。

响应

此操作的响应包含以下信息:

isValidClientDevice(Python:is_valid_client_device

客户端设备的身份是否有效。

GetClientDeviceAuthToken

验证客户端设备的凭证并为该客户端设备创建会话。此操作会返回一个会话令牌,您可以在后续请求中使用该令牌来授权客户端设备操作

要成功连接客户端设备,客户端设备身份验证组件必须为该客户端设备使用的客户端 ID 授予mqtt:connect权限。

请求

此操作的请求具有以下参数:

credential

客户端设备的凭证。此对象包含以下信息:CredentialDocument

mqttCredential(Python:mqtt_credential

客户端设备的 MQTT 凭证。指定客户端设备用于连接的客户端 ID 和证书。此对象包含以下信息:MQTTCredential

clientId(Python:client_id

用于连接的客户端 ID。

certificatePem(Python:certificate_pem

用于连接的 X.509 设备证书。

username
注意

目前未使用此属性。

password
注意

目前未使用此属性。

响应

此操作的响应包含以下信息:

clientDeviceAuthToken(Python:client_device_auth_token

客户端设备的会话令牌。您可以在后续请求中使用此会话令牌来授权此客户端设备的操作。

AuthorizeClientDeviceAction

验证客户端设备是否有权对资源执行操作。客户端设备授权策略指定客户端设备在连接到核心设备时可以执行的权限。在配置客户端设备身份验证组件时,您可以定义客户端设备授权策略。

请求

此操作的请求具有以下参数:

clientDeviceAuthToken(Python:client_device_auth_token

客户端设备的会话令牌。

operation

要授权的操作。

resource

客户端设备执行操作的资源。

响应

此操作的响应包含以下信息:

isAuthorized(Python:is_authorized

客户端设备是否有权对资源执行操作。

SubscribeToCertificateUpdates

订阅即可在每次轮换时接收核心设备的新服务器证书。服务器证书轮换时,代理必须使用新的服务器证书重新加载。

默认情况下,客户端设备身份验证组件每 7 天轮换一次服务器证书。您可以将轮换间隔配置为 2 到 10 天之间。

此操作是一种订阅操作,您可以在其中订阅事件消息流。要使用此操作,请定义一个流响应处理程序,其中包含处理事件消息、错误和流关闭的函数。有关更多信息,请参阅 订阅 IPC 事件直播

事件消息类型:CertificateUpdateEvent

请求

此操作的请求具有以下参数:

certificateOptions(Python:certificate_options

要订阅的证书更新的类型。此对象包含以下信息:CertificateOptions

certificateType(Python:certificate_type

要订阅的更新的证书类型。选择以下选项:

  • SERVER

响应

此操作的响应包含以下信息:

messages

消息流。此对象包含以下信息:CertificateUpdateEvent

certificateUpdate(Python:certificate_update

有关新证书的信息。此对象包含以下信息:CertificateUpdate

certificate

证书。

privateKey(Python:private_key

证书的私钥。

publicKey(Python:public_key

证书的公钥。

caCertificates(Python:ca_certificates

证书的 CA 证书链中的证书颁发机构 (CA) 证书列表。