使用客户管理的 CMK 加密卷

GKE on AWS 使用 AWS Key Management Service (KMS) 来加密 EBS 卷。GKE on AWS 1.7 及更高版本支持使用客户管理的客户主密钥 (CMK) 加密卷。GKE on AWS 1.6.x 版及更低版本仅支持 AWS 管理的客户主密钥

本主题介绍如何设置客户管理的 CMK 以加密卷。如果您未设置客户管理的 CMK,则 GKE on AWS 默认使用 AWS 管理的 CMK。

概览

以下 GKE on AWS 组件支持客户管理的 CMK 加密卷:

  • 堡垒主机根卷
  • 管理服务根卷
  • 管理服务 etcd 数据卷
  • 用户集群控制层面根卷
  • 用户集群控制层面 etcd 数据卷
  • 用户集群节点根卷

您可以在管理服务、集群和节点池配置中指定密钥。

前提条件

如需将客户管理的 CMK 用于 GKE on AWS 根卷,您需要拥有以下权限:

创建密钥政策

AWS KMS 密钥必须具有密钥政策,以允许 GKE on AWS 创建和读取使用客户管理的 CMK 加密的卷。下一部分提供了示例政策。要创建政策,请执行以下步骤:

  1. anthos-aws 目录中,使用 terraform 获取管理服务的 ID。

    cd anthos-aws
    terraform output cluster_id
    输出包括您的管理服务 ID。在以下示例中,此 ID 为 gke-12345abc
    terraform output cluster_id
    gke-12345abc
    

  2. 创建 AWS KMS 密钥政策,其中包含以下内容:

    {
        "Version": "2012-10-17",
        "Id": "key-consolepolicy-3",
        "Statement": [
            {
                "Sid": "Enable IAM User Permissions",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::ACCOUNT_NUMBER:root"
                },
                "Action": "kms:*",
                "Resource": "*"
            },
            {
                "Sid": "Allow creating encrypted EBS volumes for EC2 use",
                "Effect": "Allow",
                "Principal": {
                    "AWS": [
                        "arn:aws:iam::ACCOUNT_NUMBER:role/gke-CLUSTER_ID-management",
                        "arn:aws:iam::ACCOUNT_NUMBER:user/AWS_USER",
                        "arn:aws:iam::ACCOUNT_NUMBER:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling"
                    ]
                },
                "Action": [
                    "kms:GenerateDataKeyWithoutPlaintext",
                    "kms:Decrypt"
                ],
                "Resource": "*",
                "Condition": {
                    "StringEquals": {
                        "kms:CallerAccount": "ACCOUNT_NUMBER",
                        "kms:ViaService": "ec2.AWS_REGION.amazonaws.com"
                    }
                }
            },
            {
                "Sid": "Allow attaching encrypted EBS volumes for EC2 Use",
                "Effect": "Allow",
                "Principal": {
                    "AWS": [
                        "arn:aws:iam::ACCOUNT_NUMBER:role/CLUSTER_ID-management",
                        "arn:aws:iam::ACCOUNT_NUMBER:role/CLUSTER_ID-controlplane",
                        "arn:aws:iam::ACCOUNT_NUMBER:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling"
                    ]
                },
                "Action": [
                    "kms:CreateGrant",
                    "kms:ListGrants",
                    "kms:RevokeGrant"
                ],
                "Resource": "*",
                "Condition": {
                    "StringEquals": {
                        "kms:CallerAccount": "ACCOUNT_NUMBER",
                        "kms:ViaService": "ec2.AWS_REGION.amazonaws.com"
                    }
                }
            }
        ]
    }
    

    请替换以下内容:

    • ACCOUNT_NUMBER:您的 AWS 账号,例如 1234567890
    • CLUSTER_ID:您的 GKE on AWS 管理集群 ID,例如 gke-12345678
    • AWS_USER:您的 AWS 用户名。
    • AWS_REGION:您的 GKE on AWS 集群在其中运行的 AWS 区域,例如 us-east1

配置资源以使用客户管理的 CMK

本部分介绍如何为 GKE on AWS 组件配置客户管理的 CMK。在升级现有组件之前,请参阅将 CMK 与现有集群结合使用

堡垒主机和管理服务

在设置管理服务之前,请在 anthos-gke.yaml 中为堡垒主机根卷、管理服务根卷和管理服务 etcd 数据卷配置客户管理的 CMK。如需了解详情,请参阅集成现有基础架构AWSManagementService 参考。

用户集群控制层面卷

AWSCluster 定义中,为用户集群控制平面和 etcd 数据卷配置客户管理的 CMK。如需了解详情,请参阅创建自定义用户集群

用户集群节点根卷

AWSNodePool 定义中,为用户集群节点根卷配置客户管理的 CMK。如需了解详情,请参阅创建自定义用户集群

将 CMK 与现有集群搭配使用

您可以将客户管理的 CMK 配置添加到以下现有组件:

  • 堡垒主机根卷
  • 管理服务根卷
  • 用户集群控制层面根卷
  • 用户集群节点根卷

GKE on AWS 会在升级或配置更改后重新创建这些卷。如需将客户管理的 CMK 配置添加到现有组件,请按照升级 GKE on AWS 中的说明操作。修改资源配置时,请修改以下字段:

资源 字段
AWSManagementService spec.rootVolume and spec.bastionHost.rootVolume
AWSCluster spec.controlPlane.rootVolume
AWSNodePool spec.rootVolume

完成升级后,GKE on AWS 会创建挂接了客户管理的 CMK 卷的新资源。

后续步骤