

# S3 Vectors 中的身份和访问权限管理
<a name="s3-vectors-access-management"></a>

S3 Vectors 中的访问权限管理遵循 AWS 安全最佳实践，并提供多层控制措施，以确保只有经过授权的用户和应用程序才能访问向量数据。该服务与 IAM 集成，并同时支持基于身份的策略和基于资源的策略，使您能够灵活地在整个组织中构建和管理权限。

## 对请求进行身份验证和授权
<a name="s3-vectors-authenticating-authorizing"></a>

S3 Vectors 使用 AWS 标准身份验证和授权机制来保护对向量存储桶及其内容的访问权限。对 S3 Vectors 的每个请求都必须使用有效的 AWS 凭证进行身份验证，并且该服务根据基于身份的策略、基于资源的策略和任何适用的服务控制策略的组合来评估权限。

当客户端使用 AWS 凭证（访问密钥、来自 AWS STS 的临时凭证或 IAM 角色）向 S3 Vectors 发出请求时，身份验证过程就开始了。该服务会验证这些凭证，然后根据请求的操作和目标资源，评估与经过身份验证的身份关联的权限。此评估过程会考虑多种策略类型，并应用最低权限原则来确定是应该支持还是拒绝请求。

S3 Vectors 中的授权在多个粒度级别上运行。可以在向量存储桶级别、单个向量索引级别甚至索引中的特定操作上控制访问权限。这种分层权限模型可让您实施符合组织结构和数据治理要求的复杂访问权限控制方案。

## 为向量存储桶定义的资源类型
<a name="s3-vectors-resource-types"></a>

S3 Vectors 定义了可以在 IAM 策略和基于资源的策略中引用的特定资源类型。要创建有效的访问权限控制策略来为正确的用户和应用程序提供适当的访问权限级别，务必了解这些资源类型。

下表描述了 S3 Vectors 中可用的资源类型。


**S3 Vectors 中可用的资源类型**  

| 资源类型 | ARN 格式 | 说明 | 
| --- | --- | --- | 
| VectorBucket | arn:aws:s3vectors:region:123456789012:bucket/bucket-name | 表示向量存储桶并用于存储桶级别的操作，例如创建、删除或配置存储桶 | 
| Index | arn:aws:s3vectors:region:123456789012:bucket/bucket-name/index/index-name | 表示存储桶中的向量索引并用于索引特定的操作，例如查询向量或管理索引内容 | 

## 向量存储桶的策略操作
<a name="s3-vectors-policy-actions"></a>

S3 Vectors 提供了一组全面的策略操作，这些操作与您可以对向量存储桶和索引执行的各种操作相对应。这些操作旨在提供对谁可以执行特定操作的精细控制，使您能够有效地实施最低权限原则。

下表列出了 S3 Vectors 资源的所有可用的策略操作。


**S3 Vectors 资源的策略操作**  

| 资源类型 | API 操作 | 策略操作 | 策略操作的描述 | 访问级别 | 条件键 | 
| --- | --- | --- | --- | --- | --- | 
| 账户 | [ListVectorBuckets](https://docs.aws.amazon.com/AmazonS3/latest/API/API_S3VectorBuckets_ListVectorBuckets.html) | s3vectors:ListVectorBuckets | 授予列出账户和区域中的所有向量存储桶的权限 | 列表 |  | 
| VectorBucket | [CreateVectorBucket](https://docs.aws.amazon.com/AmazonS3/latest/API/API_S3VectorBuckets_CreateVectorBucket.html) | s3vectors:CreateVectorBucket | 授予创建具有指定配置的新向量存储桶的权限 | 写入 | s3vectors:sseType、s3vectors:kmsKeyArn | 
| VectorBucket | [GetVectorBucket](https://docs.aws.amazon.com/AmazonS3/latest/API/API_S3VectorBuckets_GetVectorBucket.html) | s3vectors:GetVectorBucket | 授予检索向量存储桶属性和配置的权限 | 读取 |  | 
| VectorBucket | [DeleteVectorBucket](https://docs.aws.amazon.com/AmazonS3/latest/API/API_S3VectorBuckets_DeleteVectorBucket.html) | s3vectors:DeleteVectorBucket | 授予删除空的向量存储桶的权限 | 写入 |  | 
| VectorBucket | [ListIndexes](https://docs.aws.amazon.com/AmazonS3/latest/API/API_S3VectorBuckets_ListIndexes.html) | s3vectors:ListIndexes | 授予列出向量存储桶中的所有索引的权限 | 列表 |  | 
| VectorBucket | [PutVectorBucketPolicy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_S3VectorBuckets_PutVectorBucketPolicy.html) | s3vectors:PutVectorBucketPolicy | 授予对向量存储桶应用或更新基于资源的策略的权限 | 权限管理 |  | 
| VectorBucket | [GetVectorBucketPolicy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_S3VectorBuckets_GetVectorBucketPolicy.html) | s3vectors:GetVectorBucketPolicy | 授予检索附加到向量存储桶的基于资源的策略的权限 | 读取 |  | 
| VectorBucket | [DeleteVectorBucketPolicy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_S3VectorBuckets_DeleteVectorBucketPolicy.html) | s3vectors:DeleteVectorBucketPolicy | 授予从向量存储桶移除基于资源的策略的权限 | 权限管理 |  | 
| Index | [CreateIndex](https://docs.aws.amazon.com/AmazonS3/latest/API/API_S3VectorBuckets_CreateIndex.html) | s3vectors:CreateIndex | 授予创建具有指定维度和元数据配置的新向量索引的权限 | 写入 |  | 
| Index | [GetIndex](https://docs.aws.amazon.com/AmazonS3/latest/API/API_S3VectorBuckets_GetIndex.html) | s3vectors:GetIndex | 授予检索向量索引属性和配置的权限 | 读取 |  | 
| Index | [DeleteIndex](https://docs.aws.amazon.com/AmazonS3/latest/API/API_S3VectorBuckets_DeleteIndex.html) | s3vectors:DeleteIndex | 授予删除向量索引及其所有内容的权限 | 写入 |  | 
| Index | [QueryVectors](https://docs.aws.amazon.com/AmazonS3/latest/API/API_S3VectorBuckets_QueryVectors.html) | （必需）s3vectors:QueryVectors | 授予对索引中的向量执行相似性查询的权限。  **仅使用 `s3vectors:QueryVectors`**，就可以检索近似最近邻的向量键及其与查询向量的计算距离。仅当未设置任何元数据筛选条件且未请求元数据时（通过将 `returnMetadata` 参数设置为 false 或未指定），此权限才足够。 | 读取 |  | 
|  |  | （有条件需要）：s3vectors:GetVectors | 如果您设置元数据筛选条件，在请求中将 `returnMetadata` 设置为 true，则是必需的。  **同时使用 `s3vectors:QueryVectors` 和 `s3vectors:GetVectors`**，您可以使用元数据条件来筛选结果，并检索向量键及其关联数据、元数据以及与查询向量的计算距离。 | 读取 |  | 
| Index | [PutVectors](https://docs.aws.amazon.com/AmazonS3/latest/API/API_S3VectorBuckets_PutVectors.html) | s3vectors:PutVectors | 授予在索引中添加或更新向量的权限 | 写入 |  | 
| Index | [GetVectors](https://docs.aws.amazon.com/AmazonS3/latest/API/API_S3VectorBuckets_GetVectors.html) | s3vectors:GetVectors | 授予通过向量键检索特定向量及其元数据的权限 | 读取 |  | 
| Index | [ListVectors](https://docs.aws.amazon.com/AmazonS3/latest/API/API_S3VectorBuckets_ListVectors.html) | （必需）s3vectors:ListVectors | 授予列出索引中的向量键的权限。 **仅使用 `s3vectors:ListVectors`**，当 `returnData` 和 `returnMetadata` 参数均为 false 或未指定时，您可以列出向量键。 | 读取 |  | 
|  |  | （有条件需要）：s3vectors:GetVectors | 如果您在请求中将 `returnData` 或 `returnMetadata` 参数设置为 true，则是必需的。  **同时使用 `s3vectors:ListVectors` 和 `s3vectors:GetVectors`**，您可以通过将 `returnData` 和 `returnMetadata` 设置为 true 来检索向量键及其关联的数据和元数据。 | 读取 |  | 
| Index | [DeleteVectors](https://docs.aws.amazon.com/AmazonS3/latest/API/API_S3VectorBuckets_DeleteVectors.html) | s3vectors:DeleteVectors | 授予删除索引中的特定向量的权限 | 写入 |  | 

可以通过多种方式组合这些操作，以创建符合特定访问要求的策略。例如，可以创建包含 `s3vectors:GetVectorBucket`、`s3vectors:ListIndexes`、`s3vectors:QueryVectors` 和 `s3vectors:GetVectors` 操作的只读策略，或者创建包含查询和向量检索权限、但不包含创建或删除索引等管理操作的策略。

## 向量存储桶的条件键
<a name="s3-vectors-condition-keys"></a>


**向量存储桶的条件键**  

|  | 条件键 | 描述 | Type | 
| --- | --- | --- | --- | 
| 1 | s3vectors:sseType | 通过服务器端加密类型来筛选访问权限。有效值：AES256 \$1 aws:kms | 字符串 | 
| 2 | s3vectors:kmsKeyArn | 按用于加密向量存储桶的密钥的 AWS AWS KMS 密钥 ARN 筛选访问权限 | ARN | 

# S3 Vectors 基于身份的策略示例
<a name="s3-vectors-iam-policies"></a>

IAM 基于身份的策略是附加到 IAM 用户、组或角色的 JSON 文档，用于定义他们可以对 S3 Vectors 资源执行的操作。这些策略是在发出请求的身份的上下文中进行评估的，并提供一种集中化的方法来管理整个 AWS 环境中的权限。基于身份的策略为谁拥有哪些权限提供了清晰的审计跟踪记录，并且可以随着访问要求的演变轻松进行修改。

在为 S3 Vectors 设计基于身份的策略时，请考虑将与向量数据进行交互的不同类型的用户和应用程序。常见模式包括需要查询向量的数据科学家、需要加载和管理向量数据的数据工程师、需要完全控制存储桶配置的管理员，以及需要对特定向量索引具有特定读取或写入权限的应用程序。

## 策略示例
<a name="s3-vectors-iam-policies-examples"></a>

### 管理访问策略
<a name="s3-vectors-iam-policies-admin"></a>

该策略提供对 S3 Vectors 资源的完全管理访问权限，适合平台管理员或 DevOps 团队：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowAdministrativeAccess",
            "Effect": "Allow",
            "Action": [
                "s3vectors:CreateVectorBucket",
                "s3vectors:PutVectorBucketPolicy",
                "s3vectors:DeleteVectorBucket",
                "s3vectors:DeleteVectorBucketPolicy",
                "s3vectors:GetVectorBucket",
                "s3vectors:GetVectorBucketPolicy",
                "s3vectors:ListVectorBuckets",
                "s3vectors:CreateIndex",
                "s3vectors:DeleteIndex",
                "s3vectors:GetIndex",
                "s3vectors:ListIndexes",
                "s3vectors:DeleteVectors",
                "s3vectors:GetVectors",
                "s3vectors:ListVectors",
                "s3vectors:PutVectors",
                "s3vectors:QueryVectors"
            ],
            "Resource": "*"
        }
    ]
}
```

### 特定于应用程序的访问策略
<a name="s3-vectors-iam-policies-app"></a>

此策略专为需要对指定的向量索引执行特定操作的应用程序而设计：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowApplicationVectorAccess",
            "Effect": "Allow",
            "Action": [
                "s3vectors:QueryVectors",
                "s3vectors:GetVectors",
                "s3vectors:PutVectors",
                "s3vectors:ListVectors"
            ],
            "Resource": [
                "arn:aws:s3vectors:aws-region:123456789012:bucket/amzn-s3-demo-vector-bucket/index/product-recommendations",
                "arn:aws:s3vectors:aws-region:123456789012:bucket/amzn-s3-demo-vector-bucket/index/content-similarity"
            ]
        },
        {
            "Sid": "AllowGetIndex",
            "Effect": "Allow",
            "Action": "s3vectors:GetIndex",
            "Resource": "arn:aws:s3vectors:aws-region:123456789012:bucket/amzn-s3-demo-vector-bucket/index/*"
        },
        {
            "Sid": "AllowIndexInspection",
            "Effect": "Allow",
            "Action": "s3vectors:ListIndexes",
            "Resource": "arn:aws:s3vectors:aws-region:123456789012:bucket/amzn-s3-demo-vector-bucket"
        }  
    ]
}
```

# S3 Vectors 基于资源的策略示例
<a name="s3-vectors-resource-based-policies"></a>

基于资源的策略附加到某个资源。可以为向量存储桶创建基于资源的策略。S3 Vectors 的基于资源的策略使用标准 AWS 策略格式（即 JSON），您可以将这些策略直接附加到向量存储桶，以控制对存储桶及其内容的访问权限。

与附加到用户、组或角色的基于身份的策略不同，基于资源的策略附加到资源本身（向量存储桶），并可以向其它 AWS 账户中的主体授予权限。这使得它们非常适合需要跨组织边界共享向量数据或根据所访问的特定资源实施精细访问权限控制的场景。

基于资源的策略与基于身份的策略相结合进行评估，有效权限由所有适用策略的并集确定。这意味着，主体执行一项操作所需的权限应同时来自基于身份的策略（附加到其用户/角色）和基于资源的策略（附加到存储桶），除非基于资源的策略显式授予该权限。

## 示例 1：跨账户访问策略
<a name="s3-vectors-resource-based-policies-example1"></a>

此策略演示如何向来自不同 AWS 账户的用户授予特定权限：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CrossAccountBucketAccess",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam:123456789012:role/Admin"
            },
            "Action": [
                "s3vectors:CreateIndex",
                "s3vectors:ListIndexes",
                "s3vectors:QueryVectors",
                "s3vectors:PutVectors",
                "s3vectors:DeleteIndex"
            ],
            "Resource": [
                "arn:aws:s3vectors:aws-region:111122223333:bucket/amzn-s3-demo-vector-bucket/*",
                "arn:aws:s3vectors:aws-region:111122223333:bucket/amzn-s3-demo-vector-bucket"
            ]
        }
    ]
}
```

## 示例 2：拒绝向量索引级别的操作
<a name="s3-vectors-resource-based-policies-example2"></a>

此策略演示如何拒绝 IAM 角色执行特定向量索引级别的操作：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "DenyIndexLevelActions",
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam:123456789012:role/External-Role-Name"
            },
            "Action": [
                "s3vectors:QueryVectors",
                "s3vectors:PutVectors",
                "s3vectors:DeleteIndex",
                "s3vectors:GetVectors",
                "s3vectors:GetIndex",
                "s3vectors:DeleteVectors",
                "s3vectors:CreateIndex",
                "s3vectors:ListVectors"
            ],
            "Resource": "arn:aws:s3vectors:aws-region:111122223333:bucket/amzn-s3-demo-vector-bucket/*"
        }
    ]
}
```

## 示例 3：同时在向量索引级别和存储桶级别拒绝修改操作
<a name="s3-vectors-resource-based-policies-example3"></a>

此策略演示如何通过指定多个资源，来拒绝向量索引级别和存储桶级别操作的修改请求：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "DenyModificationActionsAtBucketandIndexLevels",
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam:123456789012:role/External-Role-Name"
            },
            "Action": [
                "s3vectors:CreateVectorBucket",
                "s3vectors:DeleteVectorBucket",
                "s3vectors:PutVectorBucketPolicy",
                "s3vectors:DeleteVectorBucketPolicy",                
                "s3vectors:CreateIndex",
                "s3vectors:DeleteIndex",
                "s3vectors:PutVectors",
                "s3vectors:DeleteVectors"
            ],
            "Resource": [
                "arn:aws:s3vectors:aws-region:111122223333:bucket/amzn-s3-demo-vector-bucket/*",
                "arn:aws:s3vectors:aws-region:111122223333:bucket/amzn-s3-demo-vector-bucket"
            ]
        }
    ]
}
```