使用 S3 分批操作加密具有 S3 存储桶密钥的对象 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用 S3 分批操作加密具有 S3 存储桶密钥的对象

在本节中,您可以使用 Amazon S3 分批操作 Copy 操作来识别和激活现有对象上的 S3 存储桶密钥加密。有关 S3 存储桶密钥的更多信息,请参阅 使用 Amazon S3 存储桶密钥降低 SSE-KMS 的成本将存储桶配置为将 S3 存储桶密钥与 SSE-KMS 结合使用于新对象

本示例中涵盖的主题包括:

Prerequisites

要按照此过程中的步骤执行操作,您需要 Amazon 账户和至少一个 S3 存储桶来存放工作文件和加密结果。您可能还会发现许多有用的现有 S3 分批操作文档,包括以下主题:

第 1 步:使用 S3 清单获取对象列表

要开始操作,请确定包含要加密对象的 S3 存储桶,并获取其内容列表。Amazon S3 清单报告是完成此操作的最方便且最经济的方式。报告提供存储桶对象列表以及相关元数据。源存储桶指的是列表存储桶,目标存储桶指的是您存储清单报告文件的存储桶。有关 Amazon S3 清单源存储桶和目标存储桶的更多信息,请参阅 Amazon S3 清单

设置清单最简单的方法是使用 Amazon Web Services Management Console。但您也可以使用 REST API、Amazon Command Line Interface (Amazon CLI) 或 Amazon 开发工具包。执行以下步骤之前,请务必登录控制台,并通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/。如果遇到权限拒绝错误,请在目标桶中添加桶策略。有关更多信息,请参阅 向 Amazon S3 清单和 Amazon S3 分析功能授予权限

使用 S3 清单获取对象列表

  1. 通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在导航窗格中,选择 Buckets (存储桶),然后选择包含要加密对象的存储桶。

  3. Management (管理) 选项卡导航至 Inventory configurations (清单配置) 部分,然后选择 Create inventory configuration (创建清单配置)

  4. 为您的新清单命名,输入目标 S3 存储桶的名称,并可选择为 Amazon S3 创建目标前缀,以便在该存储桶中分配对象。

  5. Output format (输出格式) 选择 CSV

  6. Additional fields - optional (其他字段 – 可选)部分,选择 Encryption (加密) 以及您感兴趣的任何其他报告字段。将报告发送频率设置为 Daily (每天),以便更快将第一个报告发送到您的存储桶。

  7. 选择 Create (创建) 以保存您的配置。

Amazon S3 可能需要长达 48 小时才能交付第一个报告,所以当第一个报告到达时请予以查看。收到第一份报告后,请进入下一部分以筛选 S3 清单报告的内容。如果您不再希望接收此存储桶的清单报告,请删除您的 S3 清单配置。否则,S3 会按每日或每周计划提供报告。

清单列表并非所有对象的单个时间点视图。清单列表是存储桶项的滚动快照,最终是一致的(例如,列表可能不包含最近添加或删除的对象)。当您使用静态对象或两天乃至更多天之前创建的对象集时,将 S3 清单和 S3 分批操作结合使用效果最佳。要处理最新数据,请使用 ListObjectsV2(GET 存储桶)API 操作来手动构建对象列表。如有需要,请在接下来的几天内重复该流程,或直到您的清单报告显示所有密钥的理想状态。

第 2 步:使用 S3 Select 筛选对象列表

收到 S3 清单报告后,您可以筛选报告内容,仅列出未使用存储桶密钥加密的对象。如果您希望使用存储桶密钥加密存储桶中的所有对象,则可以忽略此步骤。但是,在此阶段过滤 S3 清单报告可节省重新加密先前已加密对象的时间和费用。

尽管以下步骤介绍的是如何使用 Amazon S3 Select,您也可以使用 Amazon Athena。要决定使用哪个工具,请查看 S3 清单报告的 manifest.json 文件。此文件列出了与该报告关联的数据文件的数量。如果数量较大,请使用 Amazon Athena,因为其运行在多个 S3 对象之间,而 S3 Select 一次仅适用一个对象。有关将 Amazon S3 和 Athena 结合使用的更多信息,请参阅 使用 Amazon Athena 查询 Amazon S3 清单 以及博客文章使用 Amazon S3 分批操作加密对象中的使用 Athena

使用 S3 Select 筛选 S3 清单报告

  1. 打开清单报告中的 manifest.json 文件,然后查看 JSON 中的 fileSchema 部分。这将通知您的数据运行查询。

    以下 JSON 是一个示例 manifest.json 文件,用于查看已启用版本控制的存储桶上的 CSV 格式清单。根据您配置库存报告的方式,您的清单可能会有所不同。

    { "sourceBucket": "batchoperationsdemo", "destinationBucket": "arn:aws:s3:::testbucket", "version": "2021-05-22", "creationTimestamp": "1558656000000", "fileFormat": "CSV", "fileSchema": "Bucket, Key, VersionId, IsLatest, IsDeleteMarker, BucketKeyStatus", "files": [ { "key": "demoinv/batchoperationsdemo/DemoInventory/data/009a40e4-f053-4c16-8c75-6100f8892202.csv.gz", "size": 72691, "MD5checksum": "c24c831717a099f0ebe4a9d1c5d3935c" } ] }

    如果存储桶未激活版本控制,或者您选择运行最新版本报告,则 fileschemaBucketKeyBucketKeyStatus

    如果版本控制激活,根据您设置清单报告的方式,fileSchema 可能包括:Bucket, Key, VersionId, IsLatest, IsDeleteMarker, BucketKeyStatus。因此,当您运行查询时,请注意第 1、2、3 和 6 栏。

    除存储桶密钥状态,即搜索用句段外,S3 分批操作还需要输入存储桶、密钥和版本 ID 用于执行任务。您不需要版本 ID 字段,但在您对版本控制的存储桶进行操作时,该字段有助于指定存储桶。有关更多信息,请参阅 使用启用版本控制的存储桶中的对象

  2. 找到清单报告的数据文件。manifest.json 对象列出了文件夹下的数据文件。

  3. 在 S3 控制台中找到并选择数据文件后,选择 Actions (操作),然后选择 Query with S3 Select (使用 S3 Select 进行查询)

  4. 保留预设 CSV逗号GZIP 字段,然后选择 Next (下一步)

  5. 如需在继续操作之前检查清单报告格式,请选择 Show file preview (显示文件预览)

  6. 在 SQL 表达式字段中输入要引用的列,然后选择 Run SQL (运行 SQL)。以下表达式为未配置存储桶密钥的所有对象返回列 1-3。

    select s._1, s._2, s._3 from s3object s where s._6 = 'DISABLED'

    以下是示例结果。

    batchoperationsdemo,0100059%7Ethumb.jpg,lsrtIxksLu0R0ZkYPL.LhgD5caTYn6vu batchoperationsdemo,0100074%7Ethumb.jpg,sd2M60g6Fdazoi6D5kNARIE7KzUibmHR batchoperationsdemo,0100075%7Ethumb.jpg,TLYESLnl1mXD5c4BwiOIinqFrktddkoL batchoperationsdemo,0200147%7Ethumb.jpg,amufzfMi_fEw0Rs99rxR_HrDFlE.l3Y0 batchoperationsdemo,0301420%7Ethumb.jpg,9qGU2SEscL.C.c_sK89trmXYIwooABSh batchoperationsdemo,0401524%7Ethumb.jpg,ORnEWNuB1QhHrrYAGFsZhbyvEYJ3DUor batchoperationsdemo,200907200065HQ%7Ethumb.jpg,d8LgvIVjbDR5mUVwW6pu9ahTfReyn5V4 batchoperationsdemo,200907200076HQ%7Ethumb.jpg,XUT25d7.gK40u_GmnupdaZg3BVx2jN40 batchoperationsdemo,201103190002HQ%7Ethumb.jpg,z.2sVRh0myqVi0BuIrngWlsRPQdb7qOS
  7. 下载结果,将其保存为 CSV 格式,然后将其作为 S3 分批操作任务的对象列表上传至 Amazon S3。

  8. 如果您有多个清单文件,也请对它们运行 Query with S3 Select (使用 S3 Select 进行查询)。根据结果的大小,您可以合并列表并运行单个 S3 分批操作任务,或将每个列表作为单独任务运行。

    当您决定要运行的任务数量时,请考虑运行每个 S3 分批操作任务的价格

第 3 步:设置并运行 S3 分批操作任务

现在,您已经有了 S3 对象的筛选 CSV 列表,您可以开始 S3 分批操作任务以使用 S3 存储桶密钥加密对象。

任务指提供的对象列表(清单)、执行的操作以及指定的参数的统称。加密此对象集的最简单方法是使用 PUT 复制操作并指定与清单中列出对象相同的目标前缀。这会覆盖未受版本控制的存储桶中的现有对象,或在启用版本控制的情况下,创建更新的加密版本对象。

作为复制对象的一部分,指定 Amazon S3 应使用 SSE-KMS 加密和 S3 来为对象进行加密。此任务会复制这些对象,因此,所有对象在完成时都显示更新后的创建日期,无论您最初是何时将其添加到 S3 的。另外,在 S3 分批操作任务中指定对象集的其他属性,包括对象标记和存储类。

设置 IAM 策略

  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格中选择 Policies (策略),然后选择 Create Policy (创建策略)

  3. 选择 JSON 选项卡。选择 Edit Policy (编辑策略),然后添加出现在以下代码块中的示例 IAM 策略。

    将策略示例复制到 IAM 控制台后,请替换以下内容:

    1. {SOURCE_BUCKET_FOR_COPY} 替换为您的源存储桶名称。

    2. {DESTINATION_BUCKET_FOR_COPY} 替换为您的目标存储桶名称。

    3. {MANIFEST_KEY} 替换为清单对象名称。

    4. {REPORT_BUCKET} 替换为您想用于保存报告的存储桶名称。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "CopyObjectsToEncrypt", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectTagging", "s3:PutObjectAcl", "s3:PutObjectVersionTagging", "s3:PutObjectVersionAcl", "s3:GetObject", "s3:GetObjectAcl", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::{SOURCE_BUCKET_FOR_COPY}/*", "arn:aws:s3:::{DESTINATION_BUCKET_FOR_COPY}/*" ] }, { "Sid": "ReadManifest", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::{MANIFEST_KEY}" }, { "Sid": "WriteReport", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::{REPORT_BUCKET}/*" } ] }
  4. 选择 Next: Tags (下一步:标签)

  5. 添加您想要的所有标签(可选),然后选择 Next: Review (下一步:审核)

  6. 添加策略名称,可添加描述,然后选择 Create Policy (创建策略)

  7. 选择 Review policy (查看策略)Save changes (保存更改)

  8. 您的 S3 分批操作策略现已完成,控制台会将您返回到 IAM Policies (策略) 页面。筛选策略名称,选择策略名称左侧的按钮,选择 Policy actions (策略操作),然后选择 Attach (附加)

    如需将新创建的策略附加到 IAM 角色,请在账户中选择相应的用户、组或角色,然后选择 Attach policy (附加策略)。系统会带您返回 IAM 控制台。

设置分批操作 IAM 角色

  1. 在 IAM 控制台的导航窗格中,选择 Roles (角色),然后选择 Create role (创建角色)

  2. 选择 Amazon service (Amazon 服务)S3S3 Batch Operations (S3 分批操作)。然后选择 Next: Permissions (下一步:权限)

  3. 输入您刚刚创建的 IAM 策略的名称。根据出现的策略名称选中相应名称,然后选择 Next: Tags (下一步:标签)

  4. (可选)为本次练习添加标签或将密钥和值字段保留为空。选择 Next: Review (下一步:审核)

  5. 输入角色名称,然后接受默认说明或添加您自己的说明。选择 Create role (创建角色)

  6. 确保创建任务的用户具有以下示例中的权限。

    {ACCOUNT-ID} 替换为您的 Amazon 账户 ID,{IAM_ROLE_NAME} 替换为您计划应用于稍后将在分批操作任务创建步骤中创建的 IAM 角色的名称。有关更多信息,请参阅 授予 Amazon S3 分批操作的权限

    { "Sid": "AddIamPermissions", "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "arn:aws:iam::{ACCOUNT-ID}:role/{IAM_ROLE_NAME}" }

为现有存储桶启用 S3 存储桶密钥

  1. 通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. Buckets (存储桶) 列表中,选择要为其启用 S3 存储桶密钥的存储桶。

  3. 选择属性

  4. Default encryption (默认加密) 下,选择 Edit (编辑)

  5. Server-side encryption (服务器端加密) 选项下选择 Enable (启用)

  6. Encryption key type (加密密钥类型) 下选择 Amazon KMS key (SSE-KMS) (Amazon KMS 密钥(SSE-KMS)),然后选择您偏好的 Amazon KMS 密钥格式:

    • Amazon托管密钥 (aws/s3).

    • 从您的 Amazon KMS 密钥中选择,然后选择与存储桶位于同一区域的对称客户主密钥 CMK。

    • Amazon KMS 密钥 ARN

  7. Bucket Key (存储桶密钥) 中,选择 Enable (启用),然后选择 Save changes (保存更改)

现在,存储桶密钥已在存储桶级别打开,默认情况下,上传、修改或复制到此存储桶中的对象将承继此加密配置。其中包括使用 Amazon S3 分批操作操作复制的对象。

创建分批操作任务

  1. 通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在导航窗格中,选择 Batch Operations (分批操作),然后选择 Create Job (创建任务)

  3. 选择您存储对象的 Region (区域),然后选择 CSV 作为清单类型。

  4. 输入路径或导航至您之前从 S3 Select(或 Athena)结果创建的 CSV 清单文件。如果您的清单包含版本 ID,请选中该框。选择 Next (下一步)

  5. 选择 Copy 操作,然后选择复制目标存储桶。您可以保持禁用服务器端加密。只要存储桶目标启用了存储桶密钥,复制操作将在目标存储桶上应用存储桶密钥。

  6. (可选)根据需要选择存储类和其他参数。您在此步骤中指定的参数将应用于清单中列出的对象执行的所有操作。选择 Next (下一步)

  7. 提供任务说明(或保留默认值),设置其优先级,选择报告类型,然后指定 Path to completion report destination (完成报告目标的路径)

  8. Permissions (权限) 部分,请确保选择您之前定义的分批操作 IAM 角色。选择 Next (下一步)

  9. Review (审核) 中验证设置。如果需要进行更改,请选择 Previous (上一步)。确认分批操作设置后,选择 Create job (创建任务)

    有关更多信息,请参阅 创建 S3 分批操作任务

运行您的分批操作任务

安装向导将自动将您返回 Amazon S3 控制台的 S3 分批操作部分。随着 S3 开始此过程,您的新任务将从 New (新建) 状态变为 Preparing (准备中) 状态。在 Preparing (准备中) 状态下,S3 会读取任务清单,检查是否存在错误,并计算对象数量。

  1. 在 Amazon S3 控制台中选择刷新按钮以检查进度。根据清单的大小,读取可能需要几分钟或几小时。

  2. S3 读取任务清单后,任务将转移至 Awaiting your confirmation (待确认) 状态。选择任务 ID 左侧的选项按钮,然后选择 Run job (运行任务)

  3. 检查任务设置,然后选择右下角的 Run job (运行任务)

    任务开始运行后,您可以选择刷新按钮通过控制台控制面板视图或选择特定任务来检查进度。

  4. 任务完成后,您可以查看 Successful (成功)Failed (失败) 对象数量以确认所有任务均按预期执行。如果您启用了任务报告,请检查任务报告,了解失败操作的确切原因。

    您还可以使用 Amazon CLI、软件开发工具包或 API 来执行这些步骤。有关追踪任务状态和完成报告的更多信息,请参阅 跟踪任务状态和完成报告

需知信息

使用 S3 分批操作加密具有存储桶密钥的对象时,请考虑以下问题:

  • 除了 S3 分批操作代您执行的操作相关的任何费用之外(包括数据传输、请求等费用),您还需要为 S3 分批操作任务、对象和请求付费。有关更多信息,请参阅 Amazon S3 定价

  • 如果您使用受版本控制的存储桶,则执行的每个 S3 分批操作任务都会创建对象的新加密版本。另外,无需配置存储桶密钥即可维护以前的版本。要删除旧版本,请为非当前版本设置 S3 生命周期过期策略,如 生命周期配置元素

  • 复制操作会创建具有新创建日期的新对象,这会影响生命周期操作(如归档)。如果您复制存储桶中的所有对象,

    所有新版本均有相同或相似的创建日期。要进一步识别这些对象并为各种数据子集创建不同的生命周期规则,请考虑使用对象标签。

Summary

在本节中,您将对现有对象进行整理,筛选出已加密的数据。然后,通过 S3 分批操作将现有数据复制到密钥已激活的存储桶,对未加密的对象应用存储桶密钥功能。这个过程可以为您节省时间和金钱,同时允许您完成诸如加密所有现有对象等操作。

有关 S3 分批操作的更多信息,请参阅 对 Amazon S3 对象执行大规模分批操作