

# 将固件文件上载到 S3 存储桶并添加 IAM 角色
<a name="lorawan-upload-firmware-s3bucket"></a>

您可以使用 Amazon S3 创建*存储桶*，这是一个可以存储固件更新文件的容器。您可以将文件上载到 S3 存储桶，并添加允许 CUPS 服务器从存储桶读取更新文件的 IAM 角色。有关 Amazon S3 的更多信息，请参阅 [Amazon S3 入门](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html)。

要上载的固件更新文件取决于您使用的网关。如果您遵循类似于 [生成固件更新文件和签名](lorawan-script-fwupdate-sigkey.md) 中所述的流程，则您将上载通过运行脚本所生成的 `fwstation` 文件。

完成本流程需要大约 20 分钟。

**Topics**
+ [创建 Amazon S3 存储桶并上载更新文件](#lorawan-create-s3-bucket)
+ [创建具有读取 S3 存储桶权限的 IAM 角色](#lorawan-s3-iam-permissions)
+ [查看后续步骤](#lorawan-s3iam-next-steps)

## 创建 Amazon S3 存储桶并上载更新文件
<a name="lorawan-create-s3-bucket"></a>

您将使用 AWS 管理控制台 创建 Amazon S3 存储桶，然后将固件更新文件上载到存储桶中。

**创建 S3 存储桶**  
要创建 S3 存储桶，请打开 [Amazon S3 控制台](https://console.aws.amazon.com/s3/home#)。登录（如果尚未登录），然后执行以下步骤：

1. 选择**创建存储桶**。

1. 输入唯一且有意义的名称作为 **Bucket name**（存储桶名称），例如 `iotwirelessfwupdate`。有关存储桶的建议命名约定，请参阅 [https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html)。

1. 确保您选择了AWS 区域来创建 LoRaWAN 网关和设备，并且选中 **Block all public access**（阻止所有公有访问）设置，以便您的存储桶使用默认权限。

1. 为 **Bucket versioning**（存储桶版本控制）选择 **Enable**（启用），这将帮助您将固件更新文件的多个版本保留在同一存储桶中。

1. 确认将 **Server-side encryption**（服务器端加密）设置为 **Disable**（禁用），然后选择 **Create bucket**（创建存储桶）。

**上载固件更新文件**  
现在，您可以在显示在 AWS 管理控制台 的存储桶列表中看到您的存储桶了。选择您的存储桶并完成以下步骤以上载您的文件。

1. 选择您的存储桶，然后选择 **Upload**（上载）。

1. 选择 **Add file**（添加文件），然后上载固件更新文件。如果您按照 [生成固件更新文件和签名](lorawan-script-fwupdate-sigkey.md) 中所述的流程执行，您应上载 `fwstation` 文件，否则请上载网关制造商提供的文件。

1. 确保所有设置都保留为默认值。请确保 **Predefined ACL**（预定义 ACL）设置为 **private**（私有），然后选择 **Upload**（上载）以上载您的文件。

1. 复制您所上载文件的 S3 URI。选择您的存储桶，您将看到上载的文件显示在 **Objects**（对象）列表中。选择您的文件，然后选择 **Copy S3 URI**（复制 S3 URI）。如果您将存储桶命名为类似于前述示例 (`fwstation`)，则 URI 将类似于：`s3://iotwirelessfwupdate/fwstation`。在创建 IAM 角色时，您将使用 S3 URI。

## 创建具有读取 S3 存储桶权限的 IAM 角色
<a name="lorawan-s3-iam-permissions"></a>

现在，您将创建 IAM 角色和策略，该角色和策略将授予 CUPS 从 S3 存储桶读取固件更新文件的权限。

**为您的角色创建 IAM 策略**  
要为 适用于 LoRaWAN 的 AWS IoT Core 目标角色创建 IAM 策略，请打开 [IAM 控制台的策略中心](https://console.aws.amazon.com/iam/home#/policies)，然后完成以下步骤：

1. 选择 **Create policy**（创建策略），然后选择 **JSON** 选项卡。

1. 从编辑器中删除所有内容并粘贴此策略文档。策略提供访问 `iotwireless` 存储桶的权限，固件更新文件 `fwstation` 存储在对象内。

   ```
   {
       "Version": "2012-10-17",
       "Statement": [
           {
               "Sid": "VisualEditor0",
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucketVersions",
                   "s3:ListBucket",
                   "s3:GetObject"
               ],
               "Resource": [
                   "arn:aws:s3:::iotwirelessfwupdate/fwstation",
                   "arn:aws:s3:::iotwirelessfwupdate"
               ]
           }
       ]
   }
   ```

1. 选择 **Review policy**（查看策略），在 **Name**（名称）中，输入此策略的名称（例如，`IoTWirelessFwUpdatePolicy`）。在下一流程中，您将需要使用此名称。

1. 选择**创建策略**。

**使用附加的策略创建 IAM 角色。**  
现在，您将创建一个 IAM 角色并附加以前为访问 S3 存储桶而创建的策略。打开 [IAM 控制台的角色中心](https://console.aws.amazon.com/iam/home#/roles)并完成以下步骤：

1. 选择**创建角色**。

1. 在 **Select type of trusted entity**（选择受信任实体的类型）下，选择 **Another AWS 账户**（另一个亚马逊云科技账户）。

1. 在 **Account ID**（账户 ID），请输入您的AWS 账户 ID，然后选择 **Next: Permission**（下一步：权限）。

1. 在搜索框中，输入您在上一流程中创建的 IAM 策略名称。在搜索结果中检查您之前创建的 IAM 策略（例如 `IoTWirelessFwUpdatePolicy`），然后选择该策略。

1. 依次选择 **Next: Tags**（下一步：标签）和 **Next: Review**（下一步：查看）。

1. 对于 **Role name**（角色名称），输入此角色的名称（例如 `IoTWirelessFwUpdateRole`），然后选择 **Create role**（创建角色）。

**编辑 IAM 角色的信任关系**  
在运行上一步后显示的确认信息中，选择您创建的角色的名称进行编辑。您将编辑角色以添加以下信任关系。

1. 在刚刚创建的角色的 **Summary**（摘要）页面上，选择 **Trust relationship**（信任关系）选项卡，然后选择 **Edit trust relationship**（编辑信任关系）。

1. 在 **Policy Document**（策略文档）中，更改 `Principal` 属性以使其类似于此示例。

   ```
   "Principal": { 
       "Service": "iotwireless.amazonaws.com" 
   },
   ```

   在您更改 `Principal` 属性后，完整的策略文档应该如此示例所示。

   ```
   {
     "Version": "2012-10-17",
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "iotwireless.amazonaws.com"
         },
         "Action": "sts:AssumeRole",
         "Condition": {}
       }
     ]
   }
   ```

1. 要保存更改并退出，请选择 **Update Trust Policy**（更新信任策略）。

1. 获取角色的 ARN。选择在“摘要”部分您的 IAM 角色，您将看到 **Role ARN**（角色 ARN），例如 `arn:aws:iam::123456789012:role/IoTWirelessFwUpdateRole`。复制此 **Role ARN**（角色 ARN）。

## 查看后续步骤
<a name="lorawan-s3iam-next-steps"></a>

现在，您已创建 S3 存储桶和允许 CUPS 服务器读取 S3 存储桶的 IAM 角色，请转到下一个主题以安排并运行固件更新。保留您之前复制的 **S3 URI** 和 **Role ARN**（角色 ARN），以便您可以输入这些信息以创建将运行的任务定义，以执行固件更新。