

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 知识库资源的加密
<a name="encryption-kb"></a>

Amazon Bedrock 会加密与知识库相关的资源。默认情况下，Amazon Bedrock 使用自有密钥对这些数据进行加 AWS密。或者，您可以使用客户托管式密钥对模型构件进行加密。

**完全托管的知识库**

支持使用 KMS 密钥进行加密的过程如下：
+ 提取数据来源时的临时数据存储
+ 在存储数据源的同时实现永久数据存储
+ 查询知识库

知识库使用的下列资源也可以使用 KMS 密钥进行加密。如果加密这些资源，则需要添加权限以解密 KMS 密钥。
+ 存储在 Amazon S3 存储桶中的数据来源

**自定义知识库（矢量存储）**

支持使用 KMS 密钥进行加密的过程如下：
+ 提取数据来源时的临时数据存储
+ 如果您让 Amazon Bedrock 设置矢量数据库，则会将信息传递给 OpenSearch 服务部门
+ 查询知识库

知识库使用的下列资源也可以使用 KMS 密钥进行加密。如果加密这些资源，则需要添加权限以解密 KMS 密钥。
+ 存储在 Amazon S3 存储桶中的数据来源
+ Third-party 矢量存储

有关更多信息 AWS KMS keys，请参阅《*AWS Key Management Service 开发人员指南》*中的[客户托管密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。

**注意**  
Amazon Bedrock 知识库使用 TLS 加密与第三方数据来源连接器和向量存储（提供商允许并支持传输中的 TLS 加密）进行通信。

**Topics**
+ [加密完全托管的知识库中的数据存储](#encryption-kb-managed-ingestion)
+ [加密知识库检索](#encryption-kb-runtime)
+ [加密数据提取期间的临时数据存储](#encryption-kb-ingestion)
+ [对传递给 Amazon OpenSearch 服务的信息进行加密](#encryption-kb-oss)
+ [传递到 Amazon S3 Vectors 的信息的加密](#encryption-kb-s3-vector)
+ [解密你的权限 AWS KMS Amazon S3 中数据源的密钥](#encryption-kb-ds)
+ [解密的权限 AWS Secrets Manager 包含你知识库的矢量库的秘密](#encryption-kb-3p)
+ [基岩数据自动化 (BDA) 的权限 AWS KMS 加密](#encryption-kb-bda)

## 加密完全托管的知识库中的数据存储
<a name="encryption-kb-managed-ingestion"></a>

创建完全托管的知识库时，您可以使用自定义 KMS 密钥对数据进行加密。KMS 密钥是在知识库创建过程中指定的，既适用于摄取期间的临时数据存储，也适用于用于索引的永久数据存储。

Amazon Bedrock 使用您在创建知识库时指定的单个 KMS 密钥来加密知识库中的所有数据。这包括采集数据源时的瞬态数据，以及存储用于索引和检索的永久数据。

当您使用客户托管密钥创建完全托管的知识库时，Amazon Bedrock 会验证它是否可以使用该密钥，然后对该密钥创建授权。Amazon Bedrock 在提取、索引和检索期间使用此项拨款来加密和解密您的数据，并在您删除知识库时停用该补助金。

您在用于创建知识库的 IAM 身份的 AWS KMS 密钥策略中提供这些权限，如以下示例所示。将示例值替换为您自己的 AWS 区域、账户 ID 以及创建知识库的 IAM 角色或用户。与知识库关联的 IAM 服务角色（Amazon Bedrock 用来读取您的数据源的角色）不需要任何对 KMS 密钥的权限。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/{{role-name}}"
            },
            "Action": [
                "kms:CreateGrant"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "bedrock.{{region}}.amazonaws.com"
                },
                "ForAllValues:StringEquals": {
                    "kms:GrantOperations": [
                        "CreateGrant",
                        "GenerateDataKey",
                        "GenerateDataKeyWithoutPlaintext",
                        "DescribeKey",
                        "Encrypt",
                        "Decrypt"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/{{role-name}}"
            },
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "bedrock.{{region}}.amazonaws.com"
                }
            }
        }
    ]
}
```

### 监控您的加密密钥以获取完全托管的知识库
<a name="encryption-kb-managed-monitor"></a>

当您在知识库中使用 AWS KMS 客户托管密钥时，您可以使用[AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)或 [Amazon CloudWatch Logs 来跟踪 Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) Bedrock 向其 AWS KMS发送的请求。

以下是一个示例 AWS CloudTrail 事件，该事件显示了在您创建完全托管的知识库时 Amazon Bedrock 在您的 AWS KMS 密钥上创建的资助：

```
{
    "eventVersion": "1.09",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAIGDTESTANDEXAMPLE:SampleUser01",
        "arn": "arn:aws:sts::111122223333:assumed-role/SampleRole/SampleUser01",
        "accountId": "111122223333",
        "accessKeyId": "EXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAIGDTESTANDEXAMPLE",
                "arn": "arn:aws:iam::111122223333:role/SampleRole",
                "accountId": "111122223333",
                "userName": "SampleRole"
            },
            "attributes": {
                "creationDate": "2024-05-07T21:46:28Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "bedrock.amazonaws.com"
    },
    "eventTime": "2024-05-07T21:49:44Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "CreateGrant",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "bedrock.amazonaws.com",
    "userAgent": "bedrock.amazonaws.com",
    "requestParameters": {
        "granteePrincipal": "bedrock.amazonaws.com",
        "retiringPrincipal": "bedrock.amazonaws.com",
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE",
        "operations": [
            "Decrypt",
            "GenerateDataKey"
        ]
    },
    "responseElements": {
        "grantId": "0ab0ac0d0b000f00ea00cc0a0e00fc00bce000c000f0000000c0bc0a0000aaafSAMPLE",
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
    },
    "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "readOnly": false,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

## 加密知识库检索
<a name="encryption-kb-runtime"></a>

您可以使用 KMS 密钥加密在查询知识库时生成响应的会话。为此，请在发出请求时在`kmsKeyArn`字段中包含 KMS 密钥的 ARN。[RetrieveAndGenerate](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html)附上以下策略，将示例值替换为您自己的 AWS 区域、账户 ID 和 AWS KMS 密钥 ID，以允许 Amazon Bedrock 加密会话上下文。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "bedrock.amazonaws.com"
            },
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:{{us-east-1}}:{{123456789012}}:key/{{key-id}}"
        }
    ]
}
```

------

## 加密数据提取期间的临时数据存储
<a name="encryption-kb-ingestion"></a>

在为自定义知识库设置数据摄取任务时，您可以使用自定义 KMS 密钥对任务进行加密。

要允许在摄取数据源的过程中为临时数据存储创建 AWS KMS 密钥，请将以下策略附加到您的 Amazon Bedrock 服务角色。将示例值替换为您自己的 AWS 区域、账户 ID 和 AWS KMS 密钥 ID。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:{{us-east-1}}:{{123456789012}}:key/{{key-id}}"
            ]
        }
    ]
}
```

------

## 对传递给 Amazon OpenSearch 服务的信息进行加密
<a name="encryption-kb-oss"></a>

如果您选择让 Amazon Bedrock 在亚马逊 OpenSearch 服务中为您的知识库创建矢量存储，Amazon Bedrock 可以将您选择的 KMS 密钥传递给亚马逊 OpenSearch 服务进行加密。要了解有关亚马逊 OpenSearch 服务加密的更多信息，请参阅[亚马逊 OpenSearch 服务中的加密](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-encryption.html)。

## 传递到 Amazon S3 Vectors 的信息的加密
<a name="encryption-kb-s3-vector"></a>

如果您选择让 Amazon Bedrock 在 Amazon S3 Vectors 中为知识库创建 S3 向量存储桶和向量索引，Amazon Bedrock 可以将您选择的 KMS 密钥传递到 Amazon S3 Vectors 以进行加密。要了解有关 Amazon S3 Vectors 中的加密的更多信息，请参阅[使用 Amazon S3 Vectors 进行加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-vectors-bucket-encryption.html)。

## 解密你的权限 AWS KMS Amazon S3 中数据源的密钥
<a name="encryption-kb-ds"></a>

您将知识库的数据来源存储在 Amazon S3 存储桶中。要对这些静态文档进行加密，可以使用 Amazon S3 SSE-S3 服务器端加密选项。通过此选项，将使用由 Amazon S3 服务管理的服务密钥为对象加密。

有关更多信息，请参阅《亚马逊*简单存储服务用户指南》*中的 “[使用带有亚马逊 S3-managed 加密密钥的服务器端加密保护数据 (SSE-S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html)。

如果您使用自定义 AWS KMS 密钥加密了 Amazon S3 中的数据源，请将以下策略附加到您的 Amazon Bedrock 服务角色，以允许 Amazon Bedrock 解密您的密钥。将示例值替换为您自己的 AWS 区域、账户 ID 和 AWS KMS 密钥 ID。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "KMS:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:{{us-east-1}}:{{123456789012}}:key/{{key-id}}"
            ],
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": [
                        "s3.us-east-1.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

## 解密的权限 AWS Secrets Manager 包含你知识库的矢量库的秘密
<a name="encryption-kb-3p"></a>

如果包含知识库的矢量存储配置了 AWS Secrets Manager 密钥，则可以按照中的密钥加密[和解密中的步骤使用自定义密 AWS KMS 钥对密钥进行加密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/security-encryption.html)。 AWS Secrets Manager

如果您这样做，请将以下策略附加到 Amazon Bedrock 服务角色，以允许它将密钥解密。将示例值替换为您自己的 AWS 区域、账户 ID 和 AWS KMS 密钥 ID。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:{{us-east-1}}:{{123456789012}}:key/{{key-id}}"
            ]
        }
    ]
}
```

------

## 基岩数据自动化 (BDA) 的权限 AWS KMS 加密
<a name="encryption-kb-bda"></a>

使用 BDA 使用客户管理的 AWS KMS 密钥处理多模式内容时，除了标准权限之外，还需要其他权限。 AWS KMS 

将以下策略附加到您的 Amazon Bedrock 服务角色，以允许 BDA 处理加密的多媒体文件。将示例值替换为您自己的 AWS 区域、账户 ID 和 AWS KMS 密钥 ID。

```
{
    "Sid": "KmsPermissionStatementForBDA",
    "Effect": "Allow",
    "Action": [
        "kms:GenerateDataKey",
        "kms:Decrypt",
        "kms:DescribeKey",
        "kms:CreateGrant"
    ],
    "Resource": "arn:aws:kms:{{region}}:{{account-id}}:key/{{key-id}}",
    "Condition": {
        "StringEquals": {
            "aws:ResourceAccount": "{{account-id}}",
            "kms:ViaService": "bedrock.{{region}}.amazonaws.com"
        }
    }
}
```

 BDA-specific 权限包括`kms:DescribeKey`和 BDA 处理加密音频、视频和图像文件所需的`kms:CreateGrant`操作。