设置用于解密文件的托管工作流程 - AWS Transfer Family

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

设置用于解密文件的托管工作流程

本教程说明如何设置包含解密步骤的托管工作流程。本教程还展示了如何将加密文件上传到 Amazon S3 存储桶,然后在同一存储桶中查看解密后的文件。

注意

AWS 存储博客上有一篇文章描述了如何使用 Transfer Family Managed 工作流程、使用 PGP 加密和解密文件以及,无需编写任何代码即可简单地解密文件。 AWS Transfer Family

步骤 2:配置执行角色

创建一个 AWS Identity and Access Management (IAM) 执行角色,Transfer Family 可以使用该角色来启动工作流程。适用于工作流程的 IAM 策略中描述了创建执行角色的过程。

注意

在创建执行角色时,请务必在执行角色和 Transfer Family 之间建立信任关系,如建立信任关系中所述。

以下执行角色策略包含启动您在本教程中创建的工作流程所需的所有权限。要使用此示例策略,请将 user input placeholders 替换为您自己的信息。DOC-EXAMPLE-BUCKET替换为您上传加密文件的 Amazon S3 存储桶的名称。

注意

并非每个工作流程都需要此示例中列出的每个权限。您可以根据特定工作流程中的步骤类型来限制权限。使用预定义的步骤中描述了每种预定义步骤类型所需的权限。自定义步骤的 IAM 权限中描述了每种自定义步骤所需的权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "WorkflowsS3Permissions", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:PutObject", "s3:PutObjectTagging", "s3:ListBucket", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:DeleteObjectVersion", "s3:DeleteObject" ], "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "arn:aws:s3:::DOC-EXAMPLE-BUCKET"] "Condition": { "StringEquals": { "s3:RequestObjectTag/Archive": "yes" } } }, { "Sid": "DecryptSecret", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "arn:aws:secretsmanager:region:account-id:secret:aws/transfer/*" } ] }

步骤 2:创建托管工作流程

现在,您需要创建一个包含解密步骤的工作流程。

创建一个包含解密步骤的工作流程。
  1. 打开 AWS Transfer Family 控制台,网址为 https://console.aws.amazon.com/transfer/

  2. 在左侧的导航窗格中,选择工作流程,然后选择创建工作流程

  3. 输入以下详细信息:

    • 例如,输入描述Decrypt workflow example

    • 标称步骤部分中,选择添加步骤

  4. 对于选择步骤类型,选择解密文件,然后选择下一步

  5. 配置参数对话框中,指定以下内容:

    • 例如,输入描述性步骤名称decrypt-step。步骤名称中不允许使用空格。

    • 对于解密文件的目标,请选择 Amazon S3。

    • 对于目标存储桶名称,请选择您在步骤 1 中创建的 IAM 策略DOC-EXAMPLE-BUCKET中指定的相同的 Amazon S3 存储桶。

    • 目标密钥前缀中,输入要在目标存储桶中存储解密文件的前缀(文件夹)的名称,例如,decrypted-files/

      注意

      请务必在前缀中添加一个尾部斜杠 (/)。

    • 在本教程中,请清除覆盖现有文件。清除此设置后,如果您尝试解密与现有文件同名的文件,则工作流处理将停止,并且不会处理新文件。

    选择下一步,进入下一个审核屏幕。

  6. 审核该步骤的详细信息。如果一切正确,请选择创建步骤

  7. 您的工作流程只需要单个解密步骤,因此无需配置其他步骤。选择创建工作流程以创建新工作流程。

记下新工作流程的工作流程 ID。下一步骤中,您需要用到此 ID。本教程使用 w-1234abcd5678efghi 作为示例工作流程 ID。

步骤 3:将工作流程添加至服务器并创建用户

现在您已经有了带有解密步骤的工作流程,您必须将其与 Transfer Family 服务器相关联。本教程介绍如何将工作流程附加至现有 Transfer Family 服务器。或者,您可以创建新的服务器以用于您的工作流程。

将工作流程附加到服务器后,必须创建一个可以通过 SFTP 连接到服务器并触发工作流程运行的用户。

配置 Transfer Family 服务器以运行工作流程
  1. 打开 AWS Transfer Family 控制台,网址为 https://console.aws.amazon.com/transfer/

  2. 在左侧导航窗格中,选择服务器,然后从列表中选择服务器。确保此服务器支持 SFTP 协议。

  3. 在服务器的详细信息页面上,向下滚动到其他详细信息部分,然后选择编辑

  4. 编辑其他详细信息页面的托管工作流程部分,选择您的工作流程,然后选择相应的执行角色。

  5. 滚动到页面底部并选择保存以保存您的更改。

记下您正在使用的服务器的 ID。用于存储 PGP AWS Secrets Manager 密钥的密钥的名称部分基于服务器 ID。

添加可以触发工作流程的用户
  1. 打开 AWS Transfer Family 控制台,网址为 https://console.aws.amazon.com/transfer/

  2. 在左侧导航窗格中,选择服务器,然后选择您要用于解密工作流程的服务器。

  3. 在服务器的详细信息页面上,向下滚动到用户部分,然后选择添加用户

  4. 对于您的新用户,请输入以下详细信息:

    • 对于用户名,输入 decrypt-user

    • 对于角色,请选择可以访问您的服务器的用户角色。

    • 对于主目录,选择您之前使用的 Amazon S3 存储桶,例如DOC-EXAMPLE-BUCKET

    • 对于 SSH 公有密钥,请粘贴与您拥有的私有密钥相对应的公有密钥。有关更多信息,请参阅 为服务托管用户生成 SSH 密钥

  5. 选择添加以保存您的新用户。

记下您在这台服务器上的 Transfer Family 用户的名称。该密钥部分基于用户的名称。为简单起见,本教程使用了服务器的任何用户均可使用的默认密钥。

步骤 2:创建 PGP 密钥对

使用支持的 PGP 客户端之一以生成 PGP 密钥对。有关此过程的详细介绍,请参阅生成 PGP 密钥

生成 PGP 密钥对
  1. 在本教程中,您可以使用 gpg (GnuPG) 版本 2.0.22 客户端生成使用 RSA 作为加密算法的 PGP 密钥对。对于此客户端,运行如下命令,并提供电子邮件地址和密码。您可以使用任何您喜欢的姓名或电子邮件地址。请务必记住所使用的值,因为本教程稍后需要输入这些值。

    gpg --gen-key
    注意

    如果您使用的版本是GnuPG 2.3.0 或以上,则必须运行 gpg --full-gen-key。当提示输入要创建的密钥类型时,请选择 RSA 或 ECC。但是,如果您选择 ECC,请确保为椭圆曲线选择NIST或BrainPool 请勿选择Curve 25519。

  2. 通过运行以下命令导出私有密钥。将user@example.com替换为生成密钥时使用的电子邮件地址。

    gpg --output workflow-tutorial-key.pgp --armor --export-secret-key user@example.com

    此命令将私有密钥导出到workflow-tutorial-key.pgp文件中。您可以随意命名输出文件。您也可以在将私有密钥文件添加到 AWS Secrets Manager后删除该文件。

步骤 5:将 PGP 私有密钥存储在 AWS Secrets Manager中

您需要以非常具体的方式将私有密钥存储在 Secrets Manager 中,以便工作流程在对上传的文件运行解密步骤时可以找到私有密钥。

注意

当你在 Secret AWS 账户 s Manager 中存储密钥时,会产生费用。有关定价的信息,请参阅 AWS Secrets Manager 定价

在 Secrets Manager 中存储 PGP 私有密钥
  1. 登录 AWS Management Console 并打开 AWS Secrets Manager 控制台,网址为 https://console.aws.amazon.com/secretsmanager/

  2. 在左侧导航窗格中,选择密钥

  3. 密钥页面,选择存储新密钥

  4. 选择密钥类型页面上,对于密钥类型,选择其他类型密钥

  5. 键/值对部分,选择键/值选项卡。

    • — 输入PGPPrivateKey

    • — 将您的私有密钥文本粘贴至值字段。

  6. 选择添加行,然后在密钥/值对部分选择密钥/值选项卡。

  7. 选择下一步

  8. 配置密钥页面,输入密钥的名称和描述。您可以为特定用户创建密钥,也可以创建可供所有用户使用的密钥。如果您的服务器 ID 是 s-11112222333344445,则按如下方式命名密钥。

    • 要为所有用户创建默认密钥,请为该密钥命名aws/transfer/s-11112222333344445/@pgp-default

    • 要仅为之前创建的用户创建密钥,请为该密钥命名aws/transfer/s-11112222333344445/decrypt-user

  9. 选择下一步,接受配置轮换页面的默认设置。然后选择下一步

  10. 审核页面,选择存储以创建和存储密钥。

有关将您的 PGP 私钥添加到 Secrets Manager 的更多信息,请参阅用于 AWS Secrets Manager 存储 PGP 密钥

步骤 6:加密文件

使用该gpg程序对文件进行加密,以便在工作流程中使用。要加密文件,请运行以下命令:

gpg -e -r marymajor@example.com --openpgp testfile.txt

在运行此命令之前,请注意以下事项:

  • 对于-r参数,请marymajor@example.com替换为创建 PGP 密钥对时使用的电子邮件地址。

  • --openpgp标记是可选的。此标记使加密文件符合 OpenPGP RFC4880 标准。

  • 此命令将创建一个名为testfile.txt.gpg的文件,其位置与testfile.txt相同。

步骤 7:运行工作流程并查看结果

要运行工作流程,您需要使用在步骤 3 中创建的用户连接到 Transfer Family 服务器。然后,您可以查看您在步骤 2.5 中指定的 Amazon S3 存储桶,配置目标参数以查看解密后的文件。

运行解密工作流程
  1. 打开命令终端。

  2. 运行以下命令,替换your-endpoint为实际端点和transfer-key为用户的 SSH 私有密钥:

    sftp -i transfer-key decrypt-user@your-endpoint

    例如,如果私有密钥存储在~/.ssh/decrypt-user中,而您的端点存储在s-11112222333344445.server.transfer.us-east-2.amazonaws.com中,则命令如下所示:

    sftp -i ~/.ssh/decrypt-user decrypt-user@s-11112222333344445.server.transfer.us-east-2.amazonaws.com
  3. 运行 pwd 命令。如果成功,此命令将返回以下内容:

    Remote working directory: /DOC-EXAMPLE-BUCKET/decrypt-user

    您的目录反映了 Amazon S3 存储桶的名称。

  4. 运行如下命令来上传文件并触发要运行的工作流程:

    put testfile.txt.gpg
  5. 对于解密文件的目标,您在创建工作流程时指定了decrypted-files/文件夹。现在,您可以导航到该文件夹并列出内容。

    cd ../decrypted-files/ ls

    如果成功,则ls命令将列出testfile.txt文件。您可以下载此文件并验证它是否与之前加密的原始文件相同。