

# S3 Vectors 中的数据保护和加密
<a name="s3-vectors-data-encryption"></a>

Amazon S3 Vectors 为向量数据提供 99.999999999%（11 个 9）的耐久性，从而确保可满足向量存储需求的卓越可靠性。这种耐久性由 Amazon S3 久经考验的基础设施提供支持，这一基础设施旨在维护数据完整性和可用性，即使面对硬件故障或其它中断也不例外。

S3 Vectors 中的数据保护包括多层安全控制措施，旨在保护静态和传输中的向量数据。

默认情况下，Amazon S3 Vectors 向量存储桶中的所有新向量都使用具有 Amazon S3 托管式密钥的服务器端加密（SSE-S3）。当您创建使用 SSE-S3 加密的向量存储桶时，对该存储桶的所有后续操作都会自动使用加密。

S3 Vectors 还与 Amazon Key Management Service（KMS）集成以提供灵活的加密密钥管理选项，同时可让您选择客户自主管理型密钥进行权限控制和审计。

在向量存储桶中创建向量索引时，您可以选择覆盖向量存储桶级别的加密设置，并在向量索引级别提供加密配置（SSE-S3 或 KMS）。如果在创建向量索引时未指定特定加密，该索引将从其所属的向量存储桶继承加密配置。

## 为 Amazon S3 向量存储桶和索引设置服务器端加密行为
<a name="s3-vectors-setting-encryption"></a>

S3 Vectors 中的加密配置是在创建向量存储桶时指定的基本安全设置。这种设计可确保从创建的那一刻起，就对存储在存储桶中的所有向量数据进行加密。默认情况下，加密配置将应用于存储桶内的所有向量、向量索引和元数据，同时为向量存储桶中的整个向量数据集提供一致的保护。您还可以选择覆盖向量存储桶级别的加密设置，并在向量索引级别提供专用的加密配置（SSE-S3 或 Amazon KMS）。

**重要**  
创建向量存储桶后，无法更改向量存储桶的加密设置。在存储桶创建过程中，必须仔细考虑加密要求，包括合规性要求、密钥管理偏好以及与现有安全基础设施的集成。

当您在向量存储桶级别设置 SSE-S3 或 SSE-KMS 加密类型时，默认情况下，该设置将应用于存储桶内的所有向量索引和向量。加密配置不仅适用于向量数据本身，还适用于所有关联的元数据。

您还可以选择覆盖向量存储桶级别的加密设置，并在向量索引级别提供专用的加密配置（SSE-S3 或 KMS）。创建向量索引后，无法更改向量索引的加密设置。

### 使用 SSE-S3 加密
<a name="s3-vectors-sse-s3-encryption"></a>

具有 Amazon S3 托管式密钥的服务器端加密（SSE-S3）为向量存储桶提供一种简单有效的加密解决方案，其中 Amazon 管理加密过程的所有方面。这种加密方法使用 `AES-256` 加密，旨在以最小的运营开销提供强大的安全性，同时为组织提供坚实的加密功能，并消除管理加密密钥的复杂性。

使用 SSE-S3，Amazon S3 可以自动处理加密密钥的生成、轮换和管理。SSE-S3 提供强大的安全性，无需额外的配置或持续的管理。加密和解密过程由该服务自动处理，除了标准的 S3 Vectors 定价外，使用 SSE-S3 加密无需支付任何额外费用。

### 使用 SSE-KMS 加密
<a name="s3-vectors-sse-kms-encryption"></a>

具有 Amazon Key Management Service 密钥的服务器端加密（SSE-KMS）可增强对加密密钥的控制，并支持对密钥使用情况进行详细的审计日记记录。这种加密方法非常适合具有严格合规性要求的组织、需要实施自定义密钥轮换策略的组织，或者需要对数据访问具有详细的审计跟踪记录的环境。

SSE-KMS 支持您使用客户自主管理型密钥（CMK）对向量数据进行加密。客户自主管理型密钥提供最高级别的控制，支持您通过 Amazon CloudTrail 定义密钥策略、启用或禁用密钥以及监控密钥使用情况。这种控制级别使得 SSE-KMS 特别适合受监管的行业或具有特定数据治理要求的组织。

将 SSE-KMS 与客户自主管理型密钥结合使用时，您可以完全控制谁可以使用这些密钥来加密和解密数据。可以创建详细的密钥策略，来指定哪些用户、角色或服务可以访问密钥。

#### SSE-KMS 的重要注意事项
<a name="s3-vectors-sse-kms-considerations"></a>
+ **KMS 密钥格式要求：**S3 Vectors 要求您使用完整的 Amazon 资源名称（ARN）格式指定 KMS 密钥。不支持密钥 ID 或密钥别名。
+ **服务主体权限：**当您将客户自主管理型密钥与 S3 Vectors 结合使用时，必须显式向 S3 Vectors 服务主体授予使用 KMS 密钥的权限。这一要求可确保该服务可以代表您加密和解密您的数据。需要访问权限的服务主体为 `indexing.s3vectors.amazonaws.com`。

**示例：S3 Vectors 的 KMS 密钥策略**

要将客户自主管理型 KMS 密钥与 S3 Vectors 结合使用，必须更新密钥策略以包括 S3 Vectors 服务主体的权限。以下是一个全面的密钥策略示例。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowS3VectorsServicePrincipal",
            "Effect": "Allow",
            "Principal": {
                "Service": "indexing.s3vectors.amazonaws.com"
            },
            "Action": "kms:Decrypt",
            "Resource": "*",
            "Condition": {
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:s3vectors:aws-region:123456789012:bucket/*"
                },
                "StringEquals": {
                    "aws:SourceAccount": "123456789012"
                },
                "ForAnyValue:StringEquals": {
                    "kms:EncryptionContextKeys": ["aws:s3vectors:arn", "aws:s3vectors:resource-id"]
                }
            }
        },
        {
            "Sid": "AllowApplicationAccess",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam:123456789012:role/VectorApplicationRole",
                    "arn:aws:iam:123456789012:user/DataScientist"
                ]
            },
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "s3vectors.aws-region.amazonaws.com"
                },
                "ForAnyValue:StringEquals": {
                    "kms:EncryptionContextKeys": ["aws:s3vectors:arn", "aws:s3vectors:resource-id"]
                }
            }
        }
    ]
}
```
+ **所需的 KMS 权限：**
  + S3 Vectors 服务主体权限：
    + `kms:Decrypt`：客户自主管理型密钥的 S3 Vectors 服务主体 (`indexing.s3vectors.amazonaws.com`) 在后台操作中维护和优化索引所需
  + IAM 主体权限：
    + `kms:Decrypt`：所有向量级别的操作（[PutVectors](https://docs.amazonaws.cn/AmazonS3/latest/API/API_S3VectorBuckets_PutVectors.html)、[GetVectors](https://docs.amazonaws.cn/AmazonS3/latest/API/API_S3VectorBuckets_GetVectors.html)、[QueryVectors](https://docs.amazonaws.cn/AmazonS3/latest/API/API_S3VectorBuckets_QueryVectors.html)、[DeleteVectors](https://docs.amazonaws.cn/AmazonS3/latest/API/API_S3VectorBuckets_DeleteVectors.html)、[ListVectors](https://docs.amazonaws.cn/AmazonS3/latest/API/API_S3VectorBuckets_ListVectors.html)）所需
    + `kms:GenerateDataKey`：使用客户自主管理型密钥创建向量存储桶所需
+ **跨账户访问注意事项：**使用 SSE-KMS 实现跨账户访问模式时，必须确保 KMS 密钥策略支持其它账户中的相应主体进行访问。密钥 ARN 格式在跨账户场景中变得尤为重要，因为无论从何种账户上下文中访问密钥，这一格式都能提供对密钥的明确引用。