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

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

Amazon OpenSearch 无服务器中的加密

静态加密

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

加密策略

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

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

加密策略包含以下元素:

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

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

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

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

  • KmsARN:如果您将 AWSOwnedKey 设置为 false,请指定用于加密关联集合的 KMS 密钥的 Amazon 资源名称(ARN)。如果包含此参数,则 OpenSearch Serverless 会忽略该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 Serverless 会为您创建一个名为 a uto -< 集合名称 > 的加密策略并将其附加到集合。该策略最初仅适用于一个集合,但您可以将其修改为包括其他集合。

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

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

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

注意事项

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

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

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

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

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

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

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

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

所需权限

OpenSearch 无服务器的静态加密使用以下 Amazon Identity and Access Management (IAM) 权限。您可以指定 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 Serverless 将获得代表做出选择的委托人使用 KMS 密钥的权限。该委托人(用户或角色)必须拥有 S OpenSearch erverless 所需的 KMS 密钥的权限。您可以在密钥策略IAM policy 中提供这些权限。

OpenSearch Serverless 至少需要对客户托管密钥具有以下权限:

例如:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:CreateGrant" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "aoss.us-east-1.amazonaws.com" }, "Bool": { "kms:GrantIsForAWSResource": "true" } } } ] }

OpenSearch 无服务器创建具有 kms: GenerateDataKey 和 km s: Dec rypt 权限的授权。

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

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

OpenSearch Serverless 需要获得授权才能使用客户托管密钥。

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

OpenSearch Serverless 需要获得授权才能使用您的客户托管密钥进行以下内部操作:

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

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

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

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

OpenSearch 当给定的客户托管密钥与任何安全策略或集合没有关联时,Serverless 会在异步工作流程中停用授权。

创建加密策略(控制台)

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

创建 OpenSearch 无服务器加密策略
  1. 打开亚马逊 OpenSearch 服务控制台,网址为 https://console.aws.amazon.com/aos/home

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

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

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

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

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

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

  7. 选择创建

下一步:创建集合

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

在创建集合的加密步骤中, OpenSearch Serverless 会通知您输入的名称与加密策略中定义的模式相匹配,并自动将相应的 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

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

查看加密策略

在创建集合之前,您可能想预览账户中的现有加密策略,以查看哪个加密策略的资源模式与您的集合名称相匹配。以下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 Serverless 控制台中更新加密策略,请选择加密策略,选择要修改的策略,然后选择编辑。进行更改,然后选择保存

要使用 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 Serverless 控制台中删除策略,请选择该策略并选择删除

你也可以使用以下DeleteSecurityPolicy操作:

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

传输中加密

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