对客户端设备进行身份验证和授权
注意
此功能适用于 Greengrass Nucleus 组件的 v2.6.0 及更高版本。
使用客户端设备身份验证 IPC 服务开发自定义本地代理组件,使本地 IoT 设备(例如客户端设备)可以连接。
要使用这些 IPC 操作,请在自定义组件中包含客户端设备身份验证组件版本 2.2.0 或更高版本。然后,您可以在自定义组件中使用 IPC 操作来执行以下操作:
-
验证连接到核心设备的客户端设备的身份。
-
为客户端设备创建会话,以连接到核心设备。
-
验证客户端设备是否有权执行某项操作。
-
在核心设备的服务器证书轮换时接收通知。
主题
最低 SDK 版本
下表列出了与客户端设备身份验证 IPC 服务交互时必须使用的最低版本 AWS IoT Device SDK。
SDK | 最低版本 |
---|---|
v1.9.3 |
|
v1.11.3 |
|
v1.18.3 |
|
v1.12.0 |
授权
要在自定义组件中使用客户端设备身份验证 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
验证客户端设备的身份。此操作用于验证客户端设备是否为有效的 AWS 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 证书列表。