本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
对客户端设备进行身份验证和授权
注意
此功能适用于 v2.6.0 及更高版本的 Greeng rass 核组件。
使用客户端设备身份验证 IPC 服务开发可连接本地 IoT 设备(例如客户端设备)的自定义本地代理组件。
要使用这些 IPC 操作,请将客户端设备身份验证组件的 2.2.0 或更高版本作为依赖项包含在自定义组件中。然后,您可以在自定义组件中使用 IPC 操作来执行以下操作:
-
验证连接到核心设备的客户端设备的身份。
-
为客户端设备创建会话以连接到核心设备。
-
验证客户端设备是否有权执行某项操作。
-
核心设备的服务器证书轮换时会收到通知。
主题
最低 SDK 版本
下表列出了与客户端设备身份验证 IPC 服务进行交互时必须使用的最低版本。Amazon IoT Device SDK
SDK | 最低版本 |
---|---|
v1.9.3 |
|
v1.11.3 |
|
v1.18.3 |
|
v1.12.0 |
Authorization
要在自定义组件中使用客户端设备身份验证 IPC 服务,必须定义允许您的组件执行这些操作的授权策略。有关定义授权策略的信息,请参阅授权组件执行 IPC 操作。
客户端设备身份验证和授权的授权策略具有以下属性。
IPC 服务标识符:aws.greengrass.clientdevices.Auth
运算 | 描述 | 资源 |
---|---|---|
|
允许组件验证客户端设备的身份。 |
|
|
允许组件验证客户端设备的凭据并为该客户端设备创建会话。 |
|
|
允许组件验证客户端设备是否具有执行操作的权限。 |
|
|
允许组件在核心设备的服务器证书轮换时接收通知。 |
|
|
允许组件执行所有客户端设备身份验证 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) 证书列表。