

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

# 亚马逊 OpenSearch 服务定制包裹 AWS KMS 集成
<a name="custom-package-kms-integration"></a>

默认情况下，Amazon S OpenSearch ervice 定制包裹提供加密，以保护您的`ZIP-PLUGIN`包裹处于静态状态 AWS 托管式密钥。
+ **AWS 拥有的密钥**— Amazon S OpenSearch ervice 定制包裹默认使用这些密钥来自动加密您的`ZIP-PLUGIN`包裹。您无法查看、管理、使用 AWS 拥有的密钥 或审核其使用情况。但是，无需执行任何操作或更改任何计划即可保护用于加密数据的密钥。有关更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的 [AWS 拥有的密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)。
+ **客户托管密钥** — 您可以在创建`ZIP-PLUGIN`自定义软件包时选择客户托管密钥，在现有 AWS 拥有的密钥 密钥的基础上添加第二层加密。

  Amazon S OpenSearch ervice 定制套餐支持使用由您创建、拥有并管理的对称客户托管密钥，在现有 AWS 自有加密的基础上添加第二层加密。由于您可以完全控制这层加密，因此可执行以下任务：
  + 建立和维护密钥策略
  + 制定和维护 AWS Identity and Access Management (IAM) 策略和拨款
  + 启用和禁用密钥策略
  + 轮换密钥加密材料
  + 添加标签
  + 创建密钥别名
  + 计划密钥删除

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

**注意**  
Amazon S OpenSearch ervice 定制套餐可自动启用静态加密 AWS 拥有的密钥 ，不收取任何费用。但是，当您使用客户托管密钥时，需要 AWS KMS 付费。有关定价的更多信息，请参阅 [AWS Key Management Service 定价](https://aws.amazon.com/kms/pricing/)。

## Amazon S OpenSearch ervice 定制包裹服务如何使用补助金 AWS KMS
<a name="custom-package-kms-grants"></a>

OpenSearch 服务自定义包需要获得授权才能使用您的客户托管密钥。

当您创建使用客户托管密钥加密的`ZIP-PLUGIN`包裹时，Amazon S OpenSearch ervice 定制包裹服务会通过向发送[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)请求来代表您创建授权 AWS KMS。授 AWS KMS 予 OpenSearch 服务访问您账户中 AWS KMS 密钥的权限。S OpenSearch ervice 自定义软件包创建的授权有一个约束，即只有当请求包含带有您的自定义软件包 ID 的加密上下文时，才允许进行操作。

Amazon S OpenSearch ervice 定制包需要获得授权，才能使用您的客户托管密钥进行以下内部操作：


| 操作 | 说明 | 
| --- | --- | 
| DescribeKey | 向发送DescribeKey请求， AWS KMS 以验证创建插件包时输入的对称客户托管密钥 ID 是否有效。 | 
| GenerateDataKeyWithoutPlaintext | 向发送GenerateDataKeyWithoutPlaintext请求 AWS KMS 以生成由您的客户托管密钥加密的数据密钥。 | 
| GenerateDataKey | 向发送GenerateDataKey请求 AWS KMS 以生成数据密钥，以便在内部复制软件包时对其进行加密。 | 
| Decrypt | 向发送解密加密数据密钥的Decrypt请求，以便这些密钥可用于解密您的数据。 AWS KMS  | 

您可以随时撤销授予访问权限，或删除服务对客户托管密钥的访问权限。否则，S OpenSearch ervice 将无法访问由客户托管密钥加密的任何数据，这会影响依赖该数据的操作。例如，如果您尝试关联一个 S OpenSearch ervice 无法访问的插件包，则该操作会返回`AccessDeniedException`错误。

## 创建客户托管密钥
<a name="custom-package-create-cmk"></a>

您可以使用 AWS 管理控制台 或创建对称的客户托管密钥。 AWS KMS APIs

**创建对称的客户托管密钥**
+ 按照《AWS Key Management Service 开发人员指南》**中[创建 KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)的步骤操作。

### 密钥策略
<a name="custom-package-key-policy"></a>

密钥策略控制对客户自主管理型密钥的访问。每个客户托管式密钥必须只有一个密钥策略，其中包含确定谁可以使用密钥以及如何使用密钥的声明。创建客户托管式密钥时，可以指定密钥策略。有关更多信息，请参阅《*AWS Key Management Service 开发人员指南*》中的[在 AWS KMS中使用密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)。

要将客户托管密钥与插件资源一起使用，您必须在密钥策略中允许以下 API 操作：
+ `kms:CreateGrant`：向客户托管密钥添加授权。授予对指定 AWS KMS 密钥的控制访问权限，允许授予 OpenSearch 服务自定义包所需的操作的访问权限。有关使用授权的更多信息，请参阅 [AWS KMS 开发人员指南](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)。

  这允许 OpenSearch 服务执行以下操作：
  + 调用 `GenerateDataKeyWithoutPlainText`，以生成加密的数据密钥，并将其存储以供后续验证。
  + 调用 `GenerateDataKey`，以在内部复制插件程序包。
  + 调用 `Decrypt`，以在内部访问插件程序包。
  + 设置停用主体，以允许服务 `RetireGrant`。
+ `kms:DescribeKey`— 提供客户管理的密钥详细信息，以允许 OpenSearch 服务部门验证密钥。
+ `kms:GenerateDataKey`,`kms:GenerateDataKeyWithoutPlaintext`, `kms:Decrypt` — 授予 OpenSearch 服务自定义包访问权限，以便在授权中使用这些操作。

以下是您可以为 OpenSearch 服务自定义包添加的策略声明示例：

```
"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"
      }
    }
  }
]
```

有关在策略中指定权限的更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的[AWS KMS中的密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)。

有关密钥访问疑难解答的更多信息，请参阅《*AWS Key Management Service 开发人员指南*》中的[AWS KMS 权限疑难解答](https://docs.aws.amazon.com/kms/latest/developerguide/policy-evaluation.html)。

## 为亚马逊 OpenSearch 服务定制包指定客户托管密钥
<a name="custom-package-specify-cmk"></a>

您可以指定客户托管密钥用于 `ZIP-PLUGIN` 程序包的第二层加密。

创建插件包时，您可以通过输入密钥 ID 来指定数据密钥，S OpenSearch ervice 自定义包使用 AWS KMS 密钥 ID 来加密插件包。

*AWS KMS 密钥 ID* — AWS KMS 客户托管密钥的密钥标识符。输入密钥 ID、密钥 ARN、别名名称或别名 ARN。

## 亚马逊 OpenSearch 服务自定义包裹加密上下文
<a name="custom-package-encryption-context"></a>

加密上下文是一组可选的键值对，包含有关数据的其他上下文信息。

AWS KMS 使用加密上下文作为其他经过身份验证的数据来支持经过身份验证的加密。当您在加密数据的请求中包含加密上下文时，会将加密上下文 AWS KMS 绑定到加密数据。要解密数据，您必须在请求中包含相同的加密上下文。

### 亚马逊 OpenSearch 服务自定义包裹加密上下文
<a name="custom-package-encryption-context-details"></a>

Amazon S OpenSearch ervice 自定义软件包在所有 AWS KMS 加密操作中使用相同的加密上下文，其中密钥是`packageId`，值是插件包`package-id`的值。

### 使用加密上下文进行监控
<a name="custom-package-encryption-context-monitoring"></a>

使用对称的客户托管密钥加密插件程序包时，您还可以使用审计记录和日志中的加密上下文，以识别客户托管密钥的使用情况。加密上下文还会显示在 AWS CloudTrail 或 Amazon Logs 生成的 CloudWatch 日志中。

### 使用加密上下文控制对客户托管密钥的访问
<a name="custom-package-encryption-context-access-control"></a>

您可以使用密钥策略和 IAM 策略中的加密上下文作为条件来控制对您的对称客户托管密钥的访问。您也可以在授予中使用加密上下文约束。

OpenSearch 服务自定义包在授权中使用加密上下文约束来控制对您的账户或区域中客户托管密钥的访问权限。授权约束要求授权允许的操作使用指定的加密上下文。

以下是密钥策略声明示例，用于授予对特定加密上下文的客户托管密钥的访问权限。此策略语句中的条件要求授权具有指定加密上下文的加密上下文约束。

```
{
    "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 自定义包服务的加密密钥
<a name="custom-package-monitoring-keys"></a>

当您在 OpenSearch 服务自定义包服务资源中使用 AWS KMS 客户托管密钥时，您可以使用 CloudTrail 或 CloudWatch 日志来跟踪 OpenSearch 自定义包发送到的请求 AWS KMS。

**了解详情**  
以下资源提供有关静态数据加密的更多信息。
+ 有关 AWS KMS 基本概念的更多信息，请参阅*AWS Key Management Service 开发人员指南[AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html)*中的。
+ 有关安全最佳实践的更多信息 AWS KMS，请参阅《*AWS 规范性指南*》[AWS Key Management Service 最佳实践](https://docs.aws.amazon.com/kms/latest/developerguide/best-practices.html)指南。