

# 启用或禁用注释表
<a name="metadata-tables-enable-disable-annotation-tables"></a>

默认情况下，元数据表配置包含一个*日记表*，该表记录存储桶中的对象发生的事件。每个元数据表配置都需要日记表。

或者，可以将*注释表*添加到元数据表配置中。注释表会跟踪存储桶中对象的所有注释，以便您可以大规模查询注释数据。

注释表包含存储桶中所有对象的最新注释。可以使用此表，通过根据对象的注释来识别对象，从而简化和加快业务工作流程和大数据作业。例如，可以查询注释表来执行以下操作：
+ 查找具有特定注释键或值的所有对象。
+ 在存储桶中的对象之间创建注释键的分布。
+ 查找具有由特定主体应用的注释的所有对象。

如果您选择为元数据表配置启用注释表，则该表将经历一个称为*回填*的过程，在此过程中，Amazon S3 扫描通用存储桶，以检索和填充存储桶中存在的所有对象的注释。根据存储桶中的对象数量，此过程可能需要若干分钟到几小时。完成回填过程后，注释表的状态将从**正在回填**更改为**活跃**。完成回填后，对于对象的更新通常会在一小时内反映在注释表中。

**注意**  
您需要为回填注释表付费。有关更多信息，请参阅 [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)。
无法暂停对注释表的更新，然后继续更新。但是，可以禁用注释表配置。禁用注释表不会将其删除。将为记录保留注释表，直到您决定将其删除。  
如果已禁用注释表，之后想重新启用它，则必须先从 AWS 托管式表存储桶中删除旧的注释表。当重新启用注释表配置时，Amazon S3 会创建一个新的注释表，并且您需要再次支付回填新注释表的费用。

可以使用 Amazon S3 控制台、AWS Command Line Interface（AWS CLI）、AWS SDK 或 Amazon S3 REST API 来启用或禁用注释表。

**先决条件**  
如果已禁用注释表，现在想重新启用它，则必须先从 AWS 托管式表存储桶中手动删除旧的注释表。否则，由于表存储桶中已存在注释表，因此重新启用注释表将失败。要删除注释表，请参阅[删除元数据表](metadata-tables-delete-table.md#delete-metadata-table-procedure)。

当重新启用注释表配置时，Amazon S3 会创建一个新的注释表，并且您需要再次支付回填新注释表的费用。

## 注释表 IAM 角色
<a name="annotation-table-iam-role-section"></a>

注释表需要一个 IAM 角色，该角色授予 Amazon S3 元数据从您的存储桶中读取注释的权限。创建此角色时，请使用以下信任和权限策略。

**信任策略**  
以下信任策略将 Amazon S3 元数据标识为可以代入该角色的服务主体。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "metadata.s3.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "{{123456789012}}"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:s3:::{{amzn-s3-demo-bucket}}"
                }
            }
        }
    ]
}
```

**权限策略**  
以下权限策略向 IAM 角色授予读取注释所需的最低权限。

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PermissionForGetAnnotation",
      "Effect": "Allow",
      "Action": [
        "s3:GetObjectAnnotation",
        "s3:GetObjectVersionAnnotation"
      ],
      "Resource": ["arn:aws:s3:::{{amzn-s3-demo-bucket}}/*"]
    },
    {
      "Sid": "PermissionsForListBucket",
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:ListBucketVersions"
      ],
      "Resource": ["arn:aws:s3:::{{amzn-s3-demo-bucket}}"]
    },
    {
      "Sid": "PermissionsForDecryptAnnotation",
      "Effect": "Allow",
      "Action": ["kms:Decrypt"],
      "Resource": ["*"]
    }
  ]
}
```

如果您的对象使用 SSE-KMS 加密，则 `kms:Decrypt` 权限涵盖用于加密对象的 AWS KMS 密钥的解密。您还需要 `iam:PassRole` 权限才能将角色分配给注释表配置。

## 启用或禁用注释表
<a name="metadata-tables-enable-disable-annotation-tables-procedure"></a>

### 使用 S3 控制台
<a name="metadata-tables-enable-disable-annotation-tables-console"></a>

**启用或禁用注释表**

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

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

1. 选择通用存储桶，该存储桶具有要为其启用或禁用注释表的元数据表配置。

1. 在存储桶的详细信息页面上，选择**元数据**选项卡。

1. 在**元数据**选项卡上，选择**编辑**，然后选择**编辑注释表配置**。

1. 在**编辑注释表配置**页面上，在**注释表**下方选择**已启用**或**已禁用**。
**注意**  
在选择**已启用**之前，请确保您已查看并符合[先决条件](#annotation-table-config-prereqs)。
   + 如果您选择了**已启用**，请在 **IAM 角色**下选择以下 IAM 角色选择方法之一：
     + **创建新的 IAM 角色**：Amazon S3 将创建一个新的 IAM 角色，该角色具有注释表所需的权限。
     + **从现有 IAM 角色中选择**：从 **IAM 角色**下拉列表中选择一个现有 IAM 角色。该角色必须具有所需的权限，才能读取存储桶中的注释。
     + **输入 IAM 角色 ARN**：输入具有所需权限的现有 IAM 角色的 ARN。

     有关注释表 IAM 角色所需权限的更多信息，请参阅[注释表 IAM 角色](#annotation-table-iam-role-section)。

     还可以选择是否通过使用 AWS Key Management Service（AWS KMS）密钥的服务器端加密（SSE-KMS）来对表进行加密。默认情况下，注释表通过使用 Amazon S3 托管式密钥的服务器端加密（SSE-S3）来进行加密。

     如果您选择使用 SSE-KMS，则必须提供与通用存储桶位于同一区域的客户自主管理型 KMS 密钥。
**重要**  
只能在创建表的过程中为元数据表设置加密类型。创建 AWS 托管式表后，无法更改其加密设置。
     + 要使用 SSE-S3（默认）加密注释表，请选择**不指定加密类型**。
     + 要使用 SSE-KMS 加密注释表，请选择**指定加密类型**。在**加密类型**下，选择**使用 AWS Key Management Service（AWS KMS）密钥的服务器端加密（SSE-KMS）**。在 **AWS KMS 密钥**下，从现有 KMS 密钥中进行选择，或者输入 KMS 密钥 ARN。如果您还没有 KMS 密钥，请选择**输入 KMS 密钥 ARN**，然后选择**创建 KMS 密钥**。
   + 如果选择了**已禁用**，则在**禁用注释表后，该表将不再更新，也无法继续更新**下，选中该复选框。

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

### 使用 AWS CLI
<a name="metadata-tables-enable-disable-annotation-tables-cli"></a>

要运行以下命令，您必须安装并配置 AWS CLI。如果未安装 AWS CLI，请参阅《AWS Command Line Interface 用户指南》**中的[安装或更新最新版本的 AWS CLI](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html)。

或者，可以从控制台中使用 AWS CloudShell 运行 AWS CLI 命令。AWS CloudShell 是一个基于浏览器、预先经过身份验证的 Shell，您可以直接从 AWS 管理控制台中启动它。有关更多信息，请参阅《AWS CloudShell 用户指南》**中的 [What is CloudShell?](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html) 和 [Getting started with AWS CloudShell](https://docs.aws.amazon.com//cloudshell/latest/userguide/getting-started.html)。

**使用 AWS CLI 启用或禁用注释表**

要使用以下示例命令，请将 `{{user input placeholders}}` 替换为您自己的信息。
**注意**  
在启用注释配置之前，请确保您已查看并符合[先决条件](#annotation-table-config-prereqs)。

1. 创建包含注释表配置的 JSON 文件并将其保存（例如 `annotation-config.json`）。以下是一个用于启用新注释表的示例配置。

   如果要启用注释表，则可以选择指定加密配置。默认情况下，元数据表通过使用 Amazon S3 托管式密钥的服务器端加密（SSE-S3）进行加密，可以通过将 `SseAlgorithm` 设置为 `AES256` 来指定此加密方式。

   要通过使用 AWS Key Management Service（AWS KMS）密钥的服务器端加密（SSE-KMS）来加密注释表，请将 `SseAlgorithm` 设置为 `aws:kms`。还必须将 `KmsKeyArn` 设置为通用存储桶所在区域中客户自主管理型 KMS 密钥的 ARN。

   ```
   {
     "ConfigurationState": "ENABLED",
     "Role": "arn:aws:iam::{{account-id}}:role/{{annotation-table-role}}",
     "EncryptionConfiguration": {
       "SseAlgorithm": "aws:kms",
       "KmsKeyArn": "arn:aws:kms:{{us-east-2}}:{{account-id}}:key/{{key-id}}"
     }
   }
   ```

   首次启用注释表或更改 IAM 角色时，`Role` 字段为必填字段。该角色必须向 Amazon S3 元数据授予从您的存储桶中读取注释的权限。有关更多信息，请参阅[注释表 IAM 角色](#annotation-table-iam-role-section)。

   如果要禁用现有注释表，请使用以下配置：

   ```
   {
     "ConfigurationState": "DISABLED"  }
   ```

1. 使用以下命令更新通用存储桶（例如 `{{amzn-s3-demo-bucket}}`）的注释表配置：

   ```
   aws s3api update-bucket-metadata-annotation-table-configuration \
   --bucket {{amzn-s3-demo-bucket}} \
   --annotation-table-configuration file://./{{annotation-config}}.json \
   --region {{us-east-2}}
   ```

### 使用 REST API
<a name="metadata-tables-enable-disable-annotation-tables-rest-api"></a>

可以发送 REST 请求来启用或禁用注释表。有关更多信息，请参阅 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UpdateBucketMetadataAnnotationTableConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UpdateBucketMetadataAnnotationTableConfiguration.html)。

### 使用 AWS SDK
<a name="metadata-tables-enable-disable-annotation-tables-sdk"></a>

在 Amazon S3 中可以使用 AWS SDK 来启用或禁用注释表。有关信息，请参阅 [list of supported SDKs](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UpdateBucketMetadataAnnotationTableConfiguration.html#API_UpdateBucketMetadataAnnotationTableConfiguration_SeeAlso)。