

 **帮助改进此页面** 

要帮助改进本用户指南，请选择位于每个页面右侧窗格中的**在 GitHub 上编辑此页面**链接。

# 在 EKS 自动模式下使用客户自主管理型 KMS 密钥启用 EBS 卷加密
<a name="auto-kms"></a>

您可以使用客户自主管理型 KMS 密钥对 EKS 自动模式实例的临时根卷进行加密。

在管理 Kubernetes 集群的加密 EBS 卷时，Amazon EKS 自动模式使用服务相关角色向其他 AWS 服务委派权限。本主题介绍当您为 Amazon EBS 加密指定客户自主管理型密钥时，如何设置所需的密钥策略。

注意事项：
+ EKS 自动模式无需额外授权，即可使用默认的 AWS 托管式密钥来保护您账户中的加密卷。
+ 本主题介绍加密临时卷，即 EC2 实例的根卷。有关加密用于工作负载的数据卷的更多信息，请参阅[创建存储类](create-storage-class.md)。

## 概述
<a name="_overview"></a>

以下 AWS KMS 密钥可在 EKS 自动模式启动实例时用于加密 Amazon EBS 根卷：
+  **AWS 托管式密钥**：您账户中由 Amazon EBS 创建、拥有和管理的加密密钥。这是新账户的默认加密密钥。
+  **客户托管密钥**：您创建、拥有和管理的自定义加密密钥。

**注意**  
密钥必须是对称的。Amazon EBS 不支持非对称客户托管密钥。

## 第 1 步：配置密钥策略
<a name="_step_1_configure_the_key_policy"></a>

您的 KMS 密钥必须具有相应的密钥策略，以允许 EKS 自动模式启动具有使用客户自主管理型密钥加密的 Amazon EBS 卷的实例。

请使用以下结构配置密钥策略：

**注意**  
此策略仅包含 EKS 自动模式的权限。如果其他身份需要使用密钥或管理授权，则此密钥策略可能需要额外的权限。

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "MyKeyPolicy",
    "Statement": [
        {
            "Sid": "Allow use of the key",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::123456789012:role/ClusterServiceRole"
                ]
            },
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:DescribeKey"
            ],
            "Resource": "*"
        },
        {
            "Sid": "Allow attachment of persistent resources",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::123456789012:role/ClusterServiceRole"
                ]
            },
            "Action": [
                "kms:CreateGrant",
                "kms:ListGrants",
                "kms:RevokeGrant"
            ],
            "Resource": "*",
            "Condition": {
                "Bool": {
                    "kms:GrantIsForAWSResource": "true"
                }
            }
        }
    ]
}
```

请务必将 `<account-id>` 替换为实际的 AWS 账户 ID。

配置密钥策略时：
+ `ClusterServiceRole` 必须具有使用该 KMS 密钥执行加密操作所需的 IAM 权限
+ `kms:GrantIsForAWSResource` 条件可确保只能为 AWS 服务创建授权

## 第 2 步：使用客户自主管理型密钥配置节点类
<a name="_step_2_configure_nodeclass_with_your_customer_managed_key"></a>

配置密钥策略后，在 EKS 自动模式的节点类配置中引用该 KMS 密钥：

```
apiVersion: eks.amazonaws.com/v1
kind: NodeClass
metadata:
  name: my-node-class
spec:
  # Insert existing configuration

  ephemeralStorage:
    size: "80Gi"  # Range: 1-59000Gi or 1-64000G or 1-58Ti or 1-64T
    iops: 3000    # Range: 3000-16000
    throughput: 125  # Range: 125-1000

    # KMS key for encryption
    kmsKeyID: "arn:aws:kms:<region>:<account-id>:key/<key-id>"
```

请将占位符值替换为实际的值：
+  请将 `<region>` 替换为您所在的 AWS 区域
+  请将 `<account-id>` 替换为您的 AWS 账户 ID
+  请将 `<key-id>` 替换为您的 KMS 密钥 ID

您可以使用以下任意一种格式指定 KMS 密钥：
+ KMS 密钥 ID：`1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d`
+ KMS 密钥 ARN：` arn:aws:kms:us-west-2:111122223333:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d`
+ 密钥别名名称：`alias/eks-auto-mode-key`
+ 密钥别名 ARN：` arn:aws:kms:us-west-2:111122223333:alias/eks-auto-mode-key`

使用 kubectl 应用节点类配置：

```
kubectl apply -f nodeclass.yaml
```

## 相关资源
<a name="_related_resources"></a>
+  [为 Amazon EKS 创建节点类](create-node-class.md) 
+ 有关更多信息，请参阅《AWS Key Management Service 开发人员指南》。
  +  [密钥策略中 AWS 服务的权限](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-services.html) 
  +  [更改密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html) 
  +  [AWS KMS 中的授权](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html) 