关于iot:使用模版自动化-Amazon-IoT-设备创建及证书注册过程

42次阅读

共计 6748 个字符,预计需要花费 17 分钟才能阅读完成。

背景介绍

利用即时注册(JITR)性能,能够疾速的进行设施证书注册及设施上线。然而配置相干 Amazon Lambda 函数的形式绝对简单。应用本文介绍的即时部署(JITP)性能,能够简化 Amazon IoT 规定和 Amazon Lambda 函数的步骤,间接在注册设施 CA 证书的同时附加上一个自定义好的模版。在设施第一次连贯 Amazon IoT 平台的时候,JITP 会参照该模版的定义来实现设施证书的注册和设施在云端的创立过程。

须要特地留神的是,JITP 作为一个绝对比拟新的性能,目前在亚马逊云科技中国区还没有部署。如果设施须要连贯亚马逊云科技中国区,还是须要应用 JITR 来实现证书注册及设施上线。但对于一些须要在海内应用亚马逊云科技的用户,能够利用这个性能对设施进行设施注册管制。

从上图 JITR 和 JITP 两种形式的比照中能够看出,JITP 简化了局部流程。

JITP 的实现步骤如下:

1. 创立 CA 证书, 模版和相应的 Amazon IAM 权限。
2. 在 Amazon IoT 平台上注册和激活 CA 证书并附加模版。
3. 应用该 CA 证书签发设施证书并装置在  Amazon IoT 设施上。
4.Amazon IoT 设施与 Amazon IoT 平台的第一次连贯。

本文中的 Amazon IoT 设施将会应用一台 Amazon Linux EC2 实例进行模仿,并应用 MQTT Mosquitto Client 工具来模仿 MQTT 终端,Amazon IoT 设施的配置工作会在这台 Amazon EC2 实例上进行。

创立 CA 证书,模版和相应的 Amazon IAM 权限

登陆 Amazon EC2 实例并执行如下命令创立私钥和对应的 CA 证书:

$ mkdir cert
$ cd cert
$ openssl genrsa -out CA_Private.key 2048
$ openssl req -x509 -new -nodes -key CA_Private.key -sha256 -days 365 -out CA_Certificate.pem

* 左滑查看更多

在最初一步创立 CA 证书时会要求填入 Amazon CSR 相干信息,请依照理论状况填写:

Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:

因为 JITP 是通过模版定义来注册设施证书和创立设施,因而模版中相应的权限必不可少。上面咱们在 Amazon IAM 中来创立一个角色并赋予相应的权限。

1. 登陆到 Amazon Console 并进入 Amazon IAM 页面。

2. 点击页面左侧的角色后,点击创立角色按钮。

3. 在创立角色页面抉择“亚马逊云科技产品”中的 Amazon IoT,而后点击”下一步:权限”。

4. 在这个页面中不须要做任何改变,间接点击”下一步:审核”

5. 填写角色名称“JITP”后,点击创立角色。

6. 角色创立实现后,点击角色名称 JITP 并记录下角色 ARN(arn:aws:iam::12345678910:role/JITP)。

在这个页面中不须要做任何改变,间接点击”下一步:审核”

填写角色名称“JITP”后,点击创立角色。

角色创立实现后,点击角色名称 JITP 并记录下角色 ARN(arn:aws:iam::12345678910:role/JITP)。

在筹备好角色和权限后咱们开始创立模版,这个模版会在之后注册 CA 证书的时候一起提交给 Amazon IoT Core。

这里的模版实际上就是一个 JSON 文档,外面蕴含两局部。一部分是参数(Parameters),另一部分是资源(Resource)

Parameters 局部你能够定义如下内容:

  • AWS::IoT::Certificate::Country
  • AWS::IoT::Certificate::Organization
  • AWS::IoT::Certificate::OrganizationalUnit
  • AWS::IoT::Certificate::DistinguishedNameQualifier
  • AWS::IoT::Certificate::StateName
  • AWS::IoT::Certificate::CommonName
  • AWS::IoT::Certificate::SerialNumber
  • AWS::IoT::Certificate::Id

在上面的模版中咱们定义了两个 Parameters,一个是 AWS::IoT::Certificate::Country,另一个是 AWS::IoT::Certificate::Id。这样在设施首次连贯 Amazon IoT 平台时,设施证书中对应的这两个字段会被抽取进去用于 Resources 中 Thing 的创立。第二行的 roleARN 是后面创立的角色 JITP 的 ARN (Amazon Resource Names),如果依照步骤做的话应该曾经记录下来了。

{"templateBody":"{ \"Parameters\": { \"AWS::IoT::Certificate::Country\": { \"Type\": \"String\"}, \"AWS::IoT::Certificate::Id\": {\"Type\": \"String\"} }, \"Resources\": {\"thing\": { \"Type\": \"AWS::IoT::Thing\", \"Properties\": { \"ThingName\": {\"Ref\": \"AWS::IoT::Certificate::Id\"}, \"AttributePayload\": {\"version\": \"v1\", \"country\": {\"Ref\": \"AWS::IoT::Certificate::Country\"}} } }, \"certificate\": {\"Type\": \"AWS::IoT::Certificate\", \"Properties\": { \"CertificateId\": {\"Ref\": \"AWS::IoT::Certificate::Id\"}, \"Status\": \"ACTIVE\"} }, \"policy\": {\"Type\": \"AWS::IoT::Policy\", \"Properties\": { \"PolicyDocument\": \"{\\\"Version\\\": \\\"2012-10-17\\\",\\\"Statement\\\": [{\\\"Effect\\\":\\\"Allow\\\",\\\"Action\\\": [\\\"iot:*\\\"],\\\"Resource\\\" : [\\\"*\\\"]}]}\"} } } }",
 "roleArn":"arn:aws:iam::1234567890:role/JITP"
}

* 左滑查看更多

咱们将这段 JSON 代码保留到 Amazon EC2 实例中~/cert 文件夹外面的一个文件中,文件名为 provisioning-template.json。

这个模版实际上规定了在设施连贯时,  Amazon  IoT Core 会创立两样货色,一个是 Thing(设施在云上的映射),另外一个是 Policy(操作权限),您能够从模版中 Resources 中看到,并且接下来 JITP 还会主动做三件事:

  • 将 Policy 赋予证书
  • 将证书挂载到 Thing 下面
  • 更新证书状态为 Active

在 Amazon IoT 平台上注册和激活 CA 证书并附加模版

有了之前的筹备工作,咱们能够开始注册 CA 证书和模版到 Amazon IOT Core。为了平安,Amazon OT Core 提供了相应的审核流程确保你同时持有 CA 证书和对应的私钥。因而,在最终注册 CA 证书之前,咱们还须要利用 CA 证书生成一张用于验证 CA 证书和私钥持有者身份的两头证书。上面这个 Amazon CLI 命令会返回一个随机生成的认证码,这个认证码会和你的账户绑定。记录下这个认证码,很快咱们就会用到。

$ aws iot get-registration-code

应用 OpenSSL 生成用于验证身份的私钥和证书申请文件(Amazon CSR – Certificate Signing Request):

$ openssl genrsa -out Verification_Private.key 2048

$ openssl req -new -key Verification_Private.key -out Verification.csr

* 左滑查看更多

在创立 Amazon CSR 的过程中,你会被提醒输出如下一些内容,将前一步记录下的认证码填入到 Common Name 中:

...
 Organization Name (eg, company) []:
 Organizational Unit Name (eg, section)
 Common Name (e.g. server FQDN or YOUR name) []: XXXXXREGISTRATIONCODEXXXXX
 ...

* 左滑查看更多

接下来,应用 CA 证书和私钥,以及下面创立的 Amazon CSR 来生成一份用于验证身份的证书:

$ openssl x509 -req -in Verification.csr -CA CA_Certificate.pem -CAkey CA_Private.key -CAcreateserial -out Verification.crt -days 365 -sha256

* 左滑查看更多

最初,通过如下命令导入 CA 证书和两头证书实现 CA 证书的注册和激活。同时,通过设置–allow-auto-registration 的形式,开启设施连贯至  Amazon IoT Core 时设施证书的主动注册,并通过–registration-config 绑定模版到 CA 证书上。这个命令的输入会返回对应 CA 证书在 Amazon IoT Core 上的证书 arn (certificateArn)和证书 ID (caCertificateId).

$ aws iot register-ca-certificate --ca-certificate file://CA_Certificate.pem --verification-certificate file://Verification.crt --set-as-active --allow-auto-registration --registration-config file://provisioning-template.json

* 左滑查看更多

这时如果你进入 Amazon  IoT Core 服务,点击左侧的平安—>CA,会看到咱们的 CA 曾经注册到了 Amazon IoT 平台上了。

应用 CA 证书签发设施证书

当咱们创立并注册好 CA 证书之后,就能够开始用这个 CA 证书来签发设施证书了,步骤如下:

1. 创立一个设施证书的私钥 Device.key 和对应的证书申请文件 Device_Certificate.csr:

$ openssl genrsa -out Device.key 2048
$ openssl req -new -key Device.key -out Device_Certificate.csr
  1. 应用 CA 证书,CA 证书私钥和证书申请文件签发设施证书 Device_Certificate.crt:
$ openssl x509 -req -in Device_Certificate.csr -CA CA_Certificate.pem -CAkey CA_Private.key -CAcreateserial -out Device_Certificate.crt -days 365 -sha256

* 左滑查看更多

Amazon IoT 设施与 Amazon IoT 的第一次连贯

你能够在你的 Amazon IoT 设施上装置亚 Amazon  IoT SDK,通过本人的代码调用 SDK 来实现所有的性能。这里咱们为了简化步骤和节约工夫,抉择利用 Amazon EC2 上装置 MQTT Mosquitto Client 工具来模仿 MQTT 终端。

1. 登陆到 Amazon EC2 实例并执行如下命令:

$ sudo wget http://download.opensuse.org/repositories/home:/oojah:/mqtt/CentOS_CentOS-7/home:oojah:mqtt.repo -O /etc/yum.repos.d/mqtt.repo
 $ sudo yum install mosquitto mosquitto-clients -y

* 左滑查看更多

  1. 如果下面的命令执行时报依赖短少的谬误,能够加上–skip-broken 再执行一遍即可
$ sudo yum install mosquitto mosquitto-clients -y --skip-broken

* 左滑查看更多

  1. 进入到之前创立的 cert 目录

$ cd cert

  1. 合并 CA 证书和设施证书到一个新的证书造成无效的证书链:

$ cat Device_Certificate.crt CA_Certificate.pem > Device_CA_Certificate.crt

  1. 执行 mosquitto_pub 命令去公布一个音讯到对应的 topic 下面,这也是设施与  Amazon IoT Core 的第一次连贯。如果你回忆一下之前的步骤,到目前为止咱们的设施证书还只存在于设施下面,并没有在  Amazon IoT Core 上注册,那么接下来咱们尝试发送一条音讯。
$ mosquitto_pub --cafile root-CA.crt --cert Device_CA_Certificate.crt --key Device.key -h xxxxxxxxxxxxxx.iot.us-east-1.amazonaws.com -p 8883 -q 1 -t JITP/test -i anyclientID --tls-version tlsv1.2 -m "Hello" -d

* 左滑查看更多

  • 命令中的–cafile 是  Amazon IoT 平台的 CA 证书,用于设施去验证 Amazon  IoT 平台的身份,这个文件能够通过此链接取得。
  • 命令中的–cert 是合并 CA 证书和设施证书后的证书链。
  • 命令中的–key 是设施的私钥。
  • 命令中的 -h 是 Amazon IoT 平台的接入点,能够通过在 Amazon IoT 界面中左下角点击“设置”取得。
  • 命令中的 -t 是你要公布音讯到哪一个 topic 上,这里我是公布到 JITP/test,你能够抉择本人想要
  • 公布的 topic.
  • 命令中的 -i 能够依照你心愿的名字命名
  1. 胜利连贯并公布音讯后会有如下的输入,并且如果你登录  Amazon IoT 界面,点击左侧的平安—> 证书后能够看到设施证书曾经注册并激活了。
Client anyclientID sending CONNECT
Client anyclientID received CONNACK
Client anyclientID sending PUBLISH (d0, q1, r0, m1, 'JITP/test', ... (5 bytes))
Client anyclientID received PUBACK (Mid: 1)
Client anyclientID sending DISCONNECT

* 左滑查看更多

本篇作者


郭松
亚马逊云科技解决方案架构师
负责企业级客户的架构征询及设计优化,同时致力于 Amazon IoT 和存储服务在国内和寰球企业客户的利用和推广。退出亚马逊云可进之前在 EMC 研发核心负责零碎工程师,对企业级存储利用的高可用架构,计划及性能调优有深入研究。

正文完
 0