Amazon OpenSearch 无服务器中的加密 - 亚马逊 OpenSearch 服务
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Amazon OpenSearch 无服务器中的加密

静态加密

您创建的 Amazon OpenAsearch 无服务器集合均受到静态数据加密,这是一种有助于防止他人未经授权访问您的数据的安全功能。您创建的每个 Amazon OpenSearch 无服务器集合均受静态数据加密的保护,它是一项安全功能,有助于防止未经授权访问您的数据。静态加密使用(Amazon Key Management ServiceAmazon KMS)来存储和管理您的加密密钥。它使用具有 256 位密钥(AES-256)的高级加密标准算法执行加密。

加密策略

借助加密策略,您可以通过自动将加密密钥分配给与某个具体名称或模式相匹配的新建集合来大规模管理多个集合。

在创建加密策略时,您可以指定前缀(它是基于通配符的匹配规则,如 MyCollection*),也可以输入一个集合名称。然后,当您创建与该名称或前缀模式相匹配的集合时,会将该策略和相应的 KMS 密钥自动分配给该集合。

加密策略包含以下元素:

  • Rules:一条或多条集合匹配规则,每条规则都包含以下子元素:

    • ResourceType:目前唯一选项为“collection”(集合)。加密策略仅适用于集合资源。

    • Resource:策略将适用于的一个或多个集合名称或模式,格式为 collection/<collection name|pattern>

  • AWSOwnedKey:是否使用 Amazon 拥有的密钥。

  • KmsARN:如果您将 AWSOwnedKey 设置为 false,请指定用于加密关联集合的 KMS 密钥的 Amazon 资源名称(ARN)。如果您包括此参数,则 OpenSearch 无服务器将忽略 AWSOwnedKey 参数。

以下示例策略会将客户托管的密钥分配给名为 autopartsinventory 的任何未来集合,以及以“sales”(销售)一词开头的集合:

{ "Rules":[ { "ResourceType":"collection", "Resource":[ "collection/autopartsinventory", "collection/sales*" ] } ], "AWSOwnedKey":false, "KmsARN":"arn:aws:encryption:us-east-1:123456789012:key/93fd6da4-a317-4c17-bfe9-382b5d988b36" }

即使策略与集合名称相匹配,如果资源模式包含通配符 (*),您也可以在集合创建期间选择覆盖此自动分配。如果您选择覆盖自动密钥分配,OpenSearch 无服务器将为您创建一个名为 auto-<collection-name> 的加密策略,并将其附加到集合。该策略最初仅适用于一个集合,但您可以将其修改为包括其他集合。

如果您修改策略规则以不再与某个集合相匹配,则不会从该集合取消分配关联的 KMS 密钥。该集合仍将使用其初始加密密钥进行加密。如果您要更改某个集合的加密密钥,则必须重新创建该集合。

如果来自多个策略的规则与某个集合相匹配,则将使用更具体的规则。例如,如果一个策略包含 collection/log* 的规则,而另一个策略包含 collection/logSpecial 的规则,则使用第二个策略的加密密钥,因为它更具体。

如果名称或前缀已存在于某个策略中,则您不能在其他策略中使用该名称或前缀。如果您尝试在不同加密策略中配置相同资源模式,则 OpenSearch 无服务器将显示错误。

注意事项

在为集合配置加密时,请考虑以下事项:

  • 所有无服务器集合都需要静态加密。

  • 您可以选择使用客户托管的密钥或 Amazon 拥有的密钥。如果您选择客户托管的密钥,建议您启用 automatic key rotation(自动密钥轮换)。

  • 在创建集合后,您将无法更改该集合的加密密钥。在首次设置集合时,请仔细选择要使用哪个 Amazon KMS。

  • 一个集合只能匹配一个加密策略。

  • 具有唯一 KMS 密钥的集合将无法与其他集合共享 OpenSearch 计算单位(OCU)。每个具有唯一密钥的集合都需要其自己的 4 个 OCU。

  • 如果您更新加密策略中的 KMS 密钥,更改不会影响与已分配的 KMS 密钥相匹配的现有集合。

  • OpenSearch 无服务器不会显式检查用户针对客户托管的密钥的权限。如果用户有权通过数据访问策略访问集合,则他们将能够摄取和查询使用关联密钥加密的数据。

所需权限

适用于 OpenSearch 无服务器的静态加密使用以下(Amazon Identity and Access ManagementIAM)权限。您可以指定 IAM 条件,以将用户限制到特定集合。

  • aoss:CreateSecurityPolicy:创建加密策略。

  • aoss:ListSecurityPolicies:列出所有加密策略及其附加到的集合。

  • aoss:GetSecurityPolicy:查看某个具体加密策略的详细信息。

  • aoss:UpdateSecurityPolicy:修改加密策略。

  • aoss:DeleteSecurityPolicy:删除加密策略。

以下基于身份的示例访问策略为用户提供了使用资源模式 collection/application-logs 管理加密策略所需的最低权限。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "aoss:CreateSecurityPolicy", "aoss:UpdateSecurityPolicy", "aoss:DeleteSecurityPolicy", "aoss:GetSecurityPolicy" ], "Resource":"*", "Condition":{ "StringEquals":{ "aoss:collection":"application-logs" } } }, { "Effect":"Allow", "Action":[ "aoss:ListSecurityPolicies" ], "Resource":"*" } ] }

客户托管密钥的密钥策略

如果您选择客户托管的密钥来保护集合,则 OpenSearch 无服务器将获得代表做出选择的主体使用 KMS 密钥的权限。该主体(用户或角色)必须拥有针对 OpenSearch 无服务器所需的 KMS 密钥的权限。您可以在密钥策略IAM policy 中提供这些权限。

OpenSearch 无服务器至少需要针对客户托管的密钥拥有以下权限:

例如:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:ListKeys" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:CreateGrant" ], "Resource": "{kms-key-arn}" } ] }

OpenSearch 无服务器将创建包含 kms:GenerateDataKeykms:Decrypt 权限的授权。

如果您希望保持密钥专供 OpenSearch 无服务器使用,可将 kms:ViaService 条件添加到该密钥策略:

"Condition": { "StringEquals": { "kms:ViaService": "aoss.us-east-1.amazonaws.com" }, "Bool": { "kms:GrantIsForAWSResource": "true" } }

有关更多信息,请参阅 Amazon Key Management Service 开发人员指南中的在 Amazon KMS 中使用密钥策略

OpenSearch 无服务器如何使用 Amazon KMS 中的授权

OpenSearch 无服务器需要授权才能使用客户托管的密钥。

当您使用新密钥在账户中创建加密策略时,OpenSearch 无服务器将通过向 Amazon KMS 发送 CreateGrant 请求来代表您创建授权。Amazon KMS 中的授权用于授予 OpenSearch 无服务器访问客户账户中的 KMS 密钥的权限。

OpenSearch 无服务器需要授权,才能将客户托管的密钥用于以下内部操作:

  • DescribeKey 请求发送到 Amazon KMS,以验证所提供的对称客户托管密钥 ID 是否有效。

  • GenerateDataKey 请求发送到 KMS 密钥,以创建用于加密对象的数据密钥。

  • Decrypt 请求发送到 Amazon KMS,以解密加密的数据密钥,以使它们能够用于加密您的数据。

您可以随时撤消针对授权的访问权限,也可以移除服务访问客户托管密钥的权限。如果您这样做,OpenSearch 无服务器将无法访问由客户托管的密钥加密的任何数据,这会影响依赖于该数据的所有操作,从而导致异步工作流中出现 AccessDeniedException 错误和故障。

当给定的客户托管密钥未与任何安全策略或集合关联时,OpenSearch 无服务器将在异步工作流中停用授权。

创建加密策略(控制台)

在加密策略中,您可以指定 KMS 密钥和一系列将应用该策略的集合模式。在创建集合时,将为与该策略中定义的模式之一相匹配的任何新集合分配相应的 KMS 密钥。建议您在开始创建集合之前,先创建加密策略。

创建 OpenSearch 无服务器加密策略
  1. https://console.aws.amazon.com/aos/home 打开 Amazon OpenSearch Service 控制台。

  2. 在左侧导航面板上,展开 Serverless(无服务器),然后选择 Encryption policies(加密策略)。

  3. 选择 Create encryption policy(创建加密策略)。

  4. 为策略提供名称和描述。

  5. Resources(资源)下,为此加密策略输入一个或多个资源模式。将为当前 Amazon Web Services 账户 和区域中与其中某一模式相匹配的任何新建集合自动分配此策略。例如,如果您输入(ApplicationLogs不带通配符),然后使用该名称创建集合,则该策略和相应的 KMS 密钥将分配给该集合。

    您还可以提供前缀,如 Logs*,它会将该策略分配给名称以 Logs 开头的任何新集合。通过使用通配符,您可以大规模管理多个集合的加密设置。

  6. Encryption(加密)下,选择要使用的 KMS 密钥。

  7. 选择创建

下一步:创建集合

在配置一个或多个加密策略后,您可以开始创建与这些策略中定义的规则相匹配的集合。有关说明,请参阅 创建集合

在创建集合的 Encryptions(加密)步骤中,OpenSearch 无服务器通知您输入的名称与加密策略中定义的模式相匹配,并自动为集合分配相应的 KMS 密钥。如果资源模式包含通配符 (*),则您可以选择覆盖匹配,然后选择您自己的密钥。

创建加密策略(Amazon CLI)

要使用 OpenSearch 无服务器 API 操作创建加密策略,您需要以 JSON 格式指定资源模式和加密密钥。CreateSecurityPolicy 请求即可接受内联策略,也可接受 .json 文件。

加密策略采用以下格式。此示例 my-policy.json 文件将与名为 autopartsinventory 的任何未来集合以及名称以 sales 开头的任何集合相匹配。

{ "Rules":[ { "ResourceType":"collection", "Resource":[ "collection/autopartsinventory", "collection/sales*" ] } ], "AWSOwnedKey":false, "KmsARN":"arn:aws:encryption:us-east-1:123456789012:key/93fd6da4-a317-4c17-bfe9-382b5d988b36" }

要使用服务拥有的密钥,请将 AWSOwnedKey 设置为 true

{ "Rules":[ { "ResourceType":"collection", "Resource":[ "collection/autopartsinventory", "collection/sales*" ] } ], "AWSOwnedKey":true }

以下请求将创建加密策略:

aws opensearchserverless create-security-policy \ --name sales-inventory \ --type encryption \ --policy file://my-policy.json

然后,使用 CreateCollection API 操作创建一个或多个与其中某一资源模式相匹配的集合。

查看加密策略

在创建集合之前,您可能想预览账户中的现有加密策略,以查看哪个加密策略的资源模式与您的集合名称相匹配。以下 ListSecurityPolicies 请求将列出您账户中的所有加密策略:

aws opensearchserverless list-security-policies --type encryption

该请求将返回有关所有已配置的加密策略的信息。使用 policy 元素的内容查看策略中定义的模式规则:

{ "securityPolicyDetails": [ { "createdDate": 1663693217826, "description": "Sample encryption policy", "lastModifiedDate": 1663693217826, "name": "my-policy", "policy": "{\"Rules\":[{\"ResourceType\":\"collection\",\"Resource\":[\"collection/autopartsinventory\",\"collection/sales*\"]}],\"AWSOwnedKey\":true}", "policyVersion": "MTY2MzY5MzIxNzgyNl8x", "type": "encryption" } ] }

要查看有关某个具体策略的详细信息,包括 KMS 密钥,请使用 GetSecurityPolicy 命令。

更新加密策略

如果您更新加密策略中的 KMS 密钥,则更改将仅适用于与已配置的名称或模式相匹配的新建集合。它不会影响已经分配 KMS 密钥的现有集合。

这同样适用于策略匹配规则。如果您添加、修改或删除规则,则更改将仅适用于新建集合。如果您修改策略的规则,使其不再与集合的名称相匹配,则现有集合不会失去已分配它们的 KMS 密钥。

要在 OpenSearch 无服务器控制台中更新加密策略,请选择 Encryption policies(加密策略),选择要修改的策略,然后选择 Edit(编辑)。进行更改,然后选择 保存

要使用 OpenSearch 无服务器 API 更新加密策略,请使用 UpdateSecurityPolicy 操作。以下请求将使用新策略 JSON 文档更新加密策略:

aws opensearchserverless update-security-policy \ --name sales-inventory \ --type encryption \ --policy-version 2 \ --policy file://my-new-policy.json

删除加密策略

在删除加密策略时,当前使用该策略中定义的 KMS 密钥的任何集合都不受影响。要在 OpenSearch 无服务器控制台中删除策略,请选择该策略,然后选择 删除

您还可以使用 DeleteSecurityPolicy 操作:

aws opensearchserverless delete-security-policy --name my-policy --type encryption

传输中加密

在 OpenSearch 无服务器中,集合中的所有路径在传输流程中都使用传输层安全 1.2 (TLS) 和行业标准的 AES-256 密码进行加密。也可以通过 TLS 1.2 访问 Opensearch 的所有 API 和控制面板。TLS 是一组行业标准的加密协议,用于加密通过网络交换的信息。