Amazon OpenSearch Service 自定义程序包 Amazon KMS 集成
默认情况下,Amazon OpenSearch Service 自定义程序包提供加密功能,以使用 Amazon 托管式密钥 保护处于静态状态的 ZIP-PLUGIN 程序包。
-
Amazon 拥有的密钥:默认情况下,Amazon OpenSearch Service 自定义程序包使用这些密钥以自动加密
ZIP-PLUGIN程序包。您无法查看、管理或使用 Amazon 拥有的密钥,也无法审核其使用情况。但是,无需执行任何操作或更改任何计划即可保护用于加密数据的密钥。有关更多信息,请参阅 Amazon Key Management Service 开发人员指南中的 Amazon 拥有的密钥。 -
客户管理型密钥:创建
ZIP-PLUGIN自定义程序包时,选择客户托管密钥,即可在现有 Amazon 拥有的密钥 密钥上添加第二层加密。Amazon OpenSearch Service 自定义程序包支持使用您创建、拥有和管理的对称客户托管密钥,在现有的 Amazon 自带加密的基础上添加第二层加密。由于您可以完全控制这层加密,因此可执行以下任务:
-
建立和维护密钥政策
-
创建和维护 Amazon Identity and Access Management(IAM)策略和授权
-
启用和禁用密钥政策
-
轮换密钥加密材料
-
添加标签
-
创建密钥别名
-
计划密钥删除
-
有关更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的客户托管密钥。
注意
Amazon OpenSearch Service 自定义程序包会自动使用 Amazon 拥有的密钥 启用静态加密,且不收取任何费用。但是,当使用客户托管密钥时,将收取 Amazon KMS 费用。有关定价的更多信息,请参阅 Amazon Key Management Service 定价
Amazon OpenSearch Service 自定义程序包服务如何使用 Amazon KMS 中的授权
OpenSearch Service 自定义程序包需要授权,才能使用客户托管密钥。
当使用客户托管密钥创建加密的 ZIP-PLUGIN 程序包时,Amazon OpenSearch Service 自定义程序包服务通过向 Amazon KMS 发送 CreateGrant 请求以代表您创建授权。Amazon KMS 中的授权让 OpenSearch Service 能够访问您账户中的 Amazon KMS 密钥。OpenSearch Service 自定义程序包创建的授权策略包含一项约束条件:仅当请求包含带有自定义程序包 ID 的加密上下文时,才允许执行操作。
Amazon OpenSearch Service 自定义程序包需要授权,才能将客户托管密钥用于以下内部操作:
| 操作 | 描述 |
|---|---|
DescribeKey |
将 DescribeKey 请求发送到 Amazon KMS,以验证在创建插件程序包时输入的对称客户托管密钥 ID 是否有效。 |
GenerateDataKeyWithoutPlaintext |
将 GenerateDataKeyWithoutPlaintext 请求发送到 Amazon KMS,以生成由客户托管密钥加密的数据密钥。 |
GenerateDataKey |
将 GenerateDataKey 请求发送到 Amazon KMS,以生成数据密钥,从而在内部复制程序包时对其进行加密。 |
Decrypt |
将 Decrypt 请求发送到 Amazon KMS,以解密加密的数据密钥,从而用于解密您的数据。 |
您可以随时撤销授予访问权限,或删除服务对客户托管密钥的访问权限。如果您这样做,OpenSearch Service 将无法访问由客户托管密钥加密的任何数据,这会影响依赖于该数据的所有操作。例如,如果您尝试关联 OpenSearch Service 无法访问的插件包,该操作会返回 AccessDeniedException 错误。
创建客户托管密钥
您可以使用 Amazon Web Services 管理控制台 或 Amazon KMS API 创建对称的客户托管密钥。
创建对称的客户托管密钥
-
按照《Amazon Key Management Service 开发人员指南》中创建 KMS 密钥的步骤操作。
密钥策略
密钥策略控制对客户托管密钥的访问。每个客户托管式密钥必须只有一个密钥策略,其中包含确定谁可以使用密钥以及如何使用密钥的声明。创建客户托管式密钥时,可以指定密钥策略。有关更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的在 Amazon KMS 中使用密钥策略。
要将客户托管密钥与插件资源一起使用,您必须在密钥策略中允许以下 API 操作:
-
kms:CreateGrant:向客户托管密钥添加授权。授权控制对指定 Amazon KMS 密钥的访问权限,允许执行 OpenSearch Service 自定义程序包所需的授权操作。有关使用授权的更多信息,请参阅 Amazon KMS 开发人员指南。这使得 OpenSearch Service 能够执行以下操作:
-
调用
GenerateDataKeyWithoutPlainText,以生成加密的数据密钥,并将其存储以供后续验证。 -
调用
GenerateDataKey,以在内部复制插件程序包。 -
调用
Decrypt,以在内部访问插件程序包。 -
设置停用主体,以允许服务
RetireGrant。
-
-
kms:DescribeKey:提供客户托管密钥详细信息,以允许 OpenSearch Service 验证密钥。 -
kms:GenerateDataKey、kms:GenerateDataKeyWithoutPlaintext、kms:Decrypt:授予 OpenSearch Service 自定义程序包访问权限,以便在授权中使用这些操作。
以下是您可以为 OpenSearch Service 自定义程序包添加的策略声明示例:
"Statement" : [ { "Sid" : "Allow access to principals authorized to use OpenSearch Service custom packages", "Effect" : "Allow", "Principal" : { "AWS" : "*" }, "Action" : [ "kms:CreateGrant", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlaintext", "kms:Decrypt" ], "Resource" : "*", "Condition" : { "StringEquals" : { "kms:ViaService" : "custom-packages.region.amazonaws.com" }, "StringEquals" : { "kms:EncryptionContext:packageId": "Id of the package" } } }, { "Sid" : "Allow access to principals authorized to use Amazon OpenSearch Service custom packages", "Effect" : "Allow", "Principal" : { "AWS" : "*" }, "Action" : [ "kms:DescribeKey" ], "Resource" : "*", "Condition" : { "StringEquals" : { "kms:ViaService" : "custom-packages.region.amazonaws.com" } } } ]
有关在策略中指定权限的更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的Amazon KMS 中的密钥策略。
有关密钥访问故障排除的更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的排查 Amazon KMS 权限问题。
指定 Amazon OpenSearch Service 自定义程序包的客户托管密钥
您可以指定客户托管密钥用于 ZIP-PLUGIN 程序包的第二层加密。
创建插件程序包时,您可以通过输入 Amazon KMS 密钥 ID 指定数据密钥,OpenSearch Service 自定义程序包会将该密钥用于加密插件程序包。
Amazon KMS 密钥 ID:Amazon KMS 客户托管密钥的密钥标识符。输入密钥 ID、密钥 ARN、别名名称或别名 ARN。
Amazon OpenSearch Service 自定义程序包加密上下文
加密上下文是一组可选的键值对,包含有关数据的其他上下文信息。
Amazon KMS 将加密上下文用作其他经过身份验证的数据,来支持经过身份验证的加密。在请求中包含加密上下文以加密数据时,Amazon KMS 将加密上下文绑定到加密的数据。要解密数据,您必须在请求中包含相同的加密上下文。
Amazon OpenSearch Service 自定义程序包加密上下文
Amazon OpenSearch Service 自定义程序包在所有 Amazon KMS 加密操作中使用相同的加密上下文,其中密钥为 packageId,值为插件程序包的 package-id。
使用加密上下文进行监控
使用对称的客户托管密钥加密插件程序包时,您还可以使用审计记录和日志中的加密上下文,以识别客户托管密钥的使用情况。加密上下文还会显示在 Amazon CloudTrail 生成的日志或 Amazon CloudWatch Logs 中。
使用加密上下文控制对客户托管密钥的访问
您可以使用密钥政策和 IAM 策略中的加密上下文作为条件来控制对您的对称客户托管密钥的访问。您也可以在授予中使用加密上下文约束。
OpenSearch Service 自定义程序包在授权中使用加密上下文约束,以控制对您账户或区域中客户托管密钥的访问。授权约束要求授权允许的操作使用指定的加密上下文。
以下是密钥政策声明示例,用于授予对特定加密上下文的客户托管密钥的访问权限。此策略语句中的条件要求授权具有指定加密上下文的加密上下文约束。
{ "Sid": "Enable DescribeKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleReadOnlyRole" }, "Action": "kms:DescribeKey", "Resource": "*" }, { "Sid": "Enable OpenSearch Service custom packages to use the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleReadOnlyRole" }, "Action" : [ "kms:CreateGrant", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlaintext", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals" : { "kms:EncryptionContext:packageId": "ID of the package" } } }
监控 OpenSearch 自定义程序包服务的加密密钥
将 Amazon KMS 客户托管密钥和 OpenSearch Service 自定义程序包服务资源结合使用时,您可以使用 CloudTrail 或 CloudWatch Logs 跟踪 OpenSearch 自定义程序包向 Amazon KMS 发送的请求。
了解更多
以下资源提供有关静态数据加密的更多信息。
-
有关 Amazon KMS 基本概念的更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的 Amazon KMS keys。
-
有关 Amazon KMS 安全最佳实践的更多信息,请参阅 Amazon Key Management Service 最佳实践的《Amazon 说明性指南》。