Usar una CMK administrada por el cliente para encriptar volúmenes

GKE en AWS usa el servicio de administración de claves (KMS) de AWS para encriptar los volúmenes de EBS. GKE en AWS 1.7 y las versiones posteriores admiten la encriptación de volúmenes con claves maestras de cliente (CMK) administradas por el cliente. Las versiones 1.6.x de GKE en AWS y versiones anteriores solo admiten claves maestras de cliente administradas por AWS.

En este tema, se describe cómo configurar la CMK administrada por el cliente para encriptar volúmenes. Si no configuras la CMK administrada por el cliente, los clústeres de GKE en AWS usan CMK administrada de AWS de forma predeterminada.

Descripción general

Los siguientes componentes de GKE en AWS admiten volúmenes encriptados por CMK administradas por el cliente:

  • Volumen raíz del host de bastión
  • Volúmenes raíz del servicio de administración
  • Volúmenes de datos etcd del servicio de administración
  • Volúmenes raíz del plano de control del clúster de usuario
  • Volúmenes de datos etcd del plano de control del clúster de usuario
  • Volúmenes raíz del nodo del clúster de usuario

Debes especificar claves en el servicio de administración, el clúster y la configuración de grupo de nodos.

Requisitos previos

Si quieres usar la CMK administrada por el cliente para los volúmenes raíz de GKE en AWS, necesitas lo siguiente:

Crea una política de claves

Tus claves de KMS de AWS deben tener una política de claves que permita que GKE en AWS cree y lea volúmenes encriptados con una CMK administrada por el cliente. En la siguiente sección, se proporciona una política de ejemplo. Para crear la política, sigue estos pasos:

  1. Desde tu directorio de anthos-aws, usa terraform para obtener el ID del servicio de administración.

    cd anthos-aws
    terraform output cluster_id
    El resultado incluye el ID del servicio de administración. En el siguiente ejemplo, el ID es gke-12345abc.
    terraform output cluster_id
    gke-12345abc
    

  2. Crea una política de claves de AWS KMS con los siguientes contenidos:

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

    Reemplaza lo siguiente:

    • ACCOUNT_NUMBER: el número de cuenta de AWS, por ejemplo, 1234567890
    • CLUSTER_ID: tu ID del clúster de administración de GKE en AWS, por ejemplo gke-12345678.
    • AWS_USER: tu nombre de usuario de AWS.
    • AWS_REGION: la región de AWS en la que se ejecutan los clústeres de GKE en AWS, por ejemplo, us-east1.

Configura recursos para usar una CMK administrada por el cliente

En esta sección, se explica cómo configurar la CMK administrada por el cliente para los componentes de GKE en AWS. Antes de actualizar los componentes existentes, consulta cómo usar CMK con clústeres existentes.

Host de bastión y servicio de administración

Configura una CMK administrada por el cliente para el volumen raíz del host de bastión, el volumen raíz del servicio de administración y los volúmenes de datos etcd del servicio de administración en tu anthos-gke.yaml antes de configurar el servicio de administración. Para obtener más información, consulta cómo integrar la infraestructura existente y la referencia de AWSManagementService.

Volúmenes del plano de control del clúster de usuario

Configura una CMK administrada por el cliente para el plano de control de tu clúster de usuario y volúmenes de datos etcd en tu definición de AWSCluster. Para obtener más información, consulta Crea un clúster de usuario personalizado.

Volúmenes raíz del nodo del clúster de usuario

Configura una CMK administrada por el cliente en los volúmenes raíz del nodo del clúster de usuario en tu definición de AWSNodePool. Para obtener más información, consulta Crea un clúster de usuario personalizado.

Cómo usar CMK con clústeres existentes

Puedes agregar la configuración de CMK administrada por el cliente a los siguientes componentes existentes:

  • Volumen raíz del host de bastión
  • Volúmenes raíz del servicio de administración
  • Volúmenes raíz del plano de control del clúster de usuario
  • Volúmenes raíz del nodo del clúster de usuario

GKE en AWS vuelve a crear estos volúmenes después de una actualización o cambio de configuración. Para agregar la configuración de CMK administrada por el cliente a los componentes existentes, sigue las instrucciones en Actualiza GKE on AWS. Cuando modifiques la configuración de tus recursos, modifica los siguientes campos:

Recurso Campo
AWSManagementService spec.rootVolume and spec.bastionHost.rootVolume
AWSCluster spec.controlPlane.rootVolume
AWSNodePools spec.rootVolume

Cuando completes la actualización, GKE en AWS creará recursos nuevos con los volúmenes vinculados de CMK administrada por el cliente.

¿Qué sigue?