Usar una CMK gestionada por el cliente para cifrar volúmenes

GKE en AWS usa AWS Key Management Service (KMS) para encriptar volúmenes de EBS. GKE en AWS 1.7 y versiones posteriores admite el cifrado de volúmenes con claves maestras de cliente (CMKs) gestionadas por el cliente. Las versiones 1.6.x y anteriores de GKE on AWS solo admiten claves maestras de cliente gestionadas por AWS.

En este tema se describe cómo configurar una CMK gestionada por el cliente para cifrar volúmenes. Si no configuras una CMK gestionada por el cliente, GKE on AWS usará CMKs gestionadas por AWS de forma predeterminada.

Información general

Los siguientes componentes de GKE on AWS admiten volúmenes cifrados con CMK gestionadas por el cliente:

  • Volumen raíz del host bastión
  • Volúmenes raíz del servicio de gestión
  • Volúmenes de datos de etcd del servicio de gestión
  • Volúmenes raíz del plano de control de clústeres de usuarios
  • Volúmenes de datos de etcd del plano de control de clústeres de usuarios
  • Volúmenes raíz de los nodos de clúster de usuarios

Especifica las claves en la configuración del servicio de gestión, del clúster y del grupo de nodos.

Requisitos previos

Para usar CMKs gestionadas por el cliente en volúmenes raíz de GKE en AWS, necesitas lo siguiente:

Crear una política de claves

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

  1. En el directorio anthos-aws, usa terraform para obtener el ID de tu servicio de gestión.

    cd anthos-aws
    terraform output cluster_id
    La salida incluye el ID de tu servicio de gestión. En el ejemplo de abajo, el ID es gke-12345abc.
    terraform output cluster_id
    gke-12345abc
    

  2. Crea una política de claves de KMS de AWS con el siguiente contenido:

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

    Haz los cambios siguientes:

    • ACCOUNT_NUMBER: tu número de cuenta de AWS. Por ejemplo, 1234567890.
    • CLUSTER_ID: el ID de tu clúster de gestió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 tus clústeres de GKE en AWS. Por ejemplo, us-east1.

Configurar recursos para usar una CMK gestionada por el cliente

En esta sección se explica cómo configurar una CMK gestionada por el cliente para los componentes de GKE en AWS. Antes de actualizar los componentes, consulta Usar CMK con clústeres actuales.

Host bastion y servicio de gestión

Configura una CMK gestionada por el cliente para el volumen raíz del host bastion, el volumen raíz del servicio de gestión y los volúmenes de datos de etcd del servicio de gestión en tu anthos-gke.yaml antes de configurar el servicio de gestión. Para obtener más información, consulta Integrar la infraestructura actual y la referencia de AWSManagementService.

Volúmenes del plano de control de clústeres de usuarios

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

Volúmenes raíz de los nodos de clúster de usuarios

Puedes configurar una CMK gestionada por el cliente en los volúmenes raíz de los nodos del clúster de usuario en tu definición de AWSNodePool. Para obtener más información, consulta Crear un clúster de usuarios personalizado.

Usar CMK con clústeres ya creados

Puede añadir una configuración de CMK gestionada por el cliente a los siguientes componentes:

  • Volumen raíz del host bastión
  • Volúmenes raíz del servicio de gestión
  • Volúmenes raíz del plano de control de clústeres de usuarios
  • Volúmenes raíz de los nodos de clúster de usuarios

GKE on AWS vuelve a crear estos volúmenes después de una actualización o un cambio de configuración. Para añadir una configuración de CMK gestionada por el cliente a los componentes, sigue las instrucciones de Actualizar GKE en AWS. Cuando modifiques la configuración de tu recurso, cambia 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 con los volúmenes de CMK gestionada por el cliente adjuntos.

Siguientes pasos