使用憑證提供者進行自我管理 AWS IoT Core 的憑證簽署 - AWS IoT Core

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用憑證提供者進行自我管理 AWS IoT Core 的憑證簽署

您可以建立 AWS IoT Core 憑證提供者來簽署 AWS IoT 機群佈建中的憑證簽署請求 CSRs)。憑證提供者會參考 Lambda 函數和 CreateCertificateFromCsr MQTT API 進行機群佈建。Lambda 函數接受 CSR 並傳回已簽署的用戶端憑證。

當您的 沒有憑證提供者時 AWS 帳戶,會在機群佈建中呼叫 CreateCertificateFromCsr MQTT API,以從 CSR 產生憑證。建立憑證提供者之後,CreateCertificateFromCsr MQTT API 的行為會變更,而對此 MQTT API 的所有呼叫都會叫用憑證提供者來發出憑證。

透過 AWS IoT Core 憑證提供者,您可以實作使用私有憑證授權單位 (CAs) 的解決方案,例如 AWS Private CA、其他公開信任CAs 或您自己的公有金鑰基礎設施 (PKI) 來簽署 CSR。此外,您可以使用憑證提供者來自訂用戶端憑證的欄位,例如有效期間、簽署演算法、發行者和延伸項目。

重要

每個 只能建立一個憑證提供者 AWS 帳戶。簽署行為變更會套用至呼叫 CreateCertificateFromCsr MQTT API 的整個機群,直到您從 中刪除憑證提供者為止 AWS 帳戶。

自我管理憑證簽署如何在機群佈建中運作

重要概念

下列概念提供詳細資訊,可協助您了解自我管理憑證簽署如何在 AWS IoT 機群佈建中運作。如需詳細資訊,請參閱使用機群佈建佈建沒有裝置憑證的裝置

AWS IoT 機群佈建

透過機 AWS IoT 群佈建 (機群佈建的簡稱), 會在 AWS IoT Core 裝置第一次連線至 時 AWS IoT Core ,產生並安全地將裝置憑證交付至您的裝置。您可以使用機群佈建來連接沒有裝置憑證的裝置 AWS IoT Core。

憑證簽署請求 (CSR)

在機群佈建過程中,裝置 AWS IoT Core 會透過機群佈建 MQTT APIs 向 發出請求。此請求包含憑證簽署請求 (CSR),該請求將簽署以建立用戶端憑證。

AWS 機群佈建中的受管憑證登入

AWS 受管是機群佈建中憑證簽署的預設設定。透過 AWS 受管憑證簽署, AWS IoT Core 將使用自己的 CAs簽署 CSRs。

機群佈建中的自我管理憑證簽署

自我管理是在機群佈建中簽署憑證的另一個選項。透過自我管理憑證簽署,您可以建立 AWS IoT Core 憑證提供者來簽署 CSRs。您可以使用自我管理憑證簽署,以 AWS 私有 CA、其他公開信任 CA 或您自己的公有金鑰基礎設施 (PKI) 產生的 CA 簽署 CSRs。

AWS IoT Core 憑證提供者

AWS IoT Core 憑證提供者 (憑證提供者的簡稱) 是客戶管理的資源,用於在機群佈建中進行自我管理憑證簽署。

圖表

下圖是自我認證簽署如何在 AWS IoT 機群佈建中運作的簡化說明。

AWS IoT Core 機群佈建的憑證提供者
  • 當新的 IoT 裝置製造或引入機群時,它需要用戶端憑證才能進行自我驗證 AWS IoT Core。

  • 在機群佈建程序中,裝置會透過機群佈建 MQTT APIs 向 提出用戶端憑證 AWS IoT Core 的請求。此請求包含憑證簽署請求 (CSR)。

  • AWS IoT Core 叫用憑證提供者,並將 CSR 做為輸入傳遞給提供者。

  • 憑證提供者會將 CSR 視為輸入,並發出用戶端憑證。

    對於 AWS 受管憑證簽署, 會使用自己的 CA AWS IoT Core 簽署 CSR 並發出用戶端憑證。

  • 使用發行的用戶端憑證,裝置會繼續機群佈建,並與 建立安全連線 AWS IoT Core。

憑證提供者 Lambda 函數輸入

AWS IoT Core 當裝置向 Lambda 函數註冊時, 會將下列物件傳送至該函數。的值certificateSigningRequestCreateCertificateFromCsr請求中提供的隱私權增強郵件 (PEM) 格式的 CSR。principalId 是在提出CreateCertificateFromCsr請求 AWS IoT Core 時用來連線 的委託人 ID。 clientId是 MQTT 連線的用戶端 ID 集。

{ "certificateSigningRequest": "string", "principalId": "string", "clientId": "string" }

憑證提供者 Lambda 函數傳回值

Lambda 函數必須傳回包含 certificatePem值的回應。以下是成功回應的範例。 AWS IoT Core 將使用傳回值 (certificatePem) 來建立憑證。

{ "certificatePem": "string" }

如果註冊成功, CreateCertificateFromCsr會在CreateCertificateFromCsr回應certificatePem中傳回相同的 。如需詳細資訊,請參閱 CreateCertificateFromCsr 的回應承載範例。

Lambda 函數範例

在建立憑證提供者之前,您必須建立 Lambda 函數來簽署 CSR。以下是 Python 中的 Lambda 函數範例。此函數 AWS Private CA 會使用私有 CA 和SHA256WITHRSA簽署演算法呼叫 來簽署輸入 CSR。傳回的用戶端憑證有效期為一年。如需 AWS Private CA 和如何建立私有 CA 的詳細資訊,請參閱什麼是 AWS 私有 CA?建立私有 CA

import os import time import uuid import boto3 def lambda_handler(event, context): ca_arn = os.environ['CA_ARN'] csr = (event['certificateSigningRequest']).encode('utf-8') acmpca = boto3.client('acm-pca') cert_arn = acmpca.issue_certificate( CertificateAuthorityArn=ca_arn, Csr=csr, Validity={"Type": "DAYS", "Value": 365}, SigningAlgorithm='SHA256WITHRSA', IdempotencyToken=str(uuid.uuid4()) )['CertificateArn'] # Wait for certificate to be issued time.sleep(1) cert_pem = acmpca.get_certificate( CertificateAuthorityArn=ca_arn, CertificateArn=cert_arn )['Certificate'] return { 'certificatePem': cert_pem }
重要
  • Lambda 函數傳回的憑證必須具有與憑證簽署請求 (CSR) 相同的主體名稱和公有金鑰。

  • Lambda 函數必須在 5 秒內完成執行。

  • Lambda 函數必須與憑證提供者資源位於相同的 AWS 帳戶 和 區域。

  • 必須授予 AWS IoT 服務主體叫用 Lambda 函數的許可。為了避免混淆代理人問題,我們建議您sourceAccount為調用許可設定 sourceArn和 。如需詳細資訊,請參閱預防跨服務混淆代理人

Lambda 的下列資源型政策範例 AWS IoT 會授予叫用 Lambda 函數的許可:

JSON
{ "Version": "2012-10-17", "Id": "InvokePermission", "Statement": [ { "Sid": "LambdaAllowIotProvider", "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function", "Condition": { "StringEquals": { "AWS:SourceAccount": "123456789012" }, "ArnLike": { "AWS:SourceArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider" } } } ] }

機群佈建的自我管理憑證簽署

您可以使用 或 為機群佈建 AWS CLI 選擇自我管理憑證簽署 AWS Management Console。

若要選擇自我管理憑證簽署,您必須建立 AWS IoT Core 憑證提供者以在機群佈建中簽署 CSRs。 會 AWS IoT Core 叫用憑證提供者,以 CSR 做為輸入並傳回用戶端憑證。若要建立憑證提供者,請使用 CreateCertificateProvider API 操作或 CLI create-certificate-provider 命令。

注意

建立憑證提供者之後,機CreateCertificateFromCsr群佈建 API 的行為將會變更,因此 的所有呼叫CreateCertificateFromCsr都會叫用憑證提供者來建立憑證。建立憑證提供者之後,此行為可能需要幾分鐘的時間才能變更。

aws iot create-certificate-provider \ --certificateProviderName my-certificate-provider \ --lambdaFunctionArn arn:aws:lambda:us-east-1:123456789012:function:my-function-1 \ --accountDefaultForOperations CreateCertificateFromCsr

以下顯示此命令的範例輸出:

{ "certificateProviderName": "my-certificate-provider", "certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider" }

如需詳細資訊,請參閱 AWS IoT API CreateCertificateProvider 參考中的 。

若要使用 選擇自我管理憑證簽署 AWS Management Console,請遵循下列步驟:

  1. 前往 AWS IoT 主控台

  2. 在左側導覽的 安全性下,選擇憑證簽署

  3. 憑證簽署頁面的憑證簽署詳細資訊下,選擇編輯憑證簽署方法

  4. 編輯憑證簽署方法頁面的憑證簽署方法下,選擇自我管理

  5. 自我管理設定區段中,輸入憑證提供者的名稱,然後建立或選擇 Lambda 函數。

  6. 選擇更新憑證簽署

AWS CLI 憑證提供者的 命令

建立憑證提供者

若要建立憑證提供者,請使用 CreateCertificateProvider API 操作或 CLI create-certificate-provider 命令。

注意

建立憑證提供者之後,機CreateCertificateFromCsr群佈建 API 的行為將會變更,因此所有對 的呼叫CreateCertificateFromCsr都會叫用憑證提供者來建立憑證。建立憑證提供者之後,此行為可能需要幾分鐘的時間才能變更。

aws iot create-certificate-provider \ --certificateProviderName my-certificate-provider \ --lambdaFunctionArn arn:aws:lambda:us-east-1:123456789012:function:my-function-1 \ --accountDefaultForOperations CreateCertificateFromCsr

以下顯示此命令的範例輸出:

{ "certificateProviderName": "my-certificate-provider", "certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider" }

如需詳細資訊,請參閱 AWS IoT API CreateCertificateProvider 參考中的 。

更新憑證提供者

若要更新憑證提供者,請使用 UpdateCertificateProvider API 操作或 CLI update-certificate-provider 命令。

aws iot update-certificate-provider \ --certificateProviderName my-certificate-provider \ --lambdaFunctionArn arn:aws:lambda:us-east-1:123456789012:function:my-function-2 \ --accountDefaultForOperations CreateCertificateFromCsr

以下顯示此命令的範例輸出:

{ "certificateProviderName": "my-certificate-provider", "certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider" }

如需詳細資訊,請參閱 API UpdateCertificateProvider 參考中的 。 AWS IoT

描述憑證提供者

若要描述憑證提供者,請使用 DescribeCertificateProvider API 操作或 CLI describe-certificate-provider 命令。

aws iot describe-certificate-provider --certificateProviderName my-certificate-provider

以下顯示此命令的範例輸出:

{ "certificateProviderName": "my-certificate-provider", "lambdaFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function", "accountDefaultForOperations": [ "CreateCertificateFromCsr" ], "creationDate": "2022-11-03T00:15", "lastModifiedDate": "2022-11-18T00:15" }

如需詳細資訊,請參閱 AWS IoT API DescribeCertificateProvider 參考中的 。

刪除憑證提供者

若要刪除憑證提供者,請使用 DeleteCertificateProvider API 操作或 CLI delete-certificate-provider 命令。如果您刪除憑證提供者資源, 的行為CreateCertificateFromCsr將會繼續,並且 AWS IoT 會從 AWS IoT CSR 建立由 簽署的憑證。

aws iot delete-certificate-provider --certificateProviderName my-certificate-provider

此命令不會產生任何輸出。

如需詳細資訊,請參閱 AWS IoT API DeleteCertificateProvider 參考中的 。

列出憑證提供者

若要列出 中的憑證提供者 AWS 帳戶,請使用 ListCertificateProviders API 操作或 CLI list-certificate-providers 命令。

aws iot list-certificate-providers

以下顯示此命令的範例輸出:

{ "certificateProviders": [ { "certificateProviderName": "my-certificate-provider", "certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider" } ] }

如需詳細資訊,請參閱 AWS IoT API ListCertificateProvider 參考中的 。