View a markdown version of this page

使用控制访问权限 AWS IoT FleetWise - AWS 物联网 FleetWise

AWS 物联网 FleetWise 不再向新客户开放。现有的 AWS 物联网 FleetWise 客户可以继续使用该服务。《互联出行指南》 AWS为如何开发和部署用于实现与 AWS 物联网同等功能的互联移动解决方案的模块化服务提供了指导 FleetWise。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用控制访问权限 AWS IoT FleetWise

重要

某些 AWS 物联网 FleetWise 功能的访问权限目前受到限制。有关更多信息,请参阅 AWS AWS 物联网中的区域和功能可用性 FleetWise。

以下各节介绍如何控制对 AWS IoT FleetWise 资源的访问权限。它们涵盖的信息包括如何授予您的应用程序访问权限,以便 AWS 物联网 FleetWise 可以在活动期间传输车辆数据。它们还描述了如何授予 AWS IoT FleetWise 对 Amazon S3 (S3) 存储桶或 Amazon Timestream 数据库和表的访问权限以存储数据,或授予访问用于从车辆发送数据的 MQTT 消息的访问权限。

管理所有这些形式访问的技术是 AWS Identity and Access Management (IAM)。有关 IAM 的更多信息,请参阅什么是 IAM?。

授权 AWS IoT FleetWise 发送和接收有关 MQTT 主题的数据的权限

当您使用 MQTT 主题时,您的车辆使用 AWS IoT MQTT 消息代理发送数据。您必须 AWS IoT FleetWise 授予订阅指定的 MQTT 主题的权限。如果您还使用 AWS IoT 规则执行操作或将数据路由到其他目的地,则必须将策略附加到 IAM 角色以允许将数据转发 AWS IoT FleetWise 到 IoT 规则。

此外,您的其他应用程序或设备可以订阅您指定的主题,以近乎实时地接收车辆数据,并且必须根据需要向这些应用程序或设备授予权限和访问权限。

有关使用 MQTT 以及所需角色和权限的更多信息,请参阅:

在开始之前,请检查以下事项:

重要
  • 在为 AWS IoT 创建车辆活动资源时,必须使用相同的 AWS 区域 FleetWise。如果您切换 AWS 区域,可能会在访问资源时遇到问题。

  • AWS 物联网 FleetWise 在美国东部(弗吉尼亚北部)和欧洲(法兰克福)可用。

您可以使用创建具有 MQTT 消息传送信任策略的 IAM 角色。 AWS CLI 要创建 IAM 角色,请运行以下命令。

创建具有信任策略的 IAM 角色
  • IotTopicExecutionRole替换为你正在创建的角色的名称。

  • trust-policy替换为包含信任策略的 JSON 文件。

aws iam create-role --role-name IotTopicExecutionRole --assume-role-policy-document file://trust-policy.json
JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "mqttTopicTrustPolicy", "Effect": "Allow", "Principal": { "Service": "iotfleetwise.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceArn": [ "arn:aws:iotfleetwise:region:123456789012:campaign/campaign-name" ], "aws:SourceAccount": [ "123456789012" ] } } } ] }

创建权限策略,授予 AWS IoT 向您指定的 MQTT 主题发布消息的 FleetWise 权限。要创建权限策略,请运行以下命令。

创建权限策略
  • AWSIoTFleetwiseAccessIotTopicPermissionsPolicy替换为您正在创建的策略的名称。

  • permissions-policy替换为包含权限策略的 JSON 文件的名称。

aws iam create-policy --policy-name AWSIoTFleetwiseAccessIotTopicPermissionsPolicy --policy-document file://permissions-policy.json
JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "topic-arn" ] } ] }
将权限策略附加到 IAM 角色
  1. 从输出中复制权限策略的 Amazon 资源名称(ARN)。

  2. 要将 IAM 权限策略附加到您的 IAM 角色,请运行以下命令。

    • permissions-policy-arn替换为您在上一步中复制的 ARN。

    • IotTopicExecutionRole替换为您创建的 IAM 角色的名称。

    aws iam attach-role-policy --policy-arn permissions-policy-arn --role-name IotTopicExecutionRole

有关更多信息,请参阅《IAM 用户指南》中的 AWS 资源的访问管理。

授权 AWS IoT FleetWise 访问 Amazon S3 目的地

当您使用 Amazon S3 目标时, AWS IoT FleetWise 将车辆数据传输到您的 S3 存储桶,并可以选择使用您拥有的 AWS KMS 密钥进行数据加密。如果启用了错误记录, AWS IoT FleetWise 还会将数据传输错误发送到您的 CloudWatch 日志组和流。创建传输流时,您需要拥有 IAM 角色。

AWS IoT FleetWise 使用存储桶策略和 S3 目标的服务主体。有关添加存储桶策略的更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的使用 Amazon S3 控制台添加存储桶策略。

使用以下访问策略启用 AWS IoT FleetWise 对您的 S3 存储桶的访问权限。如果您没有 S3 存储桶,请将 s3:PutObjectAcl 添加到 Amazon S3 操作列表中。这向存储桶所有者授予了对由交付的对象的完全访问权限 AWS IoT FleetWise。有关如何安全访问存储桶中对象的更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的存储桶策略示例。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "iotfleetwise.amazonaws.com" ] }, "Action": [ "s3:ListBucket" ], "Resource": "arn:aws:s3:::bucket-name" }, { "Effect": "Allow", "Principal": { "Service": [ "iotfleetwise.amazonaws.com" ] }, "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::bucket-name/*", "Condition": { "StringEquals": { "aws:SourceArn": "campaign-arn", "aws:SourceAccount": "123456789012" } } } ] }

以下存储桶策略适用于某个 AWS 区域中一个账户中的所有活动。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "iotfleetwise.amazonaws.com" ] }, "Action": [ "s3:ListBucket" ], "Resource": "arn:aws:s3:::bucket-name" }, { "Effect": "Allow", "Principal": { "Service": [ "iotfleetwise.amazonaws.com" ] }, "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::bucket-name/*", "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:iotfleetwise:region:123456789012:campaign/*", "aws:SourceAccount": "123456789012" } } } ] }

如果您将 KMS 密钥附加到 S3 存储桶,则该密钥将需要以下策略。有关密钥管理的信息,请参阅《亚马逊简单存储服务用户指南》中的使用服务器端 AWS Key Management Service 密钥加密保护数据 (SSE-KMS)。

{ "Version": "2012-10-17", "Effect": "Allow", "Principal": { "Service": "iotfleetwise.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "key-arn" }
重要

创建存储桶时,S3 将创建一个默认访问控制列表 (ACL),以授予资源拥有者对资源的完全控制权限。如果 AWS IoT FleetWise 无法向 S3 传输数据,请确保在 S3 存储桶上禁用 ACL。有关更多信息,请参阅《亚马逊简单存储服务用户指南》中的禁用所有新存储桶的 ACL 和强制对象所有权。

授权 AWS IoT FleetWise 访问亚马逊 Timestream 目的地

当您使用时间流目的地时,将车辆数据 AWS IoT FleetWise 传送到时间流表。您必须将策略附加到 IAM 角色 AWS IoT FleetWise 才能允许向 Timestream 发送数据。

如果您使用控制台创建活动, AWS IoT FleetWise 会自动将所需的策略附加到该角色。

注意

亚马逊 Timestream 不在亚太地区(孟买)地区提供。

在开始之前,请检查以下事项:

重要
  • 在为 AWS IoT FleetWise 创建时间流资源时,必须使用相同的 AWS 区域。如果您切换 AWS 区域,则在访问时间流资源时可能会遇到问题。

  • AWS 物联网 FleetWise 在美国东部(弗吉尼亚北部)、欧洲(法兰克福)和亚太地区(孟买)可用。

  • 有关受支持区域的列表,请参见《AWS 一般参考》中的 Timestream 端点和配额。

  • 您必须拥有 Timestream 数据库。有关教程,请参阅 Amazon Timestream 开发人员指南中的创建数据库。

  • 您必须在指定的 Timestream 数据库中创建表。有关教程,请参阅 Amazon Timestream 开发者指南中的创建表。

您可以使用创建具有 Timestream 信任策略的 IAM 角色。 AWS CLI 要创建 IAM 角色,请运行以下命令。

创建具有信任策略的 IAM 角色
  • TimestreamExecutionRole替换为你正在创建的角色的名称。

  • trust-policy替换为包含信任策略的 .json 文件。

aws iam create-role --role-name TimestreamExecutionRole --assume-role-policy-document file://trust-policy.json
JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "timestreamTrustPolicy", "Effect": "Allow", "Principal": { "Service": "iotfleetwise.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceArn": [ "arn:aws:iotfleetwise:region:123456789012:campaign/campaign-name" ], "aws:SourceAccount": [ "123456789012" ] } } } ] }

创建权限策略,授予 AWS 物联网将数据写入时间流的 FleetWise 权限。要创建权限策略,请运行以下命令。

创建权限策略
  • AWSIoTFleetwiseAccessTimestreamPermissionsPolicy替换为您正在创建的策略的名称。

  • permissions-policy替换为包含权限策略的 JSON 文件的名称。

aws iam create-policy --policy-name AWSIoTFleetwiseAccessTimestreamPermissionsPolicy --policy-document file://permissions-policy.json
JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "timestreamIngestion", "Effect": "Allow", "Action": [ "timestream:WriteRecords", "timestream:Select", "timestream:DescribeTable" ], "Resource": "table-arn" }, { "Sid": "timestreamDescribeEndpoint", "Effect": "Allow", "Action": [ "timestream:DescribeEndpoints" ], "Resource": "*" } ] }
将权限策略附加到 IAM 角色
  1. 从输出中复制权限策略的 Amazon 资源名称(ARN)。

  2. 要将 IAM 权限策略附加到您的 IAM 角色,请运行以下命令。

    • permissions-policy-arn替换为您在上一步中复制的 ARN。

    • TimestreamExecutionRole替换为您创建的 IAM 角色的名称。

    aws iam attach-role-policy --policy-arn permissions-policy-arn --role-name TimestreamExecutionRole

有关更多信息,请参阅《IAM 用户指南》中的 AWS 资源的访问管理。

授权 AWS IoT Device Management 使用以下命令生成有效载荷的权限 AWS IoT FleetWise

当你使用命令功能开始执行命令时, AWS IoT Device Management 将从传入的请求中获取命令和命令参数。然后,它需要访问 AWS 物联网 FleetWise 资源的权限,以验证请求并生成有效负载。然后,通过 AWS IoT Device Management MQTT将有效载荷发送到车辆已订阅的命令请求主题。

您必须先创建一个 IAM 角色 AWS IoT Device Management 来授予生成负载所需的权限。然后,使用roleArn字段向 CreateCommand API 提供此角色的 ARN。以下显示了一些策略示例。

重要

对于 IAM 角色,您必须使用与创建车辆和命令资源时 AWS 区域 相同的角色。如果您切换 AWS 区域,可能会在访问资源时遇到问题。

IAM 角色需要具有以下信任政策。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "RemoteCommandsTrustPolicy", "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

以下示例显示如何授予权限,以便为所有注册为 AWS IoT 事物的车辆生成有效载荷。

注意
  • 此政策可能过于宽松。使用最小权限原则来确保只授予必要的权限。

  • 要改为拒绝权限,"Effect": "Allow"请"Effect": "Deny"在 IAM 策略中更改为。

在此示例中:

  • region根据您使用物 AWS 联网 FleetWise 资源 AWS 区域 的位置。

  • 111122223333用你的 AWS 账户 电话号码

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iotfleetwise:GenerateCommandPayload", "Resource": "*" } ] }

以下示例说明如何授予权限,以便为注册为 AWS IoT 事物的特定车辆生成有效载荷。

在此示例中:

  • region根据您使用物 AWS 联网 FleetWise 资源 AWS 区域 的位置。

  • 111122223333用你的 AWS 账户 电话号码

  • <VEHICLE_NAME>使用您的车辆的物联网事物名称。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iotfleetwise:GenerateCommandPayload", "Resource": "arn:aws:iot:us-east-1:111122223333:thing/<VEHICLE_NAME>" } ] }

以下示例说明如何授予权限,为特定车辆的执行器生成有效载荷。

在此示例中:

  • region根据您使用物 AWS 联网 FleetWise 资源 AWS 区域 的位置。

  • 111122223333用你的 AWS 账户 电话号码

  • <VEHICLE_NAME>使用您的车辆的物联网事物名称。

  • <SIGNAL_FQN>使用信号的名称,例如<Vehicle.actuator2>。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": "iotfleetwise:GenerateCommandPayload", "Resource": "arn:aws:iot:us-east-1:111122223333:thing/<VEHICLE_NAME>", "Condition": { "ForAnyValue:StringEquals": { "iotfleetwise:Signals": [ "<SIGNAL_FQN>" ] } } } ] }

以下示例显示如何授予权限以生成特定车辆和状态模板的有效载荷。

在此示例中:

  • region是你使用 AWS 物联网 FleetWise 资源 AWS 区域 的地方。

  • 111122223333是你的 AWS 账户 号码。

  • <VEHICLE_NAME>是您车辆的物联网事物名称。

  • <STATE_TEMPLATE_ID>使用您的状态模板的标识符。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": "iotfleetwise:GenerateCommandPayload", "Resource": [ "arn:aws:iot:us-east-1:111122223333:thing/<VEHICLE_NAME>", "arn:aws:iotfleetwise:us-east-1:111122223333:state-template/<STATE_TEMPLATE_ID>" ] } ] }

如果您已为启用了客户管理的 KMS 密钥 AWS IoT FleetWise,则以下示例显示了如何授予生成有效负载的权限。

在此示例中:

  • region根据您使用物 AWS 联网 FleetWise 资源 AWS 区域 的位置。

  • 111122223333用你的 AWS 账户 电话号码

  • <KMS_KEY_ID>使用您的 KMS 密钥的 ID。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iotfleetwise:GenerateCommandPayload", "Resource": "*" }, { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:us-east-1:111122223333:key/<KMS_KEY_ID>" } ] }