

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

# 手动设置以开发自定义组件 AWSTOE
<a name="toe-get-started"></a>

 AWS Task Orchestrator and Executor (AWSTOE) 应用程序是一个独立的应用程序，用于在组件定义框架内创建、验证和运行命令。 AWS 服务可用于 AWSTOE 协调工作流程、安装软件、修改系统配置和测试映像构建。

按照以下步骤手动安装 AWSTOE 应用程序，并将其用作独立应用程序来开发自定义组件。如果您使用 Image Builder 控制台或 AWS CLI 命令创建自定义组件，Image Builder 会为您完成这些步骤。有关更多信息，请参阅 [使用 Image Builder 创建自定义组件](create-component.md)。

# 验证 AWSTOE 安装下载的签名
<a name="awstoe-verify-sig"></a>

本节介绍在基于 Linux、macOS 和 Windows 的操作系统 AWSTOE 上验证安装下载的有效性的推荐流程。

**Topics**
+ [在 Linux 或 macOS 上验证 AWSTOE 安装下载的签名](#awstoe-verify-sig-linux)
+ [在 Windows 上验证 AWSTOE 安装下载的签名](#awstoe-verify-sig-win)

## 在 Linux 或 macOS 上验证 AWSTOE 安装下载的签名
<a name="awstoe-verify-sig-linux"></a>

本主题介绍验证基于 Linux 或 macOS 操作系统的安装下载有效性的推荐流程。 AWSTOE 

无论何时从 Internet 下载应用程序，我们都建议您验证软件发布者的身份。另外，请检查应用程序自发布以来是否未被更改或损坏。这会保护您免于安装含有病毒或其他恶意代码的应用程序版本。

如果您在执行本主题中的步骤后确定适用于 AWSTOE 应用程序的软件已遭更改或损坏，请不要运行安装文件。相反，请联系 支持 。有关您的支持选项的更多信息，请参阅[支持](https://aws.amazon.com/premiumsupport/)。

AWSTOE 基于 Linux 和 macOS 操作系统的文件是使用`GnuPG`安全数字签名的 Pretty Good Privacy (OpenPGP) 标准的开源实现进行签名的。 `GnuPG`（也称为`GPG`）通过数字签名提供身份验证和完整性检查。Amazon EC2 发布了您可用于验证下载的 Amazon EC2 CLI 工具的公钥和签名。有关 `PGP` 和 `GnuPG` (`GPG`) 的更多信息，请参阅 [http://www.gnupg.org](https://www.gnupg.org/)。

第一步是与软件发行商建立信任。下载软件发布者的公有密钥，检查公有密钥的所有人是否真为其人，然后将该公有密钥添加到您的*密钥环*。密钥环是已知公有密钥的集合。验证公有密钥的真实性后，您可以使用它来验证应用程序的签名。

**Topics**
+ [安装 GPG 工具](#awstoe-verify-signature-of-binary-download-install-tools)
+ [验证并导入公有密钥](#awstoe-verify-signature-of-binary-download-authenticate-import-public-key)
+ [验证软件包的签名](#awstoe-verify-signature-of-binary-package)

### 安装 GPG 工具
<a name="awstoe-verify-signature-of-binary-download-install-tools"></a>

如果您的操作系统是 Linux、Unix 或 macOS，GPG 工具很可能已经安装。要测试系统上是否已安装这些工具，请在命令提示符处键入 **gpg**。如果已安装 GPG 工具，您会看到 GPG 命令提示。如果没有安装 GPG 工具，您会看到错误消息，告诉您无法找到命令。您可以从存储库安装 GnuPG 包。

要安装 GPG 工具，请选择与您的实例匹配的操作系统。

------
#### [ Debian-based Linux ]

从终端设备运行以下命令：

```
apt-get install gnupg
```

------
#### [ Red Hat–based Linux ]

从终端设备运行以下命令：

```
yum install gnupg
```

------
#### [ macOS ]

从终端设备运行以下命令：

```
brew install gnupg
```

------

### 验证并导入公有密钥
<a name="awstoe-verify-signature-of-binary-download-authenticate-import-public-key"></a>

该过程的下一步是对 AWSTOE 公钥进行身份验证，并将其作为可信密钥添加到您的密`GPG`钥环中。

**验证和导入 AWSTOE 公钥**

1. 通过执行下列操作之一获取公共 `GPG` 生成密钥的副本：
   + 从以下地址下载密钥：

      https://awstoe-**<region>** .s3。 **<region>**.amazonaws。 com/assets/awstoe.gpg。例如 [https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/assets/awstoe.gpg](https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/assets/awstoe.gpg)。
   + 将以下文本中的密钥复制并粘贴到名为 `awstoe.gpg` 的文件中。确保包含下列所有项：

     ```
     -----BEGIN PGP PUBLIC KEY BLOCK-----
     Version: GnuPG v2
     
     mQENBF8UqwsBCACdiRF2bkZYaFSDPFC+LIkWLwFvtUCRwAHtD8KIwTJ6LVn3fHAU
     GhuK0ZH9mRrqRT2bq/xJjGsnF9VqTj2AJqndGJdDjz75YCZYM+ocZ+r5HSJaeW9i
     S5dykHj7Txti2zHe0G5+W0v7v5bPi2sPHsN7XWQ7+G2AMEPTz8PjxY//I0DvMQns
     Sle3l9hz6wCClz1l9LbBzTyHfSm5ucTXvNe88XX5Gmt37OCDM7vfli0Ctv8WFoLN
     6jbxuA/sV71yIkPm9IYp3+GvaKeT870+sn8/JOOKE/U4sJV1ppbqmuUzDfhrZUaw
     8eW8IN9A1FTIuWiZED/5L83UZuQs1S7s2PjlABEBAAG0GkFXU1RPRSA8YXdzdG9l
     QGFtYXpvbi5jb20+iQE5BBMBCAAjBQJfFKsLAhsDBwsJCAcDAgEGFQgCCQoLBBYC
     AwECHgECF4AACgkQ3r3BVvWuvFJGiwf9EVmrBR77+Qe/DUeXZJYoaFr7If/fVDZl
     6V3TC6p0J0Veme7uXleRUTFOjzbh+7e5sDX19HrnPquzCnzfMiqbp4lSoeUuNdOf
     FcpuTCQH+M+sIEIgPno4PLl0Uj2uE1o++mxmonBl/Krk+hly8hB2L/9n/vW3L7BN
     OMb1Ll9PmgGPbWipcT8KRdz4SUex9TXGYzjlWb3jU3uXetdaQY1M3kVKE1siRsRN
     YYDtpcjmwbhjpu4xm19aFqNoAHCDctEsXJA/mkU3erwIRocPyjAZE2dnlkL9ZkFZ
     z9DQkcIarbCnybDM5lemBbdhXJ6hezJE/b17VA0t1fY04MoEkn6oJg==
     =oyze
     -----END PGP PUBLIC KEY BLOCK-----
     ```

1. 在您保存 **awstoe.gpg** 的目录中的命令提示符处，使用以下命令将 AWSTOE 公钥导入密钥环。

   ```
   gpg --import awstoe.gpg
   ```

   该命令返回的结果类似于下方内容：

   ```
   gpg: key F5AEBC52: public key "AWSTOE <awstoe@amazon.com>" imported
   gpg: Total number processed: 1
   gpg:               imported: 1  (RSA: 1)
   ```

   请记下该键值，因为下一步需要用到。在上一示例中，键值为 `F5AEBC52`。

1. 通过运行以下命令，将 *key-value* 替换为上一步中的值来验证指纹：

   ```
   gpg --fingerprint key-value
   ```

   该命令返回的结果类似于下方内容：

   ```
   pub   2048R/F5AEBC52 2020-07-19
         Key fingerprint = F6DD E01C 869F D639 15E5  5742 DEBD C156 F5AE BC52
   uid       [ unknown] AWSTOE <awstoe@amazon.com>
   ```

   此外，指纹字符串应与上述示例中所示的 `F6DD E01C 869F D639 15E5 5742 DEBD C156 F5AE BC52` 相同。将返回的密钥指纹与此页上发布的指纹进行比较。它们应该相互匹配。如果它们不匹配，请不要安装 AWSTOE 安装脚本，然后与联系 支持。

### 验证软件包的签名
<a name="awstoe-verify-signature-of-binary-package"></a>

在安装 `GPG` 工具、验证并导入 AWSTOE 公有密钥以及确认公有密钥可信后，便可以验证安装脚本的签名。

**验证安装脚本签名**

1. 在命令提示符处，运行以下命令以下载应用程序的二进制文件：

   ```
   curl -O https://awstoe-<region>.s3.<region>.amazonaws.com/latest/linux/<architecture>/awstoe
   ```

   例如：

   ```
   curl -O https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/linux/amd64/awstoe
   ```

   支持的 **architecture** 值可以是 `amd64`、`386` 和 `arm64`。

1. 在命令提示符处，运行以下命令以下载相同的 S3 key prefix 路径中对应的应用程序二进制文件的签名文件：

   ```
   curl -O https://awstoe-<region>.s3.<region>.amazonaws.com/latest/linux/<architecture>/awstoe.sig
   ```

   例如：

   ```
   curl -O https://awstoe-us-east-1.s3.us-east-1.amazonaws.com/latest/linux/amd64/awstoe.sig
   ```

   支持的 **architecture** 值可以是 `amd64`、`386` 和 `arm64`。

1. 通过在您保存的目录`awstoe.sig`和 AWSTOE 安装文件中的命令提示符处运行以下命令来验证签名。这两个文件都必须存在。

   ```
   gpg --verify ./awstoe.sig ~/awstoe
   ```

   输出应与以下内容类似：

   ```
   gpg: Signature made Mon 20 Jul 2020 08:54:55 AM IST using RSA key ID F5AEBC52
   gpg: Good signature from "AWSTOE awstoe@amazon.com" [unknown]
   gpg: WARNING: This key is not certified with a trusted signature!
   gpg:          There is no indication that the signature belongs to the owner.
   Primary key fingerprint: F6DD E01C 869F D639 15E5 5742 DEBD C156 F5AE BC52
   ```

   如果输出包含短语 `Good signature from "AWSTOE <awstoe@amazon.com>"`，则意味着已成功验证签名，您可以继续运行 AWSTOE 安装脚本。

   如果输出包含短语 `BAD signature`，则检查是否正确执行了此过程。如果您持续获得此响应，不要运行之前下载的安装文件，并且请联系 支持。

下面是有关您可能看到的警告的详细信息：
+ **警告：此密钥未使用可信签名进行认证！没有迹象表明签名属于所有者。**理想情况下，您可以亲自前往 AWS 办公室领取钥匙。但最可能的情况是，从网站下载此密钥。在这种情况下，该网站就是一个 AWS 网站。
+ **gpg: no ultimately trusted keys found.** 这意味着您 (或您信任的其他人) 对特定密钥不是“绝对信任”。

有关更多信息，请参阅 [http://www.gnupg.org](http://www.gnupg.org)。

## 在 Windows 上验证 AWSTOE 安装下载的签名
<a name="awstoe-verify-sig-win"></a>

本主题介绍在基于 Windows 的操作系统上验证 AWS Task Orchestrator and Executor 应用程序安装文件有效性的推荐流程。

无论何时从 Internet 下载应用程序，我们都建议您验证软件发布者的身份，并检查应用程序从发行以来是否已遭更改或损坏。这会保护您免于安装含有病毒或其他恶意代码的应用程序版本。

如果您在执行本主题中的步骤后确定适用于 AWSTOE 应用程序的软件已遭更改或损坏，请不要运行安装文件。相反，请联系 支持。

要验证基于 Windows 的操作系统上的已下载 awstoe 二进制文件是否有效，必须确保其 Amazon Services LLC 签署人证书的指纹等于此值：

**9D CA 72 17 DA FF B8 2F E4 C4 67 77 36 2F A4 AA C9 08 82 15**

**注意**  
在新二进制文件的推出窗口期间，您的签署人证书可能与新的指纹不匹配。如果您的签署人证书不匹配，请验证指纹值是否为：  
**BA 81 25 EE AC 64 2E A9 F3 C5 93 CA 6D 3E B7 93 7D 68 75 74**

要验证此值，请执行以下过程：

1. 右键单击下载的 `awstoe.exe`，然后打开 **Properties (属性)** 窗口。

1. 选择**数字签名**选项卡。

1. 在**签名列表 **中，选择 **Amazon Services LLC**，然后选择**详细信息**。

1. 选择**常规**选项卡 (如果尚未选择)，然后选择**查看证书**。

1. 选择**详细信息**选项卡，然后选择**显示**下拉列表中的**全部** (如果尚未选择)。

1. 向下滚动直至您看到**指纹**字段，然后选择**指纹**。这将在下部窗口中显示整个指纹值。
   + 如果下部窗口中的指纹值等于以下值：

     **9D CA 72 17 DA FF B8 2F E4 C4 67 77 36 2F A4 AA C9 08 82 15**

     那么你下载的 AWSTOE 二进制文件是真实的，可以安全地安装。
   + 如果下部详细信息窗口中的指纹值不等于前述值，请不要运行 `awstoe.exe`。

**Topics**
+ [验证 AWSTOE 安装下载的签名](awstoe-verify-sig.md)
+ [步骤 1：安装 AWSTOE](#toe-start-install)
+ [步骤 2：设置 AWS 凭证](#toe-start-credentials)
+ [第 3 步：在本地开发组件文档](#toe-start-develop)
+ [步骤 4：验证 AWSTOE 组件](#toe-start-validate)
+ [步骤 5：运行 AWSTOE 组件](#toe-start-run)

## 步骤 1：安装 AWSTOE
<a name="toe-start-install"></a>

要在本地开发组件，请下载并安装该 AWSTOE 应用程序。

1. 

**下载 AWSTOE 应用程序**

   要进行安装 AWSTOE，请选择适合您的架构和平台的下载链接。有关应用程序下载链接的完整列表，请参阅 [AWSTOE 下载](toe-component-manager.md#toe-downloads)
**重要**  
AWS 正在逐步取消对 TLS 版本 1.0 和 1.1 的支持。要访问 S3 存储桶进行 AWSTOE 下载，您的客户端软件必须使用 TLS 版本 1.2 或更高版本。有关更多信息，请参阅此 [AWS 安全博客文章](https://aws.amazon.com/blogs/security/tls-1-2-required-for-aws-endpoints/)。

1. 

**验证签名**

   验证下载的步骤取决于安装 AWSTOE 应用程序后在其中运行应用程序的服务器平台。要在 Linux 服务器上验证您的下载，请参阅 [在 Linux 或 macOS 上验证签名](awstoe-verify-sig.md#awstoe-verify-sig-linux)。要在 Windows 服务器上验证您的下载，请参阅 [在 Windows 上验证签名](awstoe-verify-sig.md#awstoe-verify-sig-win)。

**注意**  
AWSTOE 直接从其下载位置调用。无需单独执行安装步骤。这也意味着 AWSTOE 可以对本地环境进行更改。  
为确保在组件开发过程中隔离更改，我们建议您使用 EC2 实例来开发和测试 AWSTOE 组件。

## 步骤 2：设置 AWS 凭证
<a name="toe-start-credentials"></a>

 AWSTOE 运行任务时需要 AWS 凭证才能连接到其他任务 AWS 服务，例如 Amazon S3 和 Amazon CloudWatch，例如：
+ 从用户提供的 Amazon S3 路径下载 AWSTOE 文档。
+ 运行 `S3Download` 或 `S3Upload` 操作模块。
+ 启用后 CloudWatch，将日志流式传输到。

如果您 AWSTOE 在 EC2 实例上运行，则运行 AWSTOE 使用的权限与附加到该 EC2 实例的 IAM 角色相同。

有关的 IAM 角色的更多信息 EC2，请参阅适用于 A [mazon 的 IAM 角色EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)。

以下示例说明如何使用`AWS_ACCESS_KEY_ID`和`AWS_SECRET_ACCESS_KEY`环境变量设置 AWS 凭证。

要在 Linux、macOS 或 Unix 上设置这些变量，请使用 `export`。

```
export AWS_ACCESS_KEY_ID=your_access_key_id
```

```
export AWS_SECRET_ACCESS_KEY=your_secret_access_key
```

要在 Windows 上使用设置这些变量 PowerShell，请使用`$env`。

```
$env:AWS_ACCESS_KEY_ID=your_access_key_id
```

```
$env:AWS_SECRET_ACCESS_KEY=your_secret_access_key
```

要在 Windows 上使用命令提示设置这些变量，请使用 `set`。

```
set AWS_ACCESS_KEY_ID=your_access_key_id
```

```
set AWS_SECRET_ACCESS_KEY=your_secret_access_key
```

## 第 3 步：在本地开发组件文档
<a name="toe-start-develop"></a>

组件是用纯文本 YAML 文档编写的。有关文档语法的更多信息，请参阅 [使用 AWSTOE 组件文档框架创建自定义组件](toe-use-documents.md)。

以下是 *Hello World* 组件文档示例，可帮助您快速入门。

------
#### [ Linux ]

本指南中的某些 Linux 组件示例引用名为 `hello-world-linux.yml` 的组件文档文件。您可以使用下面的文档来着手这些示例。

```
name: Hello World
description: This is hello world testing document for Linux.
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: HelloWorldStep
        action: ExecuteBash
        inputs:
          commands:
            - echo 'Hello World from the build phase.'
  - name: validate
    steps:
      - name: HelloWorldStep
        action: ExecuteBash
        inputs:
          commands:
            - echo 'Hello World from the validate phase.'
  - name: test
    steps:
      - name: HelloWorldStep
        action: ExecuteBash
        inputs:
          commands:
            - echo 'Hello World from the test phase.'
```

------
#### [ Windows ]

本指南中的某些 Windows 组件示例引用名为 `hello-world-windows.yml` 的组件文档文件。您可以使用下面的文档来着手这些示例。

```
name: Hello World
description: This is Hello World testing document for Windows.
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: HelloWorldStep
        action: ExecutePowerShell
        inputs:
          commands:
            - Write-Host 'Hello World from the build phase.'
  - name: validate
    steps:
      - name: HelloWorldStep
        action: ExecutePowerShell
        inputs:
          commands:
            - Write-Host 'Hello World from the validate phase.'
  - name: test
    steps:
      - name: HelloWorldStep
        action: ExecutePowerShell
        inputs:
          commands:
            - Write-Host 'Hello World from the test phase.'
```

------
#### [ macOS ]

本指南中的某些 macOS 组件示例引用名为 `hello-world-macos.yml` 的组件文档文件。您可以使用下面的文档来着手这些示例。

```
name: Hello World
description: This is hello world testing document for macOS.
schemaVersion: 1.0
phases:
  - name: build
    steps:
      - name: HelloWorldStep
        action: ExecuteBash
        inputs:
          commands:
            - echo 'Hello World from the build phase.'
  - name: validate
    steps:
      - name: HelloWorldStep
        action: ExecuteBash
        inputs:
          commands:
            - echo 'Hello World from the validate phase.'
  - name: test
    steps:
      - name: HelloWorldStep
        action: ExecuteBash
        inputs:
          commands:
            - echo 'Hello World from the test phase.'
```

------

## 步骤 4：验证 AWSTOE 组件
<a name="toe-start-validate"></a>

您可以使用 AWSTOE 应用程序在本地验证 AWSTOE 组件的语法。以下示例显示了无需运行组件即可验证其语法的 AWSTOE 应用程序`validate`命令。

**注意**  
 AWSTOE 应用程序只能验证当前操作系统的组件语法。例如，在 Windows 上运行 `awstoe.exe` 时，您无法验证使用 `ExecuteBash` 操作模块的 Linux 文档的语法。

Linux 或 macOS

```
awstoe validate --documents /home/user/hello-world.yml
```

Windows

```
awstoe.exe validate --documents C:\Users\user\Documents\hello-world.yml
```

## 步骤 5：运行 AWSTOE 组件
<a name="toe-start-run"></a>

 AWSTOE 应用程序可以使用`--phases`命令行参数运行指定文档的一个或多个阶段。`--phases` 支持的值有 `build`、`validate` 和 `test`。可以用逗号分隔的值形式输入多个阶段值。

当您提供阶段列表时， AWSTOE 应用程序会按顺序运行每个文档的指定阶段。例如， AWSTOE 运行的`build`和`validate`阶段`document1.yaml`，然后运行的`build`和`validate`阶段`document2.yaml`。

为了确保您的日志安全存储并保留以供故障排除，我们建议您在 Amazon S3 中配置日志存储。在 Image Builder 中，用于发布日志的 Amazon S3 位置是在基础设施配置中指定的。有关基础设施配置的更多信息，请参阅 [管理 Image Builder 基础设施配置](manage-infra-config.md)

如果未提供阶段列表，则 AWSTOE 应用程序将按照 YAML 文档中列出的顺序运行所有阶段。

要在单个或多个文档中运行特定阶段，请使用以下命令。

单个阶段

```
awstoe run --documents hello-world.yml --phases build
```

多个阶段

```
awstoe run --documents hello-world.yml --phases build,test
```

**文档运行**  
在单个文档中运行所有阶段

```
awstoe run --documents documentName.yaml
```

在多个文档中运行所有阶段

```
awstoe run --documents documentName1.yaml,documentName2.yaml
```

输入 Amazon S3 信息以从用户定义的本地路径上传 AWSTOE 日志（推荐）

```
awstoe run --documents documentName.yaml --log-s3-bucket-name amzn-s3-demo-destination-bucket --log-s3-key-prefix S3KeyPrefix --log-s3-bucket-owner S3BucketOwner --log-directory local_path
```

在单个文档中运行所有阶段，并在控制台上显示所有日志

```
awstoe run --documents documentName.yaml --trace
```

示例命令

```
awstoe run --documents s3://bucket/key/doc.yaml --phases build,validate
```

运行具有唯一 ID 的文档

```
awstoe run --documents documentName.yaml --execution-id user-provided-id --phases build,test
```

获取以下方面的帮助 AWSTOE

```
awstoe --help
```