亚马逊IoT Core身份验证和授权

亚马逊IoT Core身份验证

身份验证的过程不同于根据声音识别某个人是谁,但是原理是类似的。当某个设备需要访问Iot资源的时候,第一步就是需要确认设备的身份,如果IoT Core不能识别设备的身份,那么就不会产生连接,IoT Core提供了多个不同的身份验证处理方法,比如证书认证,自定义身份认证。

举例:

当有人在敲你家门的时候,第一反应是问对方是谁,然后通过这人说的名字,并且判断他的声音来确认这人的身份,这时候做的就是身份验证的过程,如果不认识这人,或者名字和声音不匹配,你会让对方离开。

亚马逊Iot Core授权

在验证了设备的身份之后,需要给设备授予相对应的权限,以访问亚马逊资源。接着上面的案例来讲,门外的人身份验证通过了,这时候你可能需要做一些决策,

  • 你要打开门吗?
  • 你要让这人进来吗?
  • 你要让这人上楼吗?

基于这个人的身份,你可能要做一些不同的决策,比如,如果是送披萨的,你只需要打开门就好了;如果是家庭成员,那他可以去房子的任何地方,不同的人将有不同的访问权限。

亚马逊Iot Core策略

授权是通过IoT Core授予设备相对应的策略来实现的,策略决定了被授权的设备可以做哪些操作,策略是一个JSON文档,包含了一组权限,通过策略可以启用或者禁用权限,限制设备访问AWS IoT的某些资源。

1、权限决定机制:

首先所有的权限默认是deny的,然后看策略文档中是否显示存在deny权限,如果有,则该操作没有访问权限,如果没有,再看是否显示存在allow的权限,有则该操作有访问权限,没有则该操作无访问权限。

2、策略文档案例:

{
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Deny",
        "Action": [
          "iot:Connect"
        ],
        "Resource": [
          "arn:aws:iot:us-east-1:123456789012:client/client1",
          "arn:aws:iot:us-east-1:123456789012:client/client2"
        ]
      },
      {
        "Effect": "Allow",
        "Action": [
          "iot:Connect"
        ],
        "Resource": [
          "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
        ]
      }
    ]
}

3、策略文档组成部分

Effect:有效值只有Allow和Deny,表示有权限和没有权限

Action:表示运行执行的操作,或者禁止执行的操作

Resource:表示这个操作权限影响的对象范围,通常使用Amazon Resource Name指定资源

Condition:可以指定一组条件,在满足触发条件之后授予设备权限

最小权限原则:

AWS安全的最佳实践是授予设备最小的权限。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现连接平台AWS IoT Core可以通过以下步骤: 1. 注册AWS账号并创建IoT Core服务。 2. 安装AWS IoT Device SDK for C++,该SDK提供了连接AWS IoT Core所需的功能和类库。 3. 在C++代码中使用AWS IoT Device SDK for C++提供的类库连接到AWS IoT Core,并实现消息的发布和订阅功能。 以下是一个简单的连接AWS IoT Core的C++代码示例: ```c++ #include <aws/iot/MqttClient.h> #include <aws/iot/MqttClientError.h> #include <aws/iot/MqttClientException.h> #include <aws/iot/model/ConnectRequest.h> #include <aws/iot/model/ConnectResponse.h> #include <aws/iot/model/PublishRequest.h> #include <aws/iot/model/PublishResponse.h> #include <aws/iot/model/SubscribeRequest.h> #include <aws/iot/model/SubscribeResponse.h> using namespace Aws::Iot; using namespace Aws::Iot::Model; // AWS IoT Core连接参数 const char* iotEndpoint = "your-iot-endpoint"; const char* clientId = "your-client-id"; const char* caFilePath = "path/to/ca/certificate"; const char* certFilePath = "path/to/client/certificate"; const char* keyFilePath = "path/to/client/private/key"; // 消息主题 const char* topic = "your-topic"; int main() { // 创建MQTT客户端 MqttClient mqttClient(clientId, iotEndpoint); // 配置MQTT客户端参数 mqttClient.SetCA(caFilePath); mqttClient.SetCert(certFilePath); mqttClient.SetKey(keyFilePath); // 连接到AWS IoT Core ConnectRequest connectRequest; auto connectOutcome = mqttClient.Connect(connectRequest); if (!connectOutcome.IsSuccess()) { // 连接失败处理 return 1; } // 发布消息 PublishRequest publishRequest; publishRequest.SetTopic(topic); publishRequest.SetPayload("Hello, AWS IoT Core!"); auto publishOutcome = mqttClient.Publish(publishRequest); if (!publishOutcome.IsSuccess()) { // 发布消息失败处理 return 2; } // 订阅消息 SubscribeRequest subscribeRequest; subscribeRequest.AddTopic(topic); auto subscribeOutcome = mqttClient.Subscribe(subscribeRequest); if (!subscribeOutcome.IsSuccess()) { // 订阅消息失败处理 return 3; } // 处理接收到的消息 while (true) { auto receivedMessage = mqttClient.ReceiveMessage(); if (receivedMessage.IsSuccess()) { // 处理消息 std::cout << "Received message: " << receivedMessage.GetMessage().GetPayload() << std::endl; } } return 0; } ``` 在以上示例中,我们使用AWS IoT Device SDK for C++提供的MqttClient类连接到AWS IoT Core,并通过PublishRequest类发布消息,通过SubscribeRequest类订阅消息,并使用ReceiveMessage()方法接收到消息。需要注意的是,以上示例仅为演示用途,实际应用中还需要进行异常处理和其他的业务逻辑处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值