本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
驗證和授權用戶端裝置
注意
此功能適用於 v2.6.0 及更高版 Greeng rass 核組件。
使用用戶端裝置驗證 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
驗證用戶端裝置的認證,並為用戶端裝置建立工作階段。此作業會傳回工作階段 Token,您可以在後續要求中使用它來授權用戶端裝置動作。
若要成功連接用戶端裝置,用戶端裝置驗證元件必須授予用戶端裝置所使用之用戶端 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) 憑證清單。