

# 配置 Amazon S3 清单


Amazon S3 清单每天根据您定义的时间表，提供您的对象和元数据的平面文件列表。您可以使用 S3 清单作为 Amazon S3 同步 `List` API 操作的计划替代方案。S3 清单提供逗号分隔值（CSV）、[经过 Apache 优化的行列式（ORC）](https://orc.apache.org/)或 [https://parquet.apache.org/](https://parquet.apache.org/) 输出文件，这些文件列出了对象及其相应的元数据。

您可以将 S3 清单配置为每天或每周为 S3 存储桶或为共享前缀的对象（名称以相同字符串开头的对象）创建清单列表。有关更多信息，请参阅 [使用 S3 清单对数据进行编目和分析](storage-inventory.md)。

本部分介绍了如何设置清单，包括有关清单源存储桶和目标存储桶的详细信息。

**Topics**
+ [

## 概述
](#storage-inventory-setting-up)
+ [

## 创建目标存储桶策略
](#configure-inventory-destination-bucket-policy)
+ [

## 向 Amazon S3 授予权限以使用客户自主管理型密钥进行加密
](#configure-inventory-kms-key-policy)
+ [

## 使用 S3 控制台配置清单
](#configure-inventory-console)
+ [

## 使用 REST API 处理 S3 清单
](#rest-api-inventory)

## 概述
设置 Amazon S3 清单

Amazon S3 清单将帮助您按预定的计划创建 S3 存储桶中的对象的列表，由此管理存储。您可以为桶配置多个清单列表。清单列表将发布到目标存储桶中的 CSV、ORC 或 Parquet 文件。

设置清单的最简单方法是使用 Amazon S3 控制台，不过您也可以使用 Amazon S3 REST API、Amazon Command Line Interface (Amazon CLI) 或 Amazon SDK。控制台将为您执行以下过程的第一步：将存储桶策略添加到目标存储桶。

**为 S3 存储桶设置 Amazon S3 清单**

1. **为目标存储桶添加存储桶策略。**

   您必须在目标存储桶上创建存储桶策略，以向 Amazon S3 授予将对象写入已定义位置的存储桶的权限。有关策略示例，请参阅[向 S3 清单和 S3 分析功能授予权限](example-bucket-policies.md#example-bucket-policies-s3-inventory-1)。

1. **配置一个清单以列出源存储桶中的对象并将该列表发布到目标存储桶。**

   当您为源存储桶配置清单列表时，您应指定用于存储该列表的目标存储桶，以及是每天还是每周生成一次列表。您还可以配置是列出所有对象版本还是仅列出当前版本，以及要包含哪些对象元数据。

   S3 清单报告配置中的某些对象元数据字段是可选的，这意味着它们在默认情况下是可用的，但是当您向用户授予 `s3:PutInventoryConfiguration` 权限时，它们可能会受到限制。您可以使用 `s3:InventoryAccessibleOptionalFields` 条件键控制用户能否在报告中包含这些可选元数据字段。

   有关 S3 清单中可用的可选元数据字段的更多信息，请参阅《Amazon Simple Storage Service API Reference》**中的 [https://docs.amazonaws.cn//AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html#API_PutBucketInventoryConfiguration_RequestBody](https://docs.amazonaws.cn//AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html#API_PutBucketInventoryConfiguration_RequestBody)。有关在清单配置中限制对某些可选元数据字段的访问的更多信息，请参阅[控制 S3 清单报告配置的创建](example-bucket-policies.md#example-bucket-policies-s3-inventory-2)。

   您可以指定使用具有 Amazon S3 托管式密钥 (SSE-S3) 或具有 Amazon Key Management Service (Amazon KMS) 客户自主管理型密钥（SSE-KMS）的服务器端加密来加密清单列表文件。
**注意**  
使用 S3 清单进行的 SSE-KMS 加密不支持 Amazon 托管式密钥 (`aws/s3`)。

   有关 SSE-S3 和 SSE-KMS 的更多信息，请参阅 [使用服务器端加密保护数据](serv-side-encryption.md)。如果您打算使用 SSE-KMS 加密，请参阅步骤 3。
   + 有关如何使用控制台配置清单列表的信息，请参阅[使用 S3 控制台配置清单](#configure-inventory-console)。
   + 要使用 Amazon S3 API 配置清单列表，请使用 [https://docs.amazonaws.cn/AmazonS3/latest/API/RESTBucketPUTInventoryConfig.html](https://docs.amazonaws.cn/AmazonS3/latest/API/RESTBucketPUTInventoryConfig.html) REST API 操作，或者使用 Amazon CLI 或 Amazon SDK 中的等效操作。

1. **要使用 SSE-KMS 加密清单列表文件，授予 Amazon S3 使用 Amazon KMS key 的权限。**

   您可以使用 Amazon S3 控制台、Amazon S3 REST API、Amazon CLI 或 Amazon SDK，为清单列表文件配置加密。无论选择哪种方式，您都必须授予 Amazon S3 相应权限使用客户托管密钥来加密清单文件。可[通过修改要用于加密清单文件的客户自主管理型密钥的密钥策略](https://docs.amazonaws.cn/AmazonS3/latest/userguide/configure-inventory.html#configure-inventory-kms-key-policy)，向 Amazon S3 授予权限。确保已在 S3 清单配置或目标存储桶的加密设置中提供了 KMS 密钥 ARN。如果未指定 KMS 密钥 ARN 而使用默认加密设置，将无法访问 S3 清单报告。

   存储清单列表文件的目标存储桶可以由与拥有源存储桶的账户不同的 Amazon Web Services 账户拥有。如果您使用 SSE-KMS 加密功能执行 Amazon S3 清单跨账户操作，则在配置 S3 清单时，建议您使用完全限定的 KMS 密钥 ARN。有关更多信息，请参阅《Amazon Simple Storage Service API 参考》**中的[使用 SSE-KMS 加密进行跨账户操作](bucket-encryption.md#bucket-encryption-update-bucket-policy)和 [https://docs.amazonaws.cn/AmazonS3/latest/API/API_ServerSideEncryptionByDefault.html](https://docs.amazonaws.cn/AmazonS3/latest/API/API_ServerSideEncryptionByDefault.html)。
**注意**  
如果无法访问 S3 清单报告，请使用 [https://docs.amazonaws.cn/AmazonS3/latest/API/API_GetBucketEncryption.html](https://docs.amazonaws.cn/AmazonS3/latest/API/API_GetBucketEncryption.html) API，并检查目标存储桶是否启用了默认 SSE-KMS 加密。如果未指定 KMS 密钥 ARN 而使用默认加密设置，将无法访问 S3 清单报告。要再次访问 S3 清单报告，请在 S3 清单配置或目标存储桶的加密设置中提供 KMS 密钥 ARN。

## 创建目标存储桶策略
目标存储桶策略

如果您通过 Amazon S3 控制台创建清单配置，Amazon S3 会在目标存储桶上自动创建一个存储桶策略，以授予 Amazon S3 对存储桶的写入权限。但是，如果您通过 Amazon CLI、Amazon SDK 或 Amazon S3 REST API 创建清单配置，则必须在目标存储桶上手动添加存储桶策略。S3 清单目标存储桶策略允许 Amazon S3 将清单报告数据写入存储桶。

下面是一个示例存储桶策略。

------
#### [ JSON ]

****  

```
{  
      "Version":"2012-10-17",		 	 	 
      "Statement": [
        {
            "Sid": "InventoryExamplePolicy",
            "Effect": "Allow",
            "Principal": {
                "Service": "s3.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": [
                "arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET/*"
            ],
            "Condition": {
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET"
                },
                "StringEquals": {
                    "aws:SourceAccount": "source-123456789012",
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        }
    ]
}
```

------

有关更多信息，请参阅 [向 S3 清单和 S3 分析功能授予权限](example-bucket-policies.md#example-bucket-policies-s3-inventory-1)。

如果在您尝试创建存储桶策略出现错误，则将为您提供相关修复说明。例如，如果您选择了其他 Amazon Web Services 账户 中的目标存储桶，而没有权限读取和写入存储桶策略，则您会看到一条错误消息。

在这种情况下，目标存储桶拥有者必须将存储桶策略添加到目标存储桶中。如果策略未添加到目标存储桶中，则您不会获得清单报告，因为 Amazon S3 无权写入目标存储桶。如果源桶属于其他账户而非当前用户的账户，则必须在策略中替换源桶拥有者的正确账户 ID。

**注意**  
确保没有向目标存储桶策略中添加任何会阻止向该存储桶传送清单报告的拒绝语句。有关更多信息，请参阅[为什么无法生成 Amazon S3 清单报告？](https://repost.aws/knowledge-center/s3-inventory-report)

## 向 Amazon S3 授予权限以使用客户自主管理型密钥进行加密


要向 Amazon S3 授予使用 Amazon Key Management Service（Amazon KMS）客户自主管理型密钥进行服务器端加密的权限，必须使用密钥策略。要更新密钥策略，以便您能够使用客户自主管理型密钥，请使用以下过程。

**授予 Amazon S3 使用客户自主管理型密钥进行加密的权限**

1. 使用拥有客户自主管理型密钥的 Amazon Web Services 管理控制台，登录 Amazon Web Services 账户。

1. 从 [https://console.aws.amazon.com/kms](https://console.amazonaws.cn/kms) 打开 Amazon KMS 控制台。

1. 要更改 Amazon Web Services 区域，请使用页面右上角的区域选择器。

1. 在左侧导航窗格中，选择 **Customer managed keys (客户托管密钥)**。

1. 在**客户自主管理型密钥**下，选择要用于加密清单文件的客户托管密钥。

1. 在 **Key Policy (密钥策略)** 部分中，选择 **Switch to policy view (切换到策略视图)**。

1. 要更新密钥策略，选择 **Edit (编辑)**。

1. 在**编辑密钥策略**页上，将以下各行添加到现有密钥策略。对于 `source-account-id` 和 `amzn-s3-demo-source-bucket`，为您的用例提供适当的值。

   ```
   {
       "Sid": "Allow Amazon S3 use of the customer managed key",
       "Effect": "Allow",
       "Principal": {
           "Service": "s3.amazonaws.com"
       },
       "Action": [
           "kms:GenerateDataKey"
       ],
       "Resource": "*",
       "Condition":{
         "StringEquals":{
            "aws:SourceAccount":"source-account-id"
        },
         "ArnLike":{
           "aws:SourceARN": "arn:aws:s3:::amzn-s3-demo-source-bucket"
        }
      }
   }
   ```

1. 选择**保存更改**。

有关创建客户托管密钥和使用密钥策略的更多信息，请参阅 *Amazon Key Management Service 开发人员指南*中的以下链接：
+ [管理密钥](https://docs.amazonaws.cn/kms/latest/developerguide/getting-started.html)
+ [ 中的密钥策略Amazon KMS](https://docs.amazonaws.cn/kms/latest/developerguide/key-policies.html)

**注意**  
确保没有向目标存储桶策略中添加任何会阻止向该存储桶传送清单报告的拒绝语句。有关更多信息，请参阅[为什么无法生成 Amazon S3 清单报告？](https://repost.aws/knowledge-center/s3-inventory-report)

## 使用 S3 控制台配置清单


按照以下说明使用 S3 控制台配置清单。
**注意**  
Amazon S3 交付第一份清单报告可能需要长达 48 小时。

1. 登录到 Amazon Web Services 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.amazonaws.cn/s3/)。

1. 在左侧导航窗格中，选择**通用存储桶**。

1. 在存储桶列表中，选择要为其配置 Amazon S3 清单的存储桶的名称。

1. 选择**管理**选项卡。

1. 在 **Inventory configurations (清单配置)** 下，选择 **Create inventory configuration (创建清单配置)**。

1. 对于**清单配置名称**，输入名称。

1. 对于**清单范围**，请执行以下操作：
   + 输入可选的前缀。
   + 选择要包括的对象版本：**仅当前版本**或**包括所有版本**。

1. 在 **Report details (报告详细信息)** 下，选择要将报告保存到的 Amazon Web Services 账户 的位置：**此账户**或**另一个账户**。

1. 在**目标**下，选择要将清单报告保存到的目标存储桶。

   目标存储桶必须位于与您为其设置清单的桶相同的 Amazon Web Services 区域 中。目标存储桶可处于不同的 Amazon Web Services 账户 中。指定目标存储桶时，您还可以添加可选前缀，以将清单报告组合在一起。

   在**目标存储桶**字段下，您将看到**目标存储桶权限**声明，该声明添加到目标存储桶策略中以允许 Amazon S3 在该桶中放置数据。有关更多信息，请参阅 [创建目标存储桶策略](#configure-inventory-destination-bucket-policy)。

1. 在**频率**下，选择生成报告的频率：**每日**或**每周**。

1. 对于**输出格式**，为报告选择以下格式之一：
   + **CSV** – 如果您计划将此清单报告用于 S3 批量操作，或者如果您想在其他工具（例如 Microsoft Excel）中分析此报告，请选择 **CSV**。
   + **Apache ORC**
   + **Apache Parquet**

1. 在 **Status (状态)** 下，选择 **Enable (启用)** 或 **Disable (禁用)**。

1. 要配置服务器端加密，请在**清单报告加密**下执行以下步骤：

   1. 在**服务器端加密**下，选择**不要指定加密密钥**或**指定加密密钥**来加密数据。
      + 要在将对象存储在 Amazon S3 中时保留适用于对象原定设置服务器端加密的桶设置，请选择**不要指定加密密钥**。只要桶目标启用了 S3 存储桶密钥，复制操作就将在目标存储桶上应用 S3 存储桶密钥。
**注意**  
如果指定目标的存储桶策略要求在将对象存储到 Amazon S3 之前对其进行加密，则必须**指定加密密钥**。否则，将对象复制到目标将失败。
      + 要在将对象存储到 Amazon S3 之前对其进行加密，请选择**指定加密密钥**。

   1. 如果您选择**指定加密密钥**，那么在**加密类型**下，您必须选择 **Amazon S3 托管密钥（SSE-S3）**或 **Amazon Key Management Service 密钥（SSE-KMS）**。

      SSE-S3 使用最强的数据块密码之一 [即 256 位高级加密标准（AES-256）] 来加密每个对象。SSE-KMS 为您提供了对密钥的更多控制。有关 SSE-S3 的更多信息，请参阅[使用具有 Amazon S3 托管式密钥的服务器端加密（SSE-S3）](UsingServerSideEncryption.md)。有关 SSE-KMS 的更多信息，请参阅 [使用具有 Amazon KMS 密钥的服务器端加密（SSE-KMS）](UsingKMSEncryption.md)。
**注意**  
要使用 SSE-KMS 加密清单列表文件，必须授予 Amazon S3 使用客户自主管理型密钥的权限。有关说明，请参阅[授予 Amazon S3 使用 KMS 密钥进行加密的权限](#configure-inventory-kms-key-policy)。

   1. 如果您选择了 **Amazon Key Management Service 密钥（SSE-KMS）**，则在 **Amazon KMS key**下，您可以通过以下选项之一指定 Amazon KMS 密钥。
**注意**  
如果存储清单列表文件的目标存储桶由其他 Amazon Web Services 账户拥有，请确保使用完全限定的 KMS 密钥 ARN 来指定您的 KMS 密钥。
      + 要从可用 KMS 密钥列表中进行选择，请选择**从您的 Amazon KMS 密钥中进行选择**，然后从可用密钥列表中选择对称加密 KMS 密钥。确保该 KMS 密钥与您的存储桶位于同一区域。
**注意**  
Amazon 托管式密钥 (`aws/s3`) 和您的客户自主管理型密钥都显示在列表中。但是，使用 S3 清单进行的 SSE-KMS 加密不支持 Amazon 托管式密钥 (`aws/s3`)。
      + 要输入 KMS 密钥 ARN，请选择**输入 Amazon KMS 密钥 ARN**，然后在显示的字段中输入您的 KMS 密钥 ARN。
      + 要在 Amazon KMS 控制台中创建新的客户自主管理型密钥，请选择**创建 KMS 密钥**。

1. 对于**其他元数据字段**，从下面选择一项或多项以添加到清单报告：
   + **大小** - 以字节为单位的对象大小，不包括未完成的分段上传、对象元数据和删除标记的大小。
   + **Last modified date (上次修改日期)** – 对象创建日期或上次修改日期（以较晚者为准）。
   +  **分段上传** – 指定对象以分段上传形式上传。有关更多信息，请参阅 [在 Amazon S3 中使用分段上传来上传和复制对象](mpuoverview.md)。
   + **Replication status (复制状态)** – 对象的复制状态。有关更多信息，请参阅 [获取复制状态信息](replication-status.md)。
   + **加密状态** – 用于加密对象的服务器端加密类型。有关更多信息，请参阅 [使用服务器端加密保护数据](serv-side-encryption.md)。
   + **桶密钥状态** – 指示是否将 Amazon KMS 生成的桶级密钥应用于对象。有关更多信息，请参阅 [使用 Amazon S3 存储桶密钥降低 SSE-KMS 的成本](bucket-key.md)。
   + **对象访问控制列表** – 每个对象的访问控制列表（ACL），用于定义哪个 Amazon Web Services 账户或组被授予对此对象的访问权限以及授予的访问权限类型。有关此字段的更多信息，请参阅[使用“对象 ACL”字段](objectacl.md)。有关 ACL 的更多信息，请参阅 [访问控制列表 (ACL) 概述](acl-overview.md)。
   + **对象拥有者** – 对象的拥有者。
   + **存储类** – 用于存储对象的存储类。
   + **智能分层：访问层** – 如果存储在“S3 智能分层”存储类中，则表示对象的访问层（频繁或不频繁）。有关更多信息，请参阅 [用于自动优化访问模式不断变化或未知的数据的存储类](storage-class-intro.md#sc-dynamic-data-access)。
   + **ETag** – 实体标签（ETag）是对象的哈希。ETag 仅反映对于对象的内容的更改，而不反映对于对象的元数据的更改。ETag 可能是该对象数据的 MD5 摘要，也可能不是。是与不是取决于对象的创建方式和加密方式。有关更多信息，请参阅《Amazon Simple Storage Service API 参考》**中的 [https://docs.amazonaws.cn/AmazonS3/latest/API/API_Object.html](https://docs.amazonaws.cn/AmazonS3/latest/API/API_Object.html)。
   + **校验和算法** – 表示用于创建对象的校验和的算法。有关更多信息，请参阅 [使用支持的校验和算法](checking-object-integrity-upload.md#using-additional-checksums)。
   + **所有对象锁定配置** – 对象的对象锁定状态，包括以下设置：
     + **对象锁定：保留模式** – 应用于对象的保护级别，可以是*监管*或*合规*。
     + **对象锁定：保留截止日期** – 在此日期之前无法删除锁定的对象。
     + **对象锁定：依法保留状态** – 锁定对象的依法保留状态。

     有关 S3 对象锁定的更多信息，请参阅[S3 对象锁定的工作原理](object-lock.md#object-lock-overview)。
   + **生命周期到期日期**：清单报告中对象的生命周期到期时间戳。只有当对象应按照适用的生命周期规则到期时，才会填充此字段。在其他情况下，字段为空。有关更多信息，请参阅 [即将过期的对象](lifecycle-expire-general-considerations.md)。

   有关清单报告内容的更多信息，请参阅 [Amazon S3 清单列表](storage-inventory.md#storage-inventory-contents)。

   有关在清单配置中限制对某些可选元数据字段的访问的更多信息，请参阅[控制 S3 清单报告配置的创建](example-bucket-policies.md#example-bucket-policies-s3-inventory-2)。

1. 选择**创建**。

## 使用 REST API 处理 S3 清单


下面是可用于处理 Amazon S3 清单的 REST 操作。
+  [https://docs.amazonaws.cn/AmazonS3/latest/API/RESTBucketDELETEInventoryConfiguration.html](https://docs.amazonaws.cn/AmazonS3/latest/API/RESTBucketDELETEInventoryConfiguration.html) 
+  [https://docs.amazonaws.cn/AmazonS3/latest/API/RESTBucketGETInventoryConfig.html](https://docs.amazonaws.cn/AmazonS3/latest/API/RESTBucketGETInventoryConfig.html) 
+  [https://docs.amazonaws.cn/AmazonS3/latest/API/RESTBucketListInventoryConfigs.html](https://docs.amazonaws.cn/AmazonS3/latest/API/RESTBucketListInventoryConfigs.html) 
+  [https://docs.amazonaws.cn/AmazonS3/latest/API/RESTBucketPUTInventoryConfig.html](https://docs.amazonaws.cn/AmazonS3/latest/API/RESTBucketPUTInventoryConfig.html) 